]> git.bitcoin.ninja Git - ldk-java/commitdiff
[Java] Update auto-generated bindings to 0.0.117
authorMatt Corallo <git@bluematt.me>
Sun, 1 Oct 2023 18:43:50 +0000 (18:43 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 6 Oct 2023 17:56:25 +0000 (17:56 +0000)
271 files changed:
src/main/java/org/ldk/enums/ChannelMonitorUpdateStatus.java
src/main/java/org/ldk/enums/FailureCode.java [deleted file]
src/main/java/org/ldk/enums/SocketAddressParseError.java [new file with mode: 0644]
src/main/java/org/ldk/impl/bindings.java
src/main/java/org/ldk/structs/AcceptChannel.java
src/main/java/org/ldk/structs/AcceptChannelV2.java
src/main/java/org/ldk/structs/BackgroundProcessor.java
src/main/java/org/ldk/structs/BlindedHop.java
src/main/java/org/ldk/structs/BlindedHopFeatures.java
src/main/java/org/ldk/structs/BlindedPath.java
src/main/java/org/ldk/structs/Bolt11Invoice.java
src/main/java/org/ldk/structs/Bolt11InvoiceFeatures.java
src/main/java/org/ldk/structs/Bolt12Invoice.java
src/main/java/org/ldk/structs/Bolt12InvoiceFeatures.java
src/main/java/org/ldk/structs/ChannelCounterparty.java
src/main/java/org/ldk/structs/ChannelDerivationParameters.java
src/main/java/org/ldk/structs/ChannelDetails.java
src/main/java/org/ldk/structs/ChannelFeatures.java
src/main/java/org/ldk/structs/ChannelManager.java
src/main/java/org/ldk/structs/ChannelMessageHandler.java
src/main/java/org/ldk/structs/ChannelMonitor.java
src/main/java/org/ldk/structs/ChannelPublicKeys.java
src/main/java/org/ldk/structs/ChannelReestablish.java
src/main/java/org/ldk/structs/ChannelTransactionParameters.java
src/main/java/org/ldk/structs/ChannelTypeFeatures.java
src/main/java/org/ldk/structs/ChannelUpdateInfo.java
src/main/java/org/ldk/structs/ChannelUsage.java
src/main/java/org/ldk/structs/ClaimedHTLC.java [new file with mode: 0644]
src/main/java/org/ldk/structs/ClosingSigned.java
src/main/java/org/ldk/structs/ClosureReason.java
src/main/java/org/ldk/structs/CommitmentUpdate.java
src/main/java/org/ldk/structs/Confirm.java
src/main/java/org/ldk/structs/CounterpartyChannelTransactionParameters.java
src/main/java/org/ldk/structs/DelayedPaymentOutputDescriptor.java
src/main/java/org/ldk/structs/EcdsaChannelSigner.java
src/main/java/org/ldk/structs/Event.java
src/main/java/org/ldk/structs/FailureCode.java [new file with mode: 0644]
src/main/java/org/ldk/structs/FilesystemPersister.java [deleted file]
src/main/java/org/ldk/structs/FilesystemStore.java [new file with mode: 0644]
src/main/java/org/ldk/structs/FixedPenaltyScorer.java
src/main/java/org/ldk/structs/ForwardNode.java [new file with mode: 0644]
src/main/java/org/ldk/structs/ForwardTlvs.java [new file with mode: 0644]
src/main/java/org/ldk/structs/HTLCDescriptor.java
src/main/java/org/ldk/structs/InMemorySigner.java
src/main/java/org/ldk/structs/Init.java
src/main/java/org/ldk/structs/InitFeatures.java
src/main/java/org/ldk/structs/InvoiceError.java
src/main/java/org/ldk/structs/InvoiceRequest.java
src/main/java/org/ldk/structs/InvoiceRequestFeatures.java
src/main/java/org/ldk/structs/KVStore.java [new file with mode: 0644]
src/main/java/org/ldk/structs/KeysManager.java
src/main/java/org/ldk/structs/LockableScore.java
src/main/java/org/ldk/structs/MessageSendEvent.java
src/main/java/org/ldk/structs/MonitorEvent.java
src/main/java/org/ldk/structs/MonitorUpdatingPersister.java [new file with mode: 0644]
src/main/java/org/ldk/structs/MultiThreadedScoreLock.java [deleted file]
src/main/java/org/ldk/structs/MultiThreadedScoreLockRead.java [new file with mode: 0644]
src/main/java/org/ldk/structs/MultiThreadedScoreLockWrite.java [new file with mode: 0644]
src/main/java/org/ldk/structs/NetAddress.java [deleted file]
src/main/java/org/ldk/structs/NodeAnnouncementInfo.java
src/main/java/org/ldk/structs/NodeFeatures.java
src/main/java/org/ldk/structs/NodeId.java
src/main/java/org/ldk/structs/NodeInfo.java
src/main/java/org/ldk/structs/NodeSigner.java
src/main/java/org/ldk/structs/Offer.java
src/main/java/org/ldk/structs/OfferFeatures.java
src/main/java/org/ldk/structs/OnionMessage.java
src/main/java/org/ldk/structs/OpenChannel.java
src/main/java/org/ldk/structs/OpenChannelV2.java
src/main/java/org/ldk/structs/Option_BigEndianScalarZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_BlockHashZ.java [deleted file]
src/main/java/org/ldk/structs/Option_C2Tuple_EightU16sEightU16sZZ.java [deleted file]
src/main/java/org/ldk/structs/Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_C2Tuple_u64u16ZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_CVec_ChainHashZZ.java [deleted file]
src/main/java/org/ldk/structs/Option_CVec_NetAddressZZ.java [deleted file]
src/main/java/org/ldk/structs/Option_CVec_SocketAddressZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_CVec_ThirtyTwoBytesZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_DurationZ.java [deleted file]
src/main/java/org/ldk/structs/Option_KeyPairZ.java [deleted file]
src/main/java/org/ldk/structs/Option_NetAddressZ.java [deleted file]
src/main/java/org/ldk/structs/Option_PackedLockTimeZ.java [deleted file]
src/main/java/org/ldk/structs/Option_PaymentHashZ.java [deleted file]
src/main/java/org/ldk/structs/Option_PaymentIdZ.java [deleted file]
src/main/java/org/ldk/structs/Option_PaymentPreimageZ.java [deleted file]
src/main/java/org/ldk/structs/Option_PaymentSecretZ.java [deleted file]
src/main/java/org/ldk/structs/Option_ScalarZ.java [deleted file]
src/main/java/org/ldk/structs/Option_ScriptZ.java [deleted file]
src/main/java/org/ldk/structs/Option_SecretKeyZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_SocketAddressZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_ThirtyTwoBytesZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_TxidZ.java [deleted file]
src/main/java/org/ldk/structs/Option_U128Z.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_f64Z.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_u128Z.java [deleted file]
src/main/java/org/ldk/structs/Option_usizeZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Packet.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Path.java
src/main/java/org/ldk/structs/PaymentConstraints.java [new file with mode: 0644]
src/main/java/org/ldk/structs/PaymentParameters.java
src/main/java/org/ldk/structs/PaymentPurpose.java
src/main/java/org/ldk/structs/PaymentRelay.java [new file with mode: 0644]
src/main/java/org/ldk/structs/PaymentSendFailure.java
src/main/java/org/ldk/structs/PeerManager.java
src/main/java/org/ldk/structs/Persist.java
src/main/java/org/ldk/structs/Persister.java
src/main/java/org/ldk/structs/PhantomKeysManager.java
src/main/java/org/ldk/structs/ProbabilisticScorer.java
src/main/java/org/ldk/structs/ProbabilisticScoringFeeParameters.java
src/main/java/org/ldk/structs/ProbeSendFailure.java [new file with mode: 0644]
src/main/java/org/ldk/structs/ProbingError.java [new file with mode: 0644]
src/main/java/org/ldk/structs/RawBolt11Invoice.java
src/main/java/org/ldk/structs/ReadOnlyNetworkGraph.java
src/main/java/org/ldk/structs/ReceiveTlvs.java [new file with mode: 0644]
src/main/java/org/ldk/structs/RecentPaymentDetails.java
src/main/java/org/ldk/structs/RecipientOnionFields.java
src/main/java/org/ldk/structs/Refund.java
src/main/java/org/ldk/structs/Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_C2Tuple_CVec_u8ZusizeZNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.java [deleted file]
src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_COption_KeyPairZNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_CVec_ECDSASignatureZNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_CVec_SignatureZNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_CVec_StrZIOErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_CVec_u8ZIOErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_CVec_u8ZNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ChannelDerivationParametersDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateStatusNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ClaimedHTLCDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ECDSASignatureNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_HTLCDescriptorDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_NetAddressDecodeErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_NoneErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_NoneIOErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_PartiallySignedTransactionNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PayeePubKeyErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PayeePubKeySecp256k1ErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_PaymentConstraintsDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_PaymentHashPaymentSendFailureZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PaymentHashRetryableSendFailureZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PaymentIdPaymentErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PaymentPreimageAPIErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PaymentRelayDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_PaymentSecretNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PublicKeyErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_PublicKeySecp256k1ErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ReceiveTlvsDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_RecipientOnionFieldsNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_RetryDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_SchnorrSignatureNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ScriptNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_SharedSecretNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_SignatureNoneZ.java [deleted file]
src/main/java/org/ldk/structs/Result_SocketAddressDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_SocketAddressSocketAddressParseErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_StrSecp256k1ErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_StringErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Result_ThirtyTwoBytesAPIErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ThirtyTwoBytesNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ThirtyTwoBytesPaymentErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ThirtyTwoBytesPaymentSendFailureZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ThirtyTwoBytesRetryableSendFailureZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_VerifiedInvoiceRequestNoneZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result__u832APIErrorZ.java [deleted file]
src/main/java/org/ldk/structs/Retry.java
src/main/java/org/ldk/structs/Route.java
src/main/java/org/ldk/structs/RouteHop.java
src/main/java/org/ldk/structs/RouteParameters.java
src/main/java/org/ldk/structs/Score.java
src/main/java/org/ldk/structs/ScoreLookUp.java [new file with mode: 0644]
src/main/java/org/ldk/structs/ScoreUpdate.java [new file with mode: 0644]
src/main/java/org/ldk/structs/ScorerAccountingForInFlightHtlcs.java
src/main/java/org/ldk/structs/SignedRawBolt11Invoice.java
src/main/java/org/ldk/structs/SignerProvider.java
src/main/java/org/ldk/structs/SocketAddress.java [new file with mode: 0644]
src/main/java/org/ldk/structs/SpendableOutputDescriptor.java
src/main/java/org/ldk/structs/StaticPaymentOutputDescriptor.java
src/main/java/org/ldk/structs/TaggedHash.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TrustedCommitmentTransaction.java
src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelManagerZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelMonitorZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_CVec_u8ZusizeZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_OutPointCVec_u8ZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_OutPointScriptZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_PartiallySignedTransactionusizeZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentIdZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentSecretZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_PublicKeyCOption_NetAddressZZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_PublicKeyCOption_SocketAddressZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_PublicKeyOnionMessageZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_SignatureCVec_SignatureZZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelManagerZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelMonitorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesPublicKeyZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_TxidCOption_BlockHashZZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_Z.java
src/main/java/org/ldk/structs/TwoTuple__u1632_u1632Z.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple__u168_u168Z.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_u32CVec_u8ZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_u32ScriptZ.java [deleted file]
src/main/java/org/ldk/structs/TwoTuple_u64CVec_u8ZZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/TwoTuple_u64u16Z.java [new file with mode: 0644]
src/main/java/org/ldk/structs/UnsignedBolt12Invoice.java
src/main/java/org/ldk/structs/UnsignedChannelAnnouncement.java
src/main/java/org/ldk/structs/UnsignedInvoiceRequest.java
src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java
src/main/java/org/ldk/structs/UtilMethods.java
src/main/java/org/ldk/structs/VerifiedInvoiceRequest.java [new file with mode: 0644]
src/main/java/org/ldk/structs/WalletSource.java
src/main/java/org/ldk/structs/Watch.java
src/main/java/org/ldk/structs/WatchedOutput.java
src/main/jni/bindings.c
src/main/jni/bindings.c.body
src/main/jni/org_ldk_enums_FailureCode.h [deleted file]
src/main/jni/org_ldk_enums_SocketAddressParseError.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings.h
src/main/jni/org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_BlockHashZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_DurationZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_KeyPairZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_NetAddressZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentHashZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentIdZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentSecretZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_ScalarZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_ScriptZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_SecretKeyZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_SocketAddressZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_TxidZ.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_U128Z.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_f64Z.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKCOption_u128Z.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKCOption_usizeZ.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKFailureCode.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKNetAddress.h [deleted file]
src/main/jni/org_ldk_impl_bindings_LDKProbeSendFailure.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKProbingError.h [new file with mode: 0644]
src/main/jni/org_ldk_impl_bindings_LDKSocketAddress.h [new file with mode: 0644]

index ac7d3f848edd08cc7b681a75e890eec90c640611..70c6589af0eff3892c07a9c9693eb8280238e148 100644 (file)
@@ -2,6 +2,25 @@ package org.ldk.enums;
 
 /**
  * An enum representing the status of a channel monitor update persistence.
+ * 
+ * These are generally used as the return value for an implementation of [`Persist`] which is used
+ * as the storage layer for a [`ChainMonitor`]. See the docs on [`Persist`] for a high-level
+ * explanation of how to handle different cases.
+ * 
+ * While `UnrecoverableError` is provided as a failure variant, it is not truly \"handled\" on the
+ * calling side, and generally results in an immediate panic. For those who prefer to avoid
+ * panics, `InProgress` can be used and you can retry the update operation in the background or
+ * shut down cleanly.
+ * 
+ * Note that channels should generally *not* be force-closed after a persistence failure.
+ * Force-closing with the latest [`ChannelMonitorUpdate`] applied may result in a transaction
+ * being broadcast which can only be spent by the latest [`ChannelMonitor`]! Thus, if the
+ * latest [`ChannelMonitor`] is not durably persisted anywhere and exists only in memory, naively
+ * calling [`ChannelManager::force_close_broadcasting_latest_txn`] *may result in loss of funds*!
+ * 
+ * [`Persist`]: chainmonitor::Persist
+ * [`ChainMonitor`]: chainmonitor::ChainMonitor
+ * [`ChannelManager::force_close_broadcasting_latest_txn`]: crate::ln::channelmanager::ChannelManager::force_close_broadcasting_latest_txn
  */
 public enum ChannelMonitorUpdateStatus {
        /**
@@ -13,17 +32,13 @@ public enum ChannelMonitorUpdateStatus {
         */
        LDKChannelMonitorUpdateStatus_Completed,
        /**
-        * Used to indicate a temporary failure (eg connection to a watchtower or remote backup of
-        * our state failed, but is expected to succeed at some point in the future).
+        * Indicates that the update will happen asynchronously in the background or that a transient
+        * failure occurred which is being retried in the background and will eventually complete.
         * 
-        * Such a failure will \"freeze\" a channel, preventing us from revoking old states or
-        * submitting new commitment transactions to the counterparty. Once the update(s) which failed
-        * have been successfully applied, a [`MonitorEvent::Completed`] can be used to restore the
-        * channel to an operational state.
-        * 
-        * Note that a given [`ChannelManager`] will *never* re-generate a [`ChannelMonitorUpdate`].
-        * If you return this error you must ensure that it is written to disk safely before writing
-        * the latest [`ChannelManager`] state, or you should return [`PermanentFailure`] instead.
+        * This will \"freeze\" a channel, preventing us from revoking old states or submitting a new
+        * commitment transaction to the counterparty. Once the update(s) which are `InProgress` have
+        * been completed, a [`MonitorEvent::Completed`] can be used to restore the channel to an
+        * operational state.
         * 
         * Even when a channel has been \"frozen\", updates to the [`ChannelMonitor`] can continue to
         * occur (e.g. if an inbound HTLC which we forwarded was claimed upstream, resulting in us
@@ -33,56 +48,31 @@ public enum ChannelMonitorUpdateStatus {
         * until a [`MonitorEvent::Completed`] is provided, even if you return no error on a later
         * monitor update for the same channel.
         * 
-        * For deployments where a copy of ChannelMonitors and other local state are backed up in a
-        * remote location (with local copies persisted immediately), it is anticipated that all
+        * For deployments where a copy of [`ChannelMonitor`]s and other local state are backed up in
+        * remote location (with local copies persisted immediately), it is anticipated that all
         * updates will return [`InProgress`] until the remote copies could be updated.
         * 
-        * [`PermanentFailure`]: ChannelMonitorUpdateStatus::PermanentFailure
+        * Note that while fully asynchronous persistence of [`ChannelMonitor`] data is generally
+        * reliable, this feature is considered beta, and a handful of edge-cases remain. Until the
+        * remaining cases are fixed, in rare cases, *using this feature may lead to funds loss*.
+        * 
         * [`InProgress`]: ChannelMonitorUpdateStatus::InProgress
-        * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
        LDKChannelMonitorUpdateStatus_InProgress,
        /**
-        * Used to indicate no further channel monitor updates will be allowed (likely a disk failure
-        * or a remote copy of this [`ChannelMonitor`] is no longer reachable and thus not updatable).
-        * 
-        * When this is returned, [`ChannelManager`] will force-close the channel but *not* broadcast
-        * our current commitment transaction. This avoids a dangerous case where a local disk failure
-        * (e.g. the Linux-default remounting of the disk as read-only) causes [`PermanentFailure`]s
-        * for all monitor updates. If we were to broadcast our latest commitment transaction and then
-        * restart, we could end up reading a previous [`ChannelMonitor`] and [`ChannelManager`],
-        * revoking our now-broadcasted state before seeing it confirm and losing all our funds.
-        * 
-        * Note that this is somewhat of a tradeoff - if the disk is really gone and we may have lost
-        * the data permanently, we really should broadcast immediately. If the data can be recovered
-        * with manual intervention, we'd rather close the channel, rejecting future updates to it,
-        * and broadcast the latest state only if we have HTLCs to claim which are timing out (which
-        * we do as long as blocks are connected).
+        * Indicates that an update has failed and will not complete at any point in the future.
         * 
-        * In order to broadcast the latest local commitment transaction, you'll need to call
-        * [`ChannelMonitor::get_latest_holder_commitment_txn`] and broadcast the resulting
-        * transactions once you've safely ensured no further channel updates can be generated by your
-        * [`ChannelManager`].
+        * Currently returning this variant will cause LDK to immediately panic to encourage immediate
+        * shutdown. In the future this may be updated to disconnect peers and refuse to continue
+        * normal operation without a panic.
         * 
-        * Note that at least one final [`ChannelMonitorUpdate`] may still be provided, which must
-        * still be processed by a running [`ChannelMonitor`]. This final update will mark the
-        * [`ChannelMonitor`] as finalized, ensuring no further updates (e.g. revocation of the latest
-        * commitment transaction) are allowed.
+        * Applications which wish to perform an orderly shutdown after failure should consider
+        * returning [`InProgress`] instead and simply shut down without ever marking the update
+        * complete.
         * 
-        * Note that even if you return a [`PermanentFailure`] due to unavailability of secondary
-        * [`ChannelMonitor`] copies, you should still make an attempt to store the update where
-        * possible to ensure you can claim HTLC outputs on the latest commitment transaction
-        * broadcasted later.
-        * 
-        * In case of distributed watchtowers deployment, the new version must be written to disk, as
-        * state may have been stored but rejected due to a block forcing a commitment broadcast. This
-        * storage is used to claim outputs of rejected state confirmed onchain by another watchtower,
-        * lagging behind on block processing.
-        * 
-        * [`PermanentFailure`]: ChannelMonitorUpdateStatus::PermanentFailure
-        * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
+        * [`InProgress`]: ChannelMonitorUpdateStatus::InProgress
         */
-       LDKChannelMonitorUpdateStatus_PermanentFailure,
+       LDKChannelMonitorUpdateStatus_UnrecoverableError,
        ; static native void init();
        static { init(); }
 }
\ No newline at end of file
diff --git a/src/main/java/org/ldk/enums/FailureCode.java b/src/main/java/org/ldk/enums/FailureCode.java
deleted file mode 100644 (file)
index d21f289..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.ldk.enums;
-
-/**
- * This enum is used to specify which error data to send to peers when failing back an HTLC
- * using [`ChannelManager::fail_htlc_backwards_with_reason`].
- * 
- * For more info on failure codes, see <https://github.com/lightning/bolts/blob/master/04-onion-routing.md#failure-messages>.
- */
-public enum FailureCode {
-       /**
-        * We had a temporary error processing the payment. Useful if no other error codes fit
-        * and you want to indicate that the payer may want to retry.
-        */
-       LDKFailureCode_TemporaryNodeFailure,
-       /**
-        * We have a required feature which was not in this onion. For example, you may require
-        * some additional metadata that was not provided with this payment.
-        */
-       LDKFailureCode_RequiredNodeFeatureMissing,
-       /**
-        * You may wish to use this when a `payment_preimage` is unknown, or the CLTV expiry of
-        * the HTLC is too close to the current block height for safe handling.
-        * Using this failure code in [`ChannelManager::fail_htlc_backwards_with_reason`] is
-        * equivalent to calling [`ChannelManager::fail_htlc_backwards`].
-        */
-       LDKFailureCode_IncorrectOrUnknownPaymentDetails,
-       ; static native void init();
-       static { init(); }
-}
\ No newline at end of file
diff --git a/src/main/java/org/ldk/enums/SocketAddressParseError.java b/src/main/java/org/ldk/enums/SocketAddressParseError.java
new file mode 100644 (file)
index 0000000..f3bdd75
--- /dev/null
@@ -0,0 +1,25 @@
+package org.ldk.enums;
+
+/**
+ * [`SocketAddress`] error variants
+ */
+public enum SocketAddressParseError {
+       /**
+        * Socket address (IPv4/IPv6) parsing error
+        */
+       LDKSocketAddressParseError_SocketAddrParse,
+       /**
+        * Invalid input format
+        */
+       LDKSocketAddressParseError_InvalidInput,
+       /**
+        * Invalid port
+        */
+       LDKSocketAddressParseError_InvalidPort,
+       /**
+        * Invalid onion v3 address
+        */
+       LDKSocketAddressParseError_InvalidOnionV3,
+       ; static native void init();
+       static { init(); }
+}
\ No newline at end of file
index f3f601623bebbb769f6d5d8020a3308dc5e524bb..6dc92bfc74cb2efa4b885a6dd9637c3f0cebcc91 100644 (file)
@@ -53,7 +53,6 @@ public class bindings {
        static { ConfirmationTarget.values(); /* Force enum statics to run */ }
        static { CreationError.values(); /* Force enum statics to run */ }
        static { Currency.values(); /* Force enum statics to run */ }
-       static { FailureCode.values(); /* Force enum statics to run */ }
        static { HTLCClaim.values(); /* Force enum statics to run */ }
        static { IOError.values(); /* Force enum statics to run */ }
        static { Level.values(); /* Force enum statics to run */ }
@@ -63,6 +62,7 @@ public class bindings {
        static { RetryableSendFailure.values(); /* Force enum statics to run */ }
        static { Secp256k1Error.values(); /* Force enum statics to run */ }
        static { SiPrefix.values(); /* Force enum statics to run */ }
+       static { SocketAddressParseError.values(); /* Force enum statics to run */ }
        static { UtxoLookupError.values(); /* Force enum statics to run */ }
        // struct LDKThirtyTwoBytes BigEndianScalar_get_bytes (struct LDKBigEndianScalar* thing)
        public static native byte[] BigEndianScalar_get_bytes(long thing);
@@ -111,19 +111,6 @@ public class bindings {
        public static native byte[] TxOut_get_script_pubkey(long thing);
        // uint64_t TxOut_get_value (struct LDKTxOut* thing)
        public static native long TxOut_get_value(long thing);
-       public static class LDKCOption_DurationZ {
-               private LDKCOption_DurationZ() {}
-               public final static class Some extends LDKCOption_DurationZ {
-                       public long some;
-                       Some(long some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_DurationZ {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_DurationZ.init(); }
-       public static native LDKCOption_DurationZ LDKCOption_DurationZ_ref_from_ptr(long ptr);
        public static class LDKCOption_u64Z {
                private LDKCOption_u64Z() {}
                public final static class Some extends LDKCOption_u64Z {
@@ -141,6 +128,52 @@ public class bindings {
        public static native long CResult_RefundBolt12ParseErrorZ_get_ok(long owner);
        // struct LDKBolt12ParseError CResult_RefundBolt12ParseErrorZ_get_err(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner);
        public static native long CResult_RefundBolt12ParseErrorZ_get_err(long owner);
+       public static class LDKRetry {
+               private LDKRetry() {}
+               public final static class Attempts extends LDKRetry {
+                       public int attempts;
+                       Attempts(int attempts) { this.attempts = attempts; }
+               }
+               public final static class Timeout extends LDKRetry {
+                       public long timeout;
+                       Timeout(long timeout) { this.timeout = timeout; }
+               }
+               static native void init();
+       }
+       static { LDKRetry.init(); }
+       public static native LDKRetry LDKRetry_ref_from_ptr(long ptr);
+       public static class LDKDecodeError {
+               private LDKDecodeError() {}
+               public final static class UnknownVersion extends LDKDecodeError {
+                       UnknownVersion() { }
+               }
+               public final static class UnknownRequiredFeature extends LDKDecodeError {
+                       UnknownRequiredFeature() { }
+               }
+               public final static class InvalidValue extends LDKDecodeError {
+                       InvalidValue() { }
+               }
+               public final static class ShortRead extends LDKDecodeError {
+                       ShortRead() { }
+               }
+               public final static class BadLengthDescriptor extends LDKDecodeError {
+                       BadLengthDescriptor() { }
+               }
+               public final static class Io extends LDKDecodeError {
+                       public org.ldk.enums.IOError io;
+                       Io(org.ldk.enums.IOError io) { this.io = io; }
+               }
+               public final static class UnsupportedCompression extends LDKDecodeError {
+                       UnsupportedCompression() { }
+               }
+               static native void init();
+       }
+       static { LDKDecodeError.init(); }
+       public static native LDKDecodeError LDKDecodeError_ref_from_ptr(long ptr);
+       // struct LDKRetry CResult_RetryDecodeErrorZ_get_ok(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_RetryDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_RetryDecodeErrorZ_get_err(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_RetryDecodeErrorZ_get_err(long owner);
        public static class LDKAPIError {
                private LDKAPIError() {}
                public final static class APIMisuseError extends LDKAPIError {
@@ -175,19 +208,19 @@ public class bindings {
        public static native void CResult_NoneAPIErrorZ_get_ok(long owner);
        // struct LDKAPIError CResult_NoneAPIErrorZ_get_err(LDKCResult_NoneAPIErrorZ *NONNULL_PTR owner);
        public static native long CResult_NoneAPIErrorZ_get_err(long owner);
-       public static class LDKCOption_PaymentSecretZ {
-               private LDKCOption_PaymentSecretZ() {}
-               public final static class Some extends LDKCOption_PaymentSecretZ {
+       public static class LDKCOption_ThirtyTwoBytesZ {
+               private LDKCOption_ThirtyTwoBytesZ() {}
+               public final static class Some extends LDKCOption_ThirtyTwoBytesZ {
                        public byte[] some;
                        Some(byte[] some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_PaymentSecretZ {
+               public final static class None extends LDKCOption_ThirtyTwoBytesZ {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_PaymentSecretZ.init(); }
-       public static native LDKCOption_PaymentSecretZ LDKCOption_PaymentSecretZ_ref_from_ptr(long ptr);
+       static { LDKCOption_ThirtyTwoBytesZ.init(); }
+       public static native LDKCOption_ThirtyTwoBytesZ LDKCOption_ThirtyTwoBytesZ_ref_from_ptr(long ptr);
        public static class LDKCOption_CVec_u8ZZ {
                private LDKCOption_CVec_u8ZZ() {}
                public final static class Some extends LDKCOption_CVec_u8ZZ {
@@ -201,38 +234,35 @@ public class bindings {
        }
        static { LDKCOption_CVec_u8ZZ.init(); }
        public static native LDKCOption_CVec_u8ZZ LDKCOption_CVec_u8ZZ_ref_from_ptr(long ptr);
-       public static class LDKDecodeError {
-               private LDKDecodeError() {}
-               public final static class UnknownVersion extends LDKDecodeError {
-                       UnknownVersion() { }
-               }
-               public final static class UnknownRequiredFeature extends LDKDecodeError {
-                       UnknownRequiredFeature() { }
-               }
-               public final static class InvalidValue extends LDKDecodeError {
-                       InvalidValue() { }
-               }
-               public final static class ShortRead extends LDKDecodeError {
-                       ShortRead() { }
-               }
-               public final static class BadLengthDescriptor extends LDKDecodeError {
-                       BadLengthDescriptor() { }
-               }
-               public final static class Io extends LDKDecodeError {
-                       public org.ldk.enums.IOError io;
-                       Io(org.ldk.enums.IOError io) { this.io = io; }
-               }
-               public final static class UnsupportedCompression extends LDKDecodeError {
-                       UnsupportedCompression() { }
-               }
-               static native void init();
-       }
-       static { LDKDecodeError.init(); }
-       public static native LDKDecodeError LDKDecodeError_ref_from_ptr(long ptr);
        // struct LDKRecipientOnionFields CResult_RecipientOnionFieldsDecodeErrorZ_get_ok(LDKCResult_RecipientOnionFieldsDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_RecipientOnionFieldsDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_RecipientOnionFieldsDecodeErrorZ_get_err(LDKCResult_RecipientOnionFieldsDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_RecipientOnionFieldsDecodeErrorZ_get_err(long owner);
+       // uint64_t C2Tuple_u64CVec_u8ZZ_get_a(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR owner);
+       public static native long C2Tuple_u64CVec_u8ZZ_get_a(long owner);
+       // struct LDKCVec_u8Z C2Tuple_u64CVec_u8ZZ_get_b(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_u64CVec_u8ZZ_get_b(long owner);
+       // struct LDKRecipientOnionFields CResult_RecipientOnionFieldsNoneZ_get_ok(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR owner);
+       public static native long CResult_RecipientOnionFieldsNoneZ_get_ok(long owner);
+       // void CResult_RecipientOnionFieldsNoneZ_get_err(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR owner);
+       public static native void CResult_RecipientOnionFieldsNoneZ_get_err(long owner);
+       public static class LDKCOption_CVec_ThirtyTwoBytesZZ {
+               private LDKCOption_CVec_ThirtyTwoBytesZZ() {}
+               public final static class Some extends LDKCOption_CVec_ThirtyTwoBytesZZ {
+                       public byte[][] some;
+                       Some(byte[][] some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_CVec_ThirtyTwoBytesZZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_CVec_ThirtyTwoBytesZZ.init(); }
+       public static native LDKCOption_CVec_ThirtyTwoBytesZZ LDKCOption_CVec_ThirtyTwoBytesZZ_ref_from_ptr(long ptr);
+       // struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesNoneZ_get_ok(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner);
+       public static native byte[] CResult_ThirtyTwoBytesNoneZ_get_ok(long owner);
+       // void CResult_ThirtyTwoBytesNoneZ_get_err(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner);
+       public static native void CResult_ThirtyTwoBytesNoneZ_get_err(long owner);
        // struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_BlindedPayInfoDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_BlindedPayInfoDecodeErrorZ_get_err(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner);
@@ -268,68 +298,68 @@ public class bindings {
        public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_SpendableOutputDescriptorDecodeErrorZ_get_err(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_get_err(long owner);
-       public static class LDKCOption_PackedLockTimeZ {
-               private LDKCOption_PackedLockTimeZ() {}
-               public final static class Some extends LDKCOption_PackedLockTimeZ {
+       public static class LDKCOption_u32Z {
+               private LDKCOption_u32Z() {}
+               public final static class Some extends LDKCOption_u32Z {
                        public int some;
                        Some(int some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_PackedLockTimeZ {
+               public final static class None extends LDKCOption_u32Z {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_PackedLockTimeZ.init(); }
-       public static native LDKCOption_PackedLockTimeZ LDKCOption_PackedLockTimeZ_ref_from_ptr(long ptr);
-       // struct LDKCVec_u8Z C2Tuple_PartiallySignedTransactionusizeZ_get_a(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_PartiallySignedTransactionusizeZ_get_a(long owner);
-       // uintptr_t C2Tuple_PartiallySignedTransactionusizeZ_get_b(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR owner);
-       public static native long C2Tuple_PartiallySignedTransactionusizeZ_get_b(long owner);
-       // struct LDKC2Tuple_PartiallySignedTransactionusizeZ CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(long owner);
-       // void CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR owner);
-       public static native void CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err(long owner);
+       static { LDKCOption_u32Z.init(); }
+       public static native LDKCOption_u32Z LDKCOption_u32Z_ref_from_ptr(long ptr);
+       // struct LDKCVec_u8Z C2Tuple_CVec_u8ZusizeZ_get_a(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_CVec_u8ZusizeZ_get_a(long owner);
+       // uintptr_t C2Tuple_CVec_u8ZusizeZ_get_b(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR owner);
+       public static native long C2Tuple_CVec_u8ZusizeZ_get_b(long owner);
+       // struct LDKC2Tuple_CVec_u8ZusizeZ CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(long owner);
+       // void CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR owner);
+       public static native void CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err(long owner);
        // void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner);
        public static native void CResult_NoneNoneZ_get_ok(long owner);
        // void CResult_NoneNoneZ_get_err(LDKCResult_NoneNoneZ *NONNULL_PTR owner);
        public static native void CResult_NoneNoneZ_get_err(long owner);
-       // struct LDKSignature C2Tuple_SignatureCVec_SignatureZZ_get_a(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_SignatureCVec_SignatureZZ_get_a(long owner);
-       // struct LDKCVec_SignatureZ C2Tuple_SignatureCVec_SignatureZZ_get_b(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR owner);
-       public static native byte[][] C2Tuple_SignatureCVec_SignatureZZ_get_b(long owner);
-       // struct LDKC2Tuple_SignatureCVec_SignatureZZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(long owner);
-       // void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR owner);
-       public static native void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(long owner);
-       // struct LDKSignature CResult_SignatureNoneZ_get_ok(LDKCResult_SignatureNoneZ *NONNULL_PTR owner);
-       public static native byte[] CResult_SignatureNoneZ_get_ok(long owner);
-       // void CResult_SignatureNoneZ_get_err(LDKCResult_SignatureNoneZ *NONNULL_PTR owner);
-       public static native void CResult_SignatureNoneZ_get_err(long owner);
+       // struct LDKECDSASignature C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(long owner);
+       // struct LDKCVec_ECDSASignatureZ C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR owner);
+       public static native byte[][] C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(long owner);
+       // struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(long owner);
+       // void CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR owner);
+       public static native void CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err(long owner);
+       // struct LDKECDSASignature CResult_ECDSASignatureNoneZ_get_ok(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR owner);
+       public static native byte[] CResult_ECDSASignatureNoneZ_get_ok(long owner);
+       // void CResult_ECDSASignatureNoneZ_get_err(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR owner);
+       public static native void CResult_ECDSASignatureNoneZ_get_err(long owner);
        // struct LDKPublicKey CResult_PublicKeyNoneZ_get_ok(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner);
        public static native byte[] CResult_PublicKeyNoneZ_get_ok(long owner);
        // void CResult_PublicKeyNoneZ_get_err(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner);
        public static native void CResult_PublicKeyNoneZ_get_err(long owner);
-       public static class LDKCOption_ScalarZ {
-               private LDKCOption_ScalarZ() {}
-               public final static class Some extends LDKCOption_ScalarZ {
+       public static class LDKCOption_BigEndianScalarZ {
+               private LDKCOption_BigEndianScalarZ() {}
+               public final static class Some extends LDKCOption_BigEndianScalarZ {
                        public long some;
                        Some(long some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_ScalarZ {
+               public final static class None extends LDKCOption_BigEndianScalarZ {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_ScalarZ.init(); }
-       public static native LDKCOption_ScalarZ LDKCOption_ScalarZ_ref_from_ptr(long ptr);
-       // struct LDKThirtyTwoBytes CResult_SharedSecretNoneZ_get_ok(LDKCResult_SharedSecretNoneZ *NONNULL_PTR owner);
-       public static native byte[] CResult_SharedSecretNoneZ_get_ok(long owner);
-       // void CResult_SharedSecretNoneZ_get_err(LDKCResult_SharedSecretNoneZ *NONNULL_PTR owner);
-       public static native void CResult_SharedSecretNoneZ_get_err(long owner);
+       static { LDKCOption_BigEndianScalarZ.init(); }
+       public static native LDKCOption_BigEndianScalarZ LDKCOption_BigEndianScalarZ_ref_from_ptr(long ptr);
        // struct LDKRecoverableSignature CResult_RecoverableSignatureNoneZ_get_ok(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner);
        public static native byte[] CResult_RecoverableSignatureNoneZ_get_ok(long owner);
        // void CResult_RecoverableSignatureNoneZ_get_err(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner);
        public static native void CResult_RecoverableSignatureNoneZ_get_err(long owner);
+       // struct LDKSchnorrSignature CResult_SchnorrSignatureNoneZ_get_ok(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR owner);
+       public static native byte[] CResult_SchnorrSignatureNoneZ_get_ok(long owner);
+       // void CResult_SchnorrSignatureNoneZ_get_err(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR owner);
+       public static native void CResult_SchnorrSignatureNoneZ_get_err(long owner);
        public interface LDKChannelSigner {
                 byte[] get_per_commitment_point(long idx);
                 byte[] release_commitment_secret(long idx);
@@ -342,7 +372,7 @@ public class bindings {
        public static native byte[] ChannelSigner_get_per_commitment_point(long this_arg, long idx);
        // LDKThirtyTwoBytes ChannelSigner_release_commitment_secret LDKChannelSigner *NONNULL_PTR this_arg, uint64_t idx
        public static native byte[] ChannelSigner_release_commitment_secret(long this_arg, long idx);
-       // LDKCResult_NoneNoneZ ChannelSigner_validate_holder_commitment LDKChannelSigner *NONNULL_PTR this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR holder_tx, struct LDKCVec_PaymentPreimageZ preimages
+       // LDKCResult_NoneNoneZ ChannelSigner_validate_holder_commitment LDKChannelSigner *NONNULL_PTR this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR holder_tx, struct LDKCVec_ThirtyTwoBytesZ preimages
        public static native long ChannelSigner_validate_holder_commitment(long this_arg, long holder_tx, byte[][] preimages);
        // LDKThirtyTwoBytes ChannelSigner_channel_keys_id LDKChannelSigner *NONNULL_PTR this_arg
        public static native byte[] ChannelSigner_channel_keys_id(long this_arg);
@@ -364,25 +394,25 @@ public class bindings {
        }
        public static native long LDKEcdsaChannelSigner_new(LDKEcdsaChannelSigner impl, LDKChannelSigner ChannelSigner, long pubkeys);
        public static native long LDKEcdsaChannelSigner_get_ChannelSigner(long arg);
-       // LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ EcdsaChannelSigner_sign_counterparty_commitment LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKCommitmentTransaction *NONNULL_PTR commitment_tx, struct LDKCVec_PaymentPreimageZ preimages
+       // LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ EcdsaChannelSigner_sign_counterparty_commitment LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKCommitmentTransaction *NONNULL_PTR commitment_tx, struct LDKCVec_ThirtyTwoBytesZ preimages
        public static native long EcdsaChannelSigner_sign_counterparty_commitment(long this_arg, long commitment_tx, byte[][] preimages);
        // LDKCResult_NoneNoneZ EcdsaChannelSigner_validate_counterparty_revocation LDKEcdsaChannelSigner *NONNULL_PTR this_arg, uint64_t idx, const uint8_t (*secret)[32]
        public static native long EcdsaChannelSigner_validate_counterparty_revocation(long this_arg, long idx, byte[] secret);
-       // LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ EcdsaChannelSigner_sign_holder_commitment_and_htlcs LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx
+       // LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ EcdsaChannelSigner_sign_holder_commitment_and_htlcs LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKHolderCommitmentTransaction *NONNULL_PTR commitment_tx
        public static native long EcdsaChannelSigner_sign_holder_commitment_and_htlcs(long this_arg, long commitment_tx);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_justice_revoked_output LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (*per_commitment_key)[32]
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_justice_revoked_output LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (*per_commitment_key)[32]
        public static native long EcdsaChannelSigner_sign_justice_revoked_output(long this_arg, byte[] justice_tx, long input, long amount, byte[] per_commitment_key);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_justice_revoked_htlc LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (*per_commitment_key)[32], const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_justice_revoked_htlc LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (*per_commitment_key)[32], const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc
        public static native long EcdsaChannelSigner_sign_justice_revoked_htlc(long this_arg, byte[] justice_tx, long input, long amount, byte[] per_commitment_key, long htlc);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_holder_htlc_transaction LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction htlc_tx, uintptr_t input, const struct LDKHTLCDescriptor *NONNULL_PTR htlc_descriptor
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_holder_htlc_transaction LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction htlc_tx, uintptr_t input, const struct LDKHTLCDescriptor *NONNULL_PTR htlc_descriptor
        public static native long EcdsaChannelSigner_sign_holder_htlc_transaction(long this_arg, byte[] htlc_tx, long input, long htlc_descriptor);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_counterparty_htlc_transaction LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, struct LDKPublicKey per_commitment_point, const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_counterparty_htlc_transaction LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, struct LDKPublicKey per_commitment_point, const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc
        public static native long EcdsaChannelSigner_sign_counterparty_htlc_transaction(long this_arg, byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, long htlc);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_closing_transaction LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKClosingTransaction *NONNULL_PTR closing_tx
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_closing_transaction LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKClosingTransaction *NONNULL_PTR closing_tx
        public static native long EcdsaChannelSigner_sign_closing_transaction(long this_arg, long closing_tx);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_holder_anchor_input LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction anchor_tx, uintptr_t input
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_holder_anchor_input LDKEcdsaChannelSigner *NONNULL_PTR this_arg, struct LDKTransaction anchor_tx, uintptr_t input
        public static native long EcdsaChannelSigner_sign_holder_anchor_input(long this_arg, byte[] anchor_tx, long input);
-       // LDKCResult_SignatureNoneZ EcdsaChannelSigner_sign_channel_announcement_with_funding_key LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR msg
+       // LDKCResult_ECDSASignatureNoneZ EcdsaChannelSigner_sign_channel_announcement_with_funding_key LDKEcdsaChannelSigner *NONNULL_PTR this_arg, const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR msg
        public static native long EcdsaChannelSigner_sign_channel_announcement_with_funding_key(long this_arg, long msg);
        public interface LDKWriteableEcdsaChannelSigner {
                 byte[] write();
@@ -396,14 +426,40 @@ public class bindings {
        public static native long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_get_err(long owner);
-       // struct LDKCVec_u8Z CResult_ScriptNoneZ_get_ok(LDKCResult_ScriptNoneZ *NONNULL_PTR owner);
-       public static native byte[] CResult_ScriptNoneZ_get_ok(long owner);
-       // void CResult_ScriptNoneZ_get_err(LDKCResult_ScriptNoneZ *NONNULL_PTR owner);
-       public static native void CResult_ScriptNoneZ_get_err(long owner);
+       // struct LDKCVec_u8Z CResult_CVec_u8ZNoneZ_get_ok(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner);
+       public static native byte[] CResult_CVec_u8ZNoneZ_get_ok(long owner);
+       // void CResult_CVec_u8ZNoneZ_get_err(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner);
+       public static native void CResult_CVec_u8ZNoneZ_get_err(long owner);
        // struct LDKShutdownScript CResult_ShutdownScriptNoneZ_get_ok(LDKCResult_ShutdownScriptNoneZ *NONNULL_PTR owner);
        public static native long CResult_ShutdownScriptNoneZ_get_ok(long owner);
        // void CResult_ShutdownScriptNoneZ_get_err(LDKCResult_ShutdownScriptNoneZ *NONNULL_PTR owner);
        public static native void CResult_ShutdownScriptNoneZ_get_err(long owner);
+       public static class LDKCOption_u16Z {
+               private LDKCOption_u16Z() {}
+               public final static class Some extends LDKCOption_u16Z {
+                       public short some;
+                       Some(short some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_u16Z {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_u16Z.init(); }
+       public static native LDKCOption_u16Z LDKCOption_u16Z_ref_from_ptr(long ptr);
+       public static class LDKCOption_boolZ {
+               private LDKCOption_boolZ() {}
+               public final static class Some extends LDKCOption_boolZ {
+                       public boolean some;
+                       Some(boolean some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_boolZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_boolZ.init(); }
+       public static native LDKCOption_boolZ LDKCOption_boolZ_ref_from_ptr(long ptr);
        // struct LDKCVec_CVec_u8ZZ CResult_CVec_CVec_u8ZZNoneZ_get_ok(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR owner);
        public static native byte[][] CResult_CVec_CVec_u8ZZNoneZ_get_ok(long owner);
        // void CResult_CVec_CVec_u8ZZNoneZ_get_err(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR owner);
@@ -412,41 +468,40 @@ public class bindings {
        public static native long CResult_InMemorySignerDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_InMemorySignerDecodeErrorZ_get_err(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_InMemorySignerDecodeErrorZ_get_err(long owner);
-       // struct LDKCVec_u8Z CResult_PartiallySignedTransactionNoneZ_get_ok(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PartiallySignedTransactionNoneZ_get_ok(long owner);
-       // void CResult_PartiallySignedTransactionNoneZ_get_err(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR owner);
-       public static native void CResult_PartiallySignedTransactionNoneZ_get_err(long owner);
        // struct LDKTransaction CResult_TransactionNoneZ_get_ok(LDKCResult_TransactionNoneZ *NONNULL_PTR owner);
        public static native byte[] CResult_TransactionNoneZ_get_ok(long owner);
        // void CResult_TransactionNoneZ_get_err(LDKCResult_TransactionNoneZ *NONNULL_PTR owner);
        public static native void CResult_TransactionNoneZ_get_err(long owner);
-       public interface LDKScore {
+       public interface LDKScoreLookUp {
                 long channel_penalty_msat(long short_channel_id, long source, long target, long usage, long score_params);
+       }
+       public static native long LDKScoreLookUp_new(LDKScoreLookUp impl);
+       // uint64_t ScoreLookUp_channel_penalty_msat LDKScoreLookUp *NONNULL_PTR this_arg, uint64_t short_channel_id, const struct LDKNodeId *NONNULL_PTR source, const struct LDKNodeId *NONNULL_PTR target, struct LDKChannelUsage usage, const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR score_params
+       public static native long ScoreLookUp_channel_penalty_msat(long this_arg, long short_channel_id, long source, long target, long usage, long score_params);
+       public interface LDKScoreUpdate {
                 void payment_path_failed(long path, long short_channel_id);
                 void payment_path_successful(long path);
                 void probe_failed(long path, long short_channel_id);
                 void probe_successful(long path);
-                byte[] write();
        }
-       public static native long LDKScore_new(LDKScore impl);
-       // uint64_t Score_channel_penalty_msat LDKScore *NONNULL_PTR this_arg, uint64_t short_channel_id, const struct LDKNodeId *NONNULL_PTR source, const struct LDKNodeId *NONNULL_PTR target, struct LDKChannelUsage usage, const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR score_params
-       public static native long Score_channel_penalty_msat(long this_arg, long short_channel_id, long source, long target, long usage, long score_params);
-       // void Score_payment_path_failed LDKScore *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path, uint64_t short_channel_id
-       public static native void Score_payment_path_failed(long this_arg, long path, long short_channel_id);
-       // void Score_payment_path_successful LDKScore *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path
-       public static native void Score_payment_path_successful(long this_arg, long path);
-       // void Score_probe_failed LDKScore *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path, uint64_t short_channel_id
-       public static native void Score_probe_failed(long this_arg, long path, long short_channel_id);
-       // void Score_probe_successful LDKScore *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path
-       public static native void Score_probe_successful(long this_arg, long path);
-       // LDKCVec_u8Z Score_write LDKScore *NONNULL_PTR this_arg
-       public static native byte[] Score_write(long this_arg);
+       public static native long LDKScoreUpdate_new(LDKScoreUpdate impl);
+       // void ScoreUpdate_payment_path_failed LDKScoreUpdate *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path, uint64_t short_channel_id
+       public static native void ScoreUpdate_payment_path_failed(long this_arg, long path, long short_channel_id);
+       // void ScoreUpdate_payment_path_successful LDKScoreUpdate *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path
+       public static native void ScoreUpdate_payment_path_successful(long this_arg, long path);
+       // void ScoreUpdate_probe_failed LDKScoreUpdate *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path, uint64_t short_channel_id
+       public static native void ScoreUpdate_probe_failed(long this_arg, long path, long short_channel_id);
+       // void ScoreUpdate_probe_successful LDKScoreUpdate *NONNULL_PTR this_arg, const struct LDKPath *NONNULL_PTR path
+       public static native void ScoreUpdate_probe_successful(long this_arg, long path);
        public interface LDKLockableScore {
-                long lock();
+                long read_lock();
+                long write_lock();
        }
        public static native long LDKLockableScore_new(LDKLockableScore impl);
-       // LDKScore LockableScore_lock LDKLockableScore *NONNULL_PTR this_arg
-       public static native long LockableScore_lock(long this_arg);
+       // LDKScoreLookUp LockableScore_read_lock LDKLockableScore *NONNULL_PTR this_arg
+       public static native long LockableScore_read_lock(long this_arg);
+       // LDKScoreUpdate LockableScore_write_lock LDKLockableScore *NONNULL_PTR this_arg
+       public static native long LockableScore_write_lock(long this_arg);
        public interface LDKWriteableScore {
                 byte[] write();
        }
@@ -467,10 +522,10 @@ public class bindings {
        }
        static { LDKCOption_WriteableScoreZ.init(); }
        public static native LDKCOption_WriteableScoreZ LDKCOption_WriteableScoreZ_ref_from_ptr(long ptr);
-       // void CResult_NoneErrorZ_get_ok(LDKCResult_NoneErrorZ *NONNULL_PTR owner);
-       public static native void CResult_NoneErrorZ_get_ok(long owner);
-       // enum LDKIOError CResult_NoneErrorZ_get_err(LDKCResult_NoneErrorZ *NONNULL_PTR owner);
-       public static native IOError CResult_NoneErrorZ_get_err(long owner);
+       // void CResult_NoneIOErrorZ_get_ok(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner);
+       public static native void CResult_NoneIOErrorZ_get_ok(long owner);
+       // enum LDKIOError CResult_NoneIOErrorZ_get_err(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner);
+       public static native IOError CResult_NoneIOErrorZ_get_err(long owner);
        // struct LDKRoute CResult_RouteLightningErrorZ_get_ok(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner);
        public static native long CResult_RouteLightningErrorZ_get_ok(long owner);
        // struct LDKLightningError CResult_RouteLightningErrorZ_get_err(LDKCResult_RouteLightningErrorZ *NONNULL_PTR owner);
@@ -487,19 +542,6 @@ public class bindings {
        public static native long CResult_BlindedTailDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_BlindedTailDecodeErrorZ_get_err(LDKCResult_BlindedTailDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_BlindedTailDecodeErrorZ_get_err(long owner);
-       public static class LDKCOption_u32Z {
-               private LDKCOption_u32Z() {}
-               public final static class Some extends LDKCOption_u32Z {
-                       public int some;
-                       Some(int some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_u32Z {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_u32Z.init(); }
-       public static native LDKCOption_u32Z LDKCOption_u32Z_ref_from_ptr(long ptr);
        // struct LDKRoute CResult_RouteDecodeErrorZ_get_ok(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_RouteDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_RouteDecodeErrorZ_get_err(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR owner);
@@ -545,27 +587,40 @@ public class bindings {
        }
        static { LDKCOption_C2Tuple_u64u64ZZ.init(); }
        public static native LDKCOption_C2Tuple_u64u64ZZ LDKCOption_C2Tuple_u64u64ZZ_ref_from_ptr(long ptr);
-       // struct LDKEightU16s C2Tuple_Z_get_a(LDKC2Tuple_Z *NONNULL_PTR owner);
+       // struct LDKThirtyTwoU16s C2Tuple_Z_get_a(LDKC2Tuple_Z *NONNULL_PTR owner);
        public static native short[] C2Tuple_Z_get_a(long owner);
-       // struct LDKEightU16s C2Tuple_Z_get_b(LDKC2Tuple_Z *NONNULL_PTR owner);
+       // struct LDKThirtyTwoU16s C2Tuple_Z_get_b(LDKC2Tuple_Z *NONNULL_PTR owner);
        public static native short[] C2Tuple_Z_get_b(long owner);
-       // struct LDKEightU16s C2Tuple__u168_u168Z_get_a(LDKC2Tuple__u168_u168Z *NONNULL_PTR owner);
-       public static native short[] C2Tuple__u168_u168Z_get_a(long owner);
-       // struct LDKEightU16s C2Tuple__u168_u168Z_get_b(LDKC2Tuple__u168_u168Z *NONNULL_PTR owner);
-       public static native short[] C2Tuple__u168_u168Z_get_b(long owner);
-       public static class LDKCOption_C2Tuple_EightU16sEightU16sZZ {
-               private LDKCOption_C2Tuple_EightU16sEightU16sZZ() {}
-               public final static class Some extends LDKCOption_C2Tuple_EightU16sEightU16sZZ {
+       // struct LDKThirtyTwoU16s C2Tuple__u1632_u1632Z_get_a(LDKC2Tuple__u1632_u1632Z *NONNULL_PTR owner);
+       public static native short[] C2Tuple__u1632_u1632Z_get_a(long owner);
+       // struct LDKThirtyTwoU16s C2Tuple__u1632_u1632Z_get_b(LDKC2Tuple__u1632_u1632Z *NONNULL_PTR owner);
+       public static native short[] C2Tuple__u1632_u1632Z_get_b(long owner);
+       public static class LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ {
+               private LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ() {}
+               public final static class Some extends LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ {
                        public long some;
                        Some(long some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_C2Tuple_EightU16sEightU16sZZ {
+               public final static class None extends LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.init(); }
+       public static native LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_ref_from_ptr(long ptr);
+       public static class LDKCOption_f64Z {
+               private LDKCOption_f64Z() {}
+               public final static class Some extends LDKCOption_f64Z {
+                       public double some;
+                       Some(double some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_f64Z {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_C2Tuple_EightU16sEightU16sZZ.init(); }
-       public static native LDKCOption_C2Tuple_EightU16sEightU16sZZ LDKCOption_C2Tuple_EightU16sEightU16sZZ_ref_from_ptr(long ptr);
+       static { LDKCOption_f64Z.init(); }
+       public static native LDKCOption_f64Z LDKCOption_f64Z_ref_from_ptr(long ptr);
        public interface LDKLogger {
                 void log(long record);
        }
@@ -578,42 +633,29 @@ public class bindings {
        public static native long C2Tuple_usizeTransactionZ_get_a(long owner);
        // struct LDKTransaction C2Tuple_usizeTransactionZ_get_b(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR owner);
        public static native byte[] C2Tuple_usizeTransactionZ_get_b(long owner);
-       public static class LDKCOption_BlockHashZ {
-               private LDKCOption_BlockHashZ() {}
-               public final static class Some extends LDKCOption_BlockHashZ {
-                       public byte[] some;
-                       Some(byte[] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_BlockHashZ {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_BlockHashZ.init(); }
-       public static native LDKCOption_BlockHashZ LDKCOption_BlockHashZ_ref_from_ptr(long ptr);
-       // struct LDKThirtyTwoBytes C2Tuple_TxidCOption_BlockHashZZ_get_a(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_TxidCOption_BlockHashZZ_get_a(long owner);
-       // struct LDKCOption_BlockHashZ C2Tuple_TxidCOption_BlockHashZZ_get_b(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR owner);
-       public static native long C2Tuple_TxidCOption_BlockHashZZ_get_b(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(long owner);
+       // struct LDKCOption_ThirtyTwoBytesZ C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR owner);
+       public static native long C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(long owner);
+       // enum LDKChannelMonitorUpdateStatus CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR owner);
+       public static native ChannelMonitorUpdateStatus CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(long owner);
+       // void CResult_ChannelMonitorUpdateStatusNoneZ_get_err(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR owner);
+       public static native void CResult_ChannelMonitorUpdateStatusNoneZ_get_err(long owner);
        public static class LDKMonitorEvent {
                private LDKMonitorEvent() {}
                public final static class HTLCEvent extends LDKMonitorEvent {
                        public long htlc_event;
                        HTLCEvent(long htlc_event) { this.htlc_event = htlc_event; }
                }
-               public final static class CommitmentTxConfirmed extends LDKMonitorEvent {
-                       public long commitment_tx_confirmed;
-                       CommitmentTxConfirmed(long commitment_tx_confirmed) { this.commitment_tx_confirmed = commitment_tx_confirmed; }
+               public final static class HolderForceClosed extends LDKMonitorEvent {
+                       public long holder_force_closed;
+                       HolderForceClosed(long holder_force_closed) { this.holder_force_closed = holder_force_closed; }
                }
                public final static class Completed extends LDKMonitorEvent {
                        public long funding_txo;
                        public long monitor_update_id;
                        Completed(long funding_txo, long monitor_update_id) { this.funding_txo = funding_txo; this.monitor_update_id = monitor_update_id; }
                }
-               public final static class UpdateFailed extends LDKMonitorEvent {
-                       public long update_failed;
-                       UpdateFailed(long update_failed) { this.update_failed = update_failed; }
-               }
                static native void init();
        }
        static { LDKMonitorEvent.init(); }
@@ -656,10 +698,10 @@ public class bindings {
        public static native long CResult_OfferBolt12ParseErrorZ_get_ok(long owner);
        // struct LDKBolt12ParseError CResult_OfferBolt12ParseErrorZ_get_err(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner);
        public static native long CResult_OfferBolt12ParseErrorZ_get_err(long owner);
-       // struct LDKPublicKey CResult_PublicKeyErrorZ_get_ok(LDKCResult_PublicKeyErrorZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PublicKeyErrorZ_get_ok(long owner);
-       // enum LDKSecp256k1Error CResult_PublicKeyErrorZ_get_err(LDKCResult_PublicKeyErrorZ *NONNULL_PTR owner);
-       public static native Secp256k1Error CResult_PublicKeyErrorZ_get_err(long owner);
+       // struct LDKPublicKey CResult_PublicKeySecp256k1ErrorZ_get_ok(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner);
+       public static native byte[] CResult_PublicKeySecp256k1ErrorZ_get_ok(long owner);
+       // enum LDKSecp256k1Error CResult_PublicKeySecp256k1ErrorZ_get_err(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner);
+       public static native Secp256k1Error CResult_PublicKeySecp256k1ErrorZ_get_err(long owner);
        // struct LDKNodeId CResult_NodeIdDecodeErrorZ_get_ok(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_NodeIdDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_NodeIdDecodeErrorZ_get_err(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR owner);
@@ -975,38 +1017,38 @@ public class bindings {
        public static native long CResult_RoutingFeesDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_RoutingFeesDecodeErrorZ_get_err(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_RoutingFeesDecodeErrorZ_get_err(long owner);
-       public static class LDKNetAddress {
-               private LDKNetAddress() {}
-               public final static class IPv4 extends LDKNetAddress {
+       public static class LDKSocketAddress {
+               private LDKSocketAddress() {}
+               public final static class TcpIpV4 extends LDKSocketAddress {
                        public byte[] addr;
                        public short port;
-                       IPv4(byte[] addr, short port) { this.addr = addr; this.port = port; }
+                       TcpIpV4(byte[] addr, short port) { this.addr = addr; this.port = port; }
                }
-               public final static class IPv6 extends LDKNetAddress {
+               public final static class TcpIpV6 extends LDKSocketAddress {
                        public byte[] addr;
                        public short port;
-                       IPv6(byte[] addr, short port) { this.addr = addr; this.port = port; }
+                       TcpIpV6(byte[] addr, short port) { this.addr = addr; this.port = port; }
                }
-               public final static class OnionV2 extends LDKNetAddress {
+               public final static class OnionV2 extends LDKSocketAddress {
                        public byte[] onion_v2;
                        OnionV2(byte[] onion_v2) { this.onion_v2 = onion_v2; }
                }
-               public final static class OnionV3 extends LDKNetAddress {
+               public final static class OnionV3 extends LDKSocketAddress {
                        public byte[] ed25519_pubkey;
                        public short checksum;
                        public byte version;
                        public short port;
                        OnionV3(byte[] ed25519_pubkey, short checksum, byte version, short port) { this.ed25519_pubkey = ed25519_pubkey; this.checksum = checksum; this.version = version; this.port = port; }
                }
-               public final static class Hostname extends LDKNetAddress {
+               public final static class Hostname extends LDKSocketAddress {
                        public long hostname;
                        public short port;
                        Hostname(long hostname, short port) { this.hostname = hostname; this.port = port; }
                }
                static native void init();
        }
-       static { LDKNetAddress.init(); }
-       public static native LDKNetAddress LDKNetAddress_ref_from_ptr(long ptr);
+       static { LDKSocketAddress.init(); }
+       public static native LDKSocketAddress LDKSocketAddress_ref_from_ptr(long ptr);
        // struct LDKNodeAnnouncementInfo CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_NodeAnnouncementInfoDecodeErrorZ_get_err(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR owner);
@@ -1023,32 +1065,27 @@ public class bindings {
        public static native long CResult_NetworkGraphDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_NetworkGraphDecodeErrorZ_get_err(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_NetworkGraphDecodeErrorZ_get_err(long owner);
-       public static class LDKCOption_CVec_NetAddressZZ {
-               private LDKCOption_CVec_NetAddressZZ() {}
-               public final static class Some extends LDKCOption_CVec_NetAddressZZ {
+       public static class LDKCOption_CVec_SocketAddressZZ {
+               private LDKCOption_CVec_SocketAddressZZ() {}
+               public final static class Some extends LDKCOption_CVec_SocketAddressZZ {
                        public long[] some;
                        Some(long[] some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_CVec_NetAddressZZ {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_CVec_NetAddressZZ.init(); }
-       public static native LDKCOption_CVec_NetAddressZZ LDKCOption_CVec_NetAddressZZ_ref_from_ptr(long ptr);
-       public static class LDKCOption_PaymentPreimageZ {
-               private LDKCOption_PaymentPreimageZ() {}
-               public final static class Some extends LDKCOption_PaymentPreimageZ {
-                       public byte[] some;
-                       Some(byte[] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_PaymentPreimageZ {
+               public final static class None extends LDKCOption_CVec_SocketAddressZZ {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_PaymentPreimageZ.init(); }
-       public static native LDKCOption_PaymentPreimageZ LDKCOption_PaymentPreimageZ_ref_from_ptr(long ptr);
+       static { LDKCOption_CVec_SocketAddressZZ.init(); }
+       public static native LDKCOption_CVec_SocketAddressZZ LDKCOption_CVec_SocketAddressZZ_ref_from_ptr(long ptr);
+       // struct LDKChannelDerivationParameters CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_ChannelDerivationParametersDecodeErrorZ_get_err(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ChannelDerivationParametersDecodeErrorZ_get_err(long owner);
+       // struct LDKHTLCDescriptor CResult_HTLCDescriptorDecodeErrorZ_get_ok(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_HTLCDescriptorDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_HTLCDescriptorDecodeErrorZ_get_err(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_HTLCDescriptorDecodeErrorZ_get_err(long owner);
        public static class LDKCOption_TxOutZ {
                private LDKCOption_TxOutZ() {}
                public final static class Some extends LDKCOption_TxOutZ {
@@ -1070,19 +1107,23 @@ public class bindings {
        public static native long[] CResult_CVec_UtxoZNoneZ_get_ok(long owner);
        // void CResult_CVec_UtxoZNoneZ_get_err(LDKCResult_CVec_UtxoZNoneZ *NONNULL_PTR owner);
        public static native void CResult_CVec_UtxoZNoneZ_get_err(long owner);
-       public static class LDKCOption_u16Z {
-               private LDKCOption_u16Z() {}
-               public final static class Some extends LDKCOption_u16Z {
-                       public short some;
-                       Some(short some) { this.some = some; }
+       // uint64_t C2Tuple_u64u16Z_get_a(LDKC2Tuple_u64u16Z *NONNULL_PTR owner);
+       public static native long C2Tuple_u64u16Z_get_a(long owner);
+       // uint16_t C2Tuple_u64u16Z_get_b(LDKC2Tuple_u64u16Z *NONNULL_PTR owner);
+       public static native short C2Tuple_u64u16Z_get_b(long owner);
+       public static class LDKCOption_C2Tuple_u64u16ZZ {
+               private LDKCOption_C2Tuple_u64u16ZZ() {}
+               public final static class Some extends LDKCOption_C2Tuple_u64u16ZZ {
+                       public long some;
+                       Some(long some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_u16Z {
+               public final static class None extends LDKCOption_C2Tuple_u64u16ZZ {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_u16Z.init(); }
-       public static native LDKCOption_u16Z LDKCOption_u16Z_ref_from_ptr(long ptr);
+       static { LDKCOption_C2Tuple_u64u16ZZ.init(); }
+       public static native LDKCOption_C2Tuple_u64u16ZZ LDKCOption_C2Tuple_u64u16ZZ_ref_from_ptr(long ptr);
        public static class LDKCOption_ChannelShutdownStateZ {
                private LDKCOption_ChannelShutdownStateZ() {}
                public final static class Some extends LDKCOption_ChannelShutdownStateZ {
@@ -1096,37 +1137,31 @@ public class bindings {
        }
        static { LDKCOption_ChannelShutdownStateZ.init(); }
        public static native LDKCOption_ChannelShutdownStateZ LDKCOption_ChannelShutdownStateZ_ref_from_ptr(long ptr);
-       public static class LDKCOption_PaymentHashZ {
-               private LDKCOption_PaymentHashZ() {}
-               public final static class Some extends LDKCOption_PaymentHashZ {
-                       public byte[] some;
-                       Some(byte[] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_PaymentHashZ {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_PaymentHashZ.init(); }
-       public static native LDKCOption_PaymentHashZ LDKCOption_PaymentHashZ_ref_from_ptr(long ptr);
-       // struct LDKThirtyTwoBytes CResult__u832APIErrorZ_get_ok(LDKCResult__u832APIErrorZ *NONNULL_PTR owner);
-       public static native byte[] CResult__u832APIErrorZ_get_ok(long owner);
-       // struct LDKAPIError CResult__u832APIErrorZ_get_err(LDKCResult__u832APIErrorZ *NONNULL_PTR owner);
-       public static native long CResult__u832APIErrorZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesAPIErrorZ_get_ok(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner);
+       public static native byte[] CResult_ThirtyTwoBytesAPIErrorZ_get_ok(long owner);
+       // struct LDKAPIError CResult_ThirtyTwoBytesAPIErrorZ_get_err(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ThirtyTwoBytesAPIErrorZ_get_err(long owner);
        public static class LDKRecentPaymentDetails {
                private LDKRecentPaymentDetails() {}
+               public final static class AwaitingInvoice extends LDKRecentPaymentDetails {
+                       public byte[] payment_id;
+                       AwaitingInvoice(byte[] payment_id) { this.payment_id = payment_id; }
+               }
                public final static class Pending extends LDKRecentPaymentDetails {
+                       public byte[] payment_id;
                        public byte[] payment_hash;
                        public long total_msat;
-                       Pending(byte[] payment_hash, long total_msat) { this.payment_hash = payment_hash; this.total_msat = total_msat; }
+                       Pending(byte[] payment_id, byte[] payment_hash, long total_msat) { this.payment_id = payment_id; this.payment_hash = payment_hash; this.total_msat = total_msat; }
                }
                public final static class Fulfilled extends LDKRecentPaymentDetails {
+                       public byte[] payment_id;
                        public long payment_hash;
-                       Fulfilled(long payment_hash) { this.payment_hash = payment_hash; }
+                       Fulfilled(byte[] payment_id, long payment_hash) { this.payment_id = payment_id; this.payment_hash = payment_hash; }
                }
                public final static class Abandoned extends LDKRecentPaymentDetails {
+                       public byte[] payment_id;
                        public byte[] payment_hash;
-                       Abandoned(byte[] payment_hash) { this.payment_hash = payment_hash; }
+                       Abandoned(byte[] payment_id, byte[] payment_hash) { this.payment_id = payment_id; this.payment_hash = payment_hash; }
                }
                static native void init();
        }
@@ -1167,51 +1202,47 @@ public class bindings {
        public static native void CResult_NoneRetryableSendFailureZ_get_ok(long owner);
        // enum LDKRetryableSendFailure CResult_NoneRetryableSendFailureZ_get_err(LDKCResult_NoneRetryableSendFailureZ *NONNULL_PTR owner);
        public static native RetryableSendFailure CResult_NoneRetryableSendFailureZ_get_err(long owner);
-       // struct LDKThirtyTwoBytes CResult_PaymentHashPaymentSendFailureZ_get_ok(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PaymentHashPaymentSendFailureZ_get_ok(long owner);
-       // struct LDKPaymentSendFailure CResult_PaymentHashPaymentSendFailureZ_get_err(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR owner);
-       public static native long CResult_PaymentHashPaymentSendFailureZ_get_err(long owner);
-       // struct LDKThirtyTwoBytes CResult_PaymentHashRetryableSendFailureZ_get_ok(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PaymentHashRetryableSendFailureZ_get_ok(long owner);
-       // enum LDKRetryableSendFailure CResult_PaymentHashRetryableSendFailureZ_get_err(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR owner);
-       public static native RetryableSendFailure CResult_PaymentHashRetryableSendFailureZ_get_err(long owner);
-       // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_a(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_PaymentHashPaymentIdZ_get_a(long owner);
-       // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_b(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_PaymentHashPaymentIdZ_get_b(long owner);
-       // struct LDKC2Tuple_PaymentHashPaymentIdZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(long owner);
-       // struct LDKPaymentSendFailure CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(long owner);
-       // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_a(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_PaymentHashPaymentSecretZ_get_a(long owner);
-       // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_b(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_PaymentHashPaymentSecretZ_get_b(long owner);
-       // struct LDKC2Tuple_PaymentHashPaymentSecretZ CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(long owner);
-       // void CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR owner);
-       public static native void CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err(long owner);
-       // struct LDKThirtyTwoBytes CResult_PaymentSecretNoneZ_get_ok(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PaymentSecretNoneZ_get_ok(long owner);
-       // void CResult_PaymentSecretNoneZ_get_err(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR owner);
-       public static native void CResult_PaymentSecretNoneZ_get_err(long owner);
-       // struct LDKThirtyTwoBytes CResult_PaymentPreimageAPIErrorZ_get_ok(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PaymentPreimageAPIErrorZ_get_ok(long owner);
-       // struct LDKAPIError CResult_PaymentPreimageAPIErrorZ_get_err(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR owner);
-       public static native long CResult_PaymentPreimageAPIErrorZ_get_err(long owner);
-       public static class LDKCOption_CVec_ChainHashZZ {
-               private LDKCOption_CVec_ChainHashZZ() {}
-               public final static class Some extends LDKCOption_CVec_ChainHashZZ {
-                       public byte[][] some;
-                       Some(byte[][] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_CVec_ChainHashZZ {
-                       None() { }
+       // struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR owner);
+       public static native byte[] CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(long owner);
+       // struct LDKPaymentSendFailure CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR owner);
+       public static native long CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR owner);
+       public static native byte[] CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(long owner);
+       // enum LDKRetryableSendFailure CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR owner);
+       public static native RetryableSendFailure CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(long owner);
+       // struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(long owner);
+       // struct LDKPaymentSendFailure CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(long owner);
+       public static class LDKProbeSendFailure {
+               private LDKProbeSendFailure() {}
+               public final static class RouteNotFound extends LDKProbeSendFailure {
+                       RouteNotFound() { }
+               }
+               public final static class SendingFailed extends LDKProbeSendFailure {
+                       public long sending_failed;
+                       SendingFailed(long sending_failed) { this.sending_failed = sending_failed; }
                }
                static native void init();
        }
-       static { LDKCOption_CVec_ChainHashZZ.init(); }
-       public static native LDKCOption_CVec_ChainHashZZ LDKCOption_CVec_ChainHashZZ_ref_from_ptr(long ptr);
+       static { LDKProbeSendFailure.init(); }
+       public static native LDKProbeSendFailure LDKProbeSendFailure_ref_from_ptr(long ptr);
+       // struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR owner);
+       public static native long[] CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(long owner);
+       // struct LDKProbeSendFailure CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR owner);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(long owner);
+       // struct LDKPublicKey C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(long owner);
+       // struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(long owner);
+       // void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR owner);
+       public static native void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err(long owner);
        // struct LDKCounterpartyForwardingInfo CResult_CounterpartyForwardingInfoDecodeErrorZ_get_ok(LDKCResult_CounterpartyForwardingInfoDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_CounterpartyForwardingInfoDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_CounterpartyForwardingInfoDecodeErrorZ_get_err(LDKCResult_CounterpartyForwardingInfoDecodeErrorZ *NONNULL_PTR owner);
@@ -1233,13 +1264,13 @@ public class bindings {
        // struct LDKDecodeError CResult_ChannelShutdownStateDecodeErrorZ_get_err(LDKCResult_ChannelShutdownStateDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_ChannelShutdownStateDecodeErrorZ_get_err(long owner);
        public interface LDKWatch {
-                ChannelMonitorUpdateStatus watch_channel(long funding_txo, long monitor);
+                long watch_channel(long funding_txo, long monitor);
                 ChannelMonitorUpdateStatus update_channel(long funding_txo, long update);
                 long[] release_pending_monitor_events();
        }
        public static native long LDKWatch_new(LDKWatch impl);
-       // LDKChannelMonitorUpdateStatus Watch_watch_channel LDKWatch *NONNULL_PTR this_arg, struct LDKOutPoint funding_txo, struct LDKChannelMonitor monitor
-       public static native ChannelMonitorUpdateStatus Watch_watch_channel(long this_arg, long funding_txo, long monitor);
+       // LDKCResult_ChannelMonitorUpdateStatusNoneZ Watch_watch_channel LDKWatch *NONNULL_PTR this_arg, struct LDKOutPoint funding_txo, struct LDKChannelMonitor monitor
+       public static native long Watch_watch_channel(long this_arg, long funding_txo, long monitor);
        // LDKChannelMonitorUpdateStatus Watch_update_channel LDKWatch *NONNULL_PTR this_arg, struct LDKOutPoint funding_txo, const struct LDKChannelMonitorUpdate *NONNULL_PTR update
        public static native ChannelMonitorUpdateStatus Watch_update_channel(long this_arg, long funding_txo, long update);
        // LDKCVec_C3Tuple_OutPointCVec_MonitorEventZPublicKeyZZ Watch_release_pending_monitor_events LDKWatch *NONNULL_PTR this_arg
@@ -1279,6 +1310,8 @@ public class bindings {
                 long get_node_id(Recipient recipient);
                 long ecdh(Recipient recipient, byte[] other_key, long tweak);
                 long sign_invoice(byte[] hrp_bytes, byte[] invoice_data, Recipient recipient);
+                long sign_bolt12_invoice_request(long invoice_request);
+                long sign_bolt12_invoice(long invoice);
                 long sign_gossip_message(long msg);
        }
        public static native long LDKNodeSigner_new(LDKNodeSigner impl);
@@ -1286,11 +1319,15 @@ public class bindings {
        public static native byte[] NodeSigner_get_inbound_payment_key_material(long this_arg);
        // LDKCResult_PublicKeyNoneZ NodeSigner_get_node_id LDKNodeSigner *NONNULL_PTR this_arg, enum LDKRecipient recipient
        public static native long NodeSigner_get_node_id(long this_arg, Recipient recipient);
-       // LDKCResult_SharedSecretNoneZ NodeSigner_ecdh LDKNodeSigner *NONNULL_PTR this_arg, enum LDKRecipient recipient, struct LDKPublicKey other_key, struct LDKCOption_ScalarZ tweak
+       // LDKCResult_ThirtyTwoBytesNoneZ NodeSigner_ecdh LDKNodeSigner *NONNULL_PTR this_arg, enum LDKRecipient recipient, struct LDKPublicKey other_key, struct LDKCOption_BigEndianScalarZ tweak
        public static native long NodeSigner_ecdh(long this_arg, Recipient recipient, byte[] other_key, long tweak);
        // LDKCResult_RecoverableSignatureNoneZ NodeSigner_sign_invoice LDKNodeSigner *NONNULL_PTR this_arg, struct LDKu8slice hrp_bytes, struct LDKCVec_U5Z invoice_data, enum LDKRecipient recipient
        public static native long NodeSigner_sign_invoice(long this_arg, byte[] hrp_bytes, byte[] invoice_data, Recipient recipient);
-       // LDKCResult_SignatureNoneZ NodeSigner_sign_gossip_message LDKNodeSigner *NONNULL_PTR this_arg, struct LDKUnsignedGossipMessage msg
+       // LDKCResult_SchnorrSignatureNoneZ NodeSigner_sign_bolt12_invoice_request LDKNodeSigner *NONNULL_PTR this_arg, const struct LDKUnsignedInvoiceRequest *NONNULL_PTR invoice_request
+       public static native long NodeSigner_sign_bolt12_invoice_request(long this_arg, long invoice_request);
+       // LDKCResult_SchnorrSignatureNoneZ NodeSigner_sign_bolt12_invoice LDKNodeSigner *NONNULL_PTR this_arg, const struct LDKUnsignedBolt12Invoice *NONNULL_PTR invoice
+       public static native long NodeSigner_sign_bolt12_invoice(long this_arg, long invoice);
+       // LDKCResult_ECDSASignatureNoneZ NodeSigner_sign_gossip_message LDKNodeSigner *NONNULL_PTR this_arg, struct LDKUnsignedGossipMessage msg
        public static native long NodeSigner_sign_gossip_message(long this_arg, long msg);
        public interface LDKSignerProvider {
                 byte[] generate_channel_keys_id(boolean inbound, long channel_value_satoshis, byte[] user_channel_id);
@@ -1306,7 +1343,7 @@ public class bindings {
        public static native long SignerProvider_derive_channel_signer(long this_arg, long channel_value_satoshis, byte[] channel_keys_id);
        // LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ SignerProvider_read_chan_signer LDKSignerProvider *NONNULL_PTR this_arg, struct LDKu8slice reader
        public static native long SignerProvider_read_chan_signer(long this_arg, byte[] reader);
-       // LDKCResult_ScriptNoneZ SignerProvider_get_destination_script LDKSignerProvider *NONNULL_PTR this_arg
+       // LDKCResult_CVec_u8ZNoneZ SignerProvider_get_destination_script LDKSignerProvider *NONNULL_PTR this_arg
        public static native long SignerProvider_get_destination_script(long this_arg);
        // LDKCResult_ShutdownScriptNoneZ SignerProvider_get_shutdown_scriptpubkey LDKSignerProvider *NONNULL_PTR this_arg
        public static native long SignerProvider_get_shutdown_scriptpubkey(long this_arg);
@@ -1325,14 +1362,14 @@ public class bindings {
        public static native long Router_find_route(long this_arg, byte[] payer, long route_params, long[] first_hops, long inflight_htlcs);
        // LDKCResult_RouteLightningErrorZ Router_find_route_with_id LDKRouter *NONNULL_PTR this_arg, struct LDKPublicKey payer, const struct LDKRouteParameters *NONNULL_PTR route_params, struct LDKCVec_ChannelDetailsZ *first_hops, struct LDKInFlightHtlcs inflight_htlcs, struct LDKThirtyTwoBytes _payment_hash, struct LDKThirtyTwoBytes _payment_id
        public static native long Router_find_route_with_id(long this_arg, byte[] payer, long route_params, long[] first_hops, long inflight_htlcs, byte[] _payment_hash, byte[] _payment_id);
-       // struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelManagerZ_get_a(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_BlockHashChannelManagerZ_get_a(long owner);
-       // struct LDKChannelManager C2Tuple_BlockHashChannelManagerZ_get_b(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR owner);
-       public static native long C2Tuple_BlockHashChannelManagerZ_get_b(long owner);
-       // struct LDKC2Tuple_BlockHashChannelManagerZ *CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(long owner);
-       // struct LDKDecodeError CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(long owner);
+       // struct LDKChannelManager C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner);
+       public static native long C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(long owner);
+       // struct LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(long owner);
        public static class LDKMaxDustHTLCExposure {
                private LDKMaxDustHTLCExposure() {}
                public final static class FixedLimitMsat extends LDKMaxDustHTLCExposure {
@@ -1410,26 +1447,26 @@ public class bindings {
        public static native long CResult_HTLCUpdateDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_HTLCUpdateDecodeErrorZ_get_err(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_HTLCUpdateDecodeErrorZ_get_err(long owner);
-       // struct LDKOutPoint C2Tuple_OutPointScriptZ_get_a(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR owner);
-       public static native long C2Tuple_OutPointScriptZ_get_a(long owner);
-       // struct LDKCVec_u8Z C2Tuple_OutPointScriptZ_get_b(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_OutPointScriptZ_get_b(long owner);
-       // uint32_t C2Tuple_u32ScriptZ_get_a(LDKC2Tuple_u32ScriptZ *NONNULL_PTR owner);
-       public static native int C2Tuple_u32ScriptZ_get_a(long owner);
-       // struct LDKCVec_u8Z C2Tuple_u32ScriptZ_get_b(LDKC2Tuple_u32ScriptZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_u32ScriptZ_get_b(long owner);
-       // struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(long owner);
-       // struct LDKCVec_C2Tuple_u32ScriptZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR owner);
-       public static native long[] C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(long owner);
+       // struct LDKOutPoint C2Tuple_OutPointCVec_u8ZZ_get_a(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR owner);
+       public static native long C2Tuple_OutPointCVec_u8ZZ_get_a(long owner);
+       // struct LDKCVec_u8Z C2Tuple_OutPointCVec_u8ZZ_get_b(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_OutPointCVec_u8ZZ_get_b(long owner);
+       // uint32_t C2Tuple_u32CVec_u8ZZ_get_a(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR owner);
+       public static native int C2Tuple_u32CVec_u8ZZ_get_a(long owner);
+       // struct LDKCVec_u8Z C2Tuple_u32CVec_u8ZZ_get_b(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_u32CVec_u8ZZ_get_b(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(long owner);
+       // struct LDKCVec_C2Tuple_u32CVec_u8ZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner);
+       public static native long[] C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(long owner);
        // uint32_t C2Tuple_u32TxOutZ_get_a(LDKC2Tuple_u32TxOutZ *NONNULL_PTR owner);
        public static native int C2Tuple_u32TxOutZ_get_a(long owner);
        // struct LDKTxOut C2Tuple_u32TxOutZ_get_b(LDKC2Tuple_u32TxOutZ *NONNULL_PTR owner);
        public static native long C2Tuple_u32TxOutZ_get_b(long owner);
-       // struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(long owner);
-       // struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner);
-       public static native long[] C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(long owner);
+       // struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner);
+       public static native long[] C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(long owner);
        public static class LDKBalance {
                private LDKBalance() {}
                public final static class ClaimableOnChannelClose extends LDKBalance {
@@ -1468,14 +1505,14 @@ public class bindings {
        }
        static { LDKBalance.init(); }
        public static native LDKBalance LDKBalance_ref_from_ptr(long ptr);
-       // struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelMonitorZ_get_a(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_BlockHashChannelMonitorZ_get_a(long owner);
-       // struct LDKChannelMonitor C2Tuple_BlockHashChannelMonitorZ_get_b(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR owner);
-       public static native long C2Tuple_BlockHashChannelMonitorZ_get_b(long owner);
-       // struct LDKC2Tuple_BlockHashChannelMonitorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(long owner);
-       // struct LDKDecodeError CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR owner);
-       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(long owner);
+       // struct LDKChannelMonitor C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR owner);
+       public static native long C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(long owner);
+       // struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(long owner);
        public interface LDKType {
                 short type_id();
                 String debug_str();
@@ -1566,23 +1603,23 @@ public class bindings {
        public static native long CResult_COption_TypeZDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_COption_TypeZDecodeErrorZ_get_err(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_COption_TypeZDecodeErrorZ_get_err(long owner);
-       public static class LDKCOption_NetAddressZ {
-               private LDKCOption_NetAddressZ() {}
-               public final static class Some extends LDKCOption_NetAddressZ {
+       public static class LDKCOption_SocketAddressZ {
+               private LDKCOption_SocketAddressZ() {}
+               public final static class Some extends LDKCOption_SocketAddressZ {
                        public long some;
                        Some(long some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_NetAddressZ {
+               public final static class None extends LDKCOption_SocketAddressZ {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_NetAddressZ.init(); }
-       public static native LDKCOption_NetAddressZ LDKCOption_NetAddressZ_ref_from_ptr(long ptr);
-       // struct LDKPublicKey C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR owner);
-       public static native byte[] C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(long owner);
-       // struct LDKCOption_NetAddressZ C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR owner);
-       public static native long C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(long owner);
+       static { LDKCOption_SocketAddressZ.init(); }
+       public static native LDKCOption_SocketAddressZ LDKCOption_SocketAddressZ_ref_from_ptr(long ptr);
+       // struct LDKPublicKey C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(long owner);
+       // struct LDKCOption_SocketAddressZ C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR owner);
+       public static native long C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(long owner);
        // struct LDKCVec_u8Z CResult_CVec_u8ZPeerHandleErrorZ_get_ok(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR owner);
        public static native byte[] CResult_CVec_u8ZPeerHandleErrorZ_get_ok(long owner);
        // struct LDKPeerHandleError CResult_CVec_u8ZPeerHandleErrorZ_get_err(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR owner);
@@ -1613,36 +1650,39 @@ public class bindings {
        public static native int CResult_u32GraphSyncErrorZ_get_ok(long owner);
        // struct LDKGraphSyncError CResult_u32GraphSyncErrorZ_get_err(LDKCResult_u32GraphSyncErrorZ *NONNULL_PTR owner);
        public static native long CResult_u32GraphSyncErrorZ_get_err(long owner);
-       public static class LDKCOption_KeyPairZ {
-               private LDKCOption_KeyPairZ() {}
-               public final static class Some extends LDKCOption_KeyPairZ {
-                       public byte[] some;
-                       Some(byte[] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_KeyPairZ {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_KeyPairZ.init(); }
-       public static native LDKCOption_KeyPairZ LDKCOption_KeyPairZ_ref_from_ptr(long ptr);
-       // struct LDKCOption_KeyPairZ CResult_COption_KeyPairZNoneZ_get_ok(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR owner);
-       public static native long CResult_COption_KeyPairZNoneZ_get_ok(long owner);
-       // void CResult_COption_KeyPairZNoneZ_get_err(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR owner);
-       public static native void CResult_COption_KeyPairZNoneZ_get_err(long owner);
-       public static class LDKCOption_ScriptZ {
-               private LDKCOption_ScriptZ() {}
-               public final static class Some extends LDKCOption_ScriptZ {
+       // struct LDKCVec_u8Z CResult_CVec_u8ZIOErrorZ_get_ok(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR owner);
+       public static native byte[] CResult_CVec_u8ZIOErrorZ_get_ok(long owner);
+       // enum LDKIOError CResult_CVec_u8ZIOErrorZ_get_err(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR owner);
+       public static native IOError CResult_CVec_u8ZIOErrorZ_get_err(long owner);
+       // struct LDKCVec_StrZ CResult_CVec_StrZIOErrorZ_get_ok(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR owner);
+       public static native String[] CResult_CVec_StrZIOErrorZ_get_ok(long owner);
+       // enum LDKIOError CResult_CVec_StrZIOErrorZ_get_err(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR owner);
+       public static native IOError CResult_CVec_StrZIOErrorZ_get_err(long owner);
+       // struct LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR owner);
+       public static native long[] CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(long owner);
+       // enum LDKIOError CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR owner);
+       public static native IOError CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(long owner);
+       // struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(long owner);
+       // enum LDKIOError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR owner);
+       public static native IOError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(long owner);
+       public static class LDKCOption_SecretKeyZ {
+               private LDKCOption_SecretKeyZ() {}
+               public final static class Some extends LDKCOption_SecretKeyZ {
                        public byte[] some;
                        Some(byte[] some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_ScriptZ {
+               public final static class None extends LDKCOption_SecretKeyZ {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_ScriptZ.init(); }
-       public static native LDKCOption_ScriptZ LDKCOption_ScriptZ_ref_from_ptr(long ptr);
+       static { LDKCOption_SecretKeyZ.init(); }
+       public static native LDKCOption_SecretKeyZ LDKCOption_SecretKeyZ_ref_from_ptr(long ptr);
+       // struct LDKVerifiedInvoiceRequest CResult_VerifiedInvoiceRequestNoneZ_get_ok(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR owner);
+       public static native long CResult_VerifiedInvoiceRequestNoneZ_get_ok(long owner);
+       // void CResult_VerifiedInvoiceRequestNoneZ_get_err(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR owner);
+       public static native void CResult_VerifiedInvoiceRequestNoneZ_get_err(long owner);
        public static class LDKCOption_i64Z {
                private LDKCOption_i64Z() {}
                public final static class Some extends LDKCOption_i64Z {
@@ -1656,23 +1696,14 @@ public class bindings {
        }
        static { LDKCOption_i64Z.init(); }
        public static native LDKCOption_i64Z LDKCOption_i64Z_ref_from_ptr(long ptr);
-       public static class LDKCOption_TxidZ {
-               private LDKCOption_TxidZ() {}
-               public final static class Some extends LDKCOption_TxidZ {
-                       public byte[] some;
-                       Some(byte[] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_TxidZ {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_TxidZ.init(); }
-       public static native LDKCOption_TxidZ LDKCOption_TxidZ_ref_from_ptr(long ptr);
-       // struct LDKNetAddress CResult_NetAddressDecodeErrorZ_get_ok(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR owner);
-       public static native long CResult_NetAddressDecodeErrorZ_get_ok(long owner);
-       // struct LDKDecodeError CResult_NetAddressDecodeErrorZ_get_err(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR owner);
-       public static native long CResult_NetAddressDecodeErrorZ_get_err(long owner);
+       // struct LDKSocketAddress CResult_SocketAddressDecodeErrorZ_get_ok(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_SocketAddressDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_SocketAddressDecodeErrorZ_get_err(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_SocketAddressDecodeErrorZ_get_err(long owner);
+       // struct LDKSocketAddress CResult_SocketAddressSocketAddressParseErrorZ_get_ok(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR owner);
+       public static native long CResult_SocketAddressSocketAddressParseErrorZ_get_ok(long owner);
+       // enum LDKSocketAddressParseError CResult_SocketAddressSocketAddressParseErrorZ_get_err(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR owner);
+       public static native SocketAddressParseError CResult_SocketAddressSocketAddressParseErrorZ_get_err(long owner);
        // struct LDKAcceptChannel CResult_AcceptChannelDecodeErrorZ_get_ok(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_AcceptChannelDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_AcceptChannelDecodeErrorZ_get_err(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR owner);
@@ -1931,10 +1962,23 @@ public class bindings {
        public static native long CResult_TrustedCommitmentTransactionNoneZ_get_ok(long owner);
        // void CResult_TrustedCommitmentTransactionNoneZ_get_err(LDKCResult_TrustedCommitmentTransactionNoneZ *NONNULL_PTR owner);
        public static native void CResult_TrustedCommitmentTransactionNoneZ_get_err(long owner);
-       // struct LDKCVec_SignatureZ CResult_CVec_SignatureZNoneZ_get_ok(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR owner);
-       public static native byte[][] CResult_CVec_SignatureZNoneZ_get_ok(long owner);
-       // void CResult_CVec_SignatureZNoneZ_get_err(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR owner);
-       public static native void CResult_CVec_SignatureZNoneZ_get_err(long owner);
+       // struct LDKCVec_ECDSASignatureZ CResult_CVec_ECDSASignatureZNoneZ_get_ok(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR owner);
+       public static native byte[][] CResult_CVec_ECDSASignatureZNoneZ_get_ok(long owner);
+       // void CResult_CVec_ECDSASignatureZNoneZ_get_err(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR owner);
+       public static native void CResult_CVec_ECDSASignatureZNoneZ_get_err(long owner);
+       public static class LDKCOption_usizeZ {
+               private LDKCOption_usizeZ() {}
+               public final static class Some extends LDKCOption_usizeZ {
+                       public long some;
+                       Some(long some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_usizeZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_usizeZ.init(); }
+       public static native LDKCOption_usizeZ LDKCOption_usizeZ_ref_from_ptr(long ptr);
        // struct LDKShutdownScript CResult_ShutdownScriptDecodeErrorZ_get_ok(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_ShutdownScriptDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_ShutdownScriptDecodeErrorZ_get_err(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR owner);
@@ -1962,6 +2006,10 @@ public class bindings {
        public static native long CResult_PaymentPurposeDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_PaymentPurposeDecodeErrorZ_get_err(LDKCResult_PaymentPurposeDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_PaymentPurposeDecodeErrorZ_get_err(long owner);
+       // struct LDKClaimedHTLC CResult_ClaimedHTLCDecodeErrorZ_get_ok(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ClaimedHTLCDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_ClaimedHTLCDecodeErrorZ_get_err(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ClaimedHTLCDecodeErrorZ_get_err(long owner);
        public static class LDKPathFailure {
                private LDKPathFailure() {}
                public final static class InitialSend extends LDKPathFailure {
@@ -2024,6 +2072,9 @@ public class bindings {
                public final static class CounterpartyCoopClosedUnfundedChannel extends LDKClosureReason {
                        CounterpartyCoopClosedUnfundedChannel() { }
                }
+               public final static class FundingBatchClosure extends LDKClosureReason {
+                       FundingBatchClosure() { }
+               }
                static native void init();
        }
        static { LDKClosureReason.init(); }
@@ -2089,32 +2140,19 @@ public class bindings {
        public static native PaymentFailureReason CResult_PaymentFailureReasonDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_PaymentFailureReasonDecodeErrorZ_get_err(LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_PaymentFailureReasonDecodeErrorZ_get_err(long owner);
-       public static class LDKCOption_u128Z {
-               private LDKCOption_u128Z() {}
-               public final static class Some extends LDKCOption_u128Z {
-                       public byte[] some;
-                       Some(byte[] some) { this.some = some; }
-               }
-               public final static class None extends LDKCOption_u128Z {
-                       None() { }
-               }
-               static native void init();
-       }
-       static { LDKCOption_u128Z.init(); }
-       public static native LDKCOption_u128Z LDKCOption_u128Z_ref_from_ptr(long ptr);
-       public static class LDKCOption_PaymentIdZ {
-               private LDKCOption_PaymentIdZ() {}
-               public final static class Some extends LDKCOption_PaymentIdZ {
+       public static class LDKCOption_U128Z {
+               private LDKCOption_U128Z() {}
+               public final static class Some extends LDKCOption_U128Z {
                        public byte[] some;
                        Some(byte[] some) { this.some = some; }
                }
-               public final static class None extends LDKCOption_PaymentIdZ {
+               public final static class None extends LDKCOption_U128Z {
                        None() { }
                }
                static native void init();
        }
-       static { LDKCOption_PaymentIdZ.init(); }
-       public static native LDKCOption_PaymentIdZ LDKCOption_PaymentIdZ_ref_from_ptr(long ptr);
+       static { LDKCOption_U128Z.init(); }
+       public static native LDKCOption_U128Z LDKCOption_U128Z_ref_from_ptr(long ptr);
        public static class LDKCOption_PaymentFailureReasonZ {
                private LDKCOption_PaymentFailureReasonZ() {}
                public final static class Some extends LDKCOption_PaymentFailureReasonZ {
@@ -2167,17 +2205,19 @@ public class bindings {
                        public long amount_msat;
                        public long counterparty_skimmed_fee_msat;
                        public long purpose;
-                       public byte[] via_channel_id;
+                       public long via_channel_id;
                        public long via_user_channel_id;
                        public long claim_deadline;
-                       PaymentClaimable(byte[] receiver_node_id, byte[] payment_hash, long onion_fields, long amount_msat, long counterparty_skimmed_fee_msat, long purpose, byte[] via_channel_id, long via_user_channel_id, long claim_deadline) { this.receiver_node_id = receiver_node_id; this.payment_hash = payment_hash; this.onion_fields = onion_fields; this.amount_msat = amount_msat; this.counterparty_skimmed_fee_msat = counterparty_skimmed_fee_msat; this.purpose = purpose; this.via_channel_id = via_channel_id; this.via_user_channel_id = via_user_channel_id; this.claim_deadline = claim_deadline; }
+                       PaymentClaimable(byte[] receiver_node_id, byte[] payment_hash, long onion_fields, long amount_msat, long counterparty_skimmed_fee_msat, long purpose, long via_channel_id, long via_user_channel_id, long claim_deadline) { this.receiver_node_id = receiver_node_id; this.payment_hash = payment_hash; this.onion_fields = onion_fields; this.amount_msat = amount_msat; this.counterparty_skimmed_fee_msat = counterparty_skimmed_fee_msat; this.purpose = purpose; this.via_channel_id = via_channel_id; this.via_user_channel_id = via_user_channel_id; this.claim_deadline = claim_deadline; }
                }
                public final static class PaymentClaimed extends LDKEvent {
                        public byte[] receiver_node_id;
                        public byte[] payment_hash;
                        public long amount_msat;
                        public long purpose;
-                       PaymentClaimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, long purpose) { this.receiver_node_id = receiver_node_id; this.payment_hash = payment_hash; this.amount_msat = amount_msat; this.purpose = purpose; }
+                       public long[] htlcs;
+                       public long sender_intended_total_msat;
+                       PaymentClaimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, long purpose, long[] htlcs, long sender_intended_total_msat) { this.receiver_node_id = receiver_node_id; this.payment_hash = payment_hash; this.amount_msat = amount_msat; this.purpose = purpose; this.htlcs = htlcs; this.sender_intended_total_msat = sender_intended_total_msat; }
                }
                public final static class PaymentSent extends LDKEvent {
                        public long payment_id;
@@ -2234,23 +2274,24 @@ public class bindings {
                }
                public final static class SpendableOutputs extends LDKEvent {
                        public long[] outputs;
-                       SpendableOutputs(long[] outputs) { this.outputs = outputs; }
+                       public long channel_id;
+                       SpendableOutputs(long[] outputs, long channel_id) { this.outputs = outputs; this.channel_id = channel_id; }
                }
                public final static class PaymentForwarded extends LDKEvent {
-                       public byte[] prev_channel_id;
-                       public byte[] next_channel_id;
+                       public long prev_channel_id;
+                       public long next_channel_id;
                        public long fee_earned_msat;
                        public boolean claim_from_onchain_tx;
                        public long outbound_amount_forwarded_msat;
-                       PaymentForwarded(byte[] prev_channel_id, byte[] next_channel_id, long fee_earned_msat, boolean claim_from_onchain_tx, long outbound_amount_forwarded_msat) { this.prev_channel_id = prev_channel_id; this.next_channel_id = next_channel_id; this.fee_earned_msat = fee_earned_msat; this.claim_from_onchain_tx = claim_from_onchain_tx; this.outbound_amount_forwarded_msat = outbound_amount_forwarded_msat; }
+                       PaymentForwarded(long prev_channel_id, long next_channel_id, long fee_earned_msat, boolean claim_from_onchain_tx, long outbound_amount_forwarded_msat) { this.prev_channel_id = prev_channel_id; this.next_channel_id = next_channel_id; this.fee_earned_msat = fee_earned_msat; this.claim_from_onchain_tx = claim_from_onchain_tx; this.outbound_amount_forwarded_msat = outbound_amount_forwarded_msat; }
                }
                public final static class ChannelPending extends LDKEvent {
                        public byte[] channel_id;
                        public byte[] user_channel_id;
-                       public byte[] former_temporary_channel_id;
+                       public long former_temporary_channel_id;
                        public byte[] counterparty_node_id;
                        public long funding_txo;
-                       ChannelPending(byte[] channel_id, byte[] user_channel_id, byte[] former_temporary_channel_id, byte[] counterparty_node_id, long funding_txo) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.former_temporary_channel_id = former_temporary_channel_id; this.counterparty_node_id = counterparty_node_id; this.funding_txo = funding_txo; }
+                       ChannelPending(byte[] channel_id, byte[] user_channel_id, long former_temporary_channel_id, byte[] counterparty_node_id, long funding_txo) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.former_temporary_channel_id = former_temporary_channel_id; this.counterparty_node_id = counterparty_node_id; this.funding_txo = funding_txo; }
                }
                public final static class ChannelReady extends LDKEvent {
                        public byte[] channel_id;
@@ -2263,7 +2304,9 @@ public class bindings {
                        public byte[] channel_id;
                        public byte[] user_channel_id;
                        public long reason;
-                       ChannelClosed(byte[] channel_id, byte[] user_channel_id, long reason) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.reason = reason; }
+                       public byte[] counterparty_node_id;
+                       public long channel_capacity_sats;
+                       ChannelClosed(byte[] channel_id, byte[] user_channel_id, long reason, byte[] counterparty_node_id, long channel_capacity_sats) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.reason = reason; this.counterparty_node_id = counterparty_node_id; this.channel_capacity_sats = channel_capacity_sats; }
                }
                public final static class DiscardFunding extends LDKEvent {
                        public byte[] channel_id;
@@ -2308,10 +2351,6 @@ public class bindings {
        public static native long CResult_COption_EventZDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_COption_EventZDecodeErrorZ_get_err(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_COption_EventZDecodeErrorZ_get_err(long owner);
-       // struct LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR owner);
-       public static native long[] CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(long owner);
-       // enum LDKIOError CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR owner);
-       public static native IOError CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(long owner);
        public static class LDKBolt11ParseError {
                private LDKBolt11ParseError() {}
                public final static class Bech32Error extends LDKBolt11ParseError {
@@ -2409,10 +2448,10 @@ public class bindings {
        public static native byte[] C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_get_b(long owner);
        // struct LDKBolt11InvoiceSignature C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_get_c(LDKC3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ *NONNULL_PTR owner);
        public static native long C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_get_c(long owner);
-       // struct LDKPayeePubKey CResult_PayeePubKeyErrorZ_get_ok(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR owner);
-       public static native long CResult_PayeePubKeyErrorZ_get_ok(long owner);
-       // enum LDKSecp256k1Error CResult_PayeePubKeyErrorZ_get_err(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR owner);
-       public static native Secp256k1Error CResult_PayeePubKeyErrorZ_get_err(long owner);
+       // struct LDKPayeePubKey CResult_PayeePubKeySecp256k1ErrorZ_get_ok(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR owner);
+       public static native long CResult_PayeePubKeySecp256k1ErrorZ_get_ok(long owner);
+       // enum LDKSecp256k1Error CResult_PayeePubKeySecp256k1ErrorZ_get_err(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR owner);
+       public static native Secp256k1Error CResult_PayeePubKeySecp256k1ErrorZ_get_err(long owner);
        // struct LDKPositiveTimestamp CResult_PositiveTimestampCreationErrorZ_get_ok(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR owner);
        public static native long CResult_PositiveTimestampCreationErrorZ_get_ok(long owner);
        // enum LDKCreationError CResult_PositiveTimestampCreationErrorZ_get_err(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR owner);
@@ -2457,6 +2496,18 @@ public class bindings {
        public static native long CResult_UntrustedStringDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_UntrustedStringDecodeErrorZ_get_err(LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_UntrustedStringDecodeErrorZ_get_err(long owner);
+       // struct LDKReceiveTlvs CResult_ReceiveTlvsDecodeErrorZ_get_ok(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ReceiveTlvsDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_ReceiveTlvsDecodeErrorZ_get_err(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ReceiveTlvsDecodeErrorZ_get_err(long owner);
+       // struct LDKPaymentRelay CResult_PaymentRelayDecodeErrorZ_get_ok(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_PaymentRelayDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_PaymentRelayDecodeErrorZ_get_err(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_PaymentRelayDecodeErrorZ_get_err(long owner);
+       // struct LDKPaymentConstraints CResult_PaymentConstraintsDecodeErrorZ_get_ok(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_PaymentConstraintsDecodeErrorZ_get_ok(long owner);
+       // struct LDKDecodeError CResult_PaymentConstraintsDecodeErrorZ_get_err(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR owner);
+       public static native long CResult_PaymentConstraintsDecodeErrorZ_get_err(long owner);
        public static class LDKPaymentError {
                private LDKPaymentError() {}
                public final static class Invoice extends LDKPaymentError {
@@ -2471,22 +2522,44 @@ public class bindings {
        }
        static { LDKPaymentError.init(); }
        public static native LDKPaymentError LDKPaymentError_ref_from_ptr(long ptr);
-       // struct LDKThirtyTwoBytes CResult_PaymentIdPaymentErrorZ_get_ok(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR owner);
-       public static native byte[] CResult_PaymentIdPaymentErrorZ_get_ok(long owner);
-       // struct LDKPaymentError CResult_PaymentIdPaymentErrorZ_get_err(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR owner);
-       public static native long CResult_PaymentIdPaymentErrorZ_get_err(long owner);
+       // struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR owner);
+       public static native byte[] CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(long owner);
+       // struct LDKPaymentError CResult_ThirtyTwoBytesPaymentErrorZ_get_err(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR owner);
+       public static native long CResult_ThirtyTwoBytesPaymentErrorZ_get_err(long owner);
        // void CResult_NonePaymentErrorZ_get_ok(LDKCResult_NonePaymentErrorZ *NONNULL_PTR owner);
        public static native void CResult_NonePaymentErrorZ_get_ok(long owner);
        // struct LDKPaymentError CResult_NonePaymentErrorZ_get_err(LDKCResult_NonePaymentErrorZ *NONNULL_PTR owner);
        public static native long CResult_NonePaymentErrorZ_get_err(long owner);
-       // struct LDKStr CResult_StringErrorZ_get_ok(LDKCResult_StringErrorZ *NONNULL_PTR owner);
-       public static native String CResult_StringErrorZ_get_ok(long owner);
-       // enum LDKSecp256k1Error CResult_StringErrorZ_get_err(LDKCResult_StringErrorZ *NONNULL_PTR owner);
-       public static native Secp256k1Error CResult_StringErrorZ_get_err(long owner);
+       public static class LDKProbingError {
+               private LDKProbingError() {}
+               public final static class Invoice extends LDKProbingError {
+                       public java.lang.String invoice;
+                       Invoice(java.lang.String invoice) { this.invoice = invoice; }
+               }
+               public final static class Sending extends LDKProbingError {
+                       public long sending;
+                       Sending(long sending) { this.sending = sending; }
+               }
+               static native void init();
+       }
+       static { LDKProbingError.init(); }
+       public static native LDKProbingError LDKProbingError_ref_from_ptr(long ptr);
+       // struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR owner);
+       public static native long[] CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(long owner);
+       // struct LDKProbingError CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR owner);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(long owner);
+       // struct LDKStr CResult_StrSecp256k1ErrorZ_get_ok(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner);
+       public static native String CResult_StrSecp256k1ErrorZ_get_ok(long owner);
+       // enum LDKSecp256k1Error CResult_StrSecp256k1ErrorZ_get_err(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner);
+       public static native Secp256k1Error CResult_StrSecp256k1ErrorZ_get_err(long owner);
        // struct LDKOnionMessagePath CResult_OnionMessagePathNoneZ_get_ok(LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR owner);
        public static native long CResult_OnionMessagePathNoneZ_get_ok(long owner);
        // void CResult_OnionMessagePathNoneZ_get_err(LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR owner);
        public static native void CResult_OnionMessagePathNoneZ_get_err(long owner);
+       // struct LDKPublicKey C2Tuple_PublicKeyOnionMessageZ_get_a(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR owner);
+       public static native byte[] C2Tuple_PublicKeyOnionMessageZ_get_a(long owner);
+       // struct LDKOnionMessage C2Tuple_PublicKeyOnionMessageZ_get_b(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR owner);
+       public static native long C2Tuple_PublicKeyOnionMessageZ_get_b(long owner);
        public static class LDKSendError {
                private LDKSendError() {}
                public final static class Secp256k1 extends LDKSendError {
@@ -2518,6 +2591,10 @@ public class bindings {
        }
        static { LDKSendError.init(); }
        public static native LDKSendError LDKSendError_ref_from_ptr(long ptr);
+       // struct LDKC2Tuple_PublicKeyOnionMessageZ CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(long owner);
+       // struct LDKSendError CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(long owner);
        // void CResult_NoneSendErrorZ_get_ok(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner);
        public static native void CResult_NoneSendErrorZ_get_ok(long owner);
        // struct LDKSendError CResult_NoneSendErrorZ_get_err(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner);
@@ -2526,6 +2603,10 @@ public class bindings {
        public static native long CResult_BlindedPathNoneZ_get_ok(long owner);
        // void CResult_BlindedPathNoneZ_get_err(LDKCResult_BlindedPathNoneZ *NONNULL_PTR owner);
        public static native void CResult_BlindedPathNoneZ_get_err(long owner);
+       // struct LDKC2Tuple_BlindedPayInfoBlindedPathZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner);
+       public static native long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(long owner);
+       // void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner);
+       public static native void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(long owner);
        // struct LDKBlindedPath CResult_BlindedPathDecodeErrorZ_get_ok(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner);
        public static native long CResult_BlindedPathDecodeErrorZ_get_ok(long owner);
        // struct LDKDecodeError CResult_BlindedPathDecodeErrorZ_get_err(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner);
@@ -2568,18 +2649,42 @@ public class bindings {
        public static native long C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_a(long owner);
        // struct LDKCVec_MonitorUpdateIdZ C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(LDKC2Tuple_OutPointCVec_MonitorUpdateIdZZ *NONNULL_PTR owner);
        public static native long[] C2Tuple_OutPointCVec_MonitorUpdateIdZZ_get_b(long owner);
+       public interface LDKKVStore {
+                long read(String primary_namespace, String secondary_namespace, String key);
+                long write(String primary_namespace, String secondary_namespace, String key, byte[] buf);
+                long remove(String primary_namespace, String secondary_namespace, String key, boolean lazy);
+                long list(String primary_namespace, String secondary_namespace);
+       }
+       public static native long LDKKVStore_new(LDKKVStore impl);
+       // LDKCResult_CVec_u8ZIOErrorZ KVStore_read LDKKVStore *NONNULL_PTR this_arg, struct LDKStr primary_namespace, struct LDKStr secondary_namespace, struct LDKStr key
+       public static native long KVStore_read(long this_arg, String primary_namespace, String secondary_namespace, String key);
+       // LDKCResult_NoneIOErrorZ KVStore_write LDKKVStore *NONNULL_PTR this_arg, struct LDKStr primary_namespace, struct LDKStr secondary_namespace, struct LDKStr key, struct LDKu8slice buf
+       public static native long KVStore_write(long this_arg, String primary_namespace, String secondary_namespace, String key, byte[] buf);
+       // LDKCResult_NoneIOErrorZ KVStore_remove LDKKVStore *NONNULL_PTR this_arg, struct LDKStr primary_namespace, struct LDKStr secondary_namespace, struct LDKStr key, bool lazy
+       public static native long KVStore_remove(long this_arg, String primary_namespace, String secondary_namespace, String key, boolean lazy);
+       // LDKCResult_CVec_StrZIOErrorZ KVStore_list LDKKVStore *NONNULL_PTR this_arg, struct LDKStr primary_namespace, struct LDKStr secondary_namespace
+       public static native long KVStore_list(long this_arg, String primary_namespace, String secondary_namespace);
        public interface LDKPersister {
                 long persist_manager(long channel_manager);
                 long persist_graph(long network_graph);
                 long persist_scorer(long scorer);
        }
        public static native long LDKPersister_new(LDKPersister impl);
-       // LDKCResult_NoneErrorZ Persister_persist_manager LDKPersister *NONNULL_PTR this_arg, const struct LDKChannelManager *NONNULL_PTR channel_manager
+       // LDKCResult_NoneIOErrorZ Persister_persist_manager LDKPersister *NONNULL_PTR this_arg, const struct LDKChannelManager *NONNULL_PTR channel_manager
        public static native long Persister_persist_manager(long this_arg, long channel_manager);
-       // LDKCResult_NoneErrorZ Persister_persist_graph LDKPersister *NONNULL_PTR this_arg, const struct LDKNetworkGraph *NONNULL_PTR network_graph
+       // LDKCResult_NoneIOErrorZ Persister_persist_graph LDKPersister *NONNULL_PTR this_arg, const struct LDKNetworkGraph *NONNULL_PTR network_graph
        public static native long Persister_persist_graph(long this_arg, long network_graph);
-       // LDKCResult_NoneErrorZ Persister_persist_scorer LDKPersister *NONNULL_PTR this_arg, const struct LDKWriteableScore *NONNULL_PTR scorer
+       // LDKCResult_NoneIOErrorZ Persister_persist_scorer LDKPersister *NONNULL_PTR this_arg, const struct LDKWriteableScore *NONNULL_PTR scorer
        public static native long Persister_persist_scorer(long this_arg, long scorer);
+       public interface LDKPersist {
+                ChannelMonitorUpdateStatus persist_new_channel(long channel_id, long data, long update_id);
+                ChannelMonitorUpdateStatus update_persisted_channel(long channel_id, long update, long data, long update_id);
+       }
+       public static native long LDKPersist_new(LDKPersist impl);
+       // LDKChannelMonitorUpdateStatus Persist_persist_new_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_id, const struct LDKChannelMonitor *NONNULL_PTR data, struct LDKMonitorUpdateId update_id
+       public static native ChannelMonitorUpdateStatus Persist_persist_new_channel(long this_arg, long channel_id, long data, long update_id);
+       // LDKChannelMonitorUpdateStatus Persist_update_persisted_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_id, struct LDKChannelMonitorUpdate update, const struct LDKChannelMonitor *NONNULL_PTR data, struct LDKMonitorUpdateId update_id
+       public static native ChannelMonitorUpdateStatus Persist_update_persisted_channel(long this_arg, long channel_id, long update, long data, long update_id);
        public interface LDKFutureCallback {
                 void call();
        }
@@ -2611,17 +2716,8 @@ public class bindings {
        public static native void Confirm_transaction_unconfirmed(long this_arg, byte[] txid);
        // void Confirm_best_block_updated LDKConfirm *NONNULL_PTR this_arg, const uint8_t (*header)[80], uint32_t height
        public static native void Confirm_best_block_updated(long this_arg, byte[] header, int height);
-       // LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ Confirm_get_relevant_txids LDKConfirm *NONNULL_PTR this_arg
+       // LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ Confirm_get_relevant_txids LDKConfirm *NONNULL_PTR this_arg
        public static native long[] Confirm_get_relevant_txids(long this_arg);
-       public interface LDKPersist {
-                ChannelMonitorUpdateStatus persist_new_channel(long channel_id, long data, long update_id);
-                ChannelMonitorUpdateStatus update_persisted_channel(long channel_id, long update, long data, long update_id);
-       }
-       public static native long LDKPersist_new(LDKPersist impl);
-       // LDKChannelMonitorUpdateStatus Persist_persist_new_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_id, const struct LDKChannelMonitor *NONNULL_PTR data, struct LDKMonitorUpdateId update_id
-       public static native ChannelMonitorUpdateStatus Persist_persist_new_channel(long this_arg, long channel_id, long data, long update_id);
-       // LDKChannelMonitorUpdateStatus Persist_update_persisted_channel LDKPersist *NONNULL_PTR this_arg, struct LDKOutPoint channel_id, struct LDKChannelMonitorUpdate update, const struct LDKChannelMonitor *NONNULL_PTR data, struct LDKMonitorUpdateId update_id
-       public static native ChannelMonitorUpdateStatus Persist_update_persisted_channel(long this_arg, long channel_id, long update, long data, long update_id);
        public interface LDKEventHandler {
                 void handle_event(long event);
        }
@@ -2634,20 +2730,25 @@ public class bindings {
        public static native long LDKEventsProvider_new(LDKEventsProvider impl);
        // void EventsProvider_process_pending_events LDKEventsProvider *NONNULL_PTR this_arg, struct LDKEventHandler handler
        public static native void EventsProvider_process_pending_events(long this_arg, long handler);
-       public static class LDKRetry {
-               private LDKRetry() {}
-               public final static class Attempts extends LDKRetry {
-                       public long attempts;
-                       Attempts(long attempts) { this.attempts = attempts; }
+       public static class LDKFailureCode {
+               private LDKFailureCode() {}
+               public final static class TemporaryNodeFailure extends LDKFailureCode {
+                       TemporaryNodeFailure() { }
                }
-               public final static class Timeout extends LDKRetry {
-                       public long timeout;
-                       Timeout(long timeout) { this.timeout = timeout; }
+               public final static class RequiredNodeFeatureMissing extends LDKFailureCode {
+                       RequiredNodeFeatureMissing() { }
+               }
+               public final static class IncorrectOrUnknownPaymentDetails extends LDKFailureCode {
+                       IncorrectOrUnknownPaymentDetails() { }
+               }
+               public final static class InvalidOnionPayload extends LDKFailureCode {
+                       public long invalid_onion_payload;
+                       InvalidOnionPayload(long invalid_onion_payload) { this.invalid_onion_payload = invalid_onion_payload; }
                }
                static native void init();
        }
-       static { LDKRetry.init(); }
-       public static native LDKRetry LDKRetry_ref_from_ptr(long ptr);
+       static { LDKFailureCode.init(); }
+       public static native LDKFailureCode LDKFailureCode_ref_from_ptr(long ptr);
        public interface LDKMessageSendEventsProvider {
                 long[] get_and_clear_pending_msg_events();
        }
@@ -2758,7 +2859,7 @@ public class bindings {
        public static native long ChannelMessageHandler_provided_node_features(long this_arg);
        // LDKInitFeatures ChannelMessageHandler_provided_init_features LDKChannelMessageHandler *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id
        public static native long ChannelMessageHandler_provided_init_features(long this_arg, byte[] their_node_id);
-       // LDKCOption_CVec_ChainHashZZ ChannelMessageHandler_get_genesis_hashes LDKChannelMessageHandler *NONNULL_PTR this_arg
+       // LDKCOption_CVec_ThirtyTwoBytesZZ ChannelMessageHandler_get_genesis_hashes LDKChannelMessageHandler *NONNULL_PTR this_arg
        public static native long ChannelMessageHandler_get_genesis_hashes(long this_arg);
        public interface LDKRoutingMessageHandler {
                 long handle_node_announcement(long msg);
@@ -2925,6 +3026,14 @@ public class bindings {
        }
        static { LDKPayee.init(); }
        public static native LDKPayee LDKPayee_ref_from_ptr(long ptr);
+       public interface LDKScore {
+                byte[] write();
+       }
+       public static native long LDKScore_new(LDKScore impl, LDKScoreLookUp ScoreLookUp, LDKScoreUpdate ScoreUpdate);
+       public static native long LDKScore_get_ScoreLookUp(long arg);
+       public static native long LDKScore_get_ScoreUpdate(long arg);
+       // LDKCVec_u8Z Score_write LDKScore *NONNULL_PTR this_arg
+       public static native byte[] Score_write(long this_arg);
        public static class LDKDestination {
                private LDKDestination() {}
                public final static class Node extends LDKDestination {
@@ -2976,7 +3085,7 @@ public class bindings {
        public static native long LDKWalletSource_new(LDKWalletSource impl);
        // LDKCResult_CVec_UtxoZNoneZ WalletSource_list_confirmed_utxos LDKWalletSource *NONNULL_PTR this_arg
        public static native long WalletSource_list_confirmed_utxos(long this_arg);
-       // LDKCResult_ScriptNoneZ WalletSource_get_change_script LDKWalletSource *NONNULL_PTR this_arg
+       // LDKCResult_CVec_u8ZNoneZ WalletSource_get_change_script LDKWalletSource *NONNULL_PTR this_arg
        public static native long WalletSource_get_change_script(long this_arg);
        // LDKCResult_TransactionNoneZ WalletSource_sign_tx LDKWalletSource *NONNULL_PTR this_arg, struct LDKTransaction tx
        public static native long WalletSource_sign_tx(long this_arg, byte[] tx);
@@ -3050,18 +3159,6 @@ public class bindings {
        public static native long TxOut_clone(long orig);
        // void Str_free(struct LDKStr _res);
        public static native void Str_free(String _res);
-       // struct LDKCOption_DurationZ COption_DurationZ_some(uint64_t o);
-       public static native long COption_DurationZ_some(long o);
-       // struct LDKCOption_DurationZ COption_DurationZ_none(void);
-       public static native long COption_DurationZ_none();
-       // void COption_DurationZ_free(struct LDKCOption_DurationZ _res);
-       public static native void COption_DurationZ_free(long _res);
-       // uint64_t COption_DurationZ_clone_ptr(LDKCOption_DurationZ *NONNULL_PTR arg);
-       public static native long COption_DurationZ_clone_ptr(long arg);
-       // struct LDKCOption_DurationZ COption_DurationZ_clone(const struct LDKCOption_DurationZ *NONNULL_PTR orig);
-       public static native long COption_DurationZ_clone(long orig);
-       // void CVec_BlindedPathZ_free(struct LDKCVec_BlindedPathZ _res);
-       public static native void CVec_BlindedPathZ_free(long[] _res);
        // struct LDKCOption_u64Z COption_u64Z_some(uint64_t o);
        public static native long COption_u64Z_some(long o);
        // struct LDKCOption_u64Z COption_u64Z_none(void);
@@ -3072,6 +3169,8 @@ public class bindings {
        public static native long COption_u64Z_clone_ptr(long arg);
        // struct LDKCOption_u64Z COption_u64Z_clone(const struct LDKCOption_u64Z *NONNULL_PTR orig);
        public static native long COption_u64Z_clone(long orig);
+       // void CVec_BlindedPathZ_free(struct LDKCVec_BlindedPathZ _res);
+       public static native void CVec_BlindedPathZ_free(long[] _res);
        // struct LDKCResult_RefundBolt12ParseErrorZ CResult_RefundBolt12ParseErrorZ_ok(struct LDKRefund o);
        public static native long CResult_RefundBolt12ParseErrorZ_ok(long o);
        // struct LDKCResult_RefundBolt12ParseErrorZ CResult_RefundBolt12ParseErrorZ_err(struct LDKBolt12ParseError e);
@@ -3084,6 +3183,18 @@ public class bindings {
        public static native long CResult_RefundBolt12ParseErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RefundBolt12ParseErrorZ CResult_RefundBolt12ParseErrorZ_clone(const struct LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR orig);
        public static native long CResult_RefundBolt12ParseErrorZ_clone(long orig);
+       // struct LDKCResult_RetryDecodeErrorZ CResult_RetryDecodeErrorZ_ok(struct LDKRetry o);
+       public static native long CResult_RetryDecodeErrorZ_ok(long o);
+       // struct LDKCResult_RetryDecodeErrorZ CResult_RetryDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_RetryDecodeErrorZ_err(long e);
+       // bool CResult_RetryDecodeErrorZ_is_ok(const struct LDKCResult_RetryDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RetryDecodeErrorZ_is_ok(long o);
+       // void CResult_RetryDecodeErrorZ_free(struct LDKCResult_RetryDecodeErrorZ _res);
+       public static native void CResult_RetryDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RetryDecodeErrorZ_clone_ptr(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RetryDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_RetryDecodeErrorZ CResult_RetryDecodeErrorZ_clone(const struct LDKCResult_RetryDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_RetryDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_ok(void);
        public static native long CResult_NoneAPIErrorZ_ok();
        // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_err(struct LDKAPIError e);
@@ -3100,16 +3211,16 @@ public class bindings {
        public static native void CVec_CResult_NoneAPIErrorZZ_free(long[] _res);
        // void CVec_APIErrorZ_free(struct LDKCVec_APIErrorZ _res);
        public static native void CVec_APIErrorZ_free(long[] _res);
-       // struct LDKCOption_PaymentSecretZ COption_PaymentSecretZ_some(struct LDKThirtyTwoBytes o);
-       public static native long COption_PaymentSecretZ_some(byte[] o);
-       // struct LDKCOption_PaymentSecretZ COption_PaymentSecretZ_none(void);
-       public static native long COption_PaymentSecretZ_none();
-       // void COption_PaymentSecretZ_free(struct LDKCOption_PaymentSecretZ _res);
-       public static native void COption_PaymentSecretZ_free(long _res);
-       // uint64_t COption_PaymentSecretZ_clone_ptr(LDKCOption_PaymentSecretZ *NONNULL_PTR arg);
-       public static native long COption_PaymentSecretZ_clone_ptr(long arg);
-       // struct LDKCOption_PaymentSecretZ COption_PaymentSecretZ_clone(const struct LDKCOption_PaymentSecretZ *NONNULL_PTR orig);
-       public static native long COption_PaymentSecretZ_clone(long orig);
+       // struct LDKCOption_ThirtyTwoBytesZ COption_ThirtyTwoBytesZ_some(struct LDKThirtyTwoBytes o);
+       public static native long COption_ThirtyTwoBytesZ_some(byte[] o);
+       // struct LDKCOption_ThirtyTwoBytesZ COption_ThirtyTwoBytesZ_none(void);
+       public static native long COption_ThirtyTwoBytesZ_none();
+       // void COption_ThirtyTwoBytesZ_free(struct LDKCOption_ThirtyTwoBytesZ _res);
+       public static native void COption_ThirtyTwoBytesZ_free(long _res);
+       // uint64_t COption_ThirtyTwoBytesZ_clone_ptr(LDKCOption_ThirtyTwoBytesZ *NONNULL_PTR arg);
+       public static native long COption_ThirtyTwoBytesZ_clone_ptr(long arg);
+       // struct LDKCOption_ThirtyTwoBytesZ COption_ThirtyTwoBytesZ_clone(const struct LDKCOption_ThirtyTwoBytesZ *NONNULL_PTR orig);
+       public static native long COption_ThirtyTwoBytesZ_clone(long orig);
        // void CVec_u8Z_free(struct LDKCVec_u8Z _res);
        public static native void CVec_u8Z_free(byte[] _res);
        // struct LDKCOption_CVec_u8ZZ COption_CVec_u8ZZ_some(struct LDKCVec_u8Z o);
@@ -3134,6 +3245,52 @@ public class bindings {
        public static native long CResult_RecipientOnionFieldsDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RecipientOnionFieldsDecodeErrorZ CResult_RecipientOnionFieldsDecodeErrorZ_clone(const struct LDKCResult_RecipientOnionFieldsDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RecipientOnionFieldsDecodeErrorZ_clone(long orig);
+       // uint64_t C2Tuple_u64CVec_u8ZZ_clone_ptr(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_u64CVec_u8ZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_u64CVec_u8ZZ C2Tuple_u64CVec_u8ZZ_clone(const struct LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_u64CVec_u8ZZ_clone(long orig);
+       // struct LDKC2Tuple_u64CVec_u8ZZ C2Tuple_u64CVec_u8ZZ_new(uint64_t a, struct LDKCVec_u8Z b);
+       public static native long C2Tuple_u64CVec_u8ZZ_new(long a, byte[] b);
+       // void C2Tuple_u64CVec_u8ZZ_free(struct LDKC2Tuple_u64CVec_u8ZZ _res);
+       public static native void C2Tuple_u64CVec_u8ZZ_free(long _res);
+       // void CVec_C2Tuple_u64CVec_u8ZZZ_free(struct LDKCVec_C2Tuple_u64CVec_u8ZZZ _res);
+       public static native void CVec_C2Tuple_u64CVec_u8ZZZ_free(long[] _res);
+       // struct LDKCResult_RecipientOnionFieldsNoneZ CResult_RecipientOnionFieldsNoneZ_ok(struct LDKRecipientOnionFields o);
+       public static native long CResult_RecipientOnionFieldsNoneZ_ok(long o);
+       // struct LDKCResult_RecipientOnionFieldsNoneZ CResult_RecipientOnionFieldsNoneZ_err(void);
+       public static native long CResult_RecipientOnionFieldsNoneZ_err();
+       // bool CResult_RecipientOnionFieldsNoneZ_is_ok(const struct LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_RecipientOnionFieldsNoneZ_is_ok(long o);
+       // void CResult_RecipientOnionFieldsNoneZ_free(struct LDKCResult_RecipientOnionFieldsNoneZ _res);
+       public static native void CResult_RecipientOnionFieldsNoneZ_free(long _res);
+       // uint64_t CResult_RecipientOnionFieldsNoneZ_clone_ptr(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR arg);
+       public static native long CResult_RecipientOnionFieldsNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_RecipientOnionFieldsNoneZ CResult_RecipientOnionFieldsNoneZ_clone(const struct LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR orig);
+       public static native long CResult_RecipientOnionFieldsNoneZ_clone(long orig);
+       // void CVec_ThirtyTwoBytesZ_free(struct LDKCVec_ThirtyTwoBytesZ _res);
+       public static native void CVec_ThirtyTwoBytesZ_free(byte[][] _res);
+       // struct LDKCOption_CVec_ThirtyTwoBytesZZ COption_CVec_ThirtyTwoBytesZZ_some(struct LDKCVec_ThirtyTwoBytesZ o);
+       public static native long COption_CVec_ThirtyTwoBytesZZ_some(byte[][] o);
+       // struct LDKCOption_CVec_ThirtyTwoBytesZZ COption_CVec_ThirtyTwoBytesZZ_none(void);
+       public static native long COption_CVec_ThirtyTwoBytesZZ_none();
+       // void COption_CVec_ThirtyTwoBytesZZ_free(struct LDKCOption_CVec_ThirtyTwoBytesZZ _res);
+       public static native void COption_CVec_ThirtyTwoBytesZZ_free(long _res);
+       // uint64_t COption_CVec_ThirtyTwoBytesZZ_clone_ptr(LDKCOption_CVec_ThirtyTwoBytesZZ *NONNULL_PTR arg);
+       public static native long COption_CVec_ThirtyTwoBytesZZ_clone_ptr(long arg);
+       // struct LDKCOption_CVec_ThirtyTwoBytesZZ COption_CVec_ThirtyTwoBytesZZ_clone(const struct LDKCOption_CVec_ThirtyTwoBytesZZ *NONNULL_PTR orig);
+       public static native long COption_CVec_ThirtyTwoBytesZZ_clone(long orig);
+       // struct LDKCResult_ThirtyTwoBytesNoneZ CResult_ThirtyTwoBytesNoneZ_ok(struct LDKThirtyTwoBytes o);
+       public static native long CResult_ThirtyTwoBytesNoneZ_ok(byte[] o);
+       // struct LDKCResult_ThirtyTwoBytesNoneZ CResult_ThirtyTwoBytesNoneZ_err(void);
+       public static native long CResult_ThirtyTwoBytesNoneZ_err();
+       // bool CResult_ThirtyTwoBytesNoneZ_is_ok(const struct LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_ThirtyTwoBytesNoneZ_is_ok(long o);
+       // void CResult_ThirtyTwoBytesNoneZ_free(struct LDKCResult_ThirtyTwoBytesNoneZ _res);
+       public static native void CResult_ThirtyTwoBytesNoneZ_free(long _res);
+       // uint64_t CResult_ThirtyTwoBytesNoneZ_clone_ptr(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR arg);
+       public static native long CResult_ThirtyTwoBytesNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_ThirtyTwoBytesNoneZ CResult_ThirtyTwoBytesNoneZ_clone(const struct LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR orig);
+       public static native long CResult_ThirtyTwoBytesNoneZ_clone(long orig);
        // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_ok(struct LDKBlindedPayInfo o);
        public static native long CResult_BlindedPayInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_BlindedPayInfoDecodeErrorZ CResult_BlindedPayInfoDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3186,38 +3343,36 @@ public class bindings {
        public static native void CVec_SpendableOutputDescriptorZ_free(long[] _res);
        // void CVec_TxOutZ_free(struct LDKCVec_TxOutZ _res);
        public static native void CVec_TxOutZ_free(long[] _res);
-       // struct LDKCOption_PackedLockTimeZ COption_PackedLockTimeZ_some(uint32_t o);
-       public static native long COption_PackedLockTimeZ_some(int o);
-       // struct LDKCOption_PackedLockTimeZ COption_PackedLockTimeZ_none(void);
-       public static native long COption_PackedLockTimeZ_none();
-       // void COption_PackedLockTimeZ_free(struct LDKCOption_PackedLockTimeZ _res);
-       public static native void COption_PackedLockTimeZ_free(long _res);
-       // uint64_t COption_PackedLockTimeZ_clone_ptr(LDKCOption_PackedLockTimeZ *NONNULL_PTR arg);
-       public static native long COption_PackedLockTimeZ_clone_ptr(long arg);
-       // struct LDKCOption_PackedLockTimeZ COption_PackedLockTimeZ_clone(const struct LDKCOption_PackedLockTimeZ *NONNULL_PTR orig);
-       public static native long COption_PackedLockTimeZ_clone(long orig);
-       // uint64_t C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR arg);
-       public static native long C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_PartiallySignedTransactionusizeZ C2Tuple_PartiallySignedTransactionusizeZ_clone(const struct LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR orig);
-       public static native long C2Tuple_PartiallySignedTransactionusizeZ_clone(long orig);
-       // struct LDKC2Tuple_PartiallySignedTransactionusizeZ C2Tuple_PartiallySignedTransactionusizeZ_new(struct LDKCVec_u8Z a, uintptr_t b);
-       public static native long C2Tuple_PartiallySignedTransactionusizeZ_new(byte[] a, long b);
-       // void C2Tuple_PartiallySignedTransactionusizeZ_free(struct LDKC2Tuple_PartiallySignedTransactionusizeZ _res);
-       public static native void C2Tuple_PartiallySignedTransactionusizeZ_free(long _res);
-       // struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_ok(struct LDKC2Tuple_PartiallySignedTransactionusizeZ o);
-       public static native long CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_ok(long o);
-       // struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_err(void);
-       public static native long CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_err();
-       // bool CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok(const struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok(long o);
-       // void CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_free(struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ _res);
-       public static native void CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_free(long _res);
-       // uint64_t CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR arg);
-       public static native long CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(const struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR orig);
-       public static native long CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(long orig);
-       // void CVec_PaymentPreimageZ_free(struct LDKCVec_PaymentPreimageZ _res);
-       public static native void CVec_PaymentPreimageZ_free(byte[][] _res);
+       // struct LDKCOption_u32Z COption_u32Z_some(uint32_t o);
+       public static native long COption_u32Z_some(int o);
+       // struct LDKCOption_u32Z COption_u32Z_none(void);
+       public static native long COption_u32Z_none();
+       // void COption_u32Z_free(struct LDKCOption_u32Z _res);
+       public static native void COption_u32Z_free(long _res);
+       // uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg);
+       public static native long COption_u32Z_clone_ptr(long arg);
+       // struct LDKCOption_u32Z COption_u32Z_clone(const struct LDKCOption_u32Z *NONNULL_PTR orig);
+       public static native long COption_u32Z_clone(long orig);
+       // uint64_t C2Tuple_CVec_u8ZusizeZ_clone_ptr(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR arg);
+       public static native long C2Tuple_CVec_u8ZusizeZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_CVec_u8ZusizeZ C2Tuple_CVec_u8ZusizeZ_clone(const struct LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR orig);
+       public static native long C2Tuple_CVec_u8ZusizeZ_clone(long orig);
+       // struct LDKC2Tuple_CVec_u8ZusizeZ C2Tuple_CVec_u8ZusizeZ_new(struct LDKCVec_u8Z a, uintptr_t b);
+       public static native long C2Tuple_CVec_u8ZusizeZ_new(byte[] a, long b);
+       // void C2Tuple_CVec_u8ZusizeZ_free(struct LDKC2Tuple_CVec_u8ZusizeZ _res);
+       public static native void C2Tuple_CVec_u8ZusizeZ_free(long _res);
+       // struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ CResult_C2Tuple_CVec_u8ZusizeZNoneZ_ok(struct LDKC2Tuple_CVec_u8ZusizeZ o);
+       public static native long CResult_C2Tuple_CVec_u8ZusizeZNoneZ_ok(long o);
+       // struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ CResult_C2Tuple_CVec_u8ZusizeZNoneZ_err(void);
+       public static native long CResult_C2Tuple_CVec_u8ZusizeZNoneZ_err();
+       // bool CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok(const struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok(long o);
+       // void CResult_C2Tuple_CVec_u8ZusizeZNoneZ_free(struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ _res);
+       public static native void CResult_C2Tuple_CVec_u8ZusizeZNoneZ_free(long _res);
+       // uint64_t CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(const struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(long orig);
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_ok(void);
        public static native long CResult_NoneNoneZ_ok();
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_err(void);
@@ -3230,40 +3385,40 @@ public class bindings {
        public static native long CResult_NoneNoneZ_clone_ptr(long arg);
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_clone(const struct LDKCResult_NoneNoneZ *NONNULL_PTR orig);
        public static native long CResult_NoneNoneZ_clone(long orig);
-       // void CVec_SignatureZ_free(struct LDKCVec_SignatureZ _res);
-       public static native void CVec_SignatureZ_free(byte[][] _res);
-       // uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg);
-       public static native long C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_clone(const struct LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR orig);
-       public static native long C2Tuple_SignatureCVec_SignatureZZ_clone(long orig);
-       // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_new(struct LDKSignature a, struct LDKCVec_SignatureZ b);
-       public static native long C2Tuple_SignatureCVec_SignatureZZ_new(byte[] a, byte[][] b);
-       // void C2Tuple_SignatureCVec_SignatureZZ_free(struct LDKC2Tuple_SignatureCVec_SignatureZZ _res);
-       public static native void C2Tuple_SignatureCVec_SignatureZZ_free(long _res);
-       // struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(struct LDKC2Tuple_SignatureCVec_SignatureZZ o);
-       public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(long o);
-       // struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err(void);
-       public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err();
-       // bool CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(const struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(long o);
-       // void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res);
-       public static native void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(long _res);
-       // uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg);
-       public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(const struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR orig);
-       public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(long orig);
-       // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_ok(struct LDKSignature o);
-       public static native long CResult_SignatureNoneZ_ok(byte[] o);
-       // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_err(void);
-       public static native long CResult_SignatureNoneZ_err();
-       // bool CResult_SignatureNoneZ_is_ok(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_SignatureNoneZ_is_ok(long o);
-       // void CResult_SignatureNoneZ_free(struct LDKCResult_SignatureNoneZ _res);
-       public static native void CResult_SignatureNoneZ_free(long _res);
-       // uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg);
-       public static native long CResult_SignatureNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_clone(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR orig);
-       public static native long CResult_SignatureNoneZ_clone(long orig);
+       // void CVec_ECDSASignatureZ_free(struct LDKCVec_ECDSASignatureZ _res);
+       public static native void CVec_ECDSASignatureZ_free(byte[][] _res);
+       // uint64_t C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(const struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(long orig);
+       // struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_new(struct LDKECDSASignature a, struct LDKCVec_ECDSASignatureZ b);
+       public static native long C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_new(byte[] a, byte[][] b);
+       // void C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_free(struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ _res);
+       public static native void C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_free(long _res);
+       // struct LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_ok(struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ o);
+       public static native long CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_ok(long o);
+       // struct LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_err(void);
+       public static native long CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_err();
+       // bool CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok(const struct LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok(long o);
+       // void CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_free(struct LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ _res);
+       public static native void CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_free(long _res);
+       // uint64_t CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(const struct LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(long orig);
+       // struct LDKCResult_ECDSASignatureNoneZ CResult_ECDSASignatureNoneZ_ok(struct LDKECDSASignature o);
+       public static native long CResult_ECDSASignatureNoneZ_ok(byte[] o);
+       // struct LDKCResult_ECDSASignatureNoneZ CResult_ECDSASignatureNoneZ_err(void);
+       public static native long CResult_ECDSASignatureNoneZ_err();
+       // bool CResult_ECDSASignatureNoneZ_is_ok(const struct LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_ECDSASignatureNoneZ_is_ok(long o);
+       // void CResult_ECDSASignatureNoneZ_free(struct LDKCResult_ECDSASignatureNoneZ _res);
+       public static native void CResult_ECDSASignatureNoneZ_free(long _res);
+       // uint64_t CResult_ECDSASignatureNoneZ_clone_ptr(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR arg);
+       public static native long CResult_ECDSASignatureNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_ECDSASignatureNoneZ CResult_ECDSASignatureNoneZ_clone(const struct LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR orig);
+       public static native long CResult_ECDSASignatureNoneZ_clone(long orig);
        // struct LDKCResult_PublicKeyNoneZ CResult_PublicKeyNoneZ_ok(struct LDKPublicKey o);
        public static native long CResult_PublicKeyNoneZ_ok(byte[] o);
        // struct LDKCResult_PublicKeyNoneZ CResult_PublicKeyNoneZ_err(void);
@@ -3276,28 +3431,16 @@ public class bindings {
        public static native long CResult_PublicKeyNoneZ_clone_ptr(long arg);
        // struct LDKCResult_PublicKeyNoneZ CResult_PublicKeyNoneZ_clone(const struct LDKCResult_PublicKeyNoneZ *NONNULL_PTR orig);
        public static native long CResult_PublicKeyNoneZ_clone(long orig);
-       // struct LDKCOption_ScalarZ COption_ScalarZ_some(struct LDKBigEndianScalar o);
-       public static native long COption_ScalarZ_some(long o);
-       // struct LDKCOption_ScalarZ COption_ScalarZ_none(void);
-       public static native long COption_ScalarZ_none();
-       // void COption_ScalarZ_free(struct LDKCOption_ScalarZ _res);
-       public static native void COption_ScalarZ_free(long _res);
-       // uint64_t COption_ScalarZ_clone_ptr(LDKCOption_ScalarZ *NONNULL_PTR arg);
-       public static native long COption_ScalarZ_clone_ptr(long arg);
-       // struct LDKCOption_ScalarZ COption_ScalarZ_clone(const struct LDKCOption_ScalarZ *NONNULL_PTR orig);
-       public static native long COption_ScalarZ_clone(long orig);
-       // struct LDKCResult_SharedSecretNoneZ CResult_SharedSecretNoneZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult_SharedSecretNoneZ_ok(byte[] o);
-       // struct LDKCResult_SharedSecretNoneZ CResult_SharedSecretNoneZ_err(void);
-       public static native long CResult_SharedSecretNoneZ_err();
-       // bool CResult_SharedSecretNoneZ_is_ok(const struct LDKCResult_SharedSecretNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_SharedSecretNoneZ_is_ok(long o);
-       // void CResult_SharedSecretNoneZ_free(struct LDKCResult_SharedSecretNoneZ _res);
-       public static native void CResult_SharedSecretNoneZ_free(long _res);
-       // uint64_t CResult_SharedSecretNoneZ_clone_ptr(LDKCResult_SharedSecretNoneZ *NONNULL_PTR arg);
-       public static native long CResult_SharedSecretNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_SharedSecretNoneZ CResult_SharedSecretNoneZ_clone(const struct LDKCResult_SharedSecretNoneZ *NONNULL_PTR orig);
-       public static native long CResult_SharedSecretNoneZ_clone(long orig);
+       // struct LDKCOption_BigEndianScalarZ COption_BigEndianScalarZ_some(struct LDKBigEndianScalar o);
+       public static native long COption_BigEndianScalarZ_some(long o);
+       // struct LDKCOption_BigEndianScalarZ COption_BigEndianScalarZ_none(void);
+       public static native long COption_BigEndianScalarZ_none();
+       // void COption_BigEndianScalarZ_free(struct LDKCOption_BigEndianScalarZ _res);
+       public static native void COption_BigEndianScalarZ_free(long _res);
+       // uint64_t COption_BigEndianScalarZ_clone_ptr(LDKCOption_BigEndianScalarZ *NONNULL_PTR arg);
+       public static native long COption_BigEndianScalarZ_clone_ptr(long arg);
+       // struct LDKCOption_BigEndianScalarZ COption_BigEndianScalarZ_clone(const struct LDKCOption_BigEndianScalarZ *NONNULL_PTR orig);
+       public static native long COption_BigEndianScalarZ_clone(long orig);
        // void CVec_U5Z_free(struct LDKCVec_U5Z _res);
        public static native void CVec_U5Z_free(byte[] _res);
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_ok(struct LDKRecoverableSignature o);
@@ -3312,6 +3455,18 @@ public class bindings {
        public static native long CResult_RecoverableSignatureNoneZ_clone_ptr(long arg);
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_clone(const struct LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR orig);
        public static native long CResult_RecoverableSignatureNoneZ_clone(long orig);
+       // struct LDKCResult_SchnorrSignatureNoneZ CResult_SchnorrSignatureNoneZ_ok(struct LDKSchnorrSignature o);
+       public static native long CResult_SchnorrSignatureNoneZ_ok(byte[] o);
+       // struct LDKCResult_SchnorrSignatureNoneZ CResult_SchnorrSignatureNoneZ_err(void);
+       public static native long CResult_SchnorrSignatureNoneZ_err();
+       // bool CResult_SchnorrSignatureNoneZ_is_ok(const struct LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_SchnorrSignatureNoneZ_is_ok(long o);
+       // void CResult_SchnorrSignatureNoneZ_free(struct LDKCResult_SchnorrSignatureNoneZ _res);
+       public static native void CResult_SchnorrSignatureNoneZ_free(long _res);
+       // uint64_t CResult_SchnorrSignatureNoneZ_clone_ptr(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR arg);
+       public static native long CResult_SchnorrSignatureNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_SchnorrSignatureNoneZ CResult_SchnorrSignatureNoneZ_clone(const struct LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR orig);
+       public static native long CResult_SchnorrSignatureNoneZ_clone(long orig);
        // struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(struct LDKWriteableEcdsaChannelSigner o);
        public static native long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok(long o);
        // struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ CResult_WriteableEcdsaChannelSignerDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3324,18 +3479,18 @@ public class bindings {
        public static native long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(const struct LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_WriteableEcdsaChannelSignerDecodeErrorZ_clone(long orig);
-       // struct LDKCResult_ScriptNoneZ CResult_ScriptNoneZ_ok(struct LDKCVec_u8Z o);
-       public static native long CResult_ScriptNoneZ_ok(byte[] o);
-       // struct LDKCResult_ScriptNoneZ CResult_ScriptNoneZ_err(void);
-       public static native long CResult_ScriptNoneZ_err();
-       // bool CResult_ScriptNoneZ_is_ok(const struct LDKCResult_ScriptNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_ScriptNoneZ_is_ok(long o);
-       // void CResult_ScriptNoneZ_free(struct LDKCResult_ScriptNoneZ _res);
-       public static native void CResult_ScriptNoneZ_free(long _res);
-       // uint64_t CResult_ScriptNoneZ_clone_ptr(LDKCResult_ScriptNoneZ *NONNULL_PTR arg);
-       public static native long CResult_ScriptNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_ScriptNoneZ CResult_ScriptNoneZ_clone(const struct LDKCResult_ScriptNoneZ *NONNULL_PTR orig);
-       public static native long CResult_ScriptNoneZ_clone(long orig);
+       // struct LDKCResult_CVec_u8ZNoneZ CResult_CVec_u8ZNoneZ_ok(struct LDKCVec_u8Z o);
+       public static native long CResult_CVec_u8ZNoneZ_ok(byte[] o);
+       // struct LDKCResult_CVec_u8ZNoneZ CResult_CVec_u8ZNoneZ_err(void);
+       public static native long CResult_CVec_u8ZNoneZ_err();
+       // bool CResult_CVec_u8ZNoneZ_is_ok(const struct LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_u8ZNoneZ_is_ok(long o);
+       // void CResult_CVec_u8ZNoneZ_free(struct LDKCResult_CVec_u8ZNoneZ _res);
+       public static native void CResult_CVec_u8ZNoneZ_free(long _res);
+       // uint64_t CResult_CVec_u8ZNoneZ_clone_ptr(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_u8ZNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_u8ZNoneZ CResult_CVec_u8ZNoneZ_clone(const struct LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_u8ZNoneZ_clone(long orig);
        // struct LDKCResult_ShutdownScriptNoneZ CResult_ShutdownScriptNoneZ_ok(struct LDKShutdownScript o);
        public static native long CResult_ShutdownScriptNoneZ_ok(long o);
        // struct LDKCResult_ShutdownScriptNoneZ CResult_ShutdownScriptNoneZ_err(void);
@@ -3348,6 +3503,26 @@ public class bindings {
        public static native long CResult_ShutdownScriptNoneZ_clone_ptr(long arg);
        // struct LDKCResult_ShutdownScriptNoneZ CResult_ShutdownScriptNoneZ_clone(const struct LDKCResult_ShutdownScriptNoneZ *NONNULL_PTR orig);
        public static native long CResult_ShutdownScriptNoneZ_clone(long orig);
+       // struct LDKCOption_u16Z COption_u16Z_some(uint16_t o);
+       public static native long COption_u16Z_some(short o);
+       // struct LDKCOption_u16Z COption_u16Z_none(void);
+       public static native long COption_u16Z_none();
+       // void COption_u16Z_free(struct LDKCOption_u16Z _res);
+       public static native void COption_u16Z_free(long _res);
+       // uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg);
+       public static native long COption_u16Z_clone_ptr(long arg);
+       // struct LDKCOption_u16Z COption_u16Z_clone(const struct LDKCOption_u16Z *NONNULL_PTR orig);
+       public static native long COption_u16Z_clone(long orig);
+       // struct LDKCOption_boolZ COption_boolZ_some(bool o);
+       public static native long COption_boolZ_some(boolean o);
+       // struct LDKCOption_boolZ COption_boolZ_none(void);
+       public static native long COption_boolZ_none();
+       // void COption_boolZ_free(struct LDKCOption_boolZ _res);
+       public static native void COption_boolZ_free(long _res);
+       // uint64_t COption_boolZ_clone_ptr(LDKCOption_boolZ *NONNULL_PTR arg);
+       public static native long COption_boolZ_clone_ptr(long arg);
+       // struct LDKCOption_boolZ COption_boolZ_clone(const struct LDKCOption_boolZ *NONNULL_PTR orig);
+       public static native long COption_boolZ_clone(long orig);
        // void CVec_CVec_u8ZZ_free(struct LDKCVec_CVec_u8ZZ _res);
        public static native void CVec_CVec_u8ZZ_free(byte[][] _res);
        // struct LDKCResult_CVec_CVec_u8ZZNoneZ CResult_CVec_CVec_u8ZZNoneZ_ok(struct LDKCVec_CVec_u8ZZ o);
@@ -3374,18 +3549,6 @@ public class bindings {
        public static native long CResult_InMemorySignerDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_InMemorySignerDecodeErrorZ CResult_InMemorySignerDecodeErrorZ_clone(const struct LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_InMemorySignerDecodeErrorZ_clone(long orig);
-       // struct LDKCResult_PartiallySignedTransactionNoneZ CResult_PartiallySignedTransactionNoneZ_ok(struct LDKCVec_u8Z o);
-       public static native long CResult_PartiallySignedTransactionNoneZ_ok(byte[] o);
-       // struct LDKCResult_PartiallySignedTransactionNoneZ CResult_PartiallySignedTransactionNoneZ_err(void);
-       public static native long CResult_PartiallySignedTransactionNoneZ_err();
-       // bool CResult_PartiallySignedTransactionNoneZ_is_ok(const struct LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_PartiallySignedTransactionNoneZ_is_ok(long o);
-       // void CResult_PartiallySignedTransactionNoneZ_free(struct LDKCResult_PartiallySignedTransactionNoneZ _res);
-       public static native void CResult_PartiallySignedTransactionNoneZ_free(long _res);
-       // uint64_t CResult_PartiallySignedTransactionNoneZ_clone_ptr(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR arg);
-       public static native long CResult_PartiallySignedTransactionNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_PartiallySignedTransactionNoneZ CResult_PartiallySignedTransactionNoneZ_clone(const struct LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR orig);
-       public static native long CResult_PartiallySignedTransactionNoneZ_clone(long orig);
        // struct LDKCResult_TransactionNoneZ CResult_TransactionNoneZ_ok(struct LDKTransaction o);
        public static native long CResult_TransactionNoneZ_ok(byte[] o);
        // struct LDKCResult_TransactionNoneZ CResult_TransactionNoneZ_err(void);
@@ -3404,18 +3567,18 @@ public class bindings {
        public static native long COption_WriteableScoreZ_none();
        // void COption_WriteableScoreZ_free(struct LDKCOption_WriteableScoreZ _res);
        public static native void COption_WriteableScoreZ_free(long _res);
-       // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_ok(void);
-       public static native long CResult_NoneErrorZ_ok();
-       // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_err(enum LDKIOError e);
-       public static native long CResult_NoneErrorZ_err(IOError e);
-       // bool CResult_NoneErrorZ_is_ok(const struct LDKCResult_NoneErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_NoneErrorZ_is_ok(long o);
-       // void CResult_NoneErrorZ_free(struct LDKCResult_NoneErrorZ _res);
-       public static native void CResult_NoneErrorZ_free(long _res);
-       // uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg);
-       public static native long CResult_NoneErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_clone(const struct LDKCResult_NoneErrorZ *NONNULL_PTR orig);
-       public static native long CResult_NoneErrorZ_clone(long orig);
+       // struct LDKCResult_NoneIOErrorZ CResult_NoneIOErrorZ_ok(void);
+       public static native long CResult_NoneIOErrorZ_ok();
+       // struct LDKCResult_NoneIOErrorZ CResult_NoneIOErrorZ_err(enum LDKIOError e);
+       public static native long CResult_NoneIOErrorZ_err(IOError e);
+       // bool CResult_NoneIOErrorZ_is_ok(const struct LDKCResult_NoneIOErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneIOErrorZ_is_ok(long o);
+       // void CResult_NoneIOErrorZ_free(struct LDKCResult_NoneIOErrorZ _res);
+       public static native void CResult_NoneIOErrorZ_free(long _res);
+       // uint64_t CResult_NoneIOErrorZ_clone_ptr(LDKCResult_NoneIOErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NoneIOErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_NoneIOErrorZ CResult_NoneIOErrorZ_clone(const struct LDKCResult_NoneIOErrorZ *NONNULL_PTR orig);
+       public static native long CResult_NoneIOErrorZ_clone(long orig);
        // void CVec_ChannelDetailsZ_free(struct LDKCVec_ChannelDetailsZ _res);
        public static native void CVec_ChannelDetailsZ_free(long[] _res);
        // struct LDKCResult_RouteLightningErrorZ CResult_RouteLightningErrorZ_ok(struct LDKRoute o);
@@ -3470,16 +3633,6 @@ public class bindings {
        public static native long CResult_BlindedTailDecodeErrorZ_clone(long orig);
        // void CVec_RouteHopZ_free(struct LDKCVec_RouteHopZ _res);
        public static native void CVec_RouteHopZ_free(long[] _res);
-       // struct LDKCOption_u32Z COption_u32Z_some(uint32_t o);
-       public static native long COption_u32Z_some(int o);
-       // struct LDKCOption_u32Z COption_u32Z_none(void);
-       public static native long COption_u32Z_none();
-       // void COption_u32Z_free(struct LDKCOption_u32Z _res);
-       public static native void COption_u32Z_free(long _res);
-       // uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg);
-       public static native long COption_u32Z_clone_ptr(long arg);
-       // struct LDKCOption_u32Z COption_u32Z_clone(const struct LDKCOption_u32Z *NONNULL_PTR orig);
-       public static native long COption_u32Z_clone(long orig);
        // void CVec_PathZ_free(struct LDKCVec_PathZ _res);
        public static native void CVec_PathZ_free(long[] _res);
        // struct LDKCResult_RouteDecodeErrorZ CResult_RouteDecodeErrorZ_ok(struct LDKRoute o);
@@ -3592,32 +3745,30 @@ public class bindings {
        public static native long COption_C2Tuple_u64u64ZZ_clone_ptr(long arg);
        // struct LDKCOption_C2Tuple_u64u64ZZ COption_C2Tuple_u64u64ZZ_clone(const struct LDKCOption_C2Tuple_u64u64ZZ *NONNULL_PTR orig);
        public static native long COption_C2Tuple_u64u64ZZ_clone(long orig);
-       // uint64_t C2Tuple_Z_clone_ptr(LDKC2Tuple_Z *NONNULL_PTR arg);
-       public static native long C2Tuple_Z_clone_ptr(long arg);
-       // struct LDKC2Tuple_Z C2Tuple_Z_clone(const struct LDKC2Tuple_Z *NONNULL_PTR orig);
-       public static native long C2Tuple_Z_clone(long orig);
-       // struct LDKC2Tuple_Z C2Tuple_Z_new(struct LDKEightU16s a, struct LDKEightU16s b);
+       // struct LDKC2Tuple_Z C2Tuple_Z_new(struct LDKThirtyTwoU16s a, struct LDKThirtyTwoU16s b);
        public static native long C2Tuple_Z_new(short[] a, short[] b);
        // void C2Tuple_Z_free(struct LDKC2Tuple_Z _res);
        public static native void C2Tuple_Z_free(long _res);
-       // uint64_t C2Tuple__u168_u168Z_clone_ptr(LDKC2Tuple__u168_u168Z *NONNULL_PTR arg);
-       public static native long C2Tuple__u168_u168Z_clone_ptr(long arg);
-       // struct LDKC2Tuple__u168_u168Z C2Tuple__u168_u168Z_clone(const struct LDKC2Tuple__u168_u168Z *NONNULL_PTR orig);
-       public static native long C2Tuple__u168_u168Z_clone(long orig);
-       // struct LDKC2Tuple__u168_u168Z C2Tuple__u168_u168Z_new(struct LDKEightU16s a, struct LDKEightU16s b);
-       public static native long C2Tuple__u168_u168Z_new(short[] a, short[] b);
-       // void C2Tuple__u168_u168Z_free(struct LDKC2Tuple__u168_u168Z _res);
-       public static native void C2Tuple__u168_u168Z_free(long _res);
-       // struct LDKCOption_C2Tuple_EightU16sEightU16sZZ COption_C2Tuple_EightU16sEightU16sZZ_some(struct LDKC2Tuple__u168_u168Z o);
-       public static native long COption_C2Tuple_EightU16sEightU16sZZ_some(long o);
-       // struct LDKCOption_C2Tuple_EightU16sEightU16sZZ COption_C2Tuple_EightU16sEightU16sZZ_none(void);
-       public static native long COption_C2Tuple_EightU16sEightU16sZZ_none();
-       // void COption_C2Tuple_EightU16sEightU16sZZ_free(struct LDKCOption_C2Tuple_EightU16sEightU16sZZ _res);
-       public static native void COption_C2Tuple_EightU16sEightU16sZZ_free(long _res);
-       // uint64_t COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(LDKCOption_C2Tuple_EightU16sEightU16sZZ *NONNULL_PTR arg);
-       public static native long COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(long arg);
-       // struct LDKCOption_C2Tuple_EightU16sEightU16sZZ COption_C2Tuple_EightU16sEightU16sZZ_clone(const struct LDKCOption_C2Tuple_EightU16sEightU16sZZ *NONNULL_PTR orig);
-       public static native long COption_C2Tuple_EightU16sEightU16sZZ_clone(long orig);
+       // struct LDKC2Tuple__u1632_u1632Z C2Tuple__u1632_u1632Z_new(struct LDKThirtyTwoU16s a, struct LDKThirtyTwoU16s b);
+       public static native long C2Tuple__u1632_u1632Z_new(short[] a, short[] b);
+       // void C2Tuple__u1632_u1632Z_free(struct LDKC2Tuple__u1632_u1632Z _res);
+       public static native void C2Tuple__u1632_u1632Z_free(long _res);
+       // struct LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_some(struct LDKC2Tuple__u1632_u1632Z o);
+       public static native long COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_some(long o);
+       // struct LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_none(void);
+       public static native long COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_none();
+       // void COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_free(struct LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ _res);
+       public static native void COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_free(long _res);
+       // struct LDKCOption_f64Z COption_f64Z_some(double o);
+       public static native long COption_f64Z_some(double o);
+       // struct LDKCOption_f64Z COption_f64Z_none(void);
+       public static native long COption_f64Z_none();
+       // void COption_f64Z_free(struct LDKCOption_f64Z _res);
+       public static native void COption_f64Z_free(long _res);
+       // uint64_t COption_f64Z_clone_ptr(LDKCOption_f64Z *NONNULL_PTR arg);
+       public static native long COption_f64Z_clone_ptr(long arg);
+       // struct LDKCOption_f64Z COption_f64Z_clone(const struct LDKCOption_f64Z *NONNULL_PTR orig);
+       public static native long COption_f64Z_clone(long orig);
        // struct LDKCResult_ProbabilisticScorerDecodeErrorZ CResult_ProbabilisticScorerDecodeErrorZ_ok(struct LDKProbabilisticScorer o);
        public static native long CResult_ProbabilisticScorerDecodeErrorZ_ok(long o);
        // struct LDKCResult_ProbabilisticScorerDecodeErrorZ CResult_ProbabilisticScorerDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3636,26 +3787,28 @@ public class bindings {
        public static native void C2Tuple_usizeTransactionZ_free(long _res);
        // void CVec_C2Tuple_usizeTransactionZZ_free(struct LDKCVec_C2Tuple_usizeTransactionZZ _res);
        public static native void CVec_C2Tuple_usizeTransactionZZ_free(long[] _res);
-       // struct LDKCOption_BlockHashZ COption_BlockHashZ_some(struct LDKThirtyTwoBytes o);
-       public static native long COption_BlockHashZ_some(byte[] o);
-       // struct LDKCOption_BlockHashZ COption_BlockHashZ_none(void);
-       public static native long COption_BlockHashZ_none();
-       // void COption_BlockHashZ_free(struct LDKCOption_BlockHashZ _res);
-       public static native void COption_BlockHashZ_free(long _res);
-       // uint64_t COption_BlockHashZ_clone_ptr(LDKCOption_BlockHashZ *NONNULL_PTR arg);
-       public static native long COption_BlockHashZ_clone_ptr(long arg);
-       // struct LDKCOption_BlockHashZ COption_BlockHashZ_clone(const struct LDKCOption_BlockHashZ *NONNULL_PTR orig);
-       public static native long COption_BlockHashZ_clone(long orig);
-       // uint64_t C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR arg);
-       public static native long C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_TxidCOption_BlockHashZZ C2Tuple_TxidCOption_BlockHashZZ_clone(const struct LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR orig);
-       public static native long C2Tuple_TxidCOption_BlockHashZZ_clone(long orig);
-       // struct LDKC2Tuple_TxidCOption_BlockHashZZ C2Tuple_TxidCOption_BlockHashZZ_new(struct LDKThirtyTwoBytes a, struct LDKCOption_BlockHashZ b);
-       public static native long C2Tuple_TxidCOption_BlockHashZZ_new(byte[] a, long b);
-       // void C2Tuple_TxidCOption_BlockHashZZ_free(struct LDKC2Tuple_TxidCOption_BlockHashZZ _res);
-       public static native void C2Tuple_TxidCOption_BlockHashZZ_free(long _res);
-       // void CVec_C2Tuple_TxidCOption_BlockHashZZZ_free(struct LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ _res);
-       public static native void CVec_C2Tuple_TxidCOption_BlockHashZZZ_free(long[] _res);
+       // uint64_t C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(const struct LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(long orig);
+       // struct LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_new(struct LDKThirtyTwoBytes a, struct LDKCOption_ThirtyTwoBytesZ b);
+       public static native long C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_new(byte[] a, long b);
+       // void C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_free(struct LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_free(long _res);
+       // void CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ _res);
+       public static native void CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_free(long[] _res);
+       // struct LDKCResult_ChannelMonitorUpdateStatusNoneZ CResult_ChannelMonitorUpdateStatusNoneZ_ok(enum LDKChannelMonitorUpdateStatus o);
+       public static native long CResult_ChannelMonitorUpdateStatusNoneZ_ok(ChannelMonitorUpdateStatus o);
+       // struct LDKCResult_ChannelMonitorUpdateStatusNoneZ CResult_ChannelMonitorUpdateStatusNoneZ_err(void);
+       public static native long CResult_ChannelMonitorUpdateStatusNoneZ_err();
+       // bool CResult_ChannelMonitorUpdateStatusNoneZ_is_ok(const struct LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelMonitorUpdateStatusNoneZ_is_ok(long o);
+       // void CResult_ChannelMonitorUpdateStatusNoneZ_free(struct LDKCResult_ChannelMonitorUpdateStatusNoneZ _res);
+       public static native void CResult_ChannelMonitorUpdateStatusNoneZ_free(long _res);
+       // uint64_t CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_ChannelMonitorUpdateStatusNoneZ CResult_ChannelMonitorUpdateStatusNoneZ_clone(const struct LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR orig);
+       public static native long CResult_ChannelMonitorUpdateStatusNoneZ_clone(long orig);
        // void CVec_MonitorEventZ_free(struct LDKCVec_MonitorEventZ _res);
        public static native void CVec_MonitorEventZ_free(long[] _res);
        // uint64_t C3Tuple_OutPointCVec_MonitorEventZPublicKeyZ_clone_ptr(LDKC3Tuple_OutPointCVec_MonitorEventZPublicKeyZ *NONNULL_PTR arg);
@@ -3752,8 +3905,6 @@ public class bindings {
        public static native long CResult_ChannelTypeFeaturesDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelTypeFeaturesDecodeErrorZ CResult_ChannelTypeFeaturesDecodeErrorZ_clone(const struct LDKCResult_ChannelTypeFeaturesDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelTypeFeaturesDecodeErrorZ_clone(long orig);
-       // void CVec_ChainHashZ_free(struct LDKCVec_ChainHashZ _res);
-       public static native void CVec_ChainHashZ_free(byte[][] _res);
        // struct LDKCResult_OfferBolt12ParseErrorZ CResult_OfferBolt12ParseErrorZ_ok(struct LDKOffer o);
        public static native long CResult_OfferBolt12ParseErrorZ_ok(long o);
        // struct LDKCResult_OfferBolt12ParseErrorZ CResult_OfferBolt12ParseErrorZ_err(struct LDKBolt12ParseError e);
@@ -3766,18 +3917,18 @@ public class bindings {
        public static native long CResult_OfferBolt12ParseErrorZ_clone_ptr(long arg);
        // struct LDKCResult_OfferBolt12ParseErrorZ CResult_OfferBolt12ParseErrorZ_clone(const struct LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR orig);
        public static native long CResult_OfferBolt12ParseErrorZ_clone(long orig);
-       // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_ok(struct LDKPublicKey o);
-       public static native long CResult_PublicKeyErrorZ_ok(byte[] o);
-       // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_err(enum LDKSecp256k1Error e);
-       public static native long CResult_PublicKeyErrorZ_err(Secp256k1Error e);
-       // bool CResult_PublicKeyErrorZ_is_ok(const struct LDKCResult_PublicKeyErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_PublicKeyErrorZ_is_ok(long o);
-       // void CResult_PublicKeyErrorZ_free(struct LDKCResult_PublicKeyErrorZ _res);
-       public static native void CResult_PublicKeyErrorZ_free(long _res);
-       // uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg);
-       public static native long CResult_PublicKeyErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_clone(const struct LDKCResult_PublicKeyErrorZ *NONNULL_PTR orig);
-       public static native long CResult_PublicKeyErrorZ_clone(long orig);
+       // struct LDKCResult_PublicKeySecp256k1ErrorZ CResult_PublicKeySecp256k1ErrorZ_ok(struct LDKPublicKey o);
+       public static native long CResult_PublicKeySecp256k1ErrorZ_ok(byte[] o);
+       // struct LDKCResult_PublicKeySecp256k1ErrorZ CResult_PublicKeySecp256k1ErrorZ_err(enum LDKSecp256k1Error e);
+       public static native long CResult_PublicKeySecp256k1ErrorZ_err(Secp256k1Error e);
+       // bool CResult_PublicKeySecp256k1ErrorZ_is_ok(const struct LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PublicKeySecp256k1ErrorZ_is_ok(long o);
+       // void CResult_PublicKeySecp256k1ErrorZ_free(struct LDKCResult_PublicKeySecp256k1ErrorZ _res);
+       public static native void CResult_PublicKeySecp256k1ErrorZ_free(long _res);
+       // uint64_t CResult_PublicKeySecp256k1ErrorZ_clone_ptr(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PublicKeySecp256k1ErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_PublicKeySecp256k1ErrorZ CResult_PublicKeySecp256k1ErrorZ_clone(const struct LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR orig);
+       public static native long CResult_PublicKeySecp256k1ErrorZ_clone(long orig);
        // struct LDKCResult_NodeIdDecodeErrorZ CResult_NodeIdDecodeErrorZ_ok(struct LDKNodeId o);
        public static native long CResult_NodeIdDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeIdDecodeErrorZ CResult_NodeIdDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3898,8 +4049,8 @@ public class bindings {
        public static native long CResult_RoutingFeesDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RoutingFeesDecodeErrorZ CResult_RoutingFeesDecodeErrorZ_clone(const struct LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RoutingFeesDecodeErrorZ_clone(long orig);
-       // void CVec_NetAddressZ_free(struct LDKCVec_NetAddressZ _res);
-       public static native void CVec_NetAddressZ_free(long[] _res);
+       // void CVec_SocketAddressZ_free(struct LDKCVec_SocketAddressZ _res);
+       public static native void CVec_SocketAddressZ_free(long[] _res);
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_ok(struct LDKNodeAnnouncementInfo o);
        public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_err(struct LDKDecodeError e);
@@ -3944,26 +4095,40 @@ public class bindings {
        public static native boolean CResult_NetworkGraphDecodeErrorZ_is_ok(long o);
        // void CResult_NetworkGraphDecodeErrorZ_free(struct LDKCResult_NetworkGraphDecodeErrorZ _res);
        public static native void CResult_NetworkGraphDecodeErrorZ_free(long _res);
-       // struct LDKCOption_CVec_NetAddressZZ COption_CVec_NetAddressZZ_some(struct LDKCVec_NetAddressZ o);
-       public static native long COption_CVec_NetAddressZZ_some(long[] o);
-       // struct LDKCOption_CVec_NetAddressZZ COption_CVec_NetAddressZZ_none(void);
-       public static native long COption_CVec_NetAddressZZ_none();
-       // void COption_CVec_NetAddressZZ_free(struct LDKCOption_CVec_NetAddressZZ _res);
-       public static native void COption_CVec_NetAddressZZ_free(long _res);
-       // uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg);
-       public static native long COption_CVec_NetAddressZZ_clone_ptr(long arg);
-       // struct LDKCOption_CVec_NetAddressZZ COption_CVec_NetAddressZZ_clone(const struct LDKCOption_CVec_NetAddressZZ *NONNULL_PTR orig);
-       public static native long COption_CVec_NetAddressZZ_clone(long orig);
-       // struct LDKCOption_PaymentPreimageZ COption_PaymentPreimageZ_some(struct LDKThirtyTwoBytes o);
-       public static native long COption_PaymentPreimageZ_some(byte[] o);
-       // struct LDKCOption_PaymentPreimageZ COption_PaymentPreimageZ_none(void);
-       public static native long COption_PaymentPreimageZ_none();
-       // void COption_PaymentPreimageZ_free(struct LDKCOption_PaymentPreimageZ _res);
-       public static native void COption_PaymentPreimageZ_free(long _res);
-       // uint64_t COption_PaymentPreimageZ_clone_ptr(LDKCOption_PaymentPreimageZ *NONNULL_PTR arg);
-       public static native long COption_PaymentPreimageZ_clone_ptr(long arg);
-       // struct LDKCOption_PaymentPreimageZ COption_PaymentPreimageZ_clone(const struct LDKCOption_PaymentPreimageZ *NONNULL_PTR orig);
-       public static native long COption_PaymentPreimageZ_clone(long orig);
+       // struct LDKCOption_CVec_SocketAddressZZ COption_CVec_SocketAddressZZ_some(struct LDKCVec_SocketAddressZ o);
+       public static native long COption_CVec_SocketAddressZZ_some(long[] o);
+       // struct LDKCOption_CVec_SocketAddressZZ COption_CVec_SocketAddressZZ_none(void);
+       public static native long COption_CVec_SocketAddressZZ_none();
+       // void COption_CVec_SocketAddressZZ_free(struct LDKCOption_CVec_SocketAddressZZ _res);
+       public static native void COption_CVec_SocketAddressZZ_free(long _res);
+       // uint64_t COption_CVec_SocketAddressZZ_clone_ptr(LDKCOption_CVec_SocketAddressZZ *NONNULL_PTR arg);
+       public static native long COption_CVec_SocketAddressZZ_clone_ptr(long arg);
+       // struct LDKCOption_CVec_SocketAddressZZ COption_CVec_SocketAddressZZ_clone(const struct LDKCOption_CVec_SocketAddressZZ *NONNULL_PTR orig);
+       public static native long COption_CVec_SocketAddressZZ_clone(long orig);
+       // struct LDKCResult_ChannelDerivationParametersDecodeErrorZ CResult_ChannelDerivationParametersDecodeErrorZ_ok(struct LDKChannelDerivationParameters o);
+       public static native long CResult_ChannelDerivationParametersDecodeErrorZ_ok(long o);
+       // struct LDKCResult_ChannelDerivationParametersDecodeErrorZ CResult_ChannelDerivationParametersDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_ChannelDerivationParametersDecodeErrorZ_err(long e);
+       // bool CResult_ChannelDerivationParametersDecodeErrorZ_is_ok(const struct LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelDerivationParametersDecodeErrorZ_is_ok(long o);
+       // void CResult_ChannelDerivationParametersDecodeErrorZ_free(struct LDKCResult_ChannelDerivationParametersDecodeErrorZ _res);
+       public static native void CResult_ChannelDerivationParametersDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_ChannelDerivationParametersDecodeErrorZ CResult_ChannelDerivationParametersDecodeErrorZ_clone(const struct LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_ChannelDerivationParametersDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_HTLCDescriptorDecodeErrorZ CResult_HTLCDescriptorDecodeErrorZ_ok(struct LDKHTLCDescriptor o);
+       public static native long CResult_HTLCDescriptorDecodeErrorZ_ok(long o);
+       // struct LDKCResult_HTLCDescriptorDecodeErrorZ CResult_HTLCDescriptorDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_HTLCDescriptorDecodeErrorZ_err(long e);
+       // bool CResult_HTLCDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_HTLCDescriptorDecodeErrorZ_is_ok(long o);
+       // void CResult_HTLCDescriptorDecodeErrorZ_free(struct LDKCResult_HTLCDescriptorDecodeErrorZ _res);
+       public static native void CResult_HTLCDescriptorDecodeErrorZ_free(long _res);
+       // uint64_t CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_HTLCDescriptorDecodeErrorZ CResult_HTLCDescriptorDecodeErrorZ_clone(const struct LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_HTLCDescriptorDecodeErrorZ_clone(long orig);
        // void CVec_HTLCOutputInCommitmentZ_free(struct LDKCVec_HTLCOutputInCommitmentZ _res);
        public static native void CVec_HTLCOutputInCommitmentZ_free(long[] _res);
        // void CVec_HTLCDescriptorZ_free(struct LDKCVec_HTLCDescriptorZ _res);
@@ -4006,16 +4171,24 @@ public class bindings {
        public static native long CResult_CVec_UtxoZNoneZ_clone_ptr(long arg);
        // struct LDKCResult_CVec_UtxoZNoneZ CResult_CVec_UtxoZNoneZ_clone(const struct LDKCResult_CVec_UtxoZNoneZ *NONNULL_PTR orig);
        public static native long CResult_CVec_UtxoZNoneZ_clone(long orig);
-       // struct LDKCOption_u16Z COption_u16Z_some(uint16_t o);
-       public static native long COption_u16Z_some(short o);
-       // struct LDKCOption_u16Z COption_u16Z_none(void);
-       public static native long COption_u16Z_none();
-       // void COption_u16Z_free(struct LDKCOption_u16Z _res);
-       public static native void COption_u16Z_free(long _res);
-       // uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg);
-       public static native long COption_u16Z_clone_ptr(long arg);
-       // struct LDKCOption_u16Z COption_u16Z_clone(const struct LDKCOption_u16Z *NONNULL_PTR orig);
-       public static native long COption_u16Z_clone(long orig);
+       // uint64_t C2Tuple_u64u16Z_clone_ptr(LDKC2Tuple_u64u16Z *NONNULL_PTR arg);
+       public static native long C2Tuple_u64u16Z_clone_ptr(long arg);
+       // struct LDKC2Tuple_u64u16Z C2Tuple_u64u16Z_clone(const struct LDKC2Tuple_u64u16Z *NONNULL_PTR orig);
+       public static native long C2Tuple_u64u16Z_clone(long orig);
+       // struct LDKC2Tuple_u64u16Z C2Tuple_u64u16Z_new(uint64_t a, uint16_t b);
+       public static native long C2Tuple_u64u16Z_new(long a, short b);
+       // void C2Tuple_u64u16Z_free(struct LDKC2Tuple_u64u16Z _res);
+       public static native void C2Tuple_u64u16Z_free(long _res);
+       // struct LDKCOption_C2Tuple_u64u16ZZ COption_C2Tuple_u64u16ZZ_some(struct LDKC2Tuple_u64u16Z o);
+       public static native long COption_C2Tuple_u64u16ZZ_some(long o);
+       // struct LDKCOption_C2Tuple_u64u16ZZ COption_C2Tuple_u64u16ZZ_none(void);
+       public static native long COption_C2Tuple_u64u16ZZ_none();
+       // void COption_C2Tuple_u64u16ZZ_free(struct LDKCOption_C2Tuple_u64u16ZZ _res);
+       public static native void COption_C2Tuple_u64u16ZZ_free(long _res);
+       // uint64_t COption_C2Tuple_u64u16ZZ_clone_ptr(LDKCOption_C2Tuple_u64u16ZZ *NONNULL_PTR arg);
+       public static native long COption_C2Tuple_u64u16ZZ_clone_ptr(long arg);
+       // struct LDKCOption_C2Tuple_u64u16ZZ COption_C2Tuple_u64u16ZZ_clone(const struct LDKCOption_C2Tuple_u64u16ZZ *NONNULL_PTR orig);
+       public static native long COption_C2Tuple_u64u16ZZ_clone(long orig);
        // struct LDKCOption_ChannelShutdownStateZ COption_ChannelShutdownStateZ_some(enum LDKChannelShutdownState o);
        public static native long COption_ChannelShutdownStateZ_some(ChannelShutdownState o);
        // struct LDKCOption_ChannelShutdownStateZ COption_ChannelShutdownStateZ_none(void);
@@ -4026,28 +4199,18 @@ public class bindings {
        public static native long COption_ChannelShutdownStateZ_clone_ptr(long arg);
        // struct LDKCOption_ChannelShutdownStateZ COption_ChannelShutdownStateZ_clone(const struct LDKCOption_ChannelShutdownStateZ *NONNULL_PTR orig);
        public static native long COption_ChannelShutdownStateZ_clone(long orig);
-       // struct LDKCOption_PaymentHashZ COption_PaymentHashZ_some(struct LDKThirtyTwoBytes o);
-       public static native long COption_PaymentHashZ_some(byte[] o);
-       // struct LDKCOption_PaymentHashZ COption_PaymentHashZ_none(void);
-       public static native long COption_PaymentHashZ_none();
-       // void COption_PaymentHashZ_free(struct LDKCOption_PaymentHashZ _res);
-       public static native void COption_PaymentHashZ_free(long _res);
-       // uint64_t COption_PaymentHashZ_clone_ptr(LDKCOption_PaymentHashZ *NONNULL_PTR arg);
-       public static native long COption_PaymentHashZ_clone_ptr(long arg);
-       // struct LDKCOption_PaymentHashZ COption_PaymentHashZ_clone(const struct LDKCOption_PaymentHashZ *NONNULL_PTR orig);
-       public static native long COption_PaymentHashZ_clone(long orig);
-       // struct LDKCResult__u832APIErrorZ CResult__u832APIErrorZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult__u832APIErrorZ_ok(byte[] o);
-       // struct LDKCResult__u832APIErrorZ CResult__u832APIErrorZ_err(struct LDKAPIError e);
-       public static native long CResult__u832APIErrorZ_err(long e);
-       // bool CResult__u832APIErrorZ_is_ok(const struct LDKCResult__u832APIErrorZ *NONNULL_PTR o);
-       public static native boolean CResult__u832APIErrorZ_is_ok(long o);
-       // void CResult__u832APIErrorZ_free(struct LDKCResult__u832APIErrorZ _res);
-       public static native void CResult__u832APIErrorZ_free(long _res);
-       // uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg);
-       public static native long CResult__u832APIErrorZ_clone_ptr(long arg);
-       // struct LDKCResult__u832APIErrorZ CResult__u832APIErrorZ_clone(const struct LDKCResult__u832APIErrorZ *NONNULL_PTR orig);
-       public static native long CResult__u832APIErrorZ_clone(long orig);
+       // struct LDKCResult_ThirtyTwoBytesAPIErrorZ CResult_ThirtyTwoBytesAPIErrorZ_ok(struct LDKThirtyTwoBytes o);
+       public static native long CResult_ThirtyTwoBytesAPIErrorZ_ok(byte[] o);
+       // struct LDKCResult_ThirtyTwoBytesAPIErrorZ CResult_ThirtyTwoBytesAPIErrorZ_err(struct LDKAPIError e);
+       public static native long CResult_ThirtyTwoBytesAPIErrorZ_err(long e);
+       // bool CResult_ThirtyTwoBytesAPIErrorZ_is_ok(const struct LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ThirtyTwoBytesAPIErrorZ_is_ok(long o);
+       // void CResult_ThirtyTwoBytesAPIErrorZ_free(struct LDKCResult_ThirtyTwoBytesAPIErrorZ _res);
+       public static native void CResult_ThirtyTwoBytesAPIErrorZ_free(long _res);
+       // uint64_t CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_ThirtyTwoBytesAPIErrorZ CResult_ThirtyTwoBytesAPIErrorZ_clone(const struct LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR orig);
+       public static native long CResult_ThirtyTwoBytesAPIErrorZ_clone(long orig);
        // void CVec_RecentPaymentDetailsZ_free(struct LDKCVec_RecentPaymentDetailsZ _res);
        public static native void CVec_RecentPaymentDetailsZ_free(long[] _res);
        // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_ok(void);
@@ -4074,106 +4237,86 @@ public class bindings {
        public static native long CResult_NoneRetryableSendFailureZ_clone_ptr(long arg);
        // struct LDKCResult_NoneRetryableSendFailureZ CResult_NoneRetryableSendFailureZ_clone(const struct LDKCResult_NoneRetryableSendFailureZ *NONNULL_PTR orig);
        public static native long CResult_NoneRetryableSendFailureZ_clone(long orig);
-       // struct LDKCResult_PaymentHashPaymentSendFailureZ CResult_PaymentHashPaymentSendFailureZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult_PaymentHashPaymentSendFailureZ_ok(byte[] o);
-       // struct LDKCResult_PaymentHashPaymentSendFailureZ CResult_PaymentHashPaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
-       public static native long CResult_PaymentHashPaymentSendFailureZ_err(long e);
-       // bool CResult_PaymentHashPaymentSendFailureZ_is_ok(const struct LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR o);
-       public static native boolean CResult_PaymentHashPaymentSendFailureZ_is_ok(long o);
-       // void CResult_PaymentHashPaymentSendFailureZ_free(struct LDKCResult_PaymentHashPaymentSendFailureZ _res);
-       public static native void CResult_PaymentHashPaymentSendFailureZ_free(long _res);
-       // uint64_t CResult_PaymentHashPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR arg);
-       public static native long CResult_PaymentHashPaymentSendFailureZ_clone_ptr(long arg);
-       // struct LDKCResult_PaymentHashPaymentSendFailureZ CResult_PaymentHashPaymentSendFailureZ_clone(const struct LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR orig);
-       public static native long CResult_PaymentHashPaymentSendFailureZ_clone(long orig);
-       // struct LDKCResult_PaymentHashRetryableSendFailureZ CResult_PaymentHashRetryableSendFailureZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult_PaymentHashRetryableSendFailureZ_ok(byte[] o);
-       // struct LDKCResult_PaymentHashRetryableSendFailureZ CResult_PaymentHashRetryableSendFailureZ_err(enum LDKRetryableSendFailure e);
-       public static native long CResult_PaymentHashRetryableSendFailureZ_err(RetryableSendFailure e);
-       // bool CResult_PaymentHashRetryableSendFailureZ_is_ok(const struct LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR o);
-       public static native boolean CResult_PaymentHashRetryableSendFailureZ_is_ok(long o);
-       // void CResult_PaymentHashRetryableSendFailureZ_free(struct LDKCResult_PaymentHashRetryableSendFailureZ _res);
-       public static native void CResult_PaymentHashRetryableSendFailureZ_free(long _res);
-       // uint64_t CResult_PaymentHashRetryableSendFailureZ_clone_ptr(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR arg);
-       public static native long CResult_PaymentHashRetryableSendFailureZ_clone_ptr(long arg);
-       // struct LDKCResult_PaymentHashRetryableSendFailureZ CResult_PaymentHashRetryableSendFailureZ_clone(const struct LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR orig);
-       public static native long CResult_PaymentHashRetryableSendFailureZ_clone(long orig);
-       // uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg);
-       public static native long C2Tuple_PaymentHashPaymentIdZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_PaymentHashPaymentIdZ C2Tuple_PaymentHashPaymentIdZ_clone(const struct LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR orig);
-       public static native long C2Tuple_PaymentHashPaymentIdZ_clone(long orig);
-       // struct LDKC2Tuple_PaymentHashPaymentIdZ C2Tuple_PaymentHashPaymentIdZ_new(struct LDKThirtyTwoBytes a, struct LDKThirtyTwoBytes b);
-       public static native long C2Tuple_PaymentHashPaymentIdZ_new(byte[] a, byte[] b);
-       // void C2Tuple_PaymentHashPaymentIdZ_free(struct LDKC2Tuple_PaymentHashPaymentIdZ _res);
-       public static native void C2Tuple_PaymentHashPaymentIdZ_free(long _res);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok(struct LDKC2Tuple_PaymentHashPaymentIdZ o);
-       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok(long o);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
-       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(long e);
-       // bool CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(const struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR o);
-       public static native boolean CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(long o);
-       // void CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ _res);
-       public static native void CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(long _res);
-       // uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg);
-       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(long arg);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(const struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR orig);
-       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(long orig);
-       // void CVec_ThirtyTwoBytesZ_free(struct LDKCVec_ThirtyTwoBytesZ _res);
-       public static native void CVec_ThirtyTwoBytesZ_free(byte[][] _res);
-       // uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg);
-       public static native long C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_PaymentHashPaymentSecretZ C2Tuple_PaymentHashPaymentSecretZ_clone(const struct LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR orig);
-       public static native long C2Tuple_PaymentHashPaymentSecretZ_clone(long orig);
-       // struct LDKC2Tuple_PaymentHashPaymentSecretZ C2Tuple_PaymentHashPaymentSecretZ_new(struct LDKThirtyTwoBytes a, struct LDKThirtyTwoBytes b);
-       public static native long C2Tuple_PaymentHashPaymentSecretZ_new(byte[] a, byte[] b);
-       // void C2Tuple_PaymentHashPaymentSecretZ_free(struct LDKC2Tuple_PaymentHashPaymentSecretZ _res);
-       public static native void C2Tuple_PaymentHashPaymentSecretZ_free(long _res);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_ok(struct LDKC2Tuple_PaymentHashPaymentSecretZ o);
-       public static native long CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_ok(long o);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_err(void);
-       public static native long CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_err();
-       // bool CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(const struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(long o);
-       // void CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_free(struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ _res);
-       public static native void CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_free(long _res);
-       // uint64_t CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR arg);
-       public static native long CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(const struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR orig);
-       public static native long CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(long orig);
-       // struct LDKCResult_PaymentSecretNoneZ CResult_PaymentSecretNoneZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult_PaymentSecretNoneZ_ok(byte[] o);
-       // struct LDKCResult_PaymentSecretNoneZ CResult_PaymentSecretNoneZ_err(void);
-       public static native long CResult_PaymentSecretNoneZ_err();
-       // bool CResult_PaymentSecretNoneZ_is_ok(const struct LDKCResult_PaymentSecretNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_PaymentSecretNoneZ_is_ok(long o);
-       // void CResult_PaymentSecretNoneZ_free(struct LDKCResult_PaymentSecretNoneZ _res);
-       public static native void CResult_PaymentSecretNoneZ_free(long _res);
-       // uint64_t CResult_PaymentSecretNoneZ_clone_ptr(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR arg);
-       public static native long CResult_PaymentSecretNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_PaymentSecretNoneZ CResult_PaymentSecretNoneZ_clone(const struct LDKCResult_PaymentSecretNoneZ *NONNULL_PTR orig);
-       public static native long CResult_PaymentSecretNoneZ_clone(long orig);
-       // struct LDKCResult_PaymentPreimageAPIErrorZ CResult_PaymentPreimageAPIErrorZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult_PaymentPreimageAPIErrorZ_ok(byte[] o);
-       // struct LDKCResult_PaymentPreimageAPIErrorZ CResult_PaymentPreimageAPIErrorZ_err(struct LDKAPIError e);
-       public static native long CResult_PaymentPreimageAPIErrorZ_err(long e);
-       // bool CResult_PaymentPreimageAPIErrorZ_is_ok(const struct LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_PaymentPreimageAPIErrorZ_is_ok(long o);
-       // void CResult_PaymentPreimageAPIErrorZ_free(struct LDKCResult_PaymentPreimageAPIErrorZ _res);
-       public static native void CResult_PaymentPreimageAPIErrorZ_free(long _res);
-       // uint64_t CResult_PaymentPreimageAPIErrorZ_clone_ptr(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR arg);
-       public static native long CResult_PaymentPreimageAPIErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_PaymentPreimageAPIErrorZ CResult_PaymentPreimageAPIErrorZ_clone(const struct LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR orig);
-       public static native long CResult_PaymentPreimageAPIErrorZ_clone(long orig);
-       // struct LDKCOption_CVec_ChainHashZZ COption_CVec_ChainHashZZ_some(struct LDKCVec_ChainHashZ o);
-       public static native long COption_CVec_ChainHashZZ_some(byte[][] o);
-       // struct LDKCOption_CVec_ChainHashZZ COption_CVec_ChainHashZZ_none(void);
-       public static native long COption_CVec_ChainHashZZ_none();
-       // void COption_CVec_ChainHashZZ_free(struct LDKCOption_CVec_ChainHashZZ _res);
-       public static native void COption_CVec_ChainHashZZ_free(long _res);
-       // uint64_t COption_CVec_ChainHashZZ_clone_ptr(LDKCOption_CVec_ChainHashZZ *NONNULL_PTR arg);
-       public static native long COption_CVec_ChainHashZZ_clone_ptr(long arg);
-       // struct LDKCOption_CVec_ChainHashZZ COption_CVec_ChainHashZZ_clone(const struct LDKCOption_CVec_ChainHashZZ *NONNULL_PTR orig);
-       public static native long COption_CVec_ChainHashZZ_clone(long orig);
+       // struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ CResult_ThirtyTwoBytesPaymentSendFailureZ_ok(struct LDKThirtyTwoBytes o);
+       public static native long CResult_ThirtyTwoBytesPaymentSendFailureZ_ok(byte[] o);
+       // struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ CResult_ThirtyTwoBytesPaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
+       public static native long CResult_ThirtyTwoBytesPaymentSendFailureZ_err(long e);
+       // bool CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok(const struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok(long o);
+       // void CResult_ThirtyTwoBytesPaymentSendFailureZ_free(struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ _res);
+       public static native void CResult_ThirtyTwoBytesPaymentSendFailureZ_free(long _res);
+       // uint64_t CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(long arg);
+       // struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(const struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR orig);
+       public static native long CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(long orig);
+       // struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ CResult_ThirtyTwoBytesRetryableSendFailureZ_ok(struct LDKThirtyTwoBytes o);
+       public static native long CResult_ThirtyTwoBytesRetryableSendFailureZ_ok(byte[] o);
+       // struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ CResult_ThirtyTwoBytesRetryableSendFailureZ_err(enum LDKRetryableSendFailure e);
+       public static native long CResult_ThirtyTwoBytesRetryableSendFailureZ_err(RetryableSendFailure e);
+       // bool CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok(const struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok(long o);
+       // void CResult_ThirtyTwoBytesRetryableSendFailureZ_free(struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ _res);
+       public static native void CResult_ThirtyTwoBytesRetryableSendFailureZ_free(long _res);
+       // uint64_t CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(long arg);
+       // struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(const struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR orig);
+       public static native long CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(long orig);
+       // uint64_t C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(const struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(long orig);
+       // struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_new(struct LDKThirtyTwoBytes a, struct LDKThirtyTwoBytes b);
+       public static native long C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_new(byte[] a, byte[] b);
+       // void C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_free(struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_free(long _res);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_ok(struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_ok(long o);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_err(long e);
+       // bool CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok(const struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok(long o);
+       // void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_free(struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ _res);
+       public static native void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_free(long _res);
+       // uint64_t CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(const struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(long orig);
+       // void CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ _res);
+       public static native void CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_free(long[] _res);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_ok(struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ o);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_ok(long[] o);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_err(struct LDKProbeSendFailure e);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_err(long e);
+       // bool CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok(const struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok(long o);
+       // void CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_free(struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ _res);
+       public static native void CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_free(long _res);
+       // uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(const struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(long orig);
+       // uint64_t C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ThirtyTwoBytesPublicKeyZ C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(const struct LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(long orig);
+       // struct LDKC2Tuple_ThirtyTwoBytesPublicKeyZ C2Tuple_ThirtyTwoBytesPublicKeyZ_new(struct LDKThirtyTwoBytes a, struct LDKPublicKey b);
+       public static native long C2Tuple_ThirtyTwoBytesPublicKeyZ_new(byte[] a, byte[] b);
+       // void C2Tuple_ThirtyTwoBytesPublicKeyZ_free(struct LDKC2Tuple_ThirtyTwoBytesPublicKeyZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesPublicKeyZ_free(long _res);
+       // void CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ _res);
+       public static native void CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_free(long[] _res);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_ok(struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_ok(long o);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_err(void);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_err();
+       // bool CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok(const struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok(long o);
+       // void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_free(struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ _res);
+       public static native void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_free(long _res);
+       // uint64_t CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(const struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(long orig);
        // struct LDKCResult_CounterpartyForwardingInfoDecodeErrorZ CResult_CounterpartyForwardingInfoDecodeErrorZ_ok(struct LDKCounterpartyForwardingInfo o);
        public static native long CResult_CounterpartyForwardingInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_CounterpartyForwardingInfoDecodeErrorZ CResult_CounterpartyForwardingInfoDecodeErrorZ_err(struct LDKDecodeError e);
@@ -4236,18 +4379,18 @@ public class bindings {
        public static native long CResult_ChannelShutdownStateDecodeErrorZ_clone(long orig);
        // void CVec_ChannelMonitorZ_free(struct LDKCVec_ChannelMonitorZ _res);
        public static native void CVec_ChannelMonitorZ_free(long[] _res);
-       // struct LDKC2Tuple_BlockHashChannelManagerZ C2Tuple_BlockHashChannelManagerZ_new(struct LDKThirtyTwoBytes a, struct LDKChannelManager b);
-       public static native long C2Tuple_BlockHashChannelManagerZ_new(byte[] a, long b);
-       // void C2Tuple_BlockHashChannelManagerZ_free(struct LDKC2Tuple_BlockHashChannelManagerZ _res);
-       public static native void C2Tuple_BlockHashChannelManagerZ_free(long _res);
-       // struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(struct LDKC2Tuple_BlockHashChannelManagerZ o);
-       public static native long CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(long o);
-       // struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(struct LDKDecodeError e);
-       public static native long CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(long e);
-       // bool CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(long o);
-       // void CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res);
-       public static native void CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(long _res);
+       // struct LDKC2Tuple_ThirtyTwoBytesChannelManagerZ C2Tuple_ThirtyTwoBytesChannelManagerZ_new(struct LDKThirtyTwoBytes a, struct LDKChannelManager b);
+       public static native long C2Tuple_ThirtyTwoBytesChannelManagerZ_new(byte[] a, long b);
+       // void C2Tuple_ThirtyTwoBytesChannelManagerZ_free(struct LDKC2Tuple_ThirtyTwoBytesChannelManagerZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesChannelManagerZ_free(long _res);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_ok(struct LDKC2Tuple_ThirtyTwoBytesChannelManagerZ o);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_ok(long o);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_err(long e);
+       // bool CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok(long o);
+       // void CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_free(struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ _res);
+       public static native void CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_free(long _res);
        // struct LDKCResult_MaxDustHTLCExposureDecodeErrorZ CResult_MaxDustHTLCExposureDecodeErrorZ_ok(struct LDKMaxDustHTLCExposure o);
        public static native long CResult_MaxDustHTLCExposureDecodeErrorZ_ok(long o);
        // struct LDKCResult_MaxDustHTLCExposureDecodeErrorZ CResult_MaxDustHTLCExposureDecodeErrorZ_err(struct LDKDecodeError e);
@@ -4350,34 +4493,36 @@ public class bindings {
        public static native long CResult_HTLCUpdateDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_HTLCUpdateDecodeErrorZ CResult_HTLCUpdateDecodeErrorZ_clone(const struct LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_HTLCUpdateDecodeErrorZ_clone(long orig);
-       // uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg);
-       public static native long C2Tuple_OutPointScriptZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_clone(const struct LDKC2Tuple_OutPointScriptZ *NONNULL_PTR orig);
-       public static native long C2Tuple_OutPointScriptZ_clone(long orig);
-       // struct LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_new(struct LDKOutPoint a, struct LDKCVec_u8Z b);
-       public static native long C2Tuple_OutPointScriptZ_new(long a, byte[] b);
-       // void C2Tuple_OutPointScriptZ_free(struct LDKC2Tuple_OutPointScriptZ _res);
-       public static native void C2Tuple_OutPointScriptZ_free(long _res);
-       // uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg);
-       public static native long C2Tuple_u32ScriptZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_u32ScriptZ C2Tuple_u32ScriptZ_clone(const struct LDKC2Tuple_u32ScriptZ *NONNULL_PTR orig);
-       public static native long C2Tuple_u32ScriptZ_clone(long orig);
-       // struct LDKC2Tuple_u32ScriptZ C2Tuple_u32ScriptZ_new(uint32_t a, struct LDKCVec_u8Z b);
-       public static native long C2Tuple_u32ScriptZ_new(int a, byte[] b);
-       // void C2Tuple_u32ScriptZ_free(struct LDKC2Tuple_u32ScriptZ _res);
-       public static native void C2Tuple_u32ScriptZ_free(long _res);
-       // void CVec_C2Tuple_u32ScriptZZ_free(struct LDKCVec_C2Tuple_u32ScriptZZ _res);
-       public static native void CVec_C2Tuple_u32ScriptZZ_free(long[] _res);
-       // uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg);
-       public static native long C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(const struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR orig);
-       public static native long C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(long orig);
-       // struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(struct LDKThirtyTwoBytes a, struct LDKCVec_C2Tuple_u32ScriptZZ b);
-       public static native long C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(byte[] a, long[] b);
-       // void C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_free(struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ _res);
-       public static native void C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_free(long _res);
-       // void CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_free(struct LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ _res);
-       public static native void CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_free(long[] _res);
+       // uint64_t C2Tuple_OutPointCVec_u8ZZ_clone_ptr(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_OutPointCVec_u8ZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_OutPointCVec_u8ZZ C2Tuple_OutPointCVec_u8ZZ_clone(const struct LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_OutPointCVec_u8ZZ_clone(long orig);
+       // struct LDKC2Tuple_OutPointCVec_u8ZZ C2Tuple_OutPointCVec_u8ZZ_new(struct LDKOutPoint a, struct LDKCVec_u8Z b);
+       public static native long C2Tuple_OutPointCVec_u8ZZ_new(long a, byte[] b);
+       // void C2Tuple_OutPointCVec_u8ZZ_free(struct LDKC2Tuple_OutPointCVec_u8ZZ _res);
+       public static native void C2Tuple_OutPointCVec_u8ZZ_free(long _res);
+       // uint64_t C2Tuple_u32CVec_u8ZZ_clone_ptr(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_u32CVec_u8ZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_u32CVec_u8ZZ C2Tuple_u32CVec_u8ZZ_clone(const struct LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_u32CVec_u8ZZ_clone(long orig);
+       // struct LDKC2Tuple_u32CVec_u8ZZ C2Tuple_u32CVec_u8ZZ_new(uint32_t a, struct LDKCVec_u8Z b);
+       public static native long C2Tuple_u32CVec_u8ZZ_new(int a, byte[] b);
+       // void C2Tuple_u32CVec_u8ZZ_free(struct LDKC2Tuple_u32CVec_u8ZZ _res);
+       public static native void C2Tuple_u32CVec_u8ZZ_free(long _res);
+       // void CVec_C2Tuple_u32CVec_u8ZZZ_free(struct LDKCVec_C2Tuple_u32CVec_u8ZZZ _res);
+       public static native void CVec_C2Tuple_u32CVec_u8ZZZ_free(long[] _res);
+       // uint64_t C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(const struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(long orig);
+       // struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_new(struct LDKThirtyTwoBytes a, struct LDKCVec_C2Tuple_u32CVec_u8ZZZ b);
+       public static native long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_new(byte[] a, long[] b);
+       // void C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free(struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free(long _res);
+       // void CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ _res);
+       public static native void CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(long[] _res);
+       // void CVec_CommitmentTransactionZ_free(struct LDKCVec_CommitmentTransactionZ _res);
+       public static native void CVec_CommitmentTransactionZ_free(long[] _res);
        // void CVec_TransactionZ_free(struct LDKCVec_TransactionZ _res);
        public static native void CVec_TransactionZ_free(byte[][] _res);
        // uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg);
@@ -4390,38 +4535,38 @@ public class bindings {
        public static native void C2Tuple_u32TxOutZ_free(long _res);
        // void CVec_C2Tuple_u32TxOutZZ_free(struct LDKCVec_C2Tuple_u32TxOutZZ _res);
        public static native void CVec_C2Tuple_u32TxOutZZ_free(long[] _res);
-       // uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg);
-       public static native long C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(const struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR orig);
-       public static native long C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(long orig);
-       // struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(struct LDKThirtyTwoBytes a, struct LDKCVec_C2Tuple_u32TxOutZZ b);
-       public static native long C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(byte[] a, long[] b);
-       // void C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res);
-       public static native void C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(long _res);
-       // void CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free(struct LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ _res);
-       public static native void CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free(long[] _res);
+       // uint64_t C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(const struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(long orig);
+       // struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_new(struct LDKThirtyTwoBytes a, struct LDKCVec_C2Tuple_u32TxOutZZ b);
+       public static native long C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_new(byte[] a, long[] b);
+       // void C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_free(struct LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_free(long _res);
+       // void CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ _res);
+       public static native void CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free(long[] _res);
        // void CVec_BalanceZ_free(struct LDKCVec_BalanceZ _res);
        public static native void CVec_BalanceZ_free(long[] _res);
-       // uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg);
-       public static native long C2Tuple_BlockHashChannelMonitorZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_BlockHashChannelMonitorZ C2Tuple_BlockHashChannelMonitorZ_clone(const struct LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR orig);
-       public static native long C2Tuple_BlockHashChannelMonitorZ_clone(long orig);
-       // struct LDKC2Tuple_BlockHashChannelMonitorZ C2Tuple_BlockHashChannelMonitorZ_new(struct LDKThirtyTwoBytes a, struct LDKChannelMonitor b);
-       public static native long C2Tuple_BlockHashChannelMonitorZ_new(byte[] a, long b);
-       // void C2Tuple_BlockHashChannelMonitorZ_free(struct LDKC2Tuple_BlockHashChannelMonitorZ _res);
-       public static native void C2Tuple_BlockHashChannelMonitorZ_free(long _res);
-       // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(struct LDKC2Tuple_BlockHashChannelMonitorZ o);
-       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(long o);
-       // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(struct LDKDecodeError e);
-       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(long e);
-       // bool CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(long o);
-       // void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res);
-       public static native void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(long _res);
-       // uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg);
-       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(const struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR orig);
-       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(long orig);
+       // uint64_t C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR arg);
+       public static native long C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(const struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR orig);
+       public static native long C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(long orig);
+       // struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ C2Tuple_ThirtyTwoBytesChannelMonitorZ_new(struct LDKThirtyTwoBytes a, struct LDKChannelMonitor b);
+       public static native long C2Tuple_ThirtyTwoBytesChannelMonitorZ_new(byte[] a, long b);
+       // void C2Tuple_ThirtyTwoBytesChannelMonitorZ_free(struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ _res);
+       public static native void C2Tuple_ThirtyTwoBytesChannelMonitorZ_free(long _res);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_ok(struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_ok(long o);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_err(long e);
+       // bool CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok(long o);
+       // void CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_free(struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ _res);
+       public static native void CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(const struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(long orig);
        // uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg);
        public static native long C2Tuple_PublicKeyTypeZ_clone_ptr(long arg);
        // struct LDKC2Tuple_PublicKeyTypeZ C2Tuple_PublicKeyTypeZ_clone(const struct LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR orig);
@@ -4486,26 +4631,26 @@ public class bindings {
        public static native long CResult_COption_TypeZDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_COption_TypeZDecodeErrorZ CResult_COption_TypeZDecodeErrorZ_clone(const struct LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_COption_TypeZDecodeErrorZ_clone(long orig);
-       // struct LDKCOption_NetAddressZ COption_NetAddressZ_some(struct LDKNetAddress o);
-       public static native long COption_NetAddressZ_some(long o);
-       // struct LDKCOption_NetAddressZ COption_NetAddressZ_none(void);
-       public static native long COption_NetAddressZ_none();
-       // void COption_NetAddressZ_free(struct LDKCOption_NetAddressZ _res);
-       public static native void COption_NetAddressZ_free(long _res);
-       // uint64_t COption_NetAddressZ_clone_ptr(LDKCOption_NetAddressZ *NONNULL_PTR arg);
-       public static native long COption_NetAddressZ_clone_ptr(long arg);
-       // struct LDKCOption_NetAddressZ COption_NetAddressZ_clone(const struct LDKCOption_NetAddressZ *NONNULL_PTR orig);
-       public static native long COption_NetAddressZ_clone(long orig);
-       // uint64_t C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR arg);
-       public static native long C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(long arg);
-       // struct LDKC2Tuple_PublicKeyCOption_NetAddressZZ C2Tuple_PublicKeyCOption_NetAddressZZ_clone(const struct LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR orig);
-       public static native long C2Tuple_PublicKeyCOption_NetAddressZZ_clone(long orig);
-       // struct LDKC2Tuple_PublicKeyCOption_NetAddressZZ C2Tuple_PublicKeyCOption_NetAddressZZ_new(struct LDKPublicKey a, struct LDKCOption_NetAddressZ b);
-       public static native long C2Tuple_PublicKeyCOption_NetAddressZZ_new(byte[] a, long b);
-       // void C2Tuple_PublicKeyCOption_NetAddressZZ_free(struct LDKC2Tuple_PublicKeyCOption_NetAddressZZ _res);
-       public static native void C2Tuple_PublicKeyCOption_NetAddressZZ_free(long _res);
-       // void CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_free(struct LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ _res);
-       public static native void CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_free(long[] _res);
+       // struct LDKCOption_SocketAddressZ COption_SocketAddressZ_some(struct LDKSocketAddress o);
+       public static native long COption_SocketAddressZ_some(long o);
+       // struct LDKCOption_SocketAddressZ COption_SocketAddressZ_none(void);
+       public static native long COption_SocketAddressZ_none();
+       // void COption_SocketAddressZ_free(struct LDKCOption_SocketAddressZ _res);
+       public static native void COption_SocketAddressZ_free(long _res);
+       // uint64_t COption_SocketAddressZ_clone_ptr(LDKCOption_SocketAddressZ *NONNULL_PTR arg);
+       public static native long COption_SocketAddressZ_clone_ptr(long arg);
+       // struct LDKCOption_SocketAddressZ COption_SocketAddressZ_clone(const struct LDKCOption_SocketAddressZ *NONNULL_PTR orig);
+       public static native long COption_SocketAddressZ_clone(long orig);
+       // uint64_t C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_PublicKeyCOption_SocketAddressZZ C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(const struct LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR orig);
+       public static native long C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(long orig);
+       // struct LDKC2Tuple_PublicKeyCOption_SocketAddressZZ C2Tuple_PublicKeyCOption_SocketAddressZZ_new(struct LDKPublicKey a, struct LDKCOption_SocketAddressZ b);
+       public static native long C2Tuple_PublicKeyCOption_SocketAddressZZ_new(byte[] a, long b);
+       // void C2Tuple_PublicKeyCOption_SocketAddressZZ_free(struct LDKC2Tuple_PublicKeyCOption_SocketAddressZZ _res);
+       public static native void C2Tuple_PublicKeyCOption_SocketAddressZZ_free(long _res);
+       // void CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_free(struct LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ _res);
+       public static native void CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_free(long[] _res);
        // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_ok(struct LDKCVec_u8Z o);
        public static native long CResult_CVec_u8ZPeerHandleErrorZ_ok(byte[] o);
        // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_err(struct LDKPeerHandleError e);
@@ -4550,38 +4695,80 @@ public class bindings {
        public static native boolean CResult_u32GraphSyncErrorZ_is_ok(long o);
        // void CResult_u32GraphSyncErrorZ_free(struct LDKCResult_u32GraphSyncErrorZ _res);
        public static native void CResult_u32GraphSyncErrorZ_free(long _res);
-       // struct LDKCOption_KeyPairZ COption_KeyPairZ_some(struct LDKSecretKey o);
-       public static native long COption_KeyPairZ_some(byte[] o);
-       // struct LDKCOption_KeyPairZ COption_KeyPairZ_none(void);
-       public static native long COption_KeyPairZ_none();
-       // void COption_KeyPairZ_free(struct LDKCOption_KeyPairZ _res);
-       public static native void COption_KeyPairZ_free(long _res);
-       // uint64_t COption_KeyPairZ_clone_ptr(LDKCOption_KeyPairZ *NONNULL_PTR arg);
-       public static native long COption_KeyPairZ_clone_ptr(long arg);
-       // struct LDKCOption_KeyPairZ COption_KeyPairZ_clone(const struct LDKCOption_KeyPairZ *NONNULL_PTR orig);
-       public static native long COption_KeyPairZ_clone(long orig);
-       // struct LDKCResult_COption_KeyPairZNoneZ CResult_COption_KeyPairZNoneZ_ok(struct LDKCOption_KeyPairZ o);
-       public static native long CResult_COption_KeyPairZNoneZ_ok(long o);
-       // struct LDKCResult_COption_KeyPairZNoneZ CResult_COption_KeyPairZNoneZ_err(void);
-       public static native long CResult_COption_KeyPairZNoneZ_err();
-       // bool CResult_COption_KeyPairZNoneZ_is_ok(const struct LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_COption_KeyPairZNoneZ_is_ok(long o);
-       // void CResult_COption_KeyPairZNoneZ_free(struct LDKCResult_COption_KeyPairZNoneZ _res);
-       public static native void CResult_COption_KeyPairZNoneZ_free(long _res);
-       // uint64_t CResult_COption_KeyPairZNoneZ_clone_ptr(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR arg);
-       public static native long CResult_COption_KeyPairZNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_COption_KeyPairZNoneZ CResult_COption_KeyPairZNoneZ_clone(const struct LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR orig);
-       public static native long CResult_COption_KeyPairZNoneZ_clone(long orig);
-       // struct LDKCOption_ScriptZ COption_ScriptZ_some(struct LDKCVec_u8Z o);
-       public static native long COption_ScriptZ_some(byte[] o);
-       // struct LDKCOption_ScriptZ COption_ScriptZ_none(void);
-       public static native long COption_ScriptZ_none();
-       // void COption_ScriptZ_free(struct LDKCOption_ScriptZ _res);
-       public static native void COption_ScriptZ_free(long _res);
-       // uint64_t COption_ScriptZ_clone_ptr(LDKCOption_ScriptZ *NONNULL_PTR arg);
-       public static native long COption_ScriptZ_clone_ptr(long arg);
-       // struct LDKCOption_ScriptZ COption_ScriptZ_clone(const struct LDKCOption_ScriptZ *NONNULL_PTR orig);
-       public static native long COption_ScriptZ_clone(long orig);
+       // struct LDKCResult_CVec_u8ZIOErrorZ CResult_CVec_u8ZIOErrorZ_ok(struct LDKCVec_u8Z o);
+       public static native long CResult_CVec_u8ZIOErrorZ_ok(byte[] o);
+       // struct LDKCResult_CVec_u8ZIOErrorZ CResult_CVec_u8ZIOErrorZ_err(enum LDKIOError e);
+       public static native long CResult_CVec_u8ZIOErrorZ_err(IOError e);
+       // bool CResult_CVec_u8ZIOErrorZ_is_ok(const struct LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_u8ZIOErrorZ_is_ok(long o);
+       // void CResult_CVec_u8ZIOErrorZ_free(struct LDKCResult_CVec_u8ZIOErrorZ _res);
+       public static native void CResult_CVec_u8ZIOErrorZ_free(long _res);
+       // uint64_t CResult_CVec_u8ZIOErrorZ_clone_ptr(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_u8ZIOErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_u8ZIOErrorZ CResult_CVec_u8ZIOErrorZ_clone(const struct LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_u8ZIOErrorZ_clone(long orig);
+       // void CVec_StrZ_free(struct LDKCVec_StrZ _res);
+       public static native void CVec_StrZ_free(String[] _res);
+       // struct LDKCResult_CVec_StrZIOErrorZ CResult_CVec_StrZIOErrorZ_ok(struct LDKCVec_StrZ o);
+       public static native long CResult_CVec_StrZIOErrorZ_ok(String[] o);
+       // struct LDKCResult_CVec_StrZIOErrorZ CResult_CVec_StrZIOErrorZ_err(enum LDKIOError e);
+       public static native long CResult_CVec_StrZIOErrorZ_err(IOError e);
+       // bool CResult_CVec_StrZIOErrorZ_is_ok(const struct LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_StrZIOErrorZ_is_ok(long o);
+       // void CResult_CVec_StrZIOErrorZ_free(struct LDKCResult_CVec_StrZIOErrorZ _res);
+       public static native void CResult_CVec_StrZIOErrorZ_free(long _res);
+       // uint64_t CResult_CVec_StrZIOErrorZ_clone_ptr(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_StrZIOErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_StrZIOErrorZ CResult_CVec_StrZIOErrorZ_clone(const struct LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_StrZIOErrorZ_clone(long orig);
+       // void CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_free(struct LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ _res);
+       public static native void CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_free(long[] _res);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_ok(struct LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ o);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_ok(long[] o);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_err(enum LDKIOError e);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_err(IOError e);
+       // bool CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok(const struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok(long o);
+       // void CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_free(struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ _res);
+       public static native void CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_free(long _res);
+       // uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(const struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(long orig);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_ok(struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_ok(long o);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_err(enum LDKIOError e);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_err(IOError e);
+       // bool CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok(const struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok(long o);
+       // void CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_free(struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ _res);
+       public static native void CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_free(long _res);
+       // uint64_t CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(const struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(long orig);
+       // struct LDKCOption_SecretKeyZ COption_SecretKeyZ_some(struct LDKSecretKey o);
+       public static native long COption_SecretKeyZ_some(byte[] o);
+       // struct LDKCOption_SecretKeyZ COption_SecretKeyZ_none(void);
+       public static native long COption_SecretKeyZ_none();
+       // void COption_SecretKeyZ_free(struct LDKCOption_SecretKeyZ _res);
+       public static native void COption_SecretKeyZ_free(long _res);
+       // uint64_t COption_SecretKeyZ_clone_ptr(LDKCOption_SecretKeyZ *NONNULL_PTR arg);
+       public static native long COption_SecretKeyZ_clone_ptr(long arg);
+       // struct LDKCOption_SecretKeyZ COption_SecretKeyZ_clone(const struct LDKCOption_SecretKeyZ *NONNULL_PTR orig);
+       public static native long COption_SecretKeyZ_clone(long orig);
+       // struct LDKCResult_VerifiedInvoiceRequestNoneZ CResult_VerifiedInvoiceRequestNoneZ_ok(struct LDKVerifiedInvoiceRequest o);
+       public static native long CResult_VerifiedInvoiceRequestNoneZ_ok(long o);
+       // struct LDKCResult_VerifiedInvoiceRequestNoneZ CResult_VerifiedInvoiceRequestNoneZ_err(void);
+       public static native long CResult_VerifiedInvoiceRequestNoneZ_err();
+       // bool CResult_VerifiedInvoiceRequestNoneZ_is_ok(const struct LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_VerifiedInvoiceRequestNoneZ_is_ok(long o);
+       // void CResult_VerifiedInvoiceRequestNoneZ_free(struct LDKCResult_VerifiedInvoiceRequestNoneZ _res);
+       public static native void CResult_VerifiedInvoiceRequestNoneZ_free(long _res);
+       // uint64_t CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR arg);
+       public static native long CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_VerifiedInvoiceRequestNoneZ CResult_VerifiedInvoiceRequestNoneZ_clone(const struct LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR orig);
+       public static native long CResult_VerifiedInvoiceRequestNoneZ_clone(long orig);
        // enum LDKCOption_NoneZ COption_NoneZ_some(void);
        public static native COption_NoneZ COption_NoneZ_some();
        // enum LDKCOption_NoneZ COption_NoneZ_none(void);
@@ -4600,28 +4787,30 @@ public class bindings {
        public static native long COption_i64Z_clone_ptr(long arg);
        // struct LDKCOption_i64Z COption_i64Z_clone(const struct LDKCOption_i64Z *NONNULL_PTR orig);
        public static native long COption_i64Z_clone(long orig);
-       // struct LDKCOption_TxidZ COption_TxidZ_some(struct LDKThirtyTwoBytes o);
-       public static native long COption_TxidZ_some(byte[] o);
-       // struct LDKCOption_TxidZ COption_TxidZ_none(void);
-       public static native long COption_TxidZ_none();
-       // void COption_TxidZ_free(struct LDKCOption_TxidZ _res);
-       public static native void COption_TxidZ_free(long _res);
-       // uint64_t COption_TxidZ_clone_ptr(LDKCOption_TxidZ *NONNULL_PTR arg);
-       public static native long COption_TxidZ_clone_ptr(long arg);
-       // struct LDKCOption_TxidZ COption_TxidZ_clone(const struct LDKCOption_TxidZ *NONNULL_PTR orig);
-       public static native long COption_TxidZ_clone(long orig);
-       // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_ok(struct LDKNetAddress o);
-       public static native long CResult_NetAddressDecodeErrorZ_ok(long o);
-       // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_err(struct LDKDecodeError e);
-       public static native long CResult_NetAddressDecodeErrorZ_err(long e);
-       // bool CResult_NetAddressDecodeErrorZ_is_ok(const struct LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_NetAddressDecodeErrorZ_is_ok(long o);
-       // void CResult_NetAddressDecodeErrorZ_free(struct LDKCResult_NetAddressDecodeErrorZ _res);
-       public static native void CResult_NetAddressDecodeErrorZ_free(long _res);
-       // uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg);
-       public static native long CResult_NetAddressDecodeErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_clone(const struct LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR orig);
-       public static native long CResult_NetAddressDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_SocketAddressDecodeErrorZ CResult_SocketAddressDecodeErrorZ_ok(struct LDKSocketAddress o);
+       public static native long CResult_SocketAddressDecodeErrorZ_ok(long o);
+       // struct LDKCResult_SocketAddressDecodeErrorZ CResult_SocketAddressDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_SocketAddressDecodeErrorZ_err(long e);
+       // bool CResult_SocketAddressDecodeErrorZ_is_ok(const struct LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_SocketAddressDecodeErrorZ_is_ok(long o);
+       // void CResult_SocketAddressDecodeErrorZ_free(struct LDKCResult_SocketAddressDecodeErrorZ _res);
+       public static native void CResult_SocketAddressDecodeErrorZ_free(long _res);
+       // uint64_t CResult_SocketAddressDecodeErrorZ_clone_ptr(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_SocketAddressDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_SocketAddressDecodeErrorZ CResult_SocketAddressDecodeErrorZ_clone(const struct LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_SocketAddressDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_SocketAddressSocketAddressParseErrorZ CResult_SocketAddressSocketAddressParseErrorZ_ok(struct LDKSocketAddress o);
+       public static native long CResult_SocketAddressSocketAddressParseErrorZ_ok(long o);
+       // struct LDKCResult_SocketAddressSocketAddressParseErrorZ CResult_SocketAddressSocketAddressParseErrorZ_err(enum LDKSocketAddressParseError e);
+       public static native long CResult_SocketAddressSocketAddressParseErrorZ_err(SocketAddressParseError e);
+       // bool CResult_SocketAddressSocketAddressParseErrorZ_is_ok(const struct LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_SocketAddressSocketAddressParseErrorZ_is_ok(long o);
+       // void CResult_SocketAddressSocketAddressParseErrorZ_free(struct LDKCResult_SocketAddressSocketAddressParseErrorZ _res);
+       public static native void CResult_SocketAddressSocketAddressParseErrorZ_free(long _res);
+       // uint64_t CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR arg);
+       public static native long CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_SocketAddressSocketAddressParseErrorZ CResult_SocketAddressSocketAddressParseErrorZ_clone(const struct LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR orig);
+       public static native long CResult_SocketAddressSocketAddressParseErrorZ_clone(long orig);
        // void CVec_UpdateAddHTLCZ_free(struct LDKCVec_UpdateAddHTLCZ _res);
        public static native void CVec_UpdateAddHTLCZ_free(long[] _res);
        // void CVec_UpdateFulfillHTLCZ_free(struct LDKCVec_UpdateFulfillHTLCZ _res);
@@ -5328,18 +5517,28 @@ public class bindings {
        public static native boolean CResult_TrustedCommitmentTransactionNoneZ_is_ok(long o);
        // void CResult_TrustedCommitmentTransactionNoneZ_free(struct LDKCResult_TrustedCommitmentTransactionNoneZ _res);
        public static native void CResult_TrustedCommitmentTransactionNoneZ_free(long _res);
-       // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_ok(struct LDKCVec_SignatureZ o);
-       public static native long CResult_CVec_SignatureZNoneZ_ok(byte[][] o);
-       // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_err(void);
-       public static native long CResult_CVec_SignatureZNoneZ_err();
-       // bool CResult_CVec_SignatureZNoneZ_is_ok(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR o);
-       public static native boolean CResult_CVec_SignatureZNoneZ_is_ok(long o);
-       // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res);
-       public static native void CResult_CVec_SignatureZNoneZ_free(long _res);
-       // uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg);
-       public static native long CResult_CVec_SignatureZNoneZ_clone_ptr(long arg);
-       // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig);
-       public static native long CResult_CVec_SignatureZNoneZ_clone(long orig);
+       // struct LDKCResult_CVec_ECDSASignatureZNoneZ CResult_CVec_ECDSASignatureZNoneZ_ok(struct LDKCVec_ECDSASignatureZ o);
+       public static native long CResult_CVec_ECDSASignatureZNoneZ_ok(byte[][] o);
+       // struct LDKCResult_CVec_ECDSASignatureZNoneZ CResult_CVec_ECDSASignatureZNoneZ_err(void);
+       public static native long CResult_CVec_ECDSASignatureZNoneZ_err();
+       // bool CResult_CVec_ECDSASignatureZNoneZ_is_ok(const struct LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_ECDSASignatureZNoneZ_is_ok(long o);
+       // void CResult_CVec_ECDSASignatureZNoneZ_free(struct LDKCResult_CVec_ECDSASignatureZNoneZ _res);
+       public static native void CResult_CVec_ECDSASignatureZNoneZ_free(long _res);
+       // uint64_t CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_ECDSASignatureZNoneZ CResult_CVec_ECDSASignatureZNoneZ_clone(const struct LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_ECDSASignatureZNoneZ_clone(long orig);
+       // struct LDKCOption_usizeZ COption_usizeZ_some(uintptr_t o);
+       public static native long COption_usizeZ_some(long o);
+       // struct LDKCOption_usizeZ COption_usizeZ_none(void);
+       public static native long COption_usizeZ_none();
+       // void COption_usizeZ_free(struct LDKCOption_usizeZ _res);
+       public static native void COption_usizeZ_free(long _res);
+       // uint64_t COption_usizeZ_clone_ptr(LDKCOption_usizeZ *NONNULL_PTR arg);
+       public static native long COption_usizeZ_clone_ptr(long arg);
+       // struct LDKCOption_usizeZ COption_usizeZ_clone(const struct LDKCOption_usizeZ *NONNULL_PTR orig);
+       public static native long COption_usizeZ_clone(long orig);
        // struct LDKCResult_ShutdownScriptDecodeErrorZ CResult_ShutdownScriptDecodeErrorZ_ok(struct LDKShutdownScript o);
        public static native long CResult_ShutdownScriptDecodeErrorZ_ok(long o);
        // struct LDKCResult_ShutdownScriptDecodeErrorZ CResult_ShutdownScriptDecodeErrorZ_err(struct LDKDecodeError e);
@@ -5376,6 +5575,18 @@ public class bindings {
        public static native long CResult_PaymentPurposeDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PaymentPurposeDecodeErrorZ CResult_PaymentPurposeDecodeErrorZ_clone(const struct LDKCResult_PaymentPurposeDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_PaymentPurposeDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_ClaimedHTLCDecodeErrorZ CResult_ClaimedHTLCDecodeErrorZ_ok(struct LDKClaimedHTLC o);
+       public static native long CResult_ClaimedHTLCDecodeErrorZ_ok(long o);
+       // struct LDKCResult_ClaimedHTLCDecodeErrorZ CResult_ClaimedHTLCDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_ClaimedHTLCDecodeErrorZ_err(long e);
+       // bool CResult_ClaimedHTLCDecodeErrorZ_is_ok(const struct LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ClaimedHTLCDecodeErrorZ_is_ok(long o);
+       // void CResult_ClaimedHTLCDecodeErrorZ_free(struct LDKCResult_ClaimedHTLCDecodeErrorZ _res);
+       public static native void CResult_ClaimedHTLCDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_ClaimedHTLCDecodeErrorZ CResult_ClaimedHTLCDecodeErrorZ_clone(const struct LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_ClaimedHTLCDecodeErrorZ_clone(long orig);
        // struct LDKCOption_PathFailureZ COption_PathFailureZ_some(struct LDKPathFailure o);
        public static native long COption_PathFailureZ_some(long o);
        // struct LDKCOption_PathFailureZ COption_PathFailureZ_none(void);
@@ -5454,26 +5665,18 @@ public class bindings {
        public static native long CResult_PaymentFailureReasonDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PaymentFailureReasonDecodeErrorZ CResult_PaymentFailureReasonDecodeErrorZ_clone(const struct LDKCResult_PaymentFailureReasonDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_PaymentFailureReasonDecodeErrorZ_clone(long orig);
-       // struct LDKCOption_u128Z COption_u128Z_some(struct LDKU128 o);
-       public static native long COption_u128Z_some(byte[] o);
-       // struct LDKCOption_u128Z COption_u128Z_none(void);
-       public static native long COption_u128Z_none();
-       // void COption_u128Z_free(struct LDKCOption_u128Z _res);
-       public static native void COption_u128Z_free(long _res);
-       // uint64_t COption_u128Z_clone_ptr(LDKCOption_u128Z *NONNULL_PTR arg);
-       public static native long COption_u128Z_clone_ptr(long arg);
-       // struct LDKCOption_u128Z COption_u128Z_clone(const struct LDKCOption_u128Z *NONNULL_PTR orig);
-       public static native long COption_u128Z_clone(long orig);
-       // struct LDKCOption_PaymentIdZ COption_PaymentIdZ_some(struct LDKThirtyTwoBytes o);
-       public static native long COption_PaymentIdZ_some(byte[] o);
-       // struct LDKCOption_PaymentIdZ COption_PaymentIdZ_none(void);
-       public static native long COption_PaymentIdZ_none();
-       // void COption_PaymentIdZ_free(struct LDKCOption_PaymentIdZ _res);
-       public static native void COption_PaymentIdZ_free(long _res);
-       // uint64_t COption_PaymentIdZ_clone_ptr(LDKCOption_PaymentIdZ *NONNULL_PTR arg);
-       public static native long COption_PaymentIdZ_clone_ptr(long arg);
-       // struct LDKCOption_PaymentIdZ COption_PaymentIdZ_clone(const struct LDKCOption_PaymentIdZ *NONNULL_PTR orig);
-       public static native long COption_PaymentIdZ_clone(long orig);
+       // struct LDKCOption_U128Z COption_U128Z_some(struct LDKU128 o);
+       public static native long COption_U128Z_some(byte[] o);
+       // struct LDKCOption_U128Z COption_U128Z_none(void);
+       public static native long COption_U128Z_none();
+       // void COption_U128Z_free(struct LDKCOption_U128Z _res);
+       public static native void COption_U128Z_free(long _res);
+       // uint64_t COption_U128Z_clone_ptr(LDKCOption_U128Z *NONNULL_PTR arg);
+       public static native long COption_U128Z_clone_ptr(long arg);
+       // struct LDKCOption_U128Z COption_U128Z_clone(const struct LDKCOption_U128Z *NONNULL_PTR orig);
+       public static native long COption_U128Z_clone(long orig);
+       // void CVec_ClaimedHTLCZ_free(struct LDKCVec_ClaimedHTLCZ _res);
+       public static native void CVec_ClaimedHTLCZ_free(long[] _res);
        // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_some(enum LDKPaymentFailureReason o);
        public static native long COption_PaymentFailureReasonZ_some(PaymentFailureReason o);
        // struct LDKCOption_PaymentFailureReasonZ COption_PaymentFailureReasonZ_none(void);
@@ -5506,20 +5709,6 @@ public class bindings {
        public static native long CResult_COption_EventZDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_clone(const struct LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_COption_EventZDecodeErrorZ_clone(long orig);
-       // void CVec_C2Tuple_BlockHashChannelMonitorZZ_free(struct LDKCVec_C2Tuple_BlockHashChannelMonitorZZ _res);
-       public static native void CVec_C2Tuple_BlockHashChannelMonitorZZ_free(long[] _res);
-       // struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok(struct LDKCVec_C2Tuple_BlockHashChannelMonitorZZ o);
-       public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok(long[] o);
-       // struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(enum LDKIOError e);
-       public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(IOError e);
-       // bool CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(const struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(long o);
-       // void CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ _res);
-       public static native void CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(long _res);
-       // uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg);
-       public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(const struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR orig);
-       public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(long orig);
        // struct LDKCResult_SiPrefixBolt11ParseErrorZ CResult_SiPrefixBolt11ParseErrorZ_ok(enum LDKSiPrefix o);
        public static native long CResult_SiPrefixBolt11ParseErrorZ_ok(SiPrefix o);
        // struct LDKCResult_SiPrefixBolt11ParseErrorZ CResult_SiPrefixBolt11ParseErrorZ_err(struct LDKBolt11ParseError e);
@@ -5564,18 +5753,18 @@ public class bindings {
        public static native long C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_new(long a, byte[] b, long c);
        // void C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_free(struct LDKC3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ _res);
        public static native void C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_free(long _res);
-       // struct LDKCResult_PayeePubKeyErrorZ CResult_PayeePubKeyErrorZ_ok(struct LDKPayeePubKey o);
-       public static native long CResult_PayeePubKeyErrorZ_ok(long o);
-       // struct LDKCResult_PayeePubKeyErrorZ CResult_PayeePubKeyErrorZ_err(enum LDKSecp256k1Error e);
-       public static native long CResult_PayeePubKeyErrorZ_err(Secp256k1Error e);
-       // bool CResult_PayeePubKeyErrorZ_is_ok(const struct LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_PayeePubKeyErrorZ_is_ok(long o);
-       // void CResult_PayeePubKeyErrorZ_free(struct LDKCResult_PayeePubKeyErrorZ _res);
-       public static native void CResult_PayeePubKeyErrorZ_free(long _res);
-       // uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg);
-       public static native long CResult_PayeePubKeyErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_PayeePubKeyErrorZ CResult_PayeePubKeyErrorZ_clone(const struct LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR orig);
-       public static native long CResult_PayeePubKeyErrorZ_clone(long orig);
+       // struct LDKCResult_PayeePubKeySecp256k1ErrorZ CResult_PayeePubKeySecp256k1ErrorZ_ok(struct LDKPayeePubKey o);
+       public static native long CResult_PayeePubKeySecp256k1ErrorZ_ok(long o);
+       // struct LDKCResult_PayeePubKeySecp256k1ErrorZ CResult_PayeePubKeySecp256k1ErrorZ_err(enum LDKSecp256k1Error e);
+       public static native long CResult_PayeePubKeySecp256k1ErrorZ_err(Secp256k1Error e);
+       // bool CResult_PayeePubKeySecp256k1ErrorZ_is_ok(const struct LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PayeePubKeySecp256k1ErrorZ_is_ok(long o);
+       // void CResult_PayeePubKeySecp256k1ErrorZ_free(struct LDKCResult_PayeePubKeySecp256k1ErrorZ _res);
+       public static native void CResult_PayeePubKeySecp256k1ErrorZ_free(long _res);
+       // uint64_t CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_PayeePubKeySecp256k1ErrorZ CResult_PayeePubKeySecp256k1ErrorZ_clone(const struct LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR orig);
+       public static native long CResult_PayeePubKeySecp256k1ErrorZ_clone(long orig);
        // void CVec_PrivateRouteZ_free(struct LDKCVec_PrivateRouteZ _res);
        public static native void CVec_PrivateRouteZ_free(long[] _res);
        // struct LDKCResult_PositiveTimestampCreationErrorZ CResult_PositiveTimestampCreationErrorZ_ok(struct LDKPositiveTimestamp o);
@@ -5614,8 +5803,6 @@ public class bindings {
        public static native long CResult_Bolt11InvoiceBolt11SemanticErrorZ_clone_ptr(long arg);
        // struct LDKCResult_Bolt11InvoiceBolt11SemanticErrorZ CResult_Bolt11InvoiceBolt11SemanticErrorZ_clone(const struct LDKCResult_Bolt11InvoiceBolt11SemanticErrorZ *NONNULL_PTR orig);
        public static native long CResult_Bolt11InvoiceBolt11SemanticErrorZ_clone(long orig);
-       // void CVec_AddressZ_free(struct LDKCVec_AddressZ _res);
-       public static native void CVec_AddressZ_free(String[] _res);
        // struct LDKCResult_DescriptionCreationErrorZ CResult_DescriptionCreationErrorZ_ok(struct LDKDescription o);
        public static native long CResult_DescriptionCreationErrorZ_ok(long o);
        // struct LDKCResult_DescriptionCreationErrorZ CResult_DescriptionCreationErrorZ_err(enum LDKCreationError e);
@@ -5712,18 +5899,54 @@ public class bindings {
        public static native long CResult_UntrustedStringDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UntrustedStringDecodeErrorZ CResult_UntrustedStringDecodeErrorZ_clone(const struct LDKCResult_UntrustedStringDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UntrustedStringDecodeErrorZ_clone(long orig);
-       // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_ok(struct LDKThirtyTwoBytes o);
-       public static native long CResult_PaymentIdPaymentErrorZ_ok(byte[] o);
-       // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_err(struct LDKPaymentError e);
-       public static native long CResult_PaymentIdPaymentErrorZ_err(long e);
-       // bool CResult_PaymentIdPaymentErrorZ_is_ok(const struct LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_PaymentIdPaymentErrorZ_is_ok(long o);
-       // void CResult_PaymentIdPaymentErrorZ_free(struct LDKCResult_PaymentIdPaymentErrorZ _res);
-       public static native void CResult_PaymentIdPaymentErrorZ_free(long _res);
-       // uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg);
-       public static native long CResult_PaymentIdPaymentErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_clone(const struct LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR orig);
-       public static native long CResult_PaymentIdPaymentErrorZ_clone(long orig);
+       // struct LDKCResult_ReceiveTlvsDecodeErrorZ CResult_ReceiveTlvsDecodeErrorZ_ok(struct LDKReceiveTlvs o);
+       public static native long CResult_ReceiveTlvsDecodeErrorZ_ok(long o);
+       // struct LDKCResult_ReceiveTlvsDecodeErrorZ CResult_ReceiveTlvsDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_ReceiveTlvsDecodeErrorZ_err(long e);
+       // bool CResult_ReceiveTlvsDecodeErrorZ_is_ok(const struct LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ReceiveTlvsDecodeErrorZ_is_ok(long o);
+       // void CResult_ReceiveTlvsDecodeErrorZ_free(struct LDKCResult_ReceiveTlvsDecodeErrorZ _res);
+       public static native void CResult_ReceiveTlvsDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_ReceiveTlvsDecodeErrorZ CResult_ReceiveTlvsDecodeErrorZ_clone(const struct LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_ReceiveTlvsDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_PaymentRelayDecodeErrorZ CResult_PaymentRelayDecodeErrorZ_ok(struct LDKPaymentRelay o);
+       public static native long CResult_PaymentRelayDecodeErrorZ_ok(long o);
+       // struct LDKCResult_PaymentRelayDecodeErrorZ CResult_PaymentRelayDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_PaymentRelayDecodeErrorZ_err(long e);
+       // bool CResult_PaymentRelayDecodeErrorZ_is_ok(const struct LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PaymentRelayDecodeErrorZ_is_ok(long o);
+       // void CResult_PaymentRelayDecodeErrorZ_free(struct LDKCResult_PaymentRelayDecodeErrorZ _res);
+       public static native void CResult_PaymentRelayDecodeErrorZ_free(long _res);
+       // uint64_t CResult_PaymentRelayDecodeErrorZ_clone_ptr(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PaymentRelayDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_PaymentRelayDecodeErrorZ CResult_PaymentRelayDecodeErrorZ_clone(const struct LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_PaymentRelayDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_PaymentConstraintsDecodeErrorZ CResult_PaymentConstraintsDecodeErrorZ_ok(struct LDKPaymentConstraints o);
+       public static native long CResult_PaymentConstraintsDecodeErrorZ_ok(long o);
+       // struct LDKCResult_PaymentConstraintsDecodeErrorZ CResult_PaymentConstraintsDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_PaymentConstraintsDecodeErrorZ_err(long e);
+       // bool CResult_PaymentConstraintsDecodeErrorZ_is_ok(const struct LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PaymentConstraintsDecodeErrorZ_is_ok(long o);
+       // void CResult_PaymentConstraintsDecodeErrorZ_free(struct LDKCResult_PaymentConstraintsDecodeErrorZ _res);
+       public static native void CResult_PaymentConstraintsDecodeErrorZ_free(long _res);
+       // uint64_t CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_PaymentConstraintsDecodeErrorZ CResult_PaymentConstraintsDecodeErrorZ_clone(const struct LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_PaymentConstraintsDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_ThirtyTwoBytesPaymentErrorZ CResult_ThirtyTwoBytesPaymentErrorZ_ok(struct LDKThirtyTwoBytes o);
+       public static native long CResult_ThirtyTwoBytesPaymentErrorZ_ok(byte[] o);
+       // struct LDKCResult_ThirtyTwoBytesPaymentErrorZ CResult_ThirtyTwoBytesPaymentErrorZ_err(struct LDKPaymentError e);
+       public static native long CResult_ThirtyTwoBytesPaymentErrorZ_err(long e);
+       // bool CResult_ThirtyTwoBytesPaymentErrorZ_is_ok(const struct LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ThirtyTwoBytesPaymentErrorZ_is_ok(long o);
+       // void CResult_ThirtyTwoBytesPaymentErrorZ_free(struct LDKCResult_ThirtyTwoBytesPaymentErrorZ _res);
+       public static native void CResult_ThirtyTwoBytesPaymentErrorZ_free(long _res);
+       // uint64_t CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_ThirtyTwoBytesPaymentErrorZ CResult_ThirtyTwoBytesPaymentErrorZ_clone(const struct LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR orig);
+       public static native long CResult_ThirtyTwoBytesPaymentErrorZ_clone(long orig);
        // struct LDKCResult_NonePaymentErrorZ CResult_NonePaymentErrorZ_ok(void);
        public static native long CResult_NonePaymentErrorZ_ok();
        // struct LDKCResult_NonePaymentErrorZ CResult_NonePaymentErrorZ_err(struct LDKPaymentError e);
@@ -5736,18 +5959,30 @@ public class bindings {
        public static native long CResult_NonePaymentErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NonePaymentErrorZ CResult_NonePaymentErrorZ_clone(const struct LDKCResult_NonePaymentErrorZ *NONNULL_PTR orig);
        public static native long CResult_NonePaymentErrorZ_clone(long orig);
-       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_ok(struct LDKStr o);
-       public static native long CResult_StringErrorZ_ok(String o);
-       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_err(enum LDKSecp256k1Error e);
-       public static native long CResult_StringErrorZ_err(Secp256k1Error e);
-       // bool CResult_StringErrorZ_is_ok(const struct LDKCResult_StringErrorZ *NONNULL_PTR o);
-       public static native boolean CResult_StringErrorZ_is_ok(long o);
-       // void CResult_StringErrorZ_free(struct LDKCResult_StringErrorZ _res);
-       public static native void CResult_StringErrorZ_free(long _res);
-       // uint64_t CResult_StringErrorZ_clone_ptr(LDKCResult_StringErrorZ *NONNULL_PTR arg);
-       public static native long CResult_StringErrorZ_clone_ptr(long arg);
-       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_clone(const struct LDKCResult_StringErrorZ *NONNULL_PTR orig);
-       public static native long CResult_StringErrorZ_clone(long orig);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_ok(struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ o);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_ok(long[] o);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_err(struct LDKProbingError e);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_err(long e);
+       // bool CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok(const struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok(long o);
+       // void CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_free(struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ _res);
+       public static native void CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_free(long _res);
+       // uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(const struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR orig);
+       public static native long CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(long orig);
+       // struct LDKCResult_StrSecp256k1ErrorZ CResult_StrSecp256k1ErrorZ_ok(struct LDKStr o);
+       public static native long CResult_StrSecp256k1ErrorZ_ok(String o);
+       // struct LDKCResult_StrSecp256k1ErrorZ CResult_StrSecp256k1ErrorZ_err(enum LDKSecp256k1Error e);
+       public static native long CResult_StrSecp256k1ErrorZ_err(Secp256k1Error e);
+       // bool CResult_StrSecp256k1ErrorZ_is_ok(const struct LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_StrSecp256k1ErrorZ_is_ok(long o);
+       // void CResult_StrSecp256k1ErrorZ_free(struct LDKCResult_StrSecp256k1ErrorZ _res);
+       public static native void CResult_StrSecp256k1ErrorZ_free(long _res);
+       // uint64_t CResult_StrSecp256k1ErrorZ_clone_ptr(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR arg);
+       public static native long CResult_StrSecp256k1ErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_StrSecp256k1ErrorZ CResult_StrSecp256k1ErrorZ_clone(const struct LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR orig);
+       public static native long CResult_StrSecp256k1ErrorZ_clone(long orig);
        // struct LDKCResult_TxOutUtxoLookupErrorZ CResult_TxOutUtxoLookupErrorZ_ok(struct LDKTxOut o);
        public static native long CResult_TxOutUtxoLookupErrorZ_ok(long o);
        // struct LDKCResult_TxOutUtxoLookupErrorZ CResult_TxOutUtxoLookupErrorZ_err(enum LDKUtxoLookupError e);
@@ -5772,6 +6007,22 @@ public class bindings {
        public static native long CResult_OnionMessagePathNoneZ_clone_ptr(long arg);
        // struct LDKCResult_OnionMessagePathNoneZ CResult_OnionMessagePathNoneZ_clone(const struct LDKCResult_OnionMessagePathNoneZ *NONNULL_PTR orig);
        public static native long CResult_OnionMessagePathNoneZ_clone(long orig);
+       // uint64_t C2Tuple_PublicKeyOnionMessageZ_clone_ptr(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR arg);
+       public static native long C2Tuple_PublicKeyOnionMessageZ_clone_ptr(long arg);
+       // struct LDKC2Tuple_PublicKeyOnionMessageZ C2Tuple_PublicKeyOnionMessageZ_clone(const struct LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR orig);
+       public static native long C2Tuple_PublicKeyOnionMessageZ_clone(long orig);
+       // struct LDKC2Tuple_PublicKeyOnionMessageZ C2Tuple_PublicKeyOnionMessageZ_new(struct LDKPublicKey a, struct LDKOnionMessage b);
+       public static native long C2Tuple_PublicKeyOnionMessageZ_new(byte[] a, long b);
+       // void C2Tuple_PublicKeyOnionMessageZ_free(struct LDKC2Tuple_PublicKeyOnionMessageZ _res);
+       public static native void C2Tuple_PublicKeyOnionMessageZ_free(long _res);
+       // struct LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_ok(struct LDKC2Tuple_PublicKeyOnionMessageZ o);
+       public static native long CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_ok(long o);
+       // struct LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_err(struct LDKSendError e);
+       public static native long CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_err(long e);
+       // bool CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok(const struct LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok(long o);
+       // void CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_free(struct LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ _res);
+       public static native void CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_free(long _res);
        // struct LDKCResult_NoneSendErrorZ CResult_NoneSendErrorZ_ok(void);
        public static native long CResult_NoneSendErrorZ_ok();
        // struct LDKCResult_NoneSendErrorZ CResult_NoneSendErrorZ_err(struct LDKSendError e);
@@ -5792,6 +6043,18 @@ public class bindings {
        public static native long CResult_BlindedPathNoneZ_clone_ptr(long arg);
        // struct LDKCResult_BlindedPathNoneZ CResult_BlindedPathNoneZ_clone(const struct LDKCResult_BlindedPathNoneZ *NONNULL_PTR orig);
        public static native long CResult_BlindedPathNoneZ_clone(long orig);
+       // struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(struct LDKC2Tuple_BlindedPayInfoBlindedPathZ o);
+       public static native long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(long o);
+       // struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err(void);
+       public static native long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
+       // bool CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(const struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(long o);
+       // void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ _res);
+       public static native void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(long _res);
+       // uint64_t CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(long arg);
+       // struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(const struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR orig);
+       public static native long CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(long orig);
        // struct LDKCResult_BlindedPathDecodeErrorZ CResult_BlindedPathDecodeErrorZ_ok(struct LDKBlindedPath o);
        public static native long CResult_BlindedPathDecodeErrorZ_ok(long o);
        // struct LDKCResult_BlindedPathDecodeErrorZ CResult_BlindedPathDecodeErrorZ_err(struct LDKDecodeError e);
@@ -5930,16 +6193,32 @@ public class bindings {
        public static native byte[] TransactionU16LenLimited_write(long obj);
        // struct LDKCResult_TransactionU16LenLimitedDecodeErrorZ TransactionU16LenLimited_read(struct LDKu8slice ser);
        public static native long TransactionU16LenLimited_read(byte[] ser);
-       // struct LDKCResult_StringErrorZ sign(struct LDKu8slice msg, const uint8_t (*sk)[32]);
+       // struct LDKCResult_StrSecp256k1ErrorZ sign(struct LDKu8slice msg, const uint8_t (*sk)[32]);
        public static native long sign(byte[] msg, byte[] sk);
-       // struct LDKCResult_PublicKeyErrorZ recover_pk(struct LDKu8slice msg, struct LDKStr sig);
+       // struct LDKCResult_PublicKeySecp256k1ErrorZ recover_pk(struct LDKu8slice msg, struct LDKStr sig);
        public static native long recover_pk(byte[] msg, String sig);
        // bool verify(struct LDKu8slice msg, struct LDKStr sig, struct LDKPublicKey pk);
        public static native boolean verify(byte[] msg, String sig, byte[] pk);
        // struct LDKCVec_u8Z construct_invoice_preimage(struct LDKu8slice hrp_bytes, struct LDKCVec_U5Z data_without_signature);
        public static native byte[] construct_invoice_preimage(byte[] hrp_bytes, byte[] data_without_signature);
+       // void KVStore_free(struct LDKKVStore this_ptr);
+       public static native void KVStore_free(long this_ptr);
        // void Persister_free(struct LDKPersister this_ptr);
        public static native void Persister_free(long this_ptr);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ read_channel_monitors(struct LDKKVStore kv_store, struct LDKEntropySource entropy_source, struct LDKSignerProvider signer_provider);
+       public static native long read_channel_monitors(long kv_store, long entropy_source, long signer_provider);
+       // void MonitorUpdatingPersister_free(struct LDKMonitorUpdatingPersister this_obj);
+       public static native void MonitorUpdatingPersister_free(long this_obj);
+       // MUST_USE_RES struct LDKMonitorUpdatingPersister MonitorUpdatingPersister_new(struct LDKKVStore kv_store, struct LDKLogger logger, uint64_t maximum_pending_updates, struct LDKEntropySource entropy_source, struct LDKSignerProvider signer_provider);
+       public static native long MonitorUpdatingPersister_new(long kv_store, long logger, long maximum_pending_updates, long entropy_source, long signer_provider);
+       // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ MonitorUpdatingPersister_read_all_channel_monitors_with_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, const struct LDKFeeEstimator *NONNULL_PTR fee_estimator);
+       public static native long MonitorUpdatingPersister_read_all_channel_monitors_with_updates(long this_arg, long broadcaster, long fee_estimator);
+       // MUST_USE_RES struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ MonitorUpdatingPersister_read_channel_monitor_with_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, const struct LDKFeeEstimator *NONNULL_PTR fee_estimator, struct LDKStr monitor_key);
+       public static native long MonitorUpdatingPersister_read_channel_monitor_with_updates(long this_arg, long broadcaster, long fee_estimator, String monitor_key);
+       // MUST_USE_RES struct LDKCResult_NoneIOErrorZ MonitorUpdatingPersister_cleanup_stale_updates(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg, bool lazy);
+       public static native long MonitorUpdatingPersister_cleanup_stale_updates(long this_arg, boolean lazy);
+       // struct LDKPersist MonitorUpdatingPersister_as_Persist(const struct LDKMonitorUpdatingPersister *NONNULL_PTR this_arg);
+       public static native long MonitorUpdatingPersister_as_Persist(long this_arg);
        // void UntrustedString_free(struct LDKUntrustedString this_obj);
        public static native void UntrustedString_free(long this_obj);
        // struct LDKStr UntrustedString_get_a(const struct LDKUntrustedString *NONNULL_PTR this_ptr);
@@ -6292,8 +6571,8 @@ public class bindings {
        public static native ChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_completed();
        // enum LDKChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_in_progress(void);
        public static native ChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_in_progress();
-       // enum LDKChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_permanent_failure(void);
-       public static native ChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_permanent_failure();
+       // enum LDKChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_unrecoverable_error(void);
+       public static native ChannelMonitorUpdateStatus ChannelMonitorUpdateStatus_unrecoverable_error();
        // bool ChannelMonitorUpdateStatus_eq(const enum LDKChannelMonitorUpdateStatus *NONNULL_PTR a, const enum LDKChannelMonitorUpdateStatus *NONNULL_PTR b);
        public static native boolean ChannelMonitorUpdateStatus_eq(long a, long b);
        // void Watch_free(struct LDKWatch this_ptr);
@@ -6302,9 +6581,9 @@ public class bindings {
        public static native void Filter_free(long this_ptr);
        // void WatchedOutput_free(struct LDKWatchedOutput this_obj);
        public static native void WatchedOutput_free(long this_obj);
-       // struct LDKCOption_BlockHashZ WatchedOutput_get_block_hash(const struct LDKWatchedOutput *NONNULL_PTR this_ptr);
+       // struct LDKCOption_ThirtyTwoBytesZ WatchedOutput_get_block_hash(const struct LDKWatchedOutput *NONNULL_PTR this_ptr);
        public static native long WatchedOutput_get_block_hash(long this_ptr);
-       // void WatchedOutput_set_block_hash(struct LDKWatchedOutput *NONNULL_PTR this_ptr, struct LDKCOption_BlockHashZ val);
+       // void WatchedOutput_set_block_hash(struct LDKWatchedOutput *NONNULL_PTR this_ptr, struct LDKCOption_ThirtyTwoBytesZ val);
        public static native void WatchedOutput_set_block_hash(long this_ptr, long val);
        // struct LDKOutPoint WatchedOutput_get_outpoint(const struct LDKWatchedOutput *NONNULL_PTR this_ptr);
        public static native long WatchedOutput_get_outpoint(long this_ptr);
@@ -6314,7 +6593,7 @@ public class bindings {
        public static native byte[] WatchedOutput_get_script_pubkey(long this_ptr);
        // void WatchedOutput_set_script_pubkey(struct LDKWatchedOutput *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
        public static native void WatchedOutput_set_script_pubkey(long this_ptr, byte[] val);
-       // MUST_USE_RES struct LDKWatchedOutput WatchedOutput_new(struct LDKCOption_BlockHashZ block_hash_arg, struct LDKOutPoint outpoint_arg, struct LDKCVec_u8Z script_pubkey_arg);
+       // MUST_USE_RES struct LDKWatchedOutput WatchedOutput_new(struct LDKCOption_ThirtyTwoBytesZ block_hash_arg, struct LDKOutPoint outpoint_arg, struct LDKCVec_u8Z script_pubkey_arg);
        public static native long WatchedOutput_new(long block_hash_arg, long outpoint_arg, byte[] script_pubkey_arg);
        // uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg);
        public static native long WatchedOutput_clone_ptr(long arg);
@@ -6406,12 +6685,10 @@ public class bindings {
        public static native long MonitorEvent_clone(long orig);
        // struct LDKMonitorEvent MonitorEvent_htlcevent(struct LDKHTLCUpdate a);
        public static native long MonitorEvent_htlcevent(long a);
-       // struct LDKMonitorEvent MonitorEvent_commitment_tx_confirmed(struct LDKOutPoint a);
-       public static native long MonitorEvent_commitment_tx_confirmed(long a);
+       // struct LDKMonitorEvent MonitorEvent_holder_force_closed(struct LDKOutPoint a);
+       public static native long MonitorEvent_holder_force_closed(long a);
        // struct LDKMonitorEvent MonitorEvent_completed(struct LDKOutPoint funding_txo, uint64_t monitor_update_id);
        public static native long MonitorEvent_completed(long funding_txo, long monitor_update_id);
-       // struct LDKMonitorEvent MonitorEvent_update_failed(struct LDKOutPoint a);
-       public static native long MonitorEvent_update_failed(long a);
        // bool MonitorEvent_eq(const struct LDKMonitorEvent *NONNULL_PTR a, const struct LDKMonitorEvent *NONNULL_PTR b);
        public static native boolean MonitorEvent_eq(long a, long b);
        // struct LDKCVec_u8Z MonitorEvent_write(const struct LDKMonitorEvent *NONNULL_PTR obj);
@@ -6460,13 +6737,13 @@ public class bindings {
        public static native long ChannelMonitor_clone(long orig);
        // struct LDKCVec_u8Z ChannelMonitor_write(const struct LDKChannelMonitor *NONNULL_PTR obj);
        public static native byte[] ChannelMonitor_write(long obj);
-       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelMonitor_update_monitor(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKChannelMonitorUpdate *NONNULL_PTR updates, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, struct LDKFeeEstimator fee_estimator, const struct LDKLogger *NONNULL_PTR logger);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelMonitor_update_monitor(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKChannelMonitorUpdate *NONNULL_PTR updates, const struct LDKBroadcasterInterface *NONNULL_PTR broadcaster, const struct LDKFeeEstimator *NONNULL_PTR fee_estimator, const struct LDKLogger *NONNULL_PTR logger);
        public static native long ChannelMonitor_update_monitor(long this_arg, long updates, long broadcaster, long fee_estimator, long logger);
        // MUST_USE_RES uint64_t ChannelMonitor_get_latest_update_id(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native long ChannelMonitor_get_latest_update_id(long this_arg);
-       // MUST_USE_RES struct LDKC2Tuple_OutPointScriptZ ChannelMonitor_get_funding_txo(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKC2Tuple_OutPointCVec_u8ZZ ChannelMonitor_get_funding_txo(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native long ChannelMonitor_get_funding_txo(long this_arg);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ChannelMonitor_get_outputs_to_watch(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ ChannelMonitor_get_outputs_to_watch(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native long[] ChannelMonitor_get_outputs_to_watch(long this_arg);
        // void ChannelMonitor_load_outputs_to_watch(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKFilter *NONNULL_PTR filter);
        public static native void ChannelMonitor_load_outputs_to_watch(long this_arg, long filter);
@@ -6474,30 +6751,38 @@ public class bindings {
        public static native long[] ChannelMonitor_get_and_clear_pending_monitor_events(long this_arg);
        // void ChannelMonitor_process_pending_events(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKEventHandler *NONNULL_PTR handler);
        public static native void ChannelMonitor_process_pending_events(long this_arg, long handler);
+       // MUST_USE_RES struct LDKCommitmentTransaction ChannelMonitor_initial_counterparty_commitment_tx(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
+       public static native long ChannelMonitor_initial_counterparty_commitment_tx(long this_arg);
+       // MUST_USE_RES struct LDKCVec_CommitmentTransactionZ ChannelMonitor_counterparty_commitment_txs_from_update(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKChannelMonitorUpdate *NONNULL_PTR update);
+       public static native long[] ChannelMonitor_counterparty_commitment_txs_from_update(long this_arg, long update);
+       // MUST_USE_RES struct LDKCResult_TransactionNoneZ ChannelMonitor_sign_to_local_justice_tx(const struct LDKChannelMonitor *NONNULL_PTR this_arg, struct LDKTransaction justice_tx, uintptr_t input_idx, uint64_t value, uint64_t commitment_number);
+       public static native long ChannelMonitor_sign_to_local_justice_tx(long this_arg, byte[] justice_tx, long input_idx, long value, long commitment_number);
        // MUST_USE_RES struct LDKPublicKey ChannelMonitor_get_counterparty_node_id(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native byte[] ChannelMonitor_get_counterparty_node_id(long this_arg);
        // MUST_USE_RES struct LDKCVec_TransactionZ ChannelMonitor_get_latest_holder_commitment_txn(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const struct LDKLogger *NONNULL_PTR logger);
        public static native byte[][] ChannelMonitor_get_latest_holder_commitment_txn(long this_arg, long logger);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ChannelMonitor_block_connected(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], struct LDKCVec_C2Tuple_usizeTransactionZZ txdata, uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ChannelMonitor_block_connected(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], struct LDKCVec_C2Tuple_usizeTransactionZZ txdata, uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
        public static native long[] ChannelMonitor_block_connected(long this_arg, byte[] header, long[] txdata, int height, long broadcaster, long fee_estimator, long logger);
        // void ChannelMonitor_block_disconnected(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
        public static native void ChannelMonitor_block_disconnected(long this_arg, byte[] header, int height, long broadcaster, long fee_estimator, long logger);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ChannelMonitor_transactions_confirmed(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], struct LDKCVec_C2Tuple_usizeTransactionZZ txdata, uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ChannelMonitor_transactions_confirmed(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], struct LDKCVec_C2Tuple_usizeTransactionZZ txdata, uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
        public static native long[] ChannelMonitor_transactions_confirmed(long this_arg, byte[] header, long[] txdata, int height, long broadcaster, long fee_estimator, long logger);
        // void ChannelMonitor_transaction_unconfirmed(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*txid)[32], struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
        public static native void ChannelMonitor_transaction_unconfirmed(long this_arg, byte[] txid, long broadcaster, long fee_estimator, long logger);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ChannelMonitor_best_block_updated(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ChannelMonitor_best_block_updated(const struct LDKChannelMonitor *NONNULL_PTR this_arg, const uint8_t (*header)[80], uint32_t height, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
        public static native long[] ChannelMonitor_best_block_updated(long this_arg, byte[] header, int height, long broadcaster, long fee_estimator, long logger);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ChannelMonitor_get_relevant_txids(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ChannelMonitor_get_relevant_txids(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native long[] ChannelMonitor_get_relevant_txids(long this_arg);
        // MUST_USE_RES struct LDKBestBlock ChannelMonitor_current_best_block(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native long ChannelMonitor_current_best_block(long this_arg);
        // void ChannelMonitor_rebroadcast_pending_claims(const struct LDKChannelMonitor *NONNULL_PTR this_arg, struct LDKBroadcasterInterface broadcaster, struct LDKFeeEstimator fee_estimator, struct LDKLogger logger);
        public static native void ChannelMonitor_rebroadcast_pending_claims(long this_arg, long broadcaster, long fee_estimator, long logger);
+       // MUST_USE_RES struct LDKCVec_SpendableOutputDescriptorZ ChannelMonitor_get_spendable_outputs(const struct LDKChannelMonitor *NONNULL_PTR this_arg, struct LDKTransaction tx, uint32_t confirmation_height);
+       public static native long[] ChannelMonitor_get_spendable_outputs(long this_arg, byte[] tx, int confirmation_height);
        // MUST_USE_RES struct LDKCVec_BalanceZ ChannelMonitor_get_claimable_balances(const struct LDKChannelMonitor *NONNULL_PTR this_arg);
        public static native long[] ChannelMonitor_get_claimable_balances(long this_arg);
-       // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ C2Tuple_BlockHashChannelMonitorZ_read(struct LDKu8slice ser, const struct LDKEntropySource *NONNULL_PTR arg_a, const struct LDKSignerProvider *NONNULL_PTR arg_b);
-       public static native long C2Tuple_BlockHashChannelMonitorZ_read(byte[] ser, long arg_a, long arg_b);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ C2Tuple_ThirtyTwoBytesChannelMonitorZ_read(struct LDKu8slice ser, const struct LDKEntropySource *NONNULL_PTR arg_a, const struct LDKSignerProvider *NONNULL_PTR arg_b);
+       public static native long C2Tuple_ThirtyTwoBytesChannelMonitorZ_read(byte[] ser, long arg_a, long arg_b);
        // void OutPoint_free(struct LDKOutPoint this_obj);
        public static native void OutPoint_free(long this_obj);
        // const uint8_t (*OutPoint_get_txid(const struct LDKOutPoint *NONNULL_PTR this_ptr))[32];
@@ -6524,14 +6809,20 @@ public class bindings {
        public static native byte[] OutPoint_write(long obj);
        // struct LDKCResult_OutPointDecodeErrorZ OutPoint_read(struct LDKu8slice ser);
        public static native long OutPoint_read(byte[] ser);
-       // enum LDKFailureCode FailureCode_clone(const enum LDKFailureCode *NONNULL_PTR orig);
-       public static native FailureCode FailureCode_clone(long orig);
-       // enum LDKFailureCode FailureCode_temporary_node_failure(void);
-       public static native FailureCode FailureCode_temporary_node_failure();
-       // enum LDKFailureCode FailureCode_required_node_feature_missing(void);
-       public static native FailureCode FailureCode_required_node_feature_missing();
-       // enum LDKFailureCode FailureCode_incorrect_or_unknown_payment_details(void);
-       public static native FailureCode FailureCode_incorrect_or_unknown_payment_details();
+       // void FailureCode_free(struct LDKFailureCode this_ptr);
+       public static native void FailureCode_free(long this_ptr);
+       // uint64_t FailureCode_clone_ptr(LDKFailureCode *NONNULL_PTR arg);
+       public static native long FailureCode_clone_ptr(long arg);
+       // struct LDKFailureCode FailureCode_clone(const struct LDKFailureCode *NONNULL_PTR orig);
+       public static native long FailureCode_clone(long orig);
+       // struct LDKFailureCode FailureCode_temporary_node_failure(void);
+       public static native long FailureCode_temporary_node_failure();
+       // struct LDKFailureCode FailureCode_required_node_feature_missing(void);
+       public static native long FailureCode_required_node_feature_missing();
+       // struct LDKFailureCode FailureCode_incorrect_or_unknown_payment_details(void);
+       public static native long FailureCode_incorrect_or_unknown_payment_details();
+       // struct LDKFailureCode FailureCode_invalid_onion_payload(struct LDKCOption_C2Tuple_u64u16ZZ a);
+       public static native long FailureCode_invalid_onion_payload(long a);
        // void ChannelManager_free(struct LDKChannelManager this_obj);
        public static native void ChannelManager_free(long this_obj);
        // void ChainParameters_free(struct LDKChainParameters this_obj);
@@ -6742,12 +7033,14 @@ public class bindings {
        public static native long RecentPaymentDetails_clone_ptr(long arg);
        // struct LDKRecentPaymentDetails RecentPaymentDetails_clone(const struct LDKRecentPaymentDetails *NONNULL_PTR orig);
        public static native long RecentPaymentDetails_clone(long orig);
-       // struct LDKRecentPaymentDetails RecentPaymentDetails_pending(struct LDKThirtyTwoBytes payment_hash, uint64_t total_msat);
-       public static native long RecentPaymentDetails_pending(byte[] payment_hash, long total_msat);
-       // struct LDKRecentPaymentDetails RecentPaymentDetails_fulfilled(struct LDKCOption_PaymentHashZ payment_hash);
-       public static native long RecentPaymentDetails_fulfilled(long payment_hash);
-       // struct LDKRecentPaymentDetails RecentPaymentDetails_abandoned(struct LDKThirtyTwoBytes payment_hash);
-       public static native long RecentPaymentDetails_abandoned(byte[] payment_hash);
+       // struct LDKRecentPaymentDetails RecentPaymentDetails_awaiting_invoice(struct LDKThirtyTwoBytes payment_id);
+       public static native long RecentPaymentDetails_awaiting_invoice(byte[] payment_id);
+       // struct LDKRecentPaymentDetails RecentPaymentDetails_pending(struct LDKThirtyTwoBytes payment_id, struct LDKThirtyTwoBytes payment_hash, uint64_t total_msat);
+       public static native long RecentPaymentDetails_pending(byte[] payment_id, byte[] payment_hash, long total_msat);
+       // struct LDKRecentPaymentDetails RecentPaymentDetails_fulfilled(struct LDKThirtyTwoBytes payment_id, struct LDKCOption_ThirtyTwoBytesZ payment_hash);
+       public static native long RecentPaymentDetails_fulfilled(byte[] payment_id, long payment_hash);
+       // struct LDKRecentPaymentDetails RecentPaymentDetails_abandoned(struct LDKThirtyTwoBytes payment_id, struct LDKThirtyTwoBytes payment_hash);
+       public static native long RecentPaymentDetails_abandoned(byte[] payment_id, byte[] payment_hash);
        // void PhantomRouteHints_free(struct LDKPhantomRouteHints this_obj);
        public static native void PhantomRouteHints_free(long this_obj);
        // struct LDKCVec_ChannelDetailsZ PhantomRouteHints_get_channels(const struct LDKPhantomRouteHints *NONNULL_PTR this_ptr);
@@ -6772,7 +7065,7 @@ public class bindings {
        public static native long ChannelManager_new(long fee_est, long chain_monitor, long tx_broadcaster, long router, long logger, long entropy_source, long node_signer, long signer_provider, long config, long params, int current_timestamp);
        // MUST_USE_RES struct LDKUserConfig ChannelManager_get_current_default_configuration(const struct LDKChannelManager *NONNULL_PTR this_arg);
        public static native long ChannelManager_get_current_default_configuration(long this_arg);
-       // MUST_USE_RES struct LDKCResult__u832APIErrorZ ChannelManager_create_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey their_network_key, uint64_t channel_value_satoshis, uint64_t push_msat, struct LDKU128 user_channel_id, struct LDKUserConfig override_config);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesAPIErrorZ ChannelManager_create_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey their_network_key, uint64_t channel_value_satoshis, uint64_t push_msat, struct LDKU128 user_channel_id, struct LDKUserConfig override_config);
        public static native long ChannelManager_create_channel(long this_arg, byte[] their_network_key, long channel_value_satoshis, long push_msat, byte[] user_channel_id, long override_config);
        // MUST_USE_RES struct LDKCVec_ChannelDetailsZ ChannelManager_list_channels(const struct LDKChannelManager *NONNULL_PTR this_arg);
        public static native long[] ChannelManager_list_channels(long this_arg);
@@ -6800,14 +7093,20 @@ public class bindings {
        public static native long ChannelManager_send_payment(long this_arg, byte[] payment_hash, long recipient_onion, byte[] payment_id, long route_params, long retry_strategy);
        // void ChannelManager_abandon_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_id);
        public static native void ChannelManager_abandon_payment(long this_arg, byte[] payment_id);
-       // MUST_USE_RES struct LDKCResult_PaymentHashPaymentSendFailureZ ChannelManager_send_spontaneous_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKRoute *NONNULL_PTR route, struct LDKCOption_PaymentPreimageZ payment_preimage, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesPaymentSendFailureZ ChannelManager_send_spontaneous_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, const struct LDKRoute *NONNULL_PTR route, struct LDKCOption_ThirtyTwoBytesZ payment_preimage, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id);
        public static native long ChannelManager_send_spontaneous_payment(long this_arg, long route, long payment_preimage, long recipient_onion, byte[] payment_id);
-       // MUST_USE_RES struct LDKCResult_PaymentHashRetryableSendFailureZ ChannelManager_send_spontaneous_payment_with_retry(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCOption_PaymentPreimageZ payment_preimage, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id, struct LDKRouteParameters route_params, struct LDKRetry retry_strategy);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesRetryableSendFailureZ ChannelManager_send_spontaneous_payment_with_retry(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCOption_ThirtyTwoBytesZ payment_preimage, struct LDKRecipientOnionFields recipient_onion, struct LDKThirtyTwoBytes payment_id, struct LDKRouteParameters route_params, struct LDKRetry retry_strategy);
        public static native long ChannelManager_send_spontaneous_payment_with_retry(long this_arg, long payment_preimage, long recipient_onion, byte[] payment_id, long route_params, long retry_strategy);
-       // MUST_USE_RES struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ChannelManager_send_probe(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPath path);
+       // MUST_USE_RES struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ChannelManager_send_probe(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPath path);
        public static native long ChannelManager_send_probe(long this_arg, long path);
+       // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ChannelManager_send_spontaneous_preflight_probes(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey node_id, uint64_t amount_msat, uint32_t final_cltv_expiry_delta, struct LDKCOption_u64Z liquidity_limit_multiplier);
+       public static native long ChannelManager_send_spontaneous_preflight_probes(long this_arg, byte[] node_id, long amount_msat, int final_cltv_expiry_delta, long liquidity_limit_multiplier);
+       // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ChannelManager_send_preflight_probes(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKRouteParameters route_params, struct LDKCOption_u64Z liquidity_limit_multiplier);
+       public static native long ChannelManager_send_preflight_probes(long this_arg, long route_params, long liquidity_limit_multiplier);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_funding_transaction_generated(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*temporary_channel_id)[32], struct LDKPublicKey counterparty_node_id, struct LDKTransaction funding_transaction);
        public static native long ChannelManager_funding_transaction_generated(long this_arg, byte[] temporary_channel_id, byte[] counterparty_node_id, byte[] funding_transaction);
+       // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_batch_funding_transaction_generated(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ temporary_channels, struct LDKTransaction funding_transaction);
+       public static native long ChannelManager_batch_funding_transaction_generated(long this_arg, long[] temporary_channels, byte[] funding_transaction);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_update_partial_channel_config(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey counterparty_node_id, struct LDKCVec_ThirtyTwoBytesZ channel_ids, const struct LDKChannelConfigUpdate *NONNULL_PTR config_update);
        public static native long ChannelManager_update_partial_channel_config(long this_arg, byte[] counterparty_node_id, byte[][] channel_ids, long config_update);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_update_channel_config(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKPublicKey counterparty_node_id, struct LDKCVec_ThirtyTwoBytesZ channel_ids, const struct LDKChannelConfig *NONNULL_PTR config);
@@ -6822,21 +7121,23 @@ public class bindings {
        public static native void ChannelManager_timer_tick_occurred(long this_arg);
        // void ChannelManager_fail_htlc_backwards(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*payment_hash)[32]);
        public static native void ChannelManager_fail_htlc_backwards(long this_arg, byte[] payment_hash);
-       // void ChannelManager_fail_htlc_backwards_with_reason(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*payment_hash)[32], enum LDKFailureCode failure_code);
-       public static native void ChannelManager_fail_htlc_backwards_with_reason(long this_arg, byte[] payment_hash, FailureCode failure_code);
+       // void ChannelManager_fail_htlc_backwards_with_reason(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*payment_hash)[32], struct LDKFailureCode failure_code);
+       public static native void ChannelManager_fail_htlc_backwards_with_reason(long this_arg, byte[] payment_hash, long failure_code);
        // void ChannelManager_claim_funds(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_preimage);
        public static native void ChannelManager_claim_funds(long this_arg, byte[] payment_preimage);
+       // void ChannelManager_claim_funds_with_known_custom_tlvs(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_preimage);
+       public static native void ChannelManager_claim_funds_with_known_custom_tlvs(long this_arg, byte[] payment_preimage);
        // MUST_USE_RES struct LDKPublicKey ChannelManager_get_our_node_id(const struct LDKChannelManager *NONNULL_PTR this_arg);
        public static native byte[] ChannelManager_get_our_node_id(long this_arg);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_accept_inbound_channel(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*temporary_channel_id)[32], struct LDKPublicKey counterparty_node_id, struct LDKU128 user_channel_id);
        public static native long ChannelManager_accept_inbound_channel(long this_arg, byte[] temporary_channel_id, byte[] counterparty_node_id, byte[] user_channel_id);
        // MUST_USE_RES struct LDKCResult_NoneAPIErrorZ ChannelManager_accept_inbound_channel_from_trusted_peer_0conf(const struct LDKChannelManager *NONNULL_PTR this_arg, const uint8_t (*temporary_channel_id)[32], struct LDKPublicKey counterparty_node_id, struct LDKU128 user_channel_id);
        public static native long ChannelManager_accept_inbound_channel_from_trusted_peer_0conf(long this_arg, byte[] temporary_channel_id, byte[] counterparty_node_id, byte[] user_channel_id);
-       // MUST_USE_RES struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ ChannelManager_create_inbound_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCOption_u64Z min_value_msat, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       // MUST_USE_RES struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ChannelManager_create_inbound_payment(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKCOption_u64Z min_value_msat, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
        public static native long ChannelManager_create_inbound_payment(long this_arg, long min_value_msat, int invoice_expiry_delta_secs, long min_final_cltv_expiry_delta);
-       // MUST_USE_RES struct LDKCResult_PaymentSecretNoneZ ChannelManager_create_inbound_payment_for_hash(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u64Z min_value_msat, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesNoneZ ChannelManager_create_inbound_payment_for_hash(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u64Z min_value_msat, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry);
        public static native long ChannelManager_create_inbound_payment_for_hash(long this_arg, byte[] payment_hash, long min_value_msat, int invoice_expiry_delta_secs, long min_final_cltv_expiry);
-       // MUST_USE_RES struct LDKCResult_PaymentPreimageAPIErrorZ ChannelManager_get_payment_preimage(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_hash, struct LDKThirtyTwoBytes payment_secret);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesAPIErrorZ ChannelManager_get_payment_preimage(const struct LDKChannelManager *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes payment_hash, struct LDKThirtyTwoBytes payment_secret);
        public static native long ChannelManager_get_payment_preimage(long this_arg, byte[] payment_hash, byte[] payment_secret);
        // MUST_USE_RES uint64_t ChannelManager_get_phantom_scid(const struct LDKChannelManager *NONNULL_PTR this_arg);
        public static native long ChannelManager_get_phantom_scid(long this_arg);
@@ -6854,8 +7155,10 @@ public class bindings {
        public static native long ChannelManager_as_Listen(long this_arg);
        // struct LDKConfirm ChannelManager_as_Confirm(const struct LDKChannelManager *NONNULL_PTR this_arg);
        public static native long ChannelManager_as_Confirm(long this_arg);
-       // MUST_USE_RES struct LDKFuture ChannelManager_get_persistable_update_future(const struct LDKChannelManager *NONNULL_PTR this_arg);
-       public static native long ChannelManager_get_persistable_update_future(long this_arg);
+       // MUST_USE_RES struct LDKFuture ChannelManager_get_event_or_persistence_needed_future(const struct LDKChannelManager *NONNULL_PTR this_arg);
+       public static native long ChannelManager_get_event_or_persistence_needed_future(long this_arg);
+       // MUST_USE_RES bool ChannelManager_get_and_clear_needs_persistence(const struct LDKChannelManager *NONNULL_PTR this_arg);
+       public static native boolean ChannelManager_get_and_clear_needs_persistence(long this_arg);
        // MUST_USE_RES struct LDKBestBlock ChannelManager_current_best_block(const struct LDKChannelManager *NONNULL_PTR this_arg);
        public static native long ChannelManager_current_best_block(long this_arg);
        // MUST_USE_RES struct LDKNodeFeatures ChannelManager_node_features(const struct LDKChannelManager *NONNULL_PTR this_arg);
@@ -6932,15 +7235,15 @@ public class bindings {
        public static native void ChannelManagerReadArgs_set_default_config(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelManagerReadArgs ChannelManagerReadArgs_new(struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKSignerProvider signer_provider, struct LDKFeeEstimator fee_estimator, struct LDKWatch chain_monitor, struct LDKBroadcasterInterface tx_broadcaster, struct LDKRouter router, struct LDKLogger logger, struct LDKUserConfig default_config, struct LDKCVec_ChannelMonitorZ channel_monitors);
        public static native long ChannelManagerReadArgs_new(long entropy_source, long node_signer, long signer_provider, long fee_estimator, long chain_monitor, long tx_broadcaster, long router, long logger, long default_config, long[] channel_monitors);
-       // struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ C2Tuple_BlockHashChannelManagerZ_read(struct LDKu8slice ser, struct LDKChannelManagerReadArgs arg);
-       public static native long C2Tuple_BlockHashChannelManagerZ_read(byte[] ser, long arg);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ C2Tuple_ThirtyTwoBytesChannelManagerZ_read(struct LDKu8slice ser, struct LDKChannelManagerReadArgs arg);
+       public static native long C2Tuple_ThirtyTwoBytesChannelManagerZ_read(byte[] ser, long arg);
        // void ExpandedKey_free(struct LDKExpandedKey this_obj);
        public static native void ExpandedKey_free(long this_obj);
        // MUST_USE_RES struct LDKExpandedKey ExpandedKey_new(const uint8_t (*key_material)[32]);
        public static native long ExpandedKey_new(byte[] key_material);
-       // struct LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ create(const struct LDKExpandedKey *NONNULL_PTR keys, struct LDKCOption_u64Z min_value_msat, uint32_t invoice_expiry_delta_secs, const struct LDKEntropySource *NONNULL_PTR entropy_source, uint64_t current_time, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       // struct LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ create(const struct LDKExpandedKey *NONNULL_PTR keys, struct LDKCOption_u64Z min_value_msat, uint32_t invoice_expiry_delta_secs, const struct LDKEntropySource *NONNULL_PTR entropy_source, uint64_t current_time, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
        public static native long create(long keys, long min_value_msat, int invoice_expiry_delta_secs, long entropy_source, long current_time, long min_final_cltv_expiry_delta);
-       // struct LDKCResult_PaymentSecretNoneZ create_from_hash(const struct LDKExpandedKey *NONNULL_PTR keys, struct LDKCOption_u64Z min_value_msat, struct LDKThirtyTwoBytes payment_hash, uint32_t invoice_expiry_delta_secs, uint64_t current_time, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
+       // struct LDKCResult_ThirtyTwoBytesNoneZ create_from_hash(const struct LDKExpandedKey *NONNULL_PTR keys, struct LDKCOption_u64Z min_value_msat, struct LDKThirtyTwoBytes payment_hash, uint32_t invoice_expiry_delta_secs, uint64_t current_time, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
        public static native long create_from_hash(long keys, long min_value_msat, byte[] payment_hash, int invoice_expiry_delta_secs, long current_time, long min_final_cltv_expiry_delta);
        // void DecodeError_free(struct LDKDecodeError this_ptr);
        public static native void DecodeError_free(long this_ptr);
@@ -6970,15 +7273,15 @@ public class bindings {
        public static native long Init_get_features(long this_ptr);
        // void Init_set_features(struct LDKInit *NONNULL_PTR this_ptr, struct LDKInitFeatures val);
        public static native void Init_set_features(long this_ptr, long val);
-       // struct LDKCOption_CVec_ChainHashZZ Init_get_networks(const struct LDKInit *NONNULL_PTR this_ptr);
+       // struct LDKCOption_CVec_ThirtyTwoBytesZZ Init_get_networks(const struct LDKInit *NONNULL_PTR this_ptr);
        public static native long Init_get_networks(long this_ptr);
-       // void Init_set_networks(struct LDKInit *NONNULL_PTR this_ptr, struct LDKCOption_CVec_ChainHashZZ val);
+       // void Init_set_networks(struct LDKInit *NONNULL_PTR this_ptr, struct LDKCOption_CVec_ThirtyTwoBytesZZ val);
        public static native void Init_set_networks(long this_ptr, long val);
-       // struct LDKCOption_NetAddressZ Init_get_remote_network_address(const struct LDKInit *NONNULL_PTR this_ptr);
+       // struct LDKCOption_SocketAddressZ Init_get_remote_network_address(const struct LDKInit *NONNULL_PTR this_ptr);
        public static native long Init_get_remote_network_address(long this_ptr);
-       // void Init_set_remote_network_address(struct LDKInit *NONNULL_PTR this_ptr, struct LDKCOption_NetAddressZ val);
+       // void Init_set_remote_network_address(struct LDKInit *NONNULL_PTR this_ptr, struct LDKCOption_SocketAddressZ val);
        public static native void Init_set_remote_network_address(long this_ptr, long val);
-       // MUST_USE_RES struct LDKInit Init_new(struct LDKInitFeatures features_arg, struct LDKCOption_CVec_ChainHashZZ networks_arg, struct LDKCOption_NetAddressZ remote_network_address_arg);
+       // MUST_USE_RES struct LDKInit Init_new(struct LDKInitFeatures features_arg, struct LDKCOption_CVec_ThirtyTwoBytesZZ networks_arg, struct LDKCOption_SocketAddressZ remote_network_address_arg);
        public static native long Init_new(long features_arg, long networks_arg, long remote_network_address_arg);
        // uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg);
        public static native long Init_clone_ptr(long arg);
@@ -7128,15 +7431,15 @@ public class bindings {
        public static native byte OpenChannel_get_channel_flags(long this_ptr);
        // void OpenChannel_set_channel_flags(struct LDKOpenChannel *NONNULL_PTR this_ptr, uint8_t val);
        public static native void OpenChannel_set_channel_flags(long this_ptr, byte val);
-       // struct LDKCOption_ScriptZ OpenChannel_get_shutdown_scriptpubkey(const struct LDKOpenChannel *NONNULL_PTR this_ptr);
+       // struct LDKCOption_CVec_u8ZZ OpenChannel_get_shutdown_scriptpubkey(const struct LDKOpenChannel *NONNULL_PTR this_ptr);
        public static native long OpenChannel_get_shutdown_scriptpubkey(long this_ptr);
-       // void OpenChannel_set_shutdown_scriptpubkey(struct LDKOpenChannel *NONNULL_PTR this_ptr, struct LDKCOption_ScriptZ val);
+       // void OpenChannel_set_shutdown_scriptpubkey(struct LDKOpenChannel *NONNULL_PTR this_ptr, struct LDKCOption_CVec_u8ZZ val);
        public static native void OpenChannel_set_shutdown_scriptpubkey(long this_ptr, long val);
        // struct LDKChannelTypeFeatures OpenChannel_get_channel_type(const struct LDKOpenChannel *NONNULL_PTR this_ptr);
        public static native long OpenChannel_get_channel_type(long this_ptr);
        // void OpenChannel_set_channel_type(struct LDKOpenChannel *NONNULL_PTR this_ptr, struct LDKChannelTypeFeatures val);
        public static native void OpenChannel_set_channel_type(long this_ptr, long val);
-       // MUST_USE_RES struct LDKOpenChannel OpenChannel_new(struct LDKThirtyTwoBytes chain_hash_arg, struct LDKThirtyTwoBytes temporary_channel_id_arg, uint64_t funding_satoshis_arg, uint64_t push_msat_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t channel_reserve_satoshis_arg, uint64_t htlc_minimum_msat_arg, uint32_t feerate_per_kw_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_point_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, uint8_t channel_flags_arg, struct LDKCOption_ScriptZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg);
+       // MUST_USE_RES struct LDKOpenChannel OpenChannel_new(struct LDKThirtyTwoBytes chain_hash_arg, struct LDKThirtyTwoBytes temporary_channel_id_arg, uint64_t funding_satoshis_arg, uint64_t push_msat_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t channel_reserve_satoshis_arg, uint64_t htlc_minimum_msat_arg, uint32_t feerate_per_kw_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_point_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, uint8_t channel_flags_arg, struct LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg);
        public static native long OpenChannel_new(byte[] chain_hash_arg, byte[] temporary_channel_id_arg, long funding_satoshis_arg, long push_msat_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long channel_reserve_satoshis_arg, long htlc_minimum_msat_arg, int feerate_per_kw_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte channel_flags_arg, long shutdown_scriptpubkey_arg, long channel_type_arg);
        // uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg);
        public static native long OpenChannel_clone_ptr(long arg);
@@ -7222,9 +7525,9 @@ public class bindings {
        public static native byte OpenChannelV2_get_channel_flags(long this_ptr);
        // void OpenChannelV2_set_channel_flags(struct LDKOpenChannelV2 *NONNULL_PTR this_ptr, uint8_t val);
        public static native void OpenChannelV2_set_channel_flags(long this_ptr, byte val);
-       // struct LDKCOption_ScriptZ OpenChannelV2_get_shutdown_scriptpubkey(const struct LDKOpenChannelV2 *NONNULL_PTR this_ptr);
+       // struct LDKCOption_CVec_u8ZZ OpenChannelV2_get_shutdown_scriptpubkey(const struct LDKOpenChannelV2 *NONNULL_PTR this_ptr);
        public static native long OpenChannelV2_get_shutdown_scriptpubkey(long this_ptr);
-       // void OpenChannelV2_set_shutdown_scriptpubkey(struct LDKOpenChannelV2 *NONNULL_PTR this_ptr, struct LDKCOption_ScriptZ val);
+       // void OpenChannelV2_set_shutdown_scriptpubkey(struct LDKOpenChannelV2 *NONNULL_PTR this_ptr, struct LDKCOption_CVec_u8ZZ val);
        public static native void OpenChannelV2_set_shutdown_scriptpubkey(long this_ptr, long val);
        // struct LDKChannelTypeFeatures OpenChannelV2_get_channel_type(const struct LDKOpenChannelV2 *NONNULL_PTR this_ptr);
        public static native long OpenChannelV2_get_channel_type(long this_ptr);
@@ -7234,7 +7537,7 @@ public class bindings {
        public static native COption_NoneZ OpenChannelV2_get_require_confirmed_inputs(long this_ptr);
        // void OpenChannelV2_set_require_confirmed_inputs(struct LDKOpenChannelV2 *NONNULL_PTR this_ptr, enum LDKCOption_NoneZ val);
        public static native void OpenChannelV2_set_require_confirmed_inputs(long this_ptr, COption_NoneZ val);
-       // MUST_USE_RES struct LDKOpenChannelV2 OpenChannelV2_new(struct LDKThirtyTwoBytes chain_hash_arg, struct LDKThirtyTwoBytes temporary_channel_id_arg, uint32_t funding_feerate_sat_per_1000_weight_arg, uint32_t commitment_feerate_sat_per_1000_weight_arg, uint64_t funding_satoshis_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t htlc_minimum_msat_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, uint32_t locktime_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_basepoint_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, struct LDKPublicKey second_per_commitment_point_arg, uint8_t channel_flags_arg, struct LDKCOption_ScriptZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg, enum LDKCOption_NoneZ require_confirmed_inputs_arg);
+       // MUST_USE_RES struct LDKOpenChannelV2 OpenChannelV2_new(struct LDKThirtyTwoBytes chain_hash_arg, struct LDKThirtyTwoBytes temporary_channel_id_arg, uint32_t funding_feerate_sat_per_1000_weight_arg, uint32_t commitment_feerate_sat_per_1000_weight_arg, uint64_t funding_satoshis_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t htlc_minimum_msat_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, uint32_t locktime_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_basepoint_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, struct LDKPublicKey second_per_commitment_point_arg, uint8_t channel_flags_arg, struct LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg, enum LDKCOption_NoneZ require_confirmed_inputs_arg);
        public static native long OpenChannelV2_new(byte[] chain_hash_arg, byte[] temporary_channel_id_arg, int funding_feerate_sat_per_1000_weight_arg, int commitment_feerate_sat_per_1000_weight_arg, long funding_satoshis_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, int locktime_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_basepoint_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte[] second_per_commitment_point_arg, byte channel_flags_arg, long shutdown_scriptpubkey_arg, long channel_type_arg, COption_NoneZ require_confirmed_inputs_arg);
        // uint64_t OpenChannelV2_clone_ptr(LDKOpenChannelV2 *NONNULL_PTR arg);
        public static native long OpenChannelV2_clone_ptr(long arg);
@@ -7300,15 +7603,15 @@ public class bindings {
        public static native byte[] AcceptChannel_get_first_per_commitment_point(long this_ptr);
        // void AcceptChannel_set_first_per_commitment_point(struct LDKAcceptChannel *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        public static native void AcceptChannel_set_first_per_commitment_point(long this_ptr, byte[] val);
-       // struct LDKCOption_ScriptZ AcceptChannel_get_shutdown_scriptpubkey(const struct LDKAcceptChannel *NONNULL_PTR this_ptr);
+       // struct LDKCOption_CVec_u8ZZ AcceptChannel_get_shutdown_scriptpubkey(const struct LDKAcceptChannel *NONNULL_PTR this_ptr);
        public static native long AcceptChannel_get_shutdown_scriptpubkey(long this_ptr);
-       // void AcceptChannel_set_shutdown_scriptpubkey(struct LDKAcceptChannel *NONNULL_PTR this_ptr, struct LDKCOption_ScriptZ val);
+       // void AcceptChannel_set_shutdown_scriptpubkey(struct LDKAcceptChannel *NONNULL_PTR this_ptr, struct LDKCOption_CVec_u8ZZ val);
        public static native void AcceptChannel_set_shutdown_scriptpubkey(long this_ptr, long val);
        // struct LDKChannelTypeFeatures AcceptChannel_get_channel_type(const struct LDKAcceptChannel *NONNULL_PTR this_ptr);
        public static native long AcceptChannel_get_channel_type(long this_ptr);
        // void AcceptChannel_set_channel_type(struct LDKAcceptChannel *NONNULL_PTR this_ptr, struct LDKChannelTypeFeatures val);
        public static native void AcceptChannel_set_channel_type(long this_ptr, long val);
-       // MUST_USE_RES struct LDKAcceptChannel AcceptChannel_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t channel_reserve_satoshis_arg, uint64_t htlc_minimum_msat_arg, uint32_t minimum_depth_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_point_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, struct LDKCOption_ScriptZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg);
+       // MUST_USE_RES struct LDKAcceptChannel AcceptChannel_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t channel_reserve_satoshis_arg, uint64_t htlc_minimum_msat_arg, uint32_t minimum_depth_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_point_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, struct LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg);
        public static native long AcceptChannel_new(byte[] temporary_channel_id_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long channel_reserve_satoshis_arg, long htlc_minimum_msat_arg, int minimum_depth_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, long shutdown_scriptpubkey_arg, long channel_type_arg);
        // uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg);
        public static native long AcceptChannel_clone_ptr(long arg);
@@ -7378,9 +7681,9 @@ public class bindings {
        public static native byte[] AcceptChannelV2_get_second_per_commitment_point(long this_ptr);
        // void AcceptChannelV2_set_second_per_commitment_point(struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        public static native void AcceptChannelV2_set_second_per_commitment_point(long this_ptr, byte[] val);
-       // struct LDKCOption_ScriptZ AcceptChannelV2_get_shutdown_scriptpubkey(const struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr);
+       // struct LDKCOption_CVec_u8ZZ AcceptChannelV2_get_shutdown_scriptpubkey(const struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr);
        public static native long AcceptChannelV2_get_shutdown_scriptpubkey(long this_ptr);
-       // void AcceptChannelV2_set_shutdown_scriptpubkey(struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr, struct LDKCOption_ScriptZ val);
+       // void AcceptChannelV2_set_shutdown_scriptpubkey(struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr, struct LDKCOption_CVec_u8ZZ val);
        public static native void AcceptChannelV2_set_shutdown_scriptpubkey(long this_ptr, long val);
        // struct LDKChannelTypeFeatures AcceptChannelV2_get_channel_type(const struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr);
        public static native long AcceptChannelV2_get_channel_type(long this_ptr);
@@ -7390,7 +7693,7 @@ public class bindings {
        public static native COption_NoneZ AcceptChannelV2_get_require_confirmed_inputs(long this_ptr);
        // void AcceptChannelV2_set_require_confirmed_inputs(struct LDKAcceptChannelV2 *NONNULL_PTR this_ptr, enum LDKCOption_NoneZ val);
        public static native void AcceptChannelV2_set_require_confirmed_inputs(long this_ptr, COption_NoneZ val);
-       // MUST_USE_RES struct LDKAcceptChannelV2 AcceptChannelV2_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, uint64_t funding_satoshis_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t htlc_minimum_msat_arg, uint32_t minimum_depth_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_basepoint_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, struct LDKPublicKey second_per_commitment_point_arg, struct LDKCOption_ScriptZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg, enum LDKCOption_NoneZ require_confirmed_inputs_arg);
+       // MUST_USE_RES struct LDKAcceptChannelV2 AcceptChannelV2_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, uint64_t funding_satoshis_arg, uint64_t dust_limit_satoshis_arg, uint64_t max_htlc_value_in_flight_msat_arg, uint64_t htlc_minimum_msat_arg, uint32_t minimum_depth_arg, uint16_t to_self_delay_arg, uint16_t max_accepted_htlcs_arg, struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_basepoint_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg, struct LDKPublicKey first_per_commitment_point_arg, struct LDKPublicKey second_per_commitment_point_arg, struct LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg, struct LDKChannelTypeFeatures channel_type_arg, enum LDKCOption_NoneZ require_confirmed_inputs_arg);
        public static native long AcceptChannelV2_new(byte[] temporary_channel_id_arg, long funding_satoshis_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, int minimum_depth_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_basepoint_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte[] second_per_commitment_point_arg, long shutdown_scriptpubkey_arg, long channel_type_arg, COption_NoneZ require_confirmed_inputs_arg);
        // uint64_t AcceptChannelV2_clone_ptr(LDKAcceptChannelV2 *NONNULL_PTR arg);
        public static native long AcceptChannelV2_clone_ptr(long arg);
@@ -7412,11 +7715,11 @@ public class bindings {
        public static native short FundingCreated_get_funding_output_index(long this_ptr);
        // void FundingCreated_set_funding_output_index(struct LDKFundingCreated *NONNULL_PTR this_ptr, uint16_t val);
        public static native void FundingCreated_set_funding_output_index(long this_ptr, short val);
-       // struct LDKSignature FundingCreated_get_signature(const struct LDKFundingCreated *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature FundingCreated_get_signature(const struct LDKFundingCreated *NONNULL_PTR this_ptr);
        public static native byte[] FundingCreated_get_signature(long this_ptr);
-       // void FundingCreated_set_signature(struct LDKFundingCreated *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void FundingCreated_set_signature(struct LDKFundingCreated *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void FundingCreated_set_signature(long this_ptr, byte[] val);
-       // MUST_USE_RES struct LDKFundingCreated FundingCreated_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, struct LDKThirtyTwoBytes funding_txid_arg, uint16_t funding_output_index_arg, struct LDKSignature signature_arg);
+       // MUST_USE_RES struct LDKFundingCreated FundingCreated_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, struct LDKThirtyTwoBytes funding_txid_arg, uint16_t funding_output_index_arg, struct LDKECDSASignature signature_arg);
        public static native long FundingCreated_new(byte[] temporary_channel_id_arg, byte[] funding_txid_arg, short funding_output_index_arg, byte[] signature_arg);
        // uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg);
        public static native long FundingCreated_clone_ptr(long arg);
@@ -7430,11 +7733,11 @@ public class bindings {
        public static native byte[] FundingSigned_get_channel_id(long this_ptr);
        // void FundingSigned_set_channel_id(struct LDKFundingSigned *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
        public static native void FundingSigned_set_channel_id(long this_ptr, byte[] val);
-       // struct LDKSignature FundingSigned_get_signature(const struct LDKFundingSigned *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature FundingSigned_get_signature(const struct LDKFundingSigned *NONNULL_PTR this_ptr);
        public static native byte[] FundingSigned_get_signature(long this_ptr);
-       // void FundingSigned_set_signature(struct LDKFundingSigned *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void FundingSigned_set_signature(struct LDKFundingSigned *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void FundingSigned_set_signature(long this_ptr, byte[] val);
-       // MUST_USE_RES struct LDKFundingSigned FundingSigned_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKSignature signature_arg);
+       // MUST_USE_RES struct LDKFundingSigned FundingSigned_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKECDSASignature signature_arg);
        public static native long FundingSigned_new(byte[] channel_id_arg, byte[] signature_arg);
        // uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg);
        public static native long FundingSigned_clone_ptr(long arg);
@@ -7700,15 +8003,15 @@ public class bindings {
        public static native long ClosingSigned_get_fee_satoshis(long this_ptr);
        // void ClosingSigned_set_fee_satoshis(struct LDKClosingSigned *NONNULL_PTR this_ptr, uint64_t val);
        public static native void ClosingSigned_set_fee_satoshis(long this_ptr, long val);
-       // struct LDKSignature ClosingSigned_get_signature(const struct LDKClosingSigned *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature ClosingSigned_get_signature(const struct LDKClosingSigned *NONNULL_PTR this_ptr);
        public static native byte[] ClosingSigned_get_signature(long this_ptr);
-       // void ClosingSigned_set_signature(struct LDKClosingSigned *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void ClosingSigned_set_signature(struct LDKClosingSigned *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void ClosingSigned_set_signature(long this_ptr, byte[] val);
        // struct LDKClosingSignedFeeRange ClosingSigned_get_fee_range(const struct LDKClosingSigned *NONNULL_PTR this_ptr);
        public static native long ClosingSigned_get_fee_range(long this_ptr);
        // void ClosingSigned_set_fee_range(struct LDKClosingSigned *NONNULL_PTR this_ptr, struct LDKClosingSignedFeeRange val);
        public static native void ClosingSigned_set_fee_range(long this_ptr, long val);
-       // MUST_USE_RES struct LDKClosingSigned ClosingSigned_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t fee_satoshis_arg, struct LDKSignature signature_arg, struct LDKClosingSignedFeeRange fee_range_arg);
+       // MUST_USE_RES struct LDKClosingSigned ClosingSigned_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t fee_satoshis_arg, struct LDKECDSASignature signature_arg, struct LDKClosingSignedFeeRange fee_range_arg);
        public static native long ClosingSigned_new(byte[] channel_id_arg, long fee_satoshis_arg, byte[] signature_arg, long fee_range_arg);
        // uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg);
        public static native long ClosingSigned_clone_ptr(long arg);
@@ -7754,6 +8057,12 @@ public class bindings {
        public static native byte[] OnionMessage_get_blinding_point(long this_ptr);
        // void OnionMessage_set_blinding_point(struct LDKOnionMessage *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        public static native void OnionMessage_set_blinding_point(long this_ptr, byte[] val);
+       // struct LDKPacket OnionMessage_get_onion_routing_packet(const struct LDKOnionMessage *NONNULL_PTR this_ptr);
+       public static native long OnionMessage_get_onion_routing_packet(long this_ptr);
+       // void OnionMessage_set_onion_routing_packet(struct LDKOnionMessage *NONNULL_PTR this_ptr, struct LDKPacket val);
+       public static native void OnionMessage_set_onion_routing_packet(long this_ptr, long val);
+       // MUST_USE_RES struct LDKOnionMessage OnionMessage_new(struct LDKPublicKey blinding_point_arg, struct LDKPacket onion_routing_packet_arg);
+       public static native long OnionMessage_new(byte[] blinding_point_arg, long onion_routing_packet_arg);
        // uint64_t OnionMessage_clone_ptr(LDKOnionMessage *NONNULL_PTR arg);
        public static native long OnionMessage_clone_ptr(long arg);
        // struct LDKOnionMessage OnionMessage_clone(const struct LDKOnionMessage *NONNULL_PTR orig);
@@ -7824,15 +8133,15 @@ public class bindings {
        public static native byte[] CommitmentSigned_get_channel_id(long this_ptr);
        // void CommitmentSigned_set_channel_id(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
        public static native void CommitmentSigned_set_channel_id(long this_ptr, byte[] val);
-       // struct LDKSignature CommitmentSigned_get_signature(const struct LDKCommitmentSigned *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature CommitmentSigned_get_signature(const struct LDKCommitmentSigned *NONNULL_PTR this_ptr);
        public static native byte[] CommitmentSigned_get_signature(long this_ptr);
-       // void CommitmentSigned_set_signature(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void CommitmentSigned_set_signature(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKECDSASignature 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);
+       // struct LDKCVec_ECDSASignatureZ 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);
+       // void CommitmentSigned_set_htlc_signatures(struct LDKCommitmentSigned *NONNULL_PTR this_ptr, struct LDKCVec_ECDSASignatureZ 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);
+       // MUST_USE_RES struct LDKCommitmentSigned CommitmentSigned_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKECDSASignature signature_arg, struct LDKCVec_ECDSASignatureZ htlc_signatures_arg);
        public static native long CommitmentSigned_new(byte[] channel_id_arg, byte[] signature_arg, byte[][] htlc_signatures_arg);
        // uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg);
        public static native long CommitmentSigned_clone_ptr(long arg);
@@ -7902,11 +8211,11 @@ public class bindings {
        public static native byte[] ChannelReestablish_get_my_current_per_commitment_point(long this_ptr);
        // void ChannelReestablish_set_my_current_per_commitment_point(struct LDKChannelReestablish *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        public static native void ChannelReestablish_set_my_current_per_commitment_point(long this_ptr, byte[] val);
-       // struct LDKCOption_TxidZ ChannelReestablish_get_next_funding_txid(const struct LDKChannelReestablish *NONNULL_PTR this_ptr);
+       // struct LDKCOption_ThirtyTwoBytesZ ChannelReestablish_get_next_funding_txid(const struct LDKChannelReestablish *NONNULL_PTR this_ptr);
        public static native long ChannelReestablish_get_next_funding_txid(long this_ptr);
-       // void ChannelReestablish_set_next_funding_txid(struct LDKChannelReestablish *NONNULL_PTR this_ptr, struct LDKCOption_TxidZ val);
+       // void ChannelReestablish_set_next_funding_txid(struct LDKChannelReestablish *NONNULL_PTR this_ptr, struct LDKCOption_ThirtyTwoBytesZ val);
        public static native void ChannelReestablish_set_next_funding_txid(long this_ptr, long val);
-       // MUST_USE_RES struct LDKChannelReestablish ChannelReestablish_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t next_local_commitment_number_arg, uint64_t next_remote_commitment_number_arg, struct LDKThirtyTwoBytes your_last_per_commitment_secret_arg, struct LDKPublicKey my_current_per_commitment_point_arg, struct LDKCOption_TxidZ next_funding_txid_arg);
+       // MUST_USE_RES struct LDKChannelReestablish ChannelReestablish_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t next_local_commitment_number_arg, uint64_t next_remote_commitment_number_arg, struct LDKThirtyTwoBytes your_last_per_commitment_secret_arg, struct LDKPublicKey my_current_per_commitment_point_arg, struct LDKCOption_ThirtyTwoBytesZ next_funding_txid_arg);
        public static native long ChannelReestablish_new(byte[] channel_id_arg, long next_local_commitment_number_arg, long next_remote_commitment_number_arg, byte[] your_last_per_commitment_secret_arg, byte[] my_current_per_commitment_point_arg, long next_funding_txid_arg);
        // uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg);
        public static native long ChannelReestablish_clone_ptr(long arg);
@@ -7924,15 +8233,15 @@ public class bindings {
        public static native long AnnouncementSignatures_get_short_channel_id(long this_ptr);
        // void AnnouncementSignatures_set_short_channel_id(struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr, uint64_t val);
        public static native void AnnouncementSignatures_set_short_channel_id(long this_ptr, long val);
-       // struct LDKSignature AnnouncementSignatures_get_node_signature(const struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature AnnouncementSignatures_get_node_signature(const struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr);
        public static native byte[] AnnouncementSignatures_get_node_signature(long this_ptr);
-       // void AnnouncementSignatures_set_node_signature(struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void AnnouncementSignatures_set_node_signature(struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void AnnouncementSignatures_set_node_signature(long this_ptr, byte[] val);
-       // struct LDKSignature AnnouncementSignatures_get_bitcoin_signature(const struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature AnnouncementSignatures_get_bitcoin_signature(const struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr);
        public static native byte[] AnnouncementSignatures_get_bitcoin_signature(long this_ptr);
-       // void AnnouncementSignatures_set_bitcoin_signature(struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void AnnouncementSignatures_set_bitcoin_signature(struct LDKAnnouncementSignatures *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void AnnouncementSignatures_set_bitcoin_signature(long this_ptr, byte[] val);
-       // MUST_USE_RES struct LDKAnnouncementSignatures AnnouncementSignatures_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t short_channel_id_arg, struct LDKSignature node_signature_arg, struct LDKSignature bitcoin_signature_arg);
+       // MUST_USE_RES struct LDKAnnouncementSignatures AnnouncementSignatures_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t short_channel_id_arg, struct LDKECDSASignature node_signature_arg, struct LDKECDSASignature bitcoin_signature_arg);
        public static native long AnnouncementSignatures_new(byte[] channel_id_arg, long short_channel_id_arg, byte[] node_signature_arg, byte[] bitcoin_signature_arg);
        // uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg);
        public static native long AnnouncementSignatures_clone_ptr(long arg);
@@ -7940,28 +8249,44 @@ public class bindings {
        public static native long AnnouncementSignatures_clone(long orig);
        // bool AnnouncementSignatures_eq(const struct LDKAnnouncementSignatures *NONNULL_PTR a, const struct LDKAnnouncementSignatures *NONNULL_PTR b);
        public static native boolean AnnouncementSignatures_eq(long a, long b);
-       // void NetAddress_free(struct LDKNetAddress this_ptr);
-       public static native void NetAddress_free(long this_ptr);
-       // uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg);
-       public static native long NetAddress_clone_ptr(long arg);
-       // struct LDKNetAddress NetAddress_clone(const struct LDKNetAddress *NONNULL_PTR orig);
-       public static native long NetAddress_clone(long orig);
-       // struct LDKNetAddress NetAddress_ipv4(struct LDKFourBytes addr, uint16_t port);
-       public static native long NetAddress_ipv4(byte[] addr, short port);
-       // struct LDKNetAddress NetAddress_ipv6(struct LDKSixteenBytes addr, uint16_t port);
-       public static native long NetAddress_ipv6(byte[] addr, short port);
-       // struct LDKNetAddress NetAddress_onion_v2(struct LDKTwelveBytes a);
-       public static native long NetAddress_onion_v2(byte[] a);
-       // struct LDKNetAddress NetAddress_onion_v3(struct LDKThirtyTwoBytes ed25519_pubkey, uint16_t checksum, uint8_t version, uint16_t port);
-       public static native long NetAddress_onion_v3(byte[] ed25519_pubkey, short checksum, byte version, short port);
-       // struct LDKNetAddress NetAddress_hostname(struct LDKHostname hostname, uint16_t port);
-       public static native long NetAddress_hostname(long hostname, short port);
-       // bool NetAddress_eq(const struct LDKNetAddress *NONNULL_PTR a, const struct LDKNetAddress *NONNULL_PTR b);
-       public static native boolean NetAddress_eq(long a, long b);
-       // struct LDKCVec_u8Z NetAddress_write(const struct LDKNetAddress *NONNULL_PTR obj);
-       public static native byte[] NetAddress_write(long obj);
-       // struct LDKCResult_NetAddressDecodeErrorZ NetAddress_read(struct LDKu8slice ser);
-       public static native long NetAddress_read(byte[] ser);
+       // void SocketAddress_free(struct LDKSocketAddress this_ptr);
+       public static native void SocketAddress_free(long this_ptr);
+       // uint64_t SocketAddress_clone_ptr(LDKSocketAddress *NONNULL_PTR arg);
+       public static native long SocketAddress_clone_ptr(long arg);
+       // struct LDKSocketAddress SocketAddress_clone(const struct LDKSocketAddress *NONNULL_PTR orig);
+       public static native long SocketAddress_clone(long orig);
+       // struct LDKSocketAddress SocketAddress_tcp_ip_v4(struct LDKFourBytes addr, uint16_t port);
+       public static native long SocketAddress_tcp_ip_v4(byte[] addr, short port);
+       // struct LDKSocketAddress SocketAddress_tcp_ip_v6(struct LDKSixteenBytes addr, uint16_t port);
+       public static native long SocketAddress_tcp_ip_v6(byte[] addr, short port);
+       // struct LDKSocketAddress SocketAddress_onion_v2(struct LDKTwelveBytes a);
+       public static native long SocketAddress_onion_v2(byte[] a);
+       // struct LDKSocketAddress SocketAddress_onion_v3(struct LDKThirtyTwoBytes ed25519_pubkey, uint16_t checksum, uint8_t version, uint16_t port);
+       public static native long SocketAddress_onion_v3(byte[] ed25519_pubkey, short checksum, byte version, short port);
+       // struct LDKSocketAddress SocketAddress_hostname(struct LDKHostname hostname, uint16_t port);
+       public static native long SocketAddress_hostname(long hostname, short port);
+       // bool SocketAddress_eq(const struct LDKSocketAddress *NONNULL_PTR a, const struct LDKSocketAddress *NONNULL_PTR b);
+       public static native boolean SocketAddress_eq(long a, long b);
+       // struct LDKCVec_u8Z SocketAddress_write(const struct LDKSocketAddress *NONNULL_PTR obj);
+       public static native byte[] SocketAddress_write(long obj);
+       // struct LDKCResult_SocketAddressDecodeErrorZ SocketAddress_read(struct LDKu8slice ser);
+       public static native long SocketAddress_read(byte[] ser);
+       // enum LDKSocketAddressParseError SocketAddressParseError_clone(const enum LDKSocketAddressParseError *NONNULL_PTR orig);
+       public static native SocketAddressParseError SocketAddressParseError_clone(long orig);
+       // enum LDKSocketAddressParseError SocketAddressParseError_socket_addr_parse(void);
+       public static native SocketAddressParseError SocketAddressParseError_socket_addr_parse();
+       // enum LDKSocketAddressParseError SocketAddressParseError_invalid_input(void);
+       public static native SocketAddressParseError SocketAddressParseError_invalid_input();
+       // enum LDKSocketAddressParseError SocketAddressParseError_invalid_port(void);
+       public static native SocketAddressParseError SocketAddressParseError_invalid_port();
+       // enum LDKSocketAddressParseError SocketAddressParseError_invalid_onion_v3(void);
+       public static native SocketAddressParseError SocketAddressParseError_invalid_onion_v3();
+       // bool SocketAddressParseError_eq(const enum LDKSocketAddressParseError *NONNULL_PTR a, const enum LDKSocketAddressParseError *NONNULL_PTR b);
+       public static native boolean SocketAddressParseError_eq(long a, long b);
+       // struct LDKCResult_SocketAddressSocketAddressParseErrorZ parse_onion_address(struct LDKStr host, uint16_t port);
+       public static native long parse_onion_address(String host, short port);
+       // struct LDKCResult_SocketAddressSocketAddressParseErrorZ SocketAddress_from_str(struct LDKStr s);
+       public static native long SocketAddress_from_str(String s);
        // void UnsignedGossipMessage_free(struct LDKUnsignedGossipMessage this_ptr);
        public static native void UnsignedGossipMessage_free(long this_ptr);
        // uint64_t UnsignedGossipMessage_clone_ptr(LDKUnsignedGossipMessage *NONNULL_PTR arg);
@@ -7998,9 +8323,9 @@ public class bindings {
        public static native long UnsignedNodeAnnouncement_get_alias(long this_ptr);
        // void UnsignedNodeAnnouncement_set_alias(struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKNodeAlias val);
        public static native void UnsignedNodeAnnouncement_set_alias(long this_ptr, long val);
-       // struct LDKCVec_NetAddressZ UnsignedNodeAnnouncement_get_addresses(const struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr);
+       // struct LDKCVec_SocketAddressZ 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);
+       // void UnsignedNodeAnnouncement_set_addresses(struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKCVec_SocketAddressZ val);
        public static native void UnsignedNodeAnnouncement_set_addresses(long this_ptr, long[] val);
        // uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg);
        public static native long UnsignedNodeAnnouncement_clone_ptr(long arg);
@@ -8010,15 +8335,15 @@ public class bindings {
        public static native boolean UnsignedNodeAnnouncement_eq(long a, long b);
        // void NodeAnnouncement_free(struct LDKNodeAnnouncement this_obj);
        public static native void NodeAnnouncement_free(long this_obj);
-       // struct LDKSignature NodeAnnouncement_get_signature(const struct LDKNodeAnnouncement *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature NodeAnnouncement_get_signature(const struct LDKNodeAnnouncement *NONNULL_PTR this_ptr);
        public static native byte[] NodeAnnouncement_get_signature(long this_ptr);
-       // void NodeAnnouncement_set_signature(struct LDKNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void NodeAnnouncement_set_signature(struct LDKNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void NodeAnnouncement_set_signature(long this_ptr, byte[] val);
        // struct LDKUnsignedNodeAnnouncement NodeAnnouncement_get_contents(const struct LDKNodeAnnouncement *NONNULL_PTR this_ptr);
        public static native long NodeAnnouncement_get_contents(long this_ptr);
        // void NodeAnnouncement_set_contents(struct LDKNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKUnsignedNodeAnnouncement val);
        public static native void NodeAnnouncement_set_contents(long this_ptr, long val);
-       // MUST_USE_RES struct LDKNodeAnnouncement NodeAnnouncement_new(struct LDKSignature signature_arg, struct LDKUnsignedNodeAnnouncement contents_arg);
+       // MUST_USE_RES struct LDKNodeAnnouncement NodeAnnouncement_new(struct LDKECDSASignature signature_arg, struct LDKUnsignedNodeAnnouncement contents_arg);
        public static native long NodeAnnouncement_new(byte[] signature_arg, long contents_arg);
        // uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg);
        public static native long NodeAnnouncement_clone_ptr(long arg);
@@ -8056,6 +8381,12 @@ public class bindings {
        public static native long UnsignedChannelAnnouncement_get_bitcoin_key_2(long this_ptr);
        // void UnsignedChannelAnnouncement_set_bitcoin_key_2(struct LDKUnsignedChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKNodeId val);
        public static native void UnsignedChannelAnnouncement_set_bitcoin_key_2(long this_ptr, long val);
+       // struct LDKCVec_u8Z UnsignedChannelAnnouncement_get_excess_data(const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR this_ptr);
+       public static native byte[] UnsignedChannelAnnouncement_get_excess_data(long this_ptr);
+       // void UnsignedChannelAnnouncement_set_excess_data(struct LDKUnsignedChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
+       public static native void UnsignedChannelAnnouncement_set_excess_data(long this_ptr, byte[] val);
+       // MUST_USE_RES struct LDKUnsignedChannelAnnouncement UnsignedChannelAnnouncement_new(struct LDKChannelFeatures features_arg, struct LDKThirtyTwoBytes chain_hash_arg, uint64_t short_channel_id_arg, struct LDKNodeId node_id_1_arg, struct LDKNodeId node_id_2_arg, struct LDKNodeId bitcoin_key_1_arg, struct LDKNodeId bitcoin_key_2_arg, struct LDKCVec_u8Z excess_data_arg);
+       public static native long UnsignedChannelAnnouncement_new(long features_arg, byte[] chain_hash_arg, long short_channel_id_arg, long node_id_1_arg, long node_id_2_arg, long bitcoin_key_1_arg, long bitcoin_key_2_arg, byte[] excess_data_arg);
        // uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg);
        public static native long UnsignedChannelAnnouncement_clone_ptr(long arg);
        // struct LDKUnsignedChannelAnnouncement UnsignedChannelAnnouncement_clone(const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR orig);
@@ -8064,27 +8395,27 @@ public class bindings {
        public static native boolean UnsignedChannelAnnouncement_eq(long a, long b);
        // void ChannelAnnouncement_free(struct LDKChannelAnnouncement this_obj);
        public static native void ChannelAnnouncement_free(long this_obj);
-       // struct LDKSignature ChannelAnnouncement_get_node_signature_1(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature ChannelAnnouncement_get_node_signature_1(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
        public static native byte[] ChannelAnnouncement_get_node_signature_1(long this_ptr);
-       // void ChannelAnnouncement_set_node_signature_1(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void ChannelAnnouncement_set_node_signature_1(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void ChannelAnnouncement_set_node_signature_1(long this_ptr, byte[] val);
-       // struct LDKSignature ChannelAnnouncement_get_node_signature_2(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature ChannelAnnouncement_get_node_signature_2(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
        public static native byte[] ChannelAnnouncement_get_node_signature_2(long this_ptr);
-       // void ChannelAnnouncement_set_node_signature_2(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void ChannelAnnouncement_set_node_signature_2(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void ChannelAnnouncement_set_node_signature_2(long this_ptr, byte[] val);
-       // struct LDKSignature ChannelAnnouncement_get_bitcoin_signature_1(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature ChannelAnnouncement_get_bitcoin_signature_1(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
        public static native byte[] ChannelAnnouncement_get_bitcoin_signature_1(long this_ptr);
-       // void ChannelAnnouncement_set_bitcoin_signature_1(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void ChannelAnnouncement_set_bitcoin_signature_1(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void ChannelAnnouncement_set_bitcoin_signature_1(long this_ptr, byte[] val);
-       // struct LDKSignature ChannelAnnouncement_get_bitcoin_signature_2(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature ChannelAnnouncement_get_bitcoin_signature_2(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
        public static native byte[] ChannelAnnouncement_get_bitcoin_signature_2(long this_ptr);
-       // void ChannelAnnouncement_set_bitcoin_signature_2(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void ChannelAnnouncement_set_bitcoin_signature_2(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void ChannelAnnouncement_set_bitcoin_signature_2(long this_ptr, byte[] val);
        // struct LDKUnsignedChannelAnnouncement ChannelAnnouncement_get_contents(const struct LDKChannelAnnouncement *NONNULL_PTR this_ptr);
        public static native long ChannelAnnouncement_get_contents(long this_ptr);
        // void ChannelAnnouncement_set_contents(struct LDKChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKUnsignedChannelAnnouncement val);
        public static native void ChannelAnnouncement_set_contents(long this_ptr, long val);
-       // MUST_USE_RES struct LDKChannelAnnouncement ChannelAnnouncement_new(struct LDKSignature node_signature_1_arg, struct LDKSignature node_signature_2_arg, struct LDKSignature bitcoin_signature_1_arg, struct LDKSignature bitcoin_signature_2_arg, struct LDKUnsignedChannelAnnouncement contents_arg);
+       // MUST_USE_RES struct LDKChannelAnnouncement ChannelAnnouncement_new(struct LDKECDSASignature node_signature_1_arg, struct LDKECDSASignature node_signature_2_arg, struct LDKECDSASignature bitcoin_signature_1_arg, struct LDKECDSASignature bitcoin_signature_2_arg, struct LDKUnsignedChannelAnnouncement contents_arg);
        public static native long ChannelAnnouncement_new(byte[] node_signature_1_arg, byte[] node_signature_2_arg, byte[] bitcoin_signature_1_arg, byte[] bitcoin_signature_2_arg, long contents_arg);
        // uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg);
        public static native long ChannelAnnouncement_clone_ptr(long arg);
@@ -8144,15 +8475,15 @@ public class bindings {
        public static native boolean UnsignedChannelUpdate_eq(long a, long b);
        // void ChannelUpdate_free(struct LDKChannelUpdate this_obj);
        public static native void ChannelUpdate_free(long this_obj);
-       // struct LDKSignature ChannelUpdate_get_signature(const struct LDKChannelUpdate *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature ChannelUpdate_get_signature(const struct LDKChannelUpdate *NONNULL_PTR this_ptr);
        public static native byte[] ChannelUpdate_get_signature(long this_ptr);
-       // void ChannelUpdate_set_signature(struct LDKChannelUpdate *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void ChannelUpdate_set_signature(struct LDKChannelUpdate *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void ChannelUpdate_set_signature(long this_ptr, byte[] val);
        // struct LDKUnsignedChannelUpdate ChannelUpdate_get_contents(const struct LDKChannelUpdate *NONNULL_PTR this_ptr);
        public static native long ChannelUpdate_get_contents(long this_ptr);
        // void ChannelUpdate_set_contents(struct LDKChannelUpdate *NONNULL_PTR this_ptr, struct LDKUnsignedChannelUpdate val);
        public static native void ChannelUpdate_set_contents(long this_ptr, long val);
-       // MUST_USE_RES struct LDKChannelUpdate ChannelUpdate_new(struct LDKSignature signature_arg, struct LDKUnsignedChannelUpdate contents_arg);
+       // MUST_USE_RES struct LDKChannelUpdate ChannelUpdate_new(struct LDKECDSASignature signature_arg, struct LDKUnsignedChannelUpdate contents_arg);
        public static native long ChannelUpdate_new(byte[] signature_arg, long contents_arg);
        // uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg);
        public static native long ChannelUpdate_clone_ptr(long arg);
@@ -8596,11 +8927,11 @@ public class bindings {
        public static native void PeerManager_free(long this_obj);
        // MUST_USE_RES struct LDKPeerManager PeerManager_new(struct LDKMessageHandler message_handler, uint32_t current_time, const uint8_t (*ephemeral_random_data)[32], struct LDKLogger logger, struct LDKNodeSigner node_signer);
        public static native long PeerManager_new(long message_handler, int current_time, byte[] ephemeral_random_data, long logger, long node_signer);
-       // MUST_USE_RES struct LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ PeerManager_get_peer_node_ids(const struct LDKPeerManager *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ PeerManager_get_peer_node_ids(const struct LDKPeerManager *NONNULL_PTR this_arg);
        public static native long[] PeerManager_get_peer_node_ids(long this_arg);
-       // MUST_USE_RES struct LDKCResult_CVec_u8ZPeerHandleErrorZ PeerManager_new_outbound_connection(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id, struct LDKSocketDescriptor descriptor, struct LDKCOption_NetAddressZ remote_network_address);
+       // MUST_USE_RES struct LDKCResult_CVec_u8ZPeerHandleErrorZ PeerManager_new_outbound_connection(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKPublicKey their_node_id, struct LDKSocketDescriptor descriptor, struct LDKCOption_SocketAddressZ remote_network_address);
        public static native long PeerManager_new_outbound_connection(long this_arg, byte[] their_node_id, long descriptor, long remote_network_address);
-       // MUST_USE_RES struct LDKCResult_NonePeerHandleErrorZ PeerManager_new_inbound_connection(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKSocketDescriptor descriptor, struct LDKCOption_NetAddressZ remote_network_address);
+       // MUST_USE_RES struct LDKCResult_NonePeerHandleErrorZ PeerManager_new_inbound_connection(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKSocketDescriptor descriptor, struct LDKCOption_SocketAddressZ remote_network_address);
        public static native long PeerManager_new_inbound_connection(long this_arg, long descriptor, long remote_network_address);
        // MUST_USE_RES struct LDKCResult_NonePeerHandleErrorZ PeerManager_write_buffer_space_avail(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKSocketDescriptor *NONNULL_PTR descriptor);
        public static native long PeerManager_write_buffer_space_avail(long this_arg, long descriptor);
@@ -8616,7 +8947,7 @@ public class bindings {
        public static native void PeerManager_disconnect_all_peers(long this_arg);
        // void PeerManager_timer_tick_occurred(const struct LDKPeerManager *NONNULL_PTR this_arg);
        public static native void PeerManager_timer_tick_occurred(long this_arg);
-       // void PeerManager_broadcast_node_announcement(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKThreeBytes rgb, struct LDKThirtyTwoBytes alias, struct LDKCVec_NetAddressZ addresses);
+       // void PeerManager_broadcast_node_announcement(const struct LDKPeerManager *NONNULL_PTR this_arg, struct LDKThreeBytes rgb, struct LDKThirtyTwoBytes alias, struct LDKCVec_SocketAddressZ addresses);
        public static native void PeerManager_broadcast_node_announcement(long this_arg, byte[] rgb, byte[] alias, long[] addresses);
        // uint64_t htlc_success_tx_weight(const struct LDKChannelTypeFeatures *NONNULL_PTR channel_type_features);
        public static native long htlc_success_tx_weight(long channel_type_features);
@@ -8730,6 +9061,8 @@ public class bindings {
        public static native long ChannelPublicKeys_clone_ptr(long arg);
        // struct LDKChannelPublicKeys ChannelPublicKeys_clone(const struct LDKChannelPublicKeys *NONNULL_PTR orig);
        public static native long ChannelPublicKeys_clone(long orig);
+       // uint64_t ChannelPublicKeys_hash(const struct LDKChannelPublicKeys *NONNULL_PTR o);
+       public static native long ChannelPublicKeys_hash(long o);
        // bool ChannelPublicKeys_eq(const struct LDKChannelPublicKeys *NONNULL_PTR a, const struct LDKChannelPublicKeys *NONNULL_PTR b);
        public static native boolean ChannelPublicKeys_eq(long a, long b);
        // struct LDKCVec_u8Z ChannelPublicKeys_write(const struct LDKChannelPublicKeys *NONNULL_PTR obj);
@@ -8742,6 +9075,8 @@ public class bindings {
        public static native long TxCreationKeys_from_channel_static_keys(byte[] per_commitment_point, long broadcaster_keys, long countersignatory_keys);
        // struct LDKCVec_u8Z get_revokeable_redeemscript(struct LDKPublicKey revocation_key, uint16_t contest_delay, struct LDKPublicKey broadcaster_delayed_payment_key);
        public static native byte[] get_revokeable_redeemscript(byte[] revocation_key, short contest_delay, byte[] broadcaster_delayed_payment_key);
+       // struct LDKCVec_u8Z get_counterparty_payment_script(const struct LDKChannelTypeFeatures *NONNULL_PTR channel_type_features, struct LDKPublicKey payment_key);
+       public static native byte[] get_counterparty_payment_script(long channel_type_features, byte[] payment_key);
        // void HTLCOutputInCommitment_free(struct LDKHTLCOutputInCommitment this_obj);
        public static native void HTLCOutputInCommitment_free(long this_obj);
        // bool HTLCOutputInCommitment_get_offered(const struct LDKHTLCOutputInCommitment *NONNULL_PTR this_ptr);
@@ -8782,13 +9117,13 @@ public class bindings {
        public static native byte[] make_funding_redeemscript(byte[] broadcaster, byte[] countersignatory);
        // struct LDKTransaction build_htlc_transaction(const uint8_t (*commitment_txid)[32], uint32_t feerate_per_kw, uint16_t contest_delay, const struct LDKHTLCOutputInCommitment *NONNULL_PTR htlc, const struct LDKChannelTypeFeatures *NONNULL_PTR channel_type_features, struct LDKPublicKey broadcaster_delayed_payment_key, struct LDKPublicKey revocation_key);
        public static native byte[] build_htlc_transaction(byte[] commitment_txid, int feerate_per_kw, short contest_delay, long htlc, long channel_type_features, byte[] broadcaster_delayed_payment_key, byte[] revocation_key);
-       // struct LDKWitness build_htlc_input_witness(struct LDKSignature local_sig, struct LDKSignature remote_sig, struct LDKCOption_PaymentPreimageZ preimage, struct LDKu8slice redeem_script, const struct LDKChannelTypeFeatures *NONNULL_PTR channel_type_features);
+       // struct LDKWitness build_htlc_input_witness(struct LDKECDSASignature local_sig, struct LDKECDSASignature remote_sig, struct LDKCOption_ThirtyTwoBytesZ preimage, struct LDKu8slice redeem_script, const struct LDKChannelTypeFeatures *NONNULL_PTR channel_type_features);
        public static native byte[] build_htlc_input_witness(byte[] local_sig, byte[] remote_sig, long preimage, byte[] redeem_script, long channel_type_features);
        // struct LDKCVec_u8Z get_to_countersignatory_with_anchors_redeemscript(struct LDKPublicKey payment_point);
        public static native byte[] get_to_countersignatory_with_anchors_redeemscript(byte[] payment_point);
        // struct LDKCVec_u8Z get_anchor_redeemscript(struct LDKPublicKey funding_pubkey);
        public static native byte[] get_anchor_redeemscript(byte[] funding_pubkey);
-       // struct LDKWitness build_anchor_input_witness(struct LDKPublicKey funding_key, struct LDKSignature funding_sig);
+       // struct LDKWitness build_anchor_input_witness(struct LDKPublicKey funding_key, struct LDKECDSASignature funding_sig);
        public static native byte[] build_anchor_input_witness(byte[] funding_key, byte[] funding_sig);
        // void ChannelTransactionParameters_free(struct LDKChannelTransactionParameters this_obj);
        public static native void ChannelTransactionParameters_free(long this_obj);
@@ -8822,6 +9157,8 @@ public class bindings {
        public static native long ChannelTransactionParameters_clone_ptr(long arg);
        // struct LDKChannelTransactionParameters ChannelTransactionParameters_clone(const struct LDKChannelTransactionParameters *NONNULL_PTR orig);
        public static native long ChannelTransactionParameters_clone(long orig);
+       // uint64_t ChannelTransactionParameters_hash(const struct LDKChannelTransactionParameters *NONNULL_PTR o);
+       public static native long ChannelTransactionParameters_hash(long o);
        // bool ChannelTransactionParameters_eq(const struct LDKChannelTransactionParameters *NONNULL_PTR a, const struct LDKChannelTransactionParameters *NONNULL_PTR b);
        public static native boolean ChannelTransactionParameters_eq(long a, long b);
        // void CounterpartyChannelTransactionParameters_free(struct LDKCounterpartyChannelTransactionParameters this_obj);
@@ -8840,6 +9177,8 @@ public class bindings {
        public static native long CounterpartyChannelTransactionParameters_clone_ptr(long arg);
        // struct LDKCounterpartyChannelTransactionParameters CounterpartyChannelTransactionParameters_clone(const struct LDKCounterpartyChannelTransactionParameters *NONNULL_PTR orig);
        public static native long CounterpartyChannelTransactionParameters_clone(long orig);
+       // uint64_t CounterpartyChannelTransactionParameters_hash(const struct LDKCounterpartyChannelTransactionParameters *NONNULL_PTR o);
+       public static native long CounterpartyChannelTransactionParameters_hash(long o);
        // bool CounterpartyChannelTransactionParameters_eq(const struct LDKCounterpartyChannelTransactionParameters *NONNULL_PTR a, const struct LDKCounterpartyChannelTransactionParameters *NONNULL_PTR b);
        public static native boolean CounterpartyChannelTransactionParameters_eq(long a, long b);
        // MUST_USE_RES bool ChannelTransactionParameters_is_populated(const struct LDKChannelTransactionParameters *NONNULL_PTR this_arg);
@@ -8872,13 +9211,13 @@ public class bindings {
        public static native long DirectedChannelTransactionParameters_channel_type_features(long this_arg);
        // void HolderCommitmentTransaction_free(struct LDKHolderCommitmentTransaction this_obj);
        public static native void HolderCommitmentTransaction_free(long this_obj);
-       // struct LDKSignature HolderCommitmentTransaction_get_counterparty_sig(const struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature HolderCommitmentTransaction_get_counterparty_sig(const struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr);
        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);
+       // void HolderCommitmentTransaction_set_counterparty_sig(struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr, struct LDKECDSASignature 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);
+       // struct LDKCVec_ECDSASignatureZ 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);
+       // void HolderCommitmentTransaction_set_counterparty_htlc_sigs(struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr, struct LDKCVec_ECDSASignatureZ val);
        public static native void HolderCommitmentTransaction_set_counterparty_htlc_sigs(long this_ptr, byte[][] val);
        // uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg);
        public static native long HolderCommitmentTransaction_clone_ptr(long arg);
@@ -8888,7 +9227,7 @@ public class bindings {
        public static native byte[] HolderCommitmentTransaction_write(long obj);
        // struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ HolderCommitmentTransaction_read(struct LDKu8slice ser);
        public static native long HolderCommitmentTransaction_read(byte[] ser);
-       // MUST_USE_RES struct LDKHolderCommitmentTransaction HolderCommitmentTransaction_new(struct LDKCommitmentTransaction commitment_tx, struct LDKSignature counterparty_sig, struct LDKCVec_SignatureZ counterparty_htlc_sigs, struct LDKPublicKey holder_funding_key, struct LDKPublicKey counterparty_funding_key);
+       // MUST_USE_RES struct LDKHolderCommitmentTransaction HolderCommitmentTransaction_new(struct LDKCommitmentTransaction commitment_tx, struct LDKECDSASignature counterparty_sig, struct LDKCVec_ECDSASignatureZ counterparty_htlc_sigs, struct LDKPublicKey holder_funding_key, struct LDKPublicKey counterparty_funding_key);
        public static native long HolderCommitmentTransaction_new(long commitment_tx, byte[] counterparty_sig, byte[][] counterparty_htlc_sigs, byte[] holder_funding_key, byte[] counterparty_funding_key);
        // void BuiltCommitmentTransaction_free(struct LDKBuiltCommitmentTransaction this_obj);
        public static native void BuiltCommitmentTransaction_free(long this_obj);
@@ -8912,9 +9251,9 @@ public class bindings {
        public static native long BuiltCommitmentTransaction_read(byte[] ser);
        // MUST_USE_RES struct LDKThirtyTwoBytes BuiltCommitmentTransaction_get_sighash_all(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR this_arg, struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis);
        public static native byte[] BuiltCommitmentTransaction_get_sighash_all(long this_arg, byte[] funding_redeemscript, long channel_value_satoshis);
-       // MUST_USE_RES struct LDKSignature BuiltCommitmentTransaction_sign_counterparty_commitment(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR this_arg, const uint8_t (*funding_key)[32], struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis);
+       // MUST_USE_RES struct LDKECDSASignature BuiltCommitmentTransaction_sign_counterparty_commitment(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR this_arg, const uint8_t (*funding_key)[32], struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis);
        public static native byte[] BuiltCommitmentTransaction_sign_counterparty_commitment(long this_arg, byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis);
-       // MUST_USE_RES struct LDKSignature BuiltCommitmentTransaction_sign_holder_commitment(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR this_arg, const uint8_t (*funding_key)[32], struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis, const struct LDKEntropySource *NONNULL_PTR entropy_source);
+       // MUST_USE_RES struct LDKECDSASignature BuiltCommitmentTransaction_sign_holder_commitment(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR this_arg, const uint8_t (*funding_key)[32], struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis, const struct LDKEntropySource *NONNULL_PTR entropy_source);
        public static native byte[] BuiltCommitmentTransaction_sign_holder_commitment(long this_arg, byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis, long entropy_source);
        // void ClosingTransaction_free(struct LDKClosingTransaction this_obj);
        public static native void ClosingTransaction_free(long this_obj);
@@ -8946,7 +9285,7 @@ public class bindings {
        public static native byte[] TrustedClosingTransaction_built_transaction(long this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes TrustedClosingTransaction_get_sighash_all(const struct LDKTrustedClosingTransaction *NONNULL_PTR this_arg, struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis);
        public static native byte[] TrustedClosingTransaction_get_sighash_all(long this_arg, byte[] funding_redeemscript, long channel_value_satoshis);
-       // MUST_USE_RES struct LDKSignature TrustedClosingTransaction_sign(const struct LDKTrustedClosingTransaction *NONNULL_PTR this_arg, const uint8_t (*funding_key)[32], struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis);
+       // MUST_USE_RES struct LDKECDSASignature TrustedClosingTransaction_sign(const struct LDKTrustedClosingTransaction *NONNULL_PTR this_arg, const uint8_t (*funding_key)[32], struct LDKu8slice funding_redeemscript, uint64_t channel_value_satoshis);
        public static native byte[] TrustedClosingTransaction_sign(long this_arg, byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis);
        // void CommitmentTransaction_free(struct LDKCommitmentTransaction this_obj);
        public static native void CommitmentTransaction_free(long this_obj);
@@ -8980,8 +9319,12 @@ public class bindings {
        public static native long TrustedCommitmentTransaction_keys(long this_arg);
        // MUST_USE_RES struct LDKChannelTypeFeatures TrustedCommitmentTransaction_channel_type_features(const struct LDKTrustedCommitmentTransaction *NONNULL_PTR this_arg);
        public static native long TrustedCommitmentTransaction_channel_type_features(long this_arg);
-       // MUST_USE_RES struct LDKCResult_CVec_SignatureZNoneZ TrustedCommitmentTransaction_get_htlc_sigs(const struct LDKTrustedCommitmentTransaction *NONNULL_PTR this_arg, const uint8_t (*htlc_base_key)[32], const struct LDKDirectedChannelTransactionParameters *NONNULL_PTR channel_parameters, const struct LDKEntropySource *NONNULL_PTR entropy_source);
+       // MUST_USE_RES struct LDKCResult_CVec_ECDSASignatureZNoneZ TrustedCommitmentTransaction_get_htlc_sigs(const struct LDKTrustedCommitmentTransaction *NONNULL_PTR this_arg, const uint8_t (*htlc_base_key)[32], const struct LDKDirectedChannelTransactionParameters *NONNULL_PTR channel_parameters, const struct LDKEntropySource *NONNULL_PTR entropy_source);
        public static native long TrustedCommitmentTransaction_get_htlc_sigs(long this_arg, byte[] htlc_base_key, long channel_parameters, long entropy_source);
+       // MUST_USE_RES struct LDKCOption_usizeZ TrustedCommitmentTransaction_revokeable_output_index(const struct LDKTrustedCommitmentTransaction *NONNULL_PTR this_arg);
+       public static native long TrustedCommitmentTransaction_revokeable_output_index(long this_arg);
+       // MUST_USE_RES struct LDKCResult_TransactionNoneZ TrustedCommitmentTransaction_build_to_local_justice_tx(const struct LDKTrustedCommitmentTransaction *NONNULL_PTR this_arg, uint64_t feerate_per_kw, struct LDKCVec_u8Z destination_script);
+       public static native long TrustedCommitmentTransaction_build_to_local_justice_tx(long this_arg, long feerate_per_kw, byte[] destination_script);
        // uint64_t get_commitment_transaction_number_obscure_factor(struct LDKPublicKey broadcaster_payment_basepoint, struct LDKPublicKey countersignatory_payment_basepoint, bool outbound_from_broadcaster);
        public static native long get_commitment_transaction_number_obscure_factor(byte[] broadcaster_payment_basepoint, byte[] countersignatory_payment_basepoint, boolean outbound_from_broadcaster);
        // bool InitFeatures_eq(const struct LDKInitFeatures *NONNULL_PTR a, const struct LDKInitFeatures *NONNULL_PTR b);
@@ -9062,6 +9405,10 @@ public class bindings {
        public static native boolean InitFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool InitFeatures_requires_unknown_bits(const struct LDKInitFeatures *NONNULL_PTR this_arg);
        public static native boolean InitFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_required_feature_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long InitFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_optional_feature_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long InitFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_required_custom_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long InitFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ InitFeatures_set_optional_custom_bit(struct LDKInitFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9072,6 +9419,10 @@ public class bindings {
        public static native boolean NodeFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool NodeFeatures_requires_unknown_bits(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
        public static native boolean NodeFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_required_feature_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long NodeFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_optional_feature_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long NodeFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_required_custom_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long NodeFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ NodeFeatures_set_optional_custom_bit(struct LDKNodeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9082,6 +9433,10 @@ public class bindings {
        public static native boolean ChannelFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool ChannelFeatures_requires_unknown_bits(const struct LDKChannelFeatures *NONNULL_PTR this_arg);
        public static native boolean ChannelFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_required_feature_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long ChannelFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_optional_feature_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long ChannelFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_required_custom_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long ChannelFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelFeatures_set_optional_custom_bit(struct LDKChannelFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9092,6 +9447,10 @@ public class bindings {
        public static native boolean Bolt11InvoiceFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool Bolt11InvoiceFeatures_requires_unknown_bits(const struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg);
        public static native boolean Bolt11InvoiceFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_required_feature_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long Bolt11InvoiceFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_optional_feature_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long Bolt11InvoiceFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_required_custom_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long Bolt11InvoiceFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt11InvoiceFeatures_set_optional_custom_bit(struct LDKBolt11InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9102,6 +9461,10 @@ public class bindings {
        public static native boolean OfferFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool OfferFeatures_requires_unknown_bits(const struct LDKOfferFeatures *NONNULL_PTR this_arg);
        public static native boolean OfferFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_required_feature_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long OfferFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_optional_feature_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long OfferFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_required_custom_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long OfferFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ OfferFeatures_set_optional_custom_bit(struct LDKOfferFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9112,6 +9475,10 @@ public class bindings {
        public static native boolean InvoiceRequestFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool InvoiceRequestFeatures_requires_unknown_bits(const struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg);
        public static native boolean InvoiceRequestFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_required_feature_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long InvoiceRequestFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_optional_feature_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long InvoiceRequestFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_required_custom_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long InvoiceRequestFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ InvoiceRequestFeatures_set_optional_custom_bit(struct LDKInvoiceRequestFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9122,6 +9489,10 @@ public class bindings {
        public static native boolean Bolt12InvoiceFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool Bolt12InvoiceFeatures_requires_unknown_bits(const struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg);
        public static native boolean Bolt12InvoiceFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_required_feature_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long Bolt12InvoiceFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_optional_feature_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long Bolt12InvoiceFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_required_custom_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long Bolt12InvoiceFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ Bolt12InvoiceFeatures_set_optional_custom_bit(struct LDKBolt12InvoiceFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9132,6 +9503,10 @@ public class bindings {
        public static native boolean BlindedHopFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool BlindedHopFeatures_requires_unknown_bits(const struct LDKBlindedHopFeatures *NONNULL_PTR this_arg);
        public static native boolean BlindedHopFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_required_feature_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long BlindedHopFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_optional_feature_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long BlindedHopFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_required_custom_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long BlindedHopFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ BlindedHopFeatures_set_optional_custom_bit(struct LDKBlindedHopFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9142,6 +9517,10 @@ public class bindings {
        public static native boolean ChannelTypeFeatures_requires_unknown_bits_from(long this_arg, long other);
        // MUST_USE_RES bool ChannelTypeFeatures_requires_unknown_bits(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
        public static native boolean ChannelTypeFeatures_requires_unknown_bits(long this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_required_feature_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long ChannelTypeFeatures_set_required_feature_bit(long this_arg, long bit);
+       // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_optional_feature_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
+       public static native long ChannelTypeFeatures_set_optional_feature_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_required_custom_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
        public static native long ChannelTypeFeatures_set_required_custom_bit(long this_arg, long bit);
        // MUST_USE_RES struct LDKCResult_NoneNoneZ ChannelTypeFeatures_set_optional_custom_bit(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg, uintptr_t bit);
@@ -9412,6 +9791,30 @@ public class bindings {
        public static native boolean InitFeatures_requires_shutdown_anysegwit(long this_arg);
        // MUST_USE_RES bool NodeFeatures_requires_shutdown_anysegwit(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
        public static native boolean NodeFeatures_requires_shutdown_anysegwit(long this_arg);
+       // void InitFeatures_set_taproot_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       public static native void InitFeatures_set_taproot_optional(long this_arg);
+       // void InitFeatures_set_taproot_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
+       public static native void InitFeatures_set_taproot_required(long this_arg);
+       // MUST_USE_RES bool InitFeatures_supports_taproot(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       public static native boolean InitFeatures_supports_taproot(long this_arg);
+       // void NodeFeatures_set_taproot_optional(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       public static native void NodeFeatures_set_taproot_optional(long this_arg);
+       // void NodeFeatures_set_taproot_required(struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       public static native void NodeFeatures_set_taproot_required(long this_arg);
+       // MUST_USE_RES bool NodeFeatures_supports_taproot(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       public static native boolean NodeFeatures_supports_taproot(long this_arg);
+       // void ChannelTypeFeatures_set_taproot_optional(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       public static native void ChannelTypeFeatures_set_taproot_optional(long this_arg);
+       // void ChannelTypeFeatures_set_taproot_required(struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       public static native void ChannelTypeFeatures_set_taproot_required(long this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_supports_taproot(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       public static native boolean ChannelTypeFeatures_supports_taproot(long this_arg);
+       // MUST_USE_RES bool InitFeatures_requires_taproot(const struct LDKInitFeatures *NONNULL_PTR this_arg);
+       public static native boolean InitFeatures_requires_taproot(long this_arg);
+       // MUST_USE_RES bool NodeFeatures_requires_taproot(const struct LDKNodeFeatures *NONNULL_PTR this_arg);
+       public static native boolean NodeFeatures_requires_taproot(long this_arg);
+       // MUST_USE_RES bool ChannelTypeFeatures_requires_taproot(const struct LDKChannelTypeFeatures *NONNULL_PTR this_arg);
+       public static native boolean ChannelTypeFeatures_requires_taproot(long this_arg);
        // void InitFeatures_set_onion_messages_optional(struct LDKInitFeatures *NONNULL_PTR this_arg);
        public static native void InitFeatures_set_onion_messages_optional(long this_arg);
        // void InitFeatures_set_onion_messages_required(struct LDKInitFeatures *NONNULL_PTR this_arg);
@@ -9550,14 +9953,18 @@ public class bindings {
        public static native long Retry_clone_ptr(long arg);
        // struct LDKRetry Retry_clone(const struct LDKRetry *NONNULL_PTR orig);
        public static native long Retry_clone(long orig);
-       // struct LDKRetry Retry_attempts(uintptr_t a);
-       public static native long Retry_attempts(long a);
+       // struct LDKRetry Retry_attempts(uint32_t a);
+       public static native long Retry_attempts(int a);
        // struct LDKRetry Retry_timeout(uint64_t a);
        public static native long Retry_timeout(long a);
        // bool Retry_eq(const struct LDKRetry *NONNULL_PTR a, const struct LDKRetry *NONNULL_PTR b);
        public static native boolean Retry_eq(long a, long b);
        // uint64_t Retry_hash(const struct LDKRetry *NONNULL_PTR o);
        public static native long Retry_hash(long o);
+       // struct LDKCVec_u8Z Retry_write(const struct LDKRetry *NONNULL_PTR obj);
+       public static native byte[] Retry_write(long obj);
+       // struct LDKCResult_RetryDecodeErrorZ Retry_read(struct LDKu8slice ser);
+       public static native long Retry_read(byte[] ser);
        // enum LDKRetryableSendFailure RetryableSendFailure_clone(const enum LDKRetryableSendFailure *NONNULL_PTR orig);
        public static native RetryableSendFailure RetryableSendFailure_clone(long orig);
        // enum LDKRetryableSendFailure RetryableSendFailure_payment_expired(void);
@@ -9584,18 +9991,30 @@ public class bindings {
        public static native long PaymentSendFailure_duplicate_payment();
        // struct LDKPaymentSendFailure PaymentSendFailure_partial_failure(struct LDKCVec_CResult_NoneAPIErrorZZ results, struct LDKRouteParameters failed_paths_retry, struct LDKThirtyTwoBytes payment_id);
        public static native long PaymentSendFailure_partial_failure(long[] results, long failed_paths_retry, byte[] payment_id);
+       // bool PaymentSendFailure_eq(const struct LDKPaymentSendFailure *NONNULL_PTR a, const struct LDKPaymentSendFailure *NONNULL_PTR b);
+       public static native boolean PaymentSendFailure_eq(long a, long b);
+       // void ProbeSendFailure_free(struct LDKProbeSendFailure this_ptr);
+       public static native void ProbeSendFailure_free(long this_ptr);
+       // uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg);
+       public static native long ProbeSendFailure_clone_ptr(long arg);
+       // struct LDKProbeSendFailure ProbeSendFailure_clone(const struct LDKProbeSendFailure *NONNULL_PTR orig);
+       public static native long ProbeSendFailure_clone(long orig);
+       // struct LDKProbeSendFailure ProbeSendFailure_route_not_found(void);
+       public static native long ProbeSendFailure_route_not_found();
+       // struct LDKProbeSendFailure ProbeSendFailure_sending_failed(struct LDKPaymentSendFailure a);
+       public static native long ProbeSendFailure_sending_failed(long a);
+       // bool ProbeSendFailure_eq(const struct LDKProbeSendFailure *NONNULL_PTR a, const struct LDKProbeSendFailure *NONNULL_PTR b);
+       public static native boolean ProbeSendFailure_eq(long a, long b);
        // void RecipientOnionFields_free(struct LDKRecipientOnionFields this_obj);
        public static native void RecipientOnionFields_free(long this_obj);
-       // struct LDKCOption_PaymentSecretZ RecipientOnionFields_get_payment_secret(const struct LDKRecipientOnionFields *NONNULL_PTR this_ptr);
+       // struct LDKCOption_ThirtyTwoBytesZ RecipientOnionFields_get_payment_secret(const struct LDKRecipientOnionFields *NONNULL_PTR this_ptr);
        public static native long RecipientOnionFields_get_payment_secret(long this_ptr);
-       // void RecipientOnionFields_set_payment_secret(struct LDKRecipientOnionFields *NONNULL_PTR this_ptr, struct LDKCOption_PaymentSecretZ val);
+       // void RecipientOnionFields_set_payment_secret(struct LDKRecipientOnionFields *NONNULL_PTR this_ptr, struct LDKCOption_ThirtyTwoBytesZ val);
        public static native void RecipientOnionFields_set_payment_secret(long this_ptr, long val);
        // struct LDKCOption_CVec_u8ZZ RecipientOnionFields_get_payment_metadata(const struct LDKRecipientOnionFields *NONNULL_PTR this_ptr);
        public static native long RecipientOnionFields_get_payment_metadata(long this_ptr);
        // void RecipientOnionFields_set_payment_metadata(struct LDKRecipientOnionFields *NONNULL_PTR this_ptr, struct LDKCOption_CVec_u8ZZ val);
        public static native void RecipientOnionFields_set_payment_metadata(long this_ptr, long val);
-       // MUST_USE_RES struct LDKRecipientOnionFields RecipientOnionFields_new(struct LDKCOption_PaymentSecretZ payment_secret_arg, struct LDKCOption_CVec_u8ZZ payment_metadata_arg);
-       public static native long RecipientOnionFields_new(long payment_secret_arg, long payment_metadata_arg);
        // uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg);
        public static native long RecipientOnionFields_clone_ptr(long arg);
        // struct LDKRecipientOnionFields RecipientOnionFields_clone(const struct LDKRecipientOnionFields *NONNULL_PTR orig);
@@ -9610,6 +10029,10 @@ public class bindings {
        public static native long RecipientOnionFields_secret_only(byte[] payment_secret);
        // MUST_USE_RES struct LDKRecipientOnionFields RecipientOnionFields_spontaneous_empty(void);
        public static native long RecipientOnionFields_spontaneous_empty();
+       // MUST_USE_RES struct LDKCResult_RecipientOnionFieldsNoneZ RecipientOnionFields_with_custom_tlvs(struct LDKRecipientOnionFields this_arg, struct LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs);
+       public static native long RecipientOnionFields_with_custom_tlvs(long this_arg, long[] custom_tlvs);
+       // MUST_USE_RES struct LDKCVec_C2Tuple_u64CVec_u8ZZZ RecipientOnionFields_custom_tlvs(const struct LDKRecipientOnionFields *NONNULL_PTR this_arg);
+       public static native long[] RecipientOnionFields_custom_tlvs(long this_arg);
        // void CustomMessageReader_free(struct LDKCustomMessageReader this_ptr);
        public static native void CustomMessageReader_free(long this_ptr);
        // uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg);
@@ -9618,18 +10041,140 @@ public class bindings {
        public static native long Type_clone(long orig);
        // void Type_free(struct LDKType this_ptr);
        public static native void Type_free(long this_ptr);
+       // void Offer_free(struct LDKOffer this_obj);
+       public static native void Offer_free(long this_obj);
+       // uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg);
+       public static native long Offer_clone_ptr(long arg);
+       // struct LDKOffer Offer_clone(const struct LDKOffer *NONNULL_PTR orig);
+       public static native long Offer_clone(long orig);
+       // MUST_USE_RES struct LDKCVec_ThirtyTwoBytesZ Offer_chains(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native byte[][] Offer_chains(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ Offer_metadata(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_metadata(long this_arg);
+       // MUST_USE_RES struct LDKAmount Offer_amount(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_amount(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString Offer_description(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_description(long this_arg);
+       // MUST_USE_RES struct LDKOfferFeatures Offer_offer_features(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_offer_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z Offer_absolute_expiry(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_absolute_expiry(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString Offer_issuer(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_issuer(long this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedPathZ Offer_paths(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long[] Offer_paths(long this_arg);
+       // MUST_USE_RES struct LDKQuantity Offer_supported_quantity(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native long Offer_supported_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey Offer_signing_pubkey(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native byte[] Offer_signing_pubkey(long this_arg);
+       // MUST_USE_RES bool Offer_supports_chain(const struct LDKOffer *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes chain);
+       public static native boolean Offer_supports_chain(long this_arg, byte[] chain);
+       // MUST_USE_RES bool Offer_is_expired(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native boolean Offer_is_expired(long this_arg);
+       // MUST_USE_RES bool Offer_is_valid_quantity(const struct LDKOffer *NONNULL_PTR this_arg, uint64_t quantity);
+       public static native boolean Offer_is_valid_quantity(long this_arg, long quantity);
+       // MUST_USE_RES bool Offer_expects_quantity(const struct LDKOffer *NONNULL_PTR this_arg);
+       public static native boolean Offer_expects_quantity(long this_arg);
+       // struct LDKCVec_u8Z Offer_write(const struct LDKOffer *NONNULL_PTR obj);
+       public static native byte[] Offer_write(long obj);
+       // void Amount_free(struct LDKAmount this_obj);
+       public static native void Amount_free(long this_obj);
+       // uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg);
+       public static native long Amount_clone_ptr(long arg);
+       // struct LDKAmount Amount_clone(const struct LDKAmount *NONNULL_PTR orig);
+       public static native long Amount_clone(long orig);
+       // void Quantity_free(struct LDKQuantity this_obj);
+       public static native void Quantity_free(long this_obj);
+       // uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg);
+       public static native long Quantity_clone_ptr(long arg);
+       // struct LDKQuantity Quantity_clone(const struct LDKQuantity *NONNULL_PTR orig);
+       public static native long Quantity_clone(long orig);
+       // struct LDKCResult_OfferBolt12ParseErrorZ Offer_from_str(struct LDKStr s);
+       public static native long Offer_from_str(String s);
        // void UnsignedBolt12Invoice_free(struct LDKUnsignedBolt12Invoice this_obj);
        public static native void UnsignedBolt12Invoice_free(long this_obj);
-       // MUST_USE_RES struct LDKPublicKey UnsignedBolt12Invoice_signing_pubkey(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
-       public static native byte[] UnsignedBolt12Invoice_signing_pubkey(long this_arg);
+       // MUST_USE_RES struct LDKTaggedHash UnsignedBolt12Invoice_tagged_hash(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_tagged_hash(long this_arg);
        // void Bolt12Invoice_free(struct LDKBolt12Invoice this_obj);
        public static native void Bolt12Invoice_free(long this_obj);
        // uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg);
        public static native long Bolt12Invoice_clone_ptr(long arg);
        // struct LDKBolt12Invoice Bolt12Invoice_clone(const struct LDKBolt12Invoice *NONNULL_PTR orig);
        public static native long Bolt12Invoice_clone(long orig);
+       // MUST_USE_RES struct LDKCOption_CVec_ThirtyTwoBytesZZ UnsignedBolt12Invoice_offer_chains(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_offer_chains(long this_arg);
+       // MUST_USE_RES struct LDKThirtyTwoBytes UnsignedBolt12Invoice_chain(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedBolt12Invoice_chain(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ UnsignedBolt12Invoice_metadata(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_metadata(long this_arg);
+       // MUST_USE_RES struct LDKAmount UnsignedBolt12Invoice_amount(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_amount(long this_arg);
+       // MUST_USE_RES struct LDKOfferFeatures UnsignedBolt12Invoice_offer_features(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_offer_features(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString UnsignedBolt12Invoice_description(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_description(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z UnsignedBolt12Invoice_absolute_expiry(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_absolute_expiry(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString UnsignedBolt12Invoice_issuer(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_issuer(long this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedPathZ UnsignedBolt12Invoice_message_paths(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long[] UnsignedBolt12Invoice_message_paths(long this_arg);
+       // MUST_USE_RES struct LDKQuantity UnsignedBolt12Invoice_supported_quantity(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_supported_quantity(long this_arg);
+       // MUST_USE_RES struct LDKu8slice UnsignedBolt12Invoice_payer_metadata(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedBolt12Invoice_payer_metadata(long this_arg);
+       // MUST_USE_RES struct LDKInvoiceRequestFeatures UnsignedBolt12Invoice_invoice_request_features(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_invoice_request_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z UnsignedBolt12Invoice_quantity(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey UnsignedBolt12Invoice_payer_id(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedBolt12Invoice_payer_id(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString UnsignedBolt12Invoice_payer_note(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_payer_note(long this_arg);
+       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_created_at(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_created_at(long this_arg);
+       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_relative_expiry(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_relative_expiry(long this_arg);
+       // MUST_USE_RES bool UnsignedBolt12Invoice_is_expired(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native boolean UnsignedBolt12Invoice_is_expired(long this_arg);
+       // MUST_USE_RES struct LDKThirtyTwoBytes UnsignedBolt12Invoice_payment_hash(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedBolt12Invoice_payment_hash(long this_arg);
+       // MUST_USE_RES uint64_t UnsignedBolt12Invoice_amount_msats(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_amount_msats(long this_arg);
+       // MUST_USE_RES struct LDKBolt12InvoiceFeatures UnsignedBolt12Invoice_invoice_features(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long UnsignedBolt12Invoice_invoice_features(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey UnsignedBolt12Invoice_signing_pubkey(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedBolt12Invoice_signing_pubkey(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_ThirtyTwoBytesZZ Bolt12Invoice_offer_chains(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_offer_chains(long this_arg);
+       // MUST_USE_RES struct LDKThirtyTwoBytes Bolt12Invoice_chain(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] Bolt12Invoice_chain(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ Bolt12Invoice_metadata(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_metadata(long this_arg);
+       // MUST_USE_RES struct LDKAmount Bolt12Invoice_amount(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_amount(long this_arg);
+       // MUST_USE_RES struct LDKOfferFeatures Bolt12Invoice_offer_features(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_offer_features(long this_arg);
        // MUST_USE_RES struct LDKPrintableString Bolt12Invoice_description(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        public static native long Bolt12Invoice_description(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z Bolt12Invoice_absolute_expiry(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_absolute_expiry(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString Bolt12Invoice_issuer(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_issuer(long this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedPathZ Bolt12Invoice_message_paths(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long[] Bolt12Invoice_message_paths(long this_arg);
+       // MUST_USE_RES struct LDKQuantity Bolt12Invoice_supported_quantity(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_supported_quantity(long this_arg);
+       // MUST_USE_RES struct LDKu8slice Bolt12Invoice_payer_metadata(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] Bolt12Invoice_payer_metadata(long this_arg);
+       // MUST_USE_RES struct LDKInvoiceRequestFeatures Bolt12Invoice_invoice_request_features(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_invoice_request_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z Bolt12Invoice_quantity(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey Bolt12Invoice_payer_id(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] Bolt12Invoice_payer_id(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString Bolt12Invoice_payer_note(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_payer_note(long this_arg);
        // MUST_USE_RES uint64_t Bolt12Invoice_created_at(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        public static native long Bolt12Invoice_created_at(long this_arg);
        // MUST_USE_RES uint64_t Bolt12Invoice_relative_expiry(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
@@ -9640,14 +10185,18 @@ public class bindings {
        public static native byte[] Bolt12Invoice_payment_hash(long this_arg);
        // MUST_USE_RES uint64_t Bolt12Invoice_amount_msats(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        public static native long Bolt12Invoice_amount_msats(long this_arg);
-       // MUST_USE_RES struct LDKBolt12InvoiceFeatures Bolt12Invoice_features(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
-       public static native long Bolt12Invoice_features(long this_arg);
+       // MUST_USE_RES struct LDKBolt12InvoiceFeatures Bolt12Invoice_invoice_features(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native long Bolt12Invoice_invoice_features(long this_arg);
        // MUST_USE_RES struct LDKPublicKey Bolt12Invoice_signing_pubkey(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        public static native byte[] Bolt12Invoice_signing_pubkey(long this_arg);
+       // MUST_USE_RES struct LDKSchnorrSignature Bolt12Invoice_signature(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
+       public static native byte[] Bolt12Invoice_signature(long this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes Bolt12Invoice_signable_hash(const struct LDKBolt12Invoice *NONNULL_PTR this_arg);
        public static native byte[] Bolt12Invoice_signable_hash(long this_arg);
-       // MUST_USE_RES bool Bolt12Invoice_verify(const struct LDKBolt12Invoice *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
-       public static native boolean Bolt12Invoice_verify(long this_arg, long key);
+       // MUST_USE_RES struct LDKCResult_ThirtyTwoBytesNoneZ Bolt12Invoice_verify(const struct LDKBolt12Invoice *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
+       public static native long Bolt12Invoice_verify(long this_arg, long key);
+       // struct LDKCVec_u8Z UnsignedBolt12Invoice_write(const struct LDKUnsignedBolt12Invoice *NONNULL_PTR obj);
+       public static native byte[] UnsignedBolt12Invoice_write(long obj);
        // struct LDKCVec_u8Z Bolt12Invoice_write(const struct LDKBolt12Invoice *NONNULL_PTR obj);
        public static native byte[] Bolt12Invoice_write(long obj);
        // void BlindedPayInfo_free(struct LDKBlindedPayInfo this_obj);
@@ -9728,80 +10277,136 @@ public class bindings {
        public static native long InvoiceError_read(byte[] ser);
        // void UnsignedInvoiceRequest_free(struct LDKUnsignedInvoiceRequest this_obj);
        public static native void UnsignedInvoiceRequest_free(long this_obj);
+       // MUST_USE_RES struct LDKTaggedHash UnsignedInvoiceRequest_tagged_hash(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_tagged_hash(long this_arg);
        // void InvoiceRequest_free(struct LDKInvoiceRequest this_obj);
        public static native void InvoiceRequest_free(long this_obj);
        // uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg);
        public static native long InvoiceRequest_clone_ptr(long arg);
        // struct LDKInvoiceRequest InvoiceRequest_clone(const struct LDKInvoiceRequest *NONNULL_PTR orig);
        public static native long InvoiceRequest_clone(long orig);
-       // MUST_USE_RES struct LDKu8slice InvoiceRequest_metadata(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
-       public static native byte[] InvoiceRequest_metadata(long this_arg);
+       // void VerifiedInvoiceRequest_free(struct LDKVerifiedInvoiceRequest this_obj);
+       public static native void VerifiedInvoiceRequest_free(long this_obj);
+       // struct LDKCOption_SecretKeyZ VerifiedInvoiceRequest_get_keys(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_ptr);
+       public static native long VerifiedInvoiceRequest_get_keys(long this_ptr);
+       // void VerifiedInvoiceRequest_set_keys(struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_ptr, struct LDKCOption_SecretKeyZ val);
+       public static native void VerifiedInvoiceRequest_set_keys(long this_ptr, long val);
+       // uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg);
+       public static native long VerifiedInvoiceRequest_clone_ptr(long arg);
+       // struct LDKVerifiedInvoiceRequest VerifiedInvoiceRequest_clone(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR orig);
+       public static native long VerifiedInvoiceRequest_clone(long orig);
+       // MUST_USE_RES struct LDKCVec_ThirtyTwoBytesZ UnsignedInvoiceRequest_chains(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[][] UnsignedInvoiceRequest_chains(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ UnsignedInvoiceRequest_metadata(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_metadata(long this_arg);
+       // MUST_USE_RES struct LDKAmount UnsignedInvoiceRequest_amount(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_amount(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString UnsignedInvoiceRequest_description(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_description(long this_arg);
+       // MUST_USE_RES struct LDKOfferFeatures UnsignedInvoiceRequest_offer_features(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_offer_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z UnsignedInvoiceRequest_absolute_expiry(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_absolute_expiry(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString UnsignedInvoiceRequest_issuer(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_issuer(long this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedPathZ UnsignedInvoiceRequest_paths(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long[] UnsignedInvoiceRequest_paths(long this_arg);
+       // MUST_USE_RES struct LDKQuantity UnsignedInvoiceRequest_supported_quantity(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_supported_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey UnsignedInvoiceRequest_signing_pubkey(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedInvoiceRequest_signing_pubkey(long this_arg);
+       // MUST_USE_RES struct LDKu8slice UnsignedInvoiceRequest_payer_metadata(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedInvoiceRequest_payer_metadata(long this_arg);
+       // MUST_USE_RES struct LDKThirtyTwoBytes UnsignedInvoiceRequest_chain(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedInvoiceRequest_chain(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z UnsignedInvoiceRequest_amount_msats(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_amount_msats(long this_arg);
+       // MUST_USE_RES struct LDKInvoiceRequestFeatures UnsignedInvoiceRequest_invoice_request_features(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_invoice_request_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z UnsignedInvoiceRequest_quantity(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey UnsignedInvoiceRequest_payer_id(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] UnsignedInvoiceRequest_payer_id(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString UnsignedInvoiceRequest_payer_note(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long UnsignedInvoiceRequest_payer_note(long this_arg);
+       // MUST_USE_RES struct LDKCVec_ThirtyTwoBytesZ InvoiceRequest_chains(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[][] InvoiceRequest_chains(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ InvoiceRequest_metadata(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_metadata(long this_arg);
+       // MUST_USE_RES struct LDKAmount InvoiceRequest_amount(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_amount(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString InvoiceRequest_description(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_description(long this_arg);
+       // MUST_USE_RES struct LDKOfferFeatures InvoiceRequest_offer_features(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_offer_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z InvoiceRequest_absolute_expiry(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_absolute_expiry(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString InvoiceRequest_issuer(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_issuer(long this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedPathZ InvoiceRequest_paths(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long[] InvoiceRequest_paths(long this_arg);
+       // MUST_USE_RES struct LDKQuantity InvoiceRequest_supported_quantity(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_supported_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey InvoiceRequest_signing_pubkey(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] InvoiceRequest_signing_pubkey(long this_arg);
+       // MUST_USE_RES struct LDKu8slice InvoiceRequest_payer_metadata(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] InvoiceRequest_payer_metadata(long this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes InvoiceRequest_chain(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        public static native byte[] InvoiceRequest_chain(long this_arg);
        // MUST_USE_RES struct LDKCOption_u64Z InvoiceRequest_amount_msats(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        public static native long InvoiceRequest_amount_msats(long this_arg);
-       // MUST_USE_RES struct LDKInvoiceRequestFeatures InvoiceRequest_features(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
-       public static native long InvoiceRequest_features(long this_arg);
+       // MUST_USE_RES struct LDKInvoiceRequestFeatures InvoiceRequest_invoice_request_features(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long InvoiceRequest_invoice_request_features(long this_arg);
        // MUST_USE_RES struct LDKCOption_u64Z InvoiceRequest_quantity(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        public static native long InvoiceRequest_quantity(long this_arg);
        // MUST_USE_RES struct LDKPublicKey InvoiceRequest_payer_id(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        public static native byte[] InvoiceRequest_payer_id(long this_arg);
        // MUST_USE_RES struct LDKPrintableString InvoiceRequest_payer_note(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
        public static native long InvoiceRequest_payer_note(long this_arg);
-       // MUST_USE_RES struct LDKCResult_COption_KeyPairZNoneZ InvoiceRequest_verify(const struct LDKInvoiceRequest *NONNULL_PTR this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
+       // MUST_USE_RES struct LDKSchnorrSignature InvoiceRequest_signature(const struct LDKInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] InvoiceRequest_signature(long this_arg);
+       // MUST_USE_RES struct LDKCResult_VerifiedInvoiceRequestNoneZ InvoiceRequest_verify(struct LDKInvoiceRequest this_arg, const struct LDKExpandedKey *NONNULL_PTR key);
        public static native long InvoiceRequest_verify(long this_arg, long key);
+       // MUST_USE_RES struct LDKCVec_ThirtyTwoBytesZ VerifiedInvoiceRequest_chains(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[][] VerifiedInvoiceRequest_chains(long this_arg);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ VerifiedInvoiceRequest_metadata(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_metadata(long this_arg);
+       // MUST_USE_RES struct LDKAmount VerifiedInvoiceRequest_amount(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_amount(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString VerifiedInvoiceRequest_description(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_description(long this_arg);
+       // MUST_USE_RES struct LDKOfferFeatures VerifiedInvoiceRequest_offer_features(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_offer_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z VerifiedInvoiceRequest_absolute_expiry(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_absolute_expiry(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString VerifiedInvoiceRequest_issuer(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_issuer(long this_arg);
+       // MUST_USE_RES struct LDKCVec_BlindedPathZ VerifiedInvoiceRequest_paths(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long[] VerifiedInvoiceRequest_paths(long this_arg);
+       // MUST_USE_RES struct LDKQuantity VerifiedInvoiceRequest_supported_quantity(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_supported_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey VerifiedInvoiceRequest_signing_pubkey(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] VerifiedInvoiceRequest_signing_pubkey(long this_arg);
+       // MUST_USE_RES struct LDKu8slice VerifiedInvoiceRequest_payer_metadata(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] VerifiedInvoiceRequest_payer_metadata(long this_arg);
+       // MUST_USE_RES struct LDKThirtyTwoBytes VerifiedInvoiceRequest_chain(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] VerifiedInvoiceRequest_chain(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z VerifiedInvoiceRequest_amount_msats(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_amount_msats(long this_arg);
+       // MUST_USE_RES struct LDKInvoiceRequestFeatures VerifiedInvoiceRequest_invoice_request_features(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_invoice_request_features(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z VerifiedInvoiceRequest_quantity(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_quantity(long this_arg);
+       // MUST_USE_RES struct LDKPublicKey VerifiedInvoiceRequest_payer_id(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native byte[] VerifiedInvoiceRequest_payer_id(long this_arg);
+       // MUST_USE_RES struct LDKPrintableString VerifiedInvoiceRequest_payer_note(const struct LDKVerifiedInvoiceRequest *NONNULL_PTR this_arg);
+       public static native long VerifiedInvoiceRequest_payer_note(long this_arg);
+       // struct LDKCVec_u8Z UnsignedInvoiceRequest_write(const struct LDKUnsignedInvoiceRequest *NONNULL_PTR obj);
+       public static native byte[] UnsignedInvoiceRequest_write(long obj);
        // struct LDKCVec_u8Z InvoiceRequest_write(const struct LDKInvoiceRequest *NONNULL_PTR obj);
        public static native byte[] InvoiceRequest_write(long obj);
-       // void Offer_free(struct LDKOffer this_obj);
-       public static native void Offer_free(long this_obj);
-       // uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg);
-       public static native long Offer_clone_ptr(long arg);
-       // struct LDKOffer Offer_clone(const struct LDKOffer *NONNULL_PTR orig);
-       public static native long Offer_clone(long orig);
-       // MUST_USE_RES struct LDKCVec_ChainHashZ Offer_chains(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native byte[][] Offer_chains(long this_arg);
-       // MUST_USE_RES bool Offer_supports_chain(const struct LDKOffer *NONNULL_PTR this_arg, struct LDKThirtyTwoBytes chain);
-       public static native boolean Offer_supports_chain(long this_arg, byte[] chain);
-       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ Offer_metadata(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_metadata(long this_arg);
-       // MUST_USE_RES struct LDKAmount Offer_amount(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_amount(long this_arg);
-       // MUST_USE_RES struct LDKPrintableString Offer_description(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_description(long this_arg);
-       // MUST_USE_RES struct LDKOfferFeatures Offer_features(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_features(long this_arg);
-       // MUST_USE_RES struct LDKCOption_DurationZ Offer_absolute_expiry(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_absolute_expiry(long this_arg);
-       // MUST_USE_RES bool Offer_is_expired(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native boolean Offer_is_expired(long this_arg);
-       // MUST_USE_RES struct LDKPrintableString Offer_issuer(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_issuer(long this_arg);
-       // MUST_USE_RES struct LDKCVec_BlindedPathZ Offer_paths(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long[] Offer_paths(long this_arg);
-       // MUST_USE_RES struct LDKQuantity Offer_supported_quantity(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native long Offer_supported_quantity(long this_arg);
-       // MUST_USE_RES bool Offer_is_valid_quantity(const struct LDKOffer *NONNULL_PTR this_arg, uint64_t quantity);
-       public static native boolean Offer_is_valid_quantity(long this_arg, long quantity);
-       // MUST_USE_RES bool Offer_expects_quantity(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native boolean Offer_expects_quantity(long this_arg);
-       // MUST_USE_RES struct LDKPublicKey Offer_signing_pubkey(const struct LDKOffer *NONNULL_PTR this_arg);
-       public static native byte[] Offer_signing_pubkey(long this_arg);
-       // struct LDKCVec_u8Z Offer_write(const struct LDKOffer *NONNULL_PTR obj);
-       public static native byte[] Offer_write(long obj);
-       // void Amount_free(struct LDKAmount this_obj);
-       public static native void Amount_free(long this_obj);
-       // uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg);
-       public static native long Amount_clone_ptr(long arg);
-       // struct LDKAmount Amount_clone(const struct LDKAmount *NONNULL_PTR orig);
-       public static native long Amount_clone(long orig);
-       // void Quantity_free(struct LDKQuantity this_obj);
-       public static native void Quantity_free(long this_obj);
-       // uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg);
-       public static native long Quantity_clone_ptr(long arg);
-       // struct LDKQuantity Quantity_clone(const struct LDKQuantity *NONNULL_PTR orig);
-       public static native long Quantity_clone(long orig);
-       // struct LDKCResult_OfferBolt12ParseErrorZ Offer_from_str(struct LDKStr s);
-       public static native long Offer_from_str(String s);
+       // void TaggedHash_free(struct LDKTaggedHash this_obj);
+       public static native void TaggedHash_free(long this_obj);
        // void Bolt12ParseError_free(struct LDKBolt12ParseError this_obj);
        public static native void Bolt12ParseError_free(long this_obj);
        // uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg);
@@ -9870,7 +10475,7 @@ public class bindings {
        public static native long Refund_clone(long orig);
        // MUST_USE_RES struct LDKPrintableString Refund_description(const struct LDKRefund *NONNULL_PTR this_arg);
        public static native long Refund_description(long this_arg);
-       // MUST_USE_RES struct LDKCOption_DurationZ Refund_absolute_expiry(const struct LDKRefund *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z Refund_absolute_expiry(const struct LDKRefund *NONNULL_PTR this_arg);
        public static native long Refund_absolute_expiry(long this_arg);
        // MUST_USE_RES bool Refund_is_expired(const struct LDKRefund *NONNULL_PTR this_arg);
        public static native boolean Refund_is_expired(long this_arg);
@@ -9878,8 +10483,8 @@ public class bindings {
        public static native long Refund_issuer(long this_arg);
        // MUST_USE_RES struct LDKCVec_BlindedPathZ Refund_paths(const struct LDKRefund *NONNULL_PTR this_arg);
        public static native long[] Refund_paths(long this_arg);
-       // MUST_USE_RES struct LDKu8slice Refund_metadata(const struct LDKRefund *NONNULL_PTR this_arg);
-       public static native byte[] Refund_metadata(long this_arg);
+       // MUST_USE_RES struct LDKu8slice Refund_payer_metadata(const struct LDKRefund *NONNULL_PTR this_arg);
+       public static native byte[] Refund_payer_metadata(long this_arg);
        // MUST_USE_RES struct LDKThirtyTwoBytes Refund_chain(const struct LDKRefund *NONNULL_PTR this_arg);
        public static native byte[] Refund_chain(long this_arg);
        // MUST_USE_RES uint64_t Refund_amount_msats(const struct LDKRefund *NONNULL_PTR this_arg);
@@ -9936,7 +10541,7 @@ public class bindings {
        public static native long NodeId_from_pubkey(byte[] pubkey);
        // MUST_USE_RES struct LDKu8slice NodeId_as_slice(const struct LDKNodeId *NONNULL_PTR this_arg);
        public static native byte[] NodeId_as_slice(long this_arg);
-       // MUST_USE_RES struct LDKCResult_PublicKeyErrorZ NodeId_as_pubkey(const struct LDKNodeId *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCResult_PublicKeySecp256k1ErrorZ NodeId_as_pubkey(const struct LDKNodeId *NONNULL_PTR this_arg);
        public static native long NodeId_as_pubkey(long this_arg);
        // uint64_t NodeId_hash(const struct LDKNodeId *NONNULL_PTR o);
        public static native long NodeId_hash(long o);
@@ -9970,7 +10575,7 @@ public class bindings {
        public static native void P2PGossipSync_free(long this_obj);
        // MUST_USE_RES struct LDKP2PGossipSync P2PGossipSync_new(const struct LDKNetworkGraph *NONNULL_PTR network_graph, struct LDKCOption_UtxoLookupZ utxo_lookup, struct LDKLogger logger);
        public static native long P2PGossipSync_new(long network_graph, long utxo_lookup, long logger);
-       // void P2PGossipSync_add_utxo_lookup(struct LDKP2PGossipSync *NONNULL_PTR this_arg, struct LDKCOption_UtxoLookupZ utxo_lookup);
+       // void P2PGossipSync_add_utxo_lookup(const struct LDKP2PGossipSync *NONNULL_PTR this_arg, struct LDKCOption_UtxoLookupZ utxo_lookup);
        public static native void P2PGossipSync_add_utxo_lookup(long this_arg, long utxo_lookup);
        // void NetworkGraph_handle_network_update(const struct LDKNetworkGraph *NONNULL_PTR this_arg, const struct LDKNetworkUpdate *NONNULL_PTR network_update);
        public static native void NetworkGraph_handle_network_update(long this_arg, long network_update);
@@ -10154,7 +10759,7 @@ public class bindings {
        public static native long NodeAnnouncementInfo_clone(long orig);
        // bool NodeAnnouncementInfo_eq(const struct LDKNodeAnnouncementInfo *NONNULL_PTR a, const struct LDKNodeAnnouncementInfo *NONNULL_PTR b);
        public static native boolean NodeAnnouncementInfo_eq(long a, long b);
-       // MUST_USE_RES struct LDKCVec_NetAddressZ NodeAnnouncementInfo_addresses(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_SocketAddressZ NodeAnnouncementInfo_addresses(const struct LDKNodeAnnouncementInfo *NONNULL_PTR this_arg);
        public static native long[] NodeAnnouncementInfo_addresses(long this_arg);
        // struct LDKCVec_u8Z NodeAnnouncementInfo_write(const struct LDKNodeAnnouncementInfo *NONNULL_PTR obj);
        public static native byte[] NodeAnnouncementInfo_write(long obj);
@@ -10244,7 +10849,7 @@ public class bindings {
        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);
+       // MUST_USE_RES struct LDKCOption_CVec_SocketAddressZZ 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 DefaultRouter_free(struct LDKDefaultRouter this_obj);
        public static native void DefaultRouter_free(long this_obj);
@@ -10256,12 +10861,10 @@ public class bindings {
        public static native void Router_free(long this_ptr);
        // void ScorerAccountingForInFlightHtlcs_free(struct LDKScorerAccountingForInFlightHtlcs this_obj);
        public static native void ScorerAccountingForInFlightHtlcs_free(long this_obj);
-       // MUST_USE_RES struct LDKScorerAccountingForInFlightHtlcs ScorerAccountingForInFlightHtlcs_new(struct LDKScore scorer, const struct LDKInFlightHtlcs *NONNULL_PTR inflight_htlcs);
+       // MUST_USE_RES struct LDKScorerAccountingForInFlightHtlcs ScorerAccountingForInFlightHtlcs_new(struct LDKScoreLookUp scorer, const struct LDKInFlightHtlcs *NONNULL_PTR inflight_htlcs);
        public static native long ScorerAccountingForInFlightHtlcs_new(long scorer, long inflight_htlcs);
-       // struct LDKCVec_u8Z ScorerAccountingForInFlightHtlcs_write(const struct LDKScorerAccountingForInFlightHtlcs *NONNULL_PTR obj);
-       public static native byte[] ScorerAccountingForInFlightHtlcs_write(long obj);
-       // struct LDKScore ScorerAccountingForInFlightHtlcs_as_Score(const struct LDKScorerAccountingForInFlightHtlcs *NONNULL_PTR this_arg);
-       public static native long ScorerAccountingForInFlightHtlcs_as_Score(long this_arg);
+       // struct LDKScoreLookUp ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(const struct LDKScorerAccountingForInFlightHtlcs *NONNULL_PTR this_arg);
+       public static native long ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(long this_arg);
        // void InFlightHtlcs_free(struct LDKInFlightHtlcs this_obj);
        public static native void InFlightHtlcs_free(long this_obj);
        // uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg);
@@ -10306,8 +10909,12 @@ public class bindings {
        public static native int RouteHop_get_cltv_expiry_delta(long this_ptr);
        // void RouteHop_set_cltv_expiry_delta(struct LDKRouteHop *NONNULL_PTR this_ptr, uint32_t val);
        public static native void RouteHop_set_cltv_expiry_delta(long this_ptr, int val);
-       // MUST_USE_RES struct LDKRouteHop RouteHop_new(struct LDKPublicKey pubkey_arg, struct LDKNodeFeatures node_features_arg, uint64_t short_channel_id_arg, struct LDKChannelFeatures channel_features_arg, uint64_t fee_msat_arg, uint32_t cltv_expiry_delta_arg);
-       public static native long RouteHop_new(byte[] pubkey_arg, long node_features_arg, long short_channel_id_arg, long channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg);
+       // bool RouteHop_get_maybe_announced_channel(const struct LDKRouteHop *NONNULL_PTR this_ptr);
+       public static native boolean RouteHop_get_maybe_announced_channel(long this_ptr);
+       // void RouteHop_set_maybe_announced_channel(struct LDKRouteHop *NONNULL_PTR this_ptr, bool val);
+       public static native void RouteHop_set_maybe_announced_channel(long this_ptr, boolean val);
+       // MUST_USE_RES struct LDKRouteHop RouteHop_new(struct LDKPublicKey pubkey_arg, struct LDKNodeFeatures node_features_arg, uint64_t short_channel_id_arg, struct LDKChannelFeatures channel_features_arg, uint64_t fee_msat_arg, uint32_t cltv_expiry_delta_arg, bool maybe_announced_channel_arg);
+       public static native long RouteHop_new(byte[] pubkey_arg, long node_features_arg, long short_channel_id_arg, long channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg, boolean maybe_announced_channel_arg);
        // uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg);
        public static native long RouteHop_clone_ptr(long arg);
        // struct LDKRouteHop RouteHop_clone(const struct LDKRouteHop *NONNULL_PTR orig);
@@ -10384,12 +10991,12 @@ public class bindings {
        public static native long[] Route_get_paths(long this_ptr);
        // void Route_set_paths(struct LDKRoute *NONNULL_PTR this_ptr, struct LDKCVec_PathZ val);
        public static native void Route_set_paths(long this_ptr, long[] val);
-       // struct LDKPaymentParameters Route_get_payment_params(const struct LDKRoute *NONNULL_PTR this_ptr);
-       public static native long Route_get_payment_params(long this_ptr);
-       // void Route_set_payment_params(struct LDKRoute *NONNULL_PTR this_ptr, struct LDKPaymentParameters val);
-       public static native void Route_set_payment_params(long this_ptr, long val);
-       // MUST_USE_RES struct LDKRoute Route_new(struct LDKCVec_PathZ paths_arg, struct LDKPaymentParameters payment_params_arg);
-       public static native long Route_new(long[] paths_arg, long payment_params_arg);
+       // struct LDKRouteParameters Route_get_route_params(const struct LDKRoute *NONNULL_PTR this_ptr);
+       public static native long Route_get_route_params(long this_ptr);
+       // void Route_set_route_params(struct LDKRoute *NONNULL_PTR this_ptr, struct LDKRouteParameters val);
+       public static native void Route_set_route_params(long this_ptr, long val);
+       // MUST_USE_RES struct LDKRoute Route_new(struct LDKCVec_PathZ paths_arg, struct LDKRouteParameters route_params_arg);
+       public static native long Route_new(long[] paths_arg, long route_params_arg);
        // uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg);
        public static native long Route_clone_ptr(long arg);
        // struct LDKRoute Route_clone(const struct LDKRoute *NONNULL_PTR orig);
@@ -10416,14 +11023,22 @@ public class bindings {
        public static native long RouteParameters_get_final_value_msat(long this_ptr);
        // void RouteParameters_set_final_value_msat(struct LDKRouteParameters *NONNULL_PTR this_ptr, uint64_t val);
        public static native void RouteParameters_set_final_value_msat(long this_ptr, long val);
-       // MUST_USE_RES struct LDKRouteParameters RouteParameters_new(struct LDKPaymentParameters payment_params_arg, uint64_t final_value_msat_arg);
-       public static native long RouteParameters_new(long payment_params_arg, long final_value_msat_arg);
+       // struct LDKCOption_u64Z RouteParameters_get_max_total_routing_fee_msat(const struct LDKRouteParameters *NONNULL_PTR this_ptr);
+       public static native long RouteParameters_get_max_total_routing_fee_msat(long this_ptr);
+       // void RouteParameters_set_max_total_routing_fee_msat(struct LDKRouteParameters *NONNULL_PTR this_ptr, struct LDKCOption_u64Z val);
+       public static native void RouteParameters_set_max_total_routing_fee_msat(long this_ptr, long val);
+       // MUST_USE_RES struct LDKRouteParameters RouteParameters_new(struct LDKPaymentParameters payment_params_arg, uint64_t final_value_msat_arg, struct LDKCOption_u64Z max_total_routing_fee_msat_arg);
+       public static native long RouteParameters_new(long payment_params_arg, long final_value_msat_arg, long max_total_routing_fee_msat_arg);
        // uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg);
        public static native long RouteParameters_clone_ptr(long arg);
        // struct LDKRouteParameters RouteParameters_clone(const struct LDKRouteParameters *NONNULL_PTR orig);
        public static native long RouteParameters_clone(long orig);
+       // uint64_t RouteParameters_hash(const struct LDKRouteParameters *NONNULL_PTR o);
+       public static native long RouteParameters_hash(long o);
        // bool RouteParameters_eq(const struct LDKRouteParameters *NONNULL_PTR a, const struct LDKRouteParameters *NONNULL_PTR b);
        public static native boolean RouteParameters_eq(long a, long b);
+       // MUST_USE_RES struct LDKRouteParameters RouteParameters_from_payment_params_and_value(struct LDKPaymentParameters payment_params, uint64_t final_value_msat);
+       public static native long RouteParameters_from_payment_params_and_value(long payment_params, long final_value_msat);
        // struct LDKCVec_u8Z RouteParameters_write(const struct LDKRouteParameters *NONNULL_PTR obj);
        public static native byte[] RouteParameters_write(long obj);
        // struct LDKCResult_RouteParametersDecodeErrorZ RouteParameters_read(struct LDKu8slice ser);
@@ -10474,6 +11089,8 @@ public class bindings {
        public static native long PaymentParameters_for_keysend(byte[] payee_pubkey, int final_cltv_expiry_delta, boolean allow_mpp);
        // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_from_bolt12_invoice(const struct LDKBolt12Invoice *NONNULL_PTR invoice);
        public static native long PaymentParameters_from_bolt12_invoice(long invoice);
+       // MUST_USE_RES struct LDKPaymentParameters PaymentParameters_blinded(struct LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ blinded_route_hints);
+       public static native long PaymentParameters_blinded(long[] blinded_route_hints);
        // void Payee_free(struct LDKPayee this_ptr);
        public static native void Payee_free(long this_ptr);
        // uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg);
@@ -10548,10 +11165,14 @@ public class bindings {
        public static native byte[] RouteHintHop_write(long obj);
        // struct LDKCResult_RouteHintHopDecodeErrorZ RouteHintHop_read(struct LDKu8slice ser);
        public static native long RouteHintHop_read(byte[] ser);
-       // struct LDKCResult_RouteLightningErrorZ find_route(struct LDKPublicKey our_node_pubkey, const struct LDKRouteParameters *NONNULL_PTR route_params, const struct LDKNetworkGraph *NONNULL_PTR network_graph, struct LDKCVec_ChannelDetailsZ *first_hops, struct LDKLogger logger, const struct LDKScore *NONNULL_PTR scorer, const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR score_params, const uint8_t (*random_seed_bytes)[32]);
+       // struct LDKCResult_RouteLightningErrorZ find_route(struct LDKPublicKey our_node_pubkey, const struct LDKRouteParameters *NONNULL_PTR route_params, const struct LDKNetworkGraph *NONNULL_PTR network_graph, struct LDKCVec_ChannelDetailsZ *first_hops, struct LDKLogger logger, const struct LDKScoreLookUp *NONNULL_PTR scorer, const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR score_params, const uint8_t (*random_seed_bytes)[32]);
        public static native long find_route(byte[] our_node_pubkey, long route_params, long network_graph, long[] first_hops, long logger, long scorer, long score_params, byte[] random_seed_bytes);
        // struct LDKCResult_RouteLightningErrorZ build_route_from_hops(struct LDKPublicKey our_node_pubkey, struct LDKCVec_PublicKeyZ hops, const struct LDKRouteParameters *NONNULL_PTR route_params, const struct LDKNetworkGraph *NONNULL_PTR network_graph, struct LDKLogger logger, const uint8_t (*random_seed_bytes)[32]);
        public static native long build_route_from_hops(byte[] our_node_pubkey, byte[][] hops, long route_params, long network_graph, long logger, byte[] random_seed_bytes);
+       // void ScoreLookUp_free(struct LDKScoreLookUp this_ptr);
+       public static native void ScoreLookUp_free(long this_ptr);
+       // void ScoreUpdate_free(struct LDKScoreUpdate this_ptr);
+       public static native void ScoreUpdate_free(long this_ptr);
        // void Score_free(struct LDKScore this_ptr);
        public static native void Score_free(long this_ptr);
        // void LockableScore_free(struct LDKLockableScore this_ptr);
@@ -10568,12 +11189,16 @@ public class bindings {
        public static native long MultiThreadedLockableScore_as_WriteableScore(long this_arg);
        // MUST_USE_RES struct LDKMultiThreadedLockableScore MultiThreadedLockableScore_new(struct LDKScore score);
        public static native long MultiThreadedLockableScore_new(long score);
-       // void MultiThreadedScoreLock_free(struct LDKMultiThreadedScoreLock this_obj);
-       public static native void MultiThreadedScoreLock_free(long this_obj);
-       // struct LDKCVec_u8Z MultiThreadedScoreLock_write(const struct LDKMultiThreadedScoreLock *NONNULL_PTR obj);
-       public static native byte[] MultiThreadedScoreLock_write(long obj);
-       // struct LDKScore MultiThreadedScoreLock_as_Score(const struct LDKMultiThreadedScoreLock *NONNULL_PTR this_arg);
-       public static native long MultiThreadedScoreLock_as_Score(long this_arg);
+       // void MultiThreadedScoreLockRead_free(struct LDKMultiThreadedScoreLockRead this_obj);
+       public static native void MultiThreadedScoreLockRead_free(long this_obj);
+       // void MultiThreadedScoreLockWrite_free(struct LDKMultiThreadedScoreLockWrite this_obj);
+       public static native void MultiThreadedScoreLockWrite_free(long this_obj);
+       // struct LDKScoreLookUp MultiThreadedScoreLockRead_as_ScoreLookUp(const struct LDKMultiThreadedScoreLockRead *NONNULL_PTR this_arg);
+       public static native long MultiThreadedScoreLockRead_as_ScoreLookUp(long this_arg);
+       // struct LDKCVec_u8Z MultiThreadedScoreLockWrite_write(const struct LDKMultiThreadedScoreLockWrite *NONNULL_PTR obj);
+       public static native byte[] MultiThreadedScoreLockWrite_write(long obj);
+       // struct LDKScoreUpdate MultiThreadedScoreLockWrite_as_ScoreUpdate(const struct LDKMultiThreadedScoreLockWrite *NONNULL_PTR this_arg);
+       public static native long MultiThreadedScoreLockWrite_as_ScoreUpdate(long this_arg);
        // void ChannelUsage_free(struct LDKChannelUsage this_obj);
        public static native void ChannelUsage_free(long this_obj);
        // uint64_t ChannelUsage_get_amount_msat(const struct LDKChannelUsage *NONNULL_PTR this_ptr);
@@ -10602,8 +11227,10 @@ public class bindings {
        public static native long FixedPenaltyScorer_clone(long orig);
        // MUST_USE_RES struct LDKFixedPenaltyScorer FixedPenaltyScorer_with_penalty(uint64_t penalty_msat);
        public static native long FixedPenaltyScorer_with_penalty(long penalty_msat);
-       // struct LDKScore FixedPenaltyScorer_as_Score(const struct LDKFixedPenaltyScorer *NONNULL_PTR this_arg);
-       public static native long FixedPenaltyScorer_as_Score(long this_arg);
+       // struct LDKScoreLookUp FixedPenaltyScorer_as_ScoreLookUp(const struct LDKFixedPenaltyScorer *NONNULL_PTR this_arg);
+       public static native long FixedPenaltyScorer_as_ScoreLookUp(long this_arg);
+       // struct LDKScoreUpdate FixedPenaltyScorer_as_ScoreUpdate(const struct LDKFixedPenaltyScorer *NONNULL_PTR this_arg);
+       public static native long FixedPenaltyScorer_as_ScoreUpdate(long this_arg);
        // struct LDKCVec_u8Z FixedPenaltyScorer_write(const struct LDKFixedPenaltyScorer *NONNULL_PTR obj);
        public static native byte[] FixedPenaltyScorer_write(long obj);
        // struct LDKCResult_FixedPenaltyScorerDecodeErrorZ FixedPenaltyScorer_read(struct LDKu8slice ser, uint64_t arg);
@@ -10644,6 +11271,10 @@ public class bindings {
        public static native long ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(long this_ptr);
        // void ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR this_ptr, uint64_t val);
        public static native void ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(long this_ptr, long val);
+       // bool ProbabilisticScoringFeeParameters_get_linear_success_probability(const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR this_ptr);
+       public static native boolean ProbabilisticScoringFeeParameters_get_linear_success_probability(long this_ptr);
+       // void ProbabilisticScoringFeeParameters_set_linear_success_probability(struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR this_ptr, bool val);
+       public static native void ProbabilisticScoringFeeParameters_set_linear_success_probability(long this_ptr, boolean val);
        // uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg);
        public static native long ProbabilisticScoringFeeParameters_clone_ptr(long arg);
        // struct LDKProbabilisticScoringFeeParameters ProbabilisticScoringFeeParameters_clone(const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR orig);
@@ -10686,8 +11317,14 @@ public class bindings {
        public static native void ProbabilisticScorer_debug_log_liquidity_stats(long this_arg);
        // MUST_USE_RES struct LDKCOption_C2Tuple_u64u64ZZ ProbabilisticScorer_estimated_channel_liquidity_range(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg, uint64_t scid, const struct LDKNodeId *NONNULL_PTR target);
        public static native long ProbabilisticScorer_estimated_channel_liquidity_range(long this_arg, long scid, long target);
-       // MUST_USE_RES struct LDKCOption_C2Tuple_EightU16sEightU16sZZ ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg, uint64_t scid, const struct LDKNodeId *NONNULL_PTR target);
+       // MUST_USE_RES struct LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg, uint64_t scid, const struct LDKNodeId *NONNULL_PTR target);
        public static native long ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(long this_arg, long scid, long target);
+       // MUST_USE_RES struct LDKCOption_f64Z ProbabilisticScorer_historical_estimated_payment_success_probability(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg, uint64_t scid, const struct LDKNodeId *NONNULL_PTR target, uint64_t amount_msat, const struct LDKProbabilisticScoringFeeParameters *NONNULL_PTR params);
+       public static native long ProbabilisticScorer_historical_estimated_payment_success_probability(long this_arg, long scid, long target, long amount_msat, long params);
+       // struct LDKScoreLookUp ProbabilisticScorer_as_ScoreLookUp(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg);
+       public static native long ProbabilisticScorer_as_ScoreLookUp(long this_arg);
+       // struct LDKScoreUpdate ProbabilisticScorer_as_ScoreUpdate(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg);
+       public static native long ProbabilisticScorer_as_ScoreUpdate(long this_arg);
        // struct LDKScore ProbabilisticScorer_as_Score(const struct LDKProbabilisticScorer *NONNULL_PTR this_arg);
        public static native long ProbabilisticScorer_as_Score(long this_arg);
        // struct LDKCVec_u8Z ProbabilisticScorer_write(const struct LDKProbabilisticScorer *NONNULL_PTR obj);
@@ -10730,6 +11367,8 @@ public class bindings {
        public static native long DelayedPaymentOutputDescriptor_clone_ptr(long arg);
        // struct LDKDelayedPaymentOutputDescriptor DelayedPaymentOutputDescriptor_clone(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR orig);
        public static native long DelayedPaymentOutputDescriptor_clone(long orig);
+       // uint64_t DelayedPaymentOutputDescriptor_hash(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR o);
+       public static native long DelayedPaymentOutputDescriptor_hash(long o);
        // bool DelayedPaymentOutputDescriptor_eq(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR a, const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR b);
        public static native boolean DelayedPaymentOutputDescriptor_eq(long a, long b);
        // struct LDKCVec_u8Z DelayedPaymentOutputDescriptor_write(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR obj);
@@ -10754,14 +11393,24 @@ public class bindings {
        public static native long StaticPaymentOutputDescriptor_get_channel_value_satoshis(long this_ptr);
        // void StaticPaymentOutputDescriptor_set_channel_value_satoshis(struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr, uint64_t val);
        public static native void StaticPaymentOutputDescriptor_set_channel_value_satoshis(long this_ptr, long val);
-       // MUST_USE_RES struct LDKStaticPaymentOutputDescriptor StaticPaymentOutputDescriptor_new(struct LDKOutPoint outpoint_arg, struct LDKTxOut output_arg, struct LDKThirtyTwoBytes channel_keys_id_arg, uint64_t channel_value_satoshis_arg);
-       public static native long StaticPaymentOutputDescriptor_new(long outpoint_arg, long output_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg);
+       // struct LDKChannelTransactionParameters StaticPaymentOutputDescriptor_get_channel_transaction_parameters(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr);
+       public static native long StaticPaymentOutputDescriptor_get_channel_transaction_parameters(long this_ptr);
+       // void StaticPaymentOutputDescriptor_set_channel_transaction_parameters(struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_ptr, struct LDKChannelTransactionParameters val);
+       public static native void StaticPaymentOutputDescriptor_set_channel_transaction_parameters(long this_ptr, long val);
+       // MUST_USE_RES struct LDKStaticPaymentOutputDescriptor StaticPaymentOutputDescriptor_new(struct LDKOutPoint outpoint_arg, struct LDKTxOut output_arg, struct LDKThirtyTwoBytes channel_keys_id_arg, uint64_t channel_value_satoshis_arg, struct LDKChannelTransactionParameters channel_transaction_parameters_arg);
+       public static native long StaticPaymentOutputDescriptor_new(long outpoint_arg, long output_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg, long channel_transaction_parameters_arg);
        // uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg);
        public static native long StaticPaymentOutputDescriptor_clone_ptr(long arg);
        // struct LDKStaticPaymentOutputDescriptor StaticPaymentOutputDescriptor_clone(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR orig);
        public static native long StaticPaymentOutputDescriptor_clone(long orig);
+       // uint64_t StaticPaymentOutputDescriptor_hash(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR o);
+       public static native long StaticPaymentOutputDescriptor_hash(long o);
        // bool StaticPaymentOutputDescriptor_eq(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR a, const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR b);
        public static native boolean StaticPaymentOutputDescriptor_eq(long a, long b);
+       // MUST_USE_RES struct LDKCOption_CVec_u8ZZ StaticPaymentOutputDescriptor_witness_script(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_arg);
+       public static native long StaticPaymentOutputDescriptor_witness_script(long this_arg);
+       // MUST_USE_RES uintptr_t StaticPaymentOutputDescriptor_max_witness_length(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR this_arg);
+       public static native long StaticPaymentOutputDescriptor_max_witness_length(long this_arg);
        // struct LDKCVec_u8Z StaticPaymentOutputDescriptor_write(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR obj);
        public static native byte[] StaticPaymentOutputDescriptor_write(long obj);
        // struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ StaticPaymentOutputDescriptor_read(struct LDKu8slice ser);
@@ -10778,13 +11427,15 @@ public class bindings {
        public static native long SpendableOutputDescriptor_delayed_payment_output(long a);
        // struct LDKSpendableOutputDescriptor SpendableOutputDescriptor_static_payment_output(struct LDKStaticPaymentOutputDescriptor a);
        public static native long SpendableOutputDescriptor_static_payment_output(long a);
+       // uint64_t SpendableOutputDescriptor_hash(const struct LDKSpendableOutputDescriptor *NONNULL_PTR o);
+       public static native long SpendableOutputDescriptor_hash(long o);
        // bool SpendableOutputDescriptor_eq(const struct LDKSpendableOutputDescriptor *NONNULL_PTR a, const struct LDKSpendableOutputDescriptor *NONNULL_PTR b);
        public static native boolean SpendableOutputDescriptor_eq(long a, long b);
        // struct LDKCVec_u8Z SpendableOutputDescriptor_write(const struct LDKSpendableOutputDescriptor *NONNULL_PTR obj);
        public static native byte[] SpendableOutputDescriptor_write(long obj);
        // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ SpendableOutputDescriptor_read(struct LDKu8slice ser);
        public static native long SpendableOutputDescriptor_read(byte[] ser);
-       // MUST_USE_RES struct LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ SpendableOutputDescriptor_create_spendable_outputs_psbt(struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_TxOutZ outputs, struct LDKCVec_u8Z change_destination_script, uint32_t feerate_sat_per_1000_weight, struct LDKCOption_PackedLockTimeZ locktime);
+       // MUST_USE_RES struct LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ SpendableOutputDescriptor_create_spendable_outputs_psbt(struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_TxOutZ outputs, struct LDKCVec_u8Z change_destination_script, uint32_t feerate_sat_per_1000_weight, struct LDKCOption_u32Z locktime);
        public static native long SpendableOutputDescriptor_create_spendable_outputs_psbt(long[] descriptors, long[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, long locktime);
        // void ChannelSigner_free(struct LDKChannelSigner this_ptr);
        public static native void ChannelSigner_free(long this_ptr);
@@ -10842,12 +11493,12 @@ public class bindings {
        public static native long InMemorySigner_new(byte[] funding_key, byte[] revocation_base_key, byte[] payment_key, byte[] delayed_payment_base_key, byte[] htlc_base_key, byte[] commitment_seed, long channel_value_satoshis, byte[] channel_keys_id, byte[] rand_bytes_unique_start);
        // MUST_USE_RES struct LDKChannelPublicKeys InMemorySigner_counterparty_pubkeys(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
        public static native long InMemorySigner_counterparty_pubkeys(long this_arg);
-       // MUST_USE_RES uint16_t InMemorySigner_counterparty_selected_contest_delay(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
-       public static native short InMemorySigner_counterparty_selected_contest_delay(long this_arg);
-       // MUST_USE_RES uint16_t InMemorySigner_holder_selected_contest_delay(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
-       public static native short InMemorySigner_holder_selected_contest_delay(long this_arg);
-       // MUST_USE_RES bool InMemorySigner_is_outbound(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
-       public static native boolean InMemorySigner_is_outbound(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u16Z InMemorySigner_counterparty_selected_contest_delay(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
+       public static native long InMemorySigner_counterparty_selected_contest_delay(long this_arg);
+       // MUST_USE_RES struct LDKCOption_u16Z InMemorySigner_holder_selected_contest_delay(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
+       public static native long InMemorySigner_holder_selected_contest_delay(long this_arg);
+       // MUST_USE_RES struct LDKCOption_boolZ InMemorySigner_is_outbound(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
+       public static native long InMemorySigner_is_outbound(long this_arg);
        // MUST_USE_RES struct LDKOutPoint InMemorySigner_funding_outpoint(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
        public static native long InMemorySigner_funding_outpoint(long this_arg);
        // MUST_USE_RES struct LDKChannelTransactionParameters InMemorySigner_get_channel_parameters(const struct LDKInMemorySigner *NONNULL_PTR this_arg);
@@ -10878,9 +11529,9 @@ public class bindings {
        public static native byte[] KeysManager_get_node_secret_key(long this_arg);
        // MUST_USE_RES struct LDKInMemorySigner KeysManager_derive_channel_keys(const struct LDKKeysManager *NONNULL_PTR this_arg, uint64_t channel_value_satoshis, const uint8_t (*params)[32]);
        public static native long KeysManager_derive_channel_keys(long this_arg, long channel_value_satoshis, byte[] params);
-       // MUST_USE_RES struct LDKCResult_PartiallySignedTransactionNoneZ KeysManager_sign_spendable_outputs_psbt(const struct LDKKeysManager *NONNULL_PTR this_arg, struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_u8Z psbt);
+       // MUST_USE_RES struct LDKCResult_CVec_u8ZNoneZ KeysManager_sign_spendable_outputs_psbt(const struct LDKKeysManager *NONNULL_PTR this_arg, struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_u8Z psbt);
        public static native long KeysManager_sign_spendable_outputs_psbt(long this_arg, long[] descriptors, byte[] psbt);
-       // MUST_USE_RES struct LDKCResult_TransactionNoneZ KeysManager_spend_spendable_outputs(const struct LDKKeysManager *NONNULL_PTR this_arg, struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_TxOutZ outputs, struct LDKCVec_u8Z change_destination_script, uint32_t feerate_sat_per_1000_weight, struct LDKCOption_PackedLockTimeZ locktime);
+       // MUST_USE_RES struct LDKCResult_TransactionNoneZ KeysManager_spend_spendable_outputs(const struct LDKKeysManager *NONNULL_PTR this_arg, struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_TxOutZ outputs, struct LDKCVec_u8Z change_destination_script, uint32_t feerate_sat_per_1000_weight, struct LDKCOption_u32Z locktime);
        public static native long KeysManager_spend_spendable_outputs(long this_arg, long[] descriptors, long[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, long locktime);
        // struct LDKEntropySource KeysManager_as_EntropySource(const struct LDKKeysManager *NONNULL_PTR this_arg);
        public static native long KeysManager_as_EntropySource(long this_arg);
@@ -10898,7 +11549,7 @@ public class bindings {
        public static native long PhantomKeysManager_as_SignerProvider(long this_arg);
        // MUST_USE_RES struct LDKPhantomKeysManager PhantomKeysManager_new(const uint8_t (*seed)[32], uint64_t starting_time_secs, uint32_t starting_time_nanos, const uint8_t (*cross_node_seed)[32]);
        public static native long PhantomKeysManager_new(byte[] seed, long starting_time_secs, int starting_time_nanos, byte[] cross_node_seed);
-       // MUST_USE_RES struct LDKCResult_TransactionNoneZ PhantomKeysManager_spend_spendable_outputs(const struct LDKPhantomKeysManager *NONNULL_PTR this_arg, struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_TxOutZ outputs, struct LDKCVec_u8Z change_destination_script, uint32_t feerate_sat_per_1000_weight, struct LDKCOption_PackedLockTimeZ locktime);
+       // MUST_USE_RES struct LDKCResult_TransactionNoneZ PhantomKeysManager_spend_spendable_outputs(const struct LDKPhantomKeysManager *NONNULL_PTR this_arg, struct LDKCVec_SpendableOutputDescriptorZ descriptors, struct LDKCVec_TxOutZ outputs, struct LDKCVec_u8Z change_destination_script, uint32_t feerate_sat_per_1000_weight, struct LDKCOption_u32Z locktime);
        public static native long PhantomKeysManager_spend_spendable_outputs(long this_arg, long[] descriptors, long[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, long locktime);
        // MUST_USE_RES struct LDKInMemorySigner PhantomKeysManager_derive_channel_keys(const struct LDKPhantomKeysManager *NONNULL_PTR this_arg, uint64_t channel_value_satoshis, const uint8_t (*params)[32]);
        public static native long PhantomKeysManager_derive_channel_keys(long this_arg, long channel_value_satoshis, byte[] params);
@@ -10968,6 +11619,8 @@ public class bindings {
        public static native boolean SendError_eq(long a, long b);
        // void CustomOnionMessageHandler_free(struct LDKCustomOnionMessageHandler this_ptr);
        public static native void CustomOnionMessageHandler_free(long this_ptr);
+       // struct LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ create_onion_message(const struct LDKEntropySource *NONNULL_PTR entropy_source, const struct LDKNodeSigner *NONNULL_PTR node_signer, struct LDKOnionMessagePath path, struct LDKOnionMessageContents message, struct LDKBlindedPath reply_path);
+       public static native long create_onion_message(long entropy_source, long node_signer, long path, long message, long reply_path);
        // MUST_USE_RES struct LDKOnionMessenger OnionMessenger_new(struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, struct LDKMessageRouter message_router, struct LDKOffersMessageHandler offers_handler, struct LDKCustomOnionMessageHandler custom_handler);
        public static native long OnionMessenger_new(long entropy_source, long node_signer, long logger, long message_router, long offers_handler, long custom_handler);
        // MUST_USE_RES struct LDKCResult_NoneSendErrorZ OnionMessenger_send_onion_message(const struct LDKOnionMessenger *NONNULL_PTR this_arg, struct LDKOnionMessagePath path, struct LDKOnionMessageContents message, struct LDKBlindedPath reply_path);
@@ -10998,6 +11651,34 @@ public class bindings {
        public static native byte[] OffersMessage_write(long obj);
        // struct LDKCResult_OffersMessageDecodeErrorZ OffersMessage_read(struct LDKu8slice ser, uint64_t arg_a, const struct LDKLogger *NONNULL_PTR arg_b);
        public static native long OffersMessage_read(byte[] ser, long arg_a, long arg_b);
+       // void Packet_free(struct LDKPacket this_obj);
+       public static native void Packet_free(long this_obj);
+       // uint8_t Packet_get_version(const struct LDKPacket *NONNULL_PTR this_ptr);
+       public static native byte Packet_get_version(long this_ptr);
+       // void Packet_set_version(struct LDKPacket *NONNULL_PTR this_ptr, uint8_t val);
+       public static native void Packet_set_version(long this_ptr, byte val);
+       // struct LDKPublicKey Packet_get_public_key(const struct LDKPacket *NONNULL_PTR this_ptr);
+       public static native byte[] Packet_get_public_key(long this_ptr);
+       // void Packet_set_public_key(struct LDKPacket *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       public static native void Packet_set_public_key(long this_ptr, byte[] val);
+       // struct LDKCVec_u8Z Packet_get_hop_data(const struct LDKPacket *NONNULL_PTR this_ptr);
+       public static native byte[] Packet_get_hop_data(long this_ptr);
+       // void Packet_set_hop_data(struct LDKPacket *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
+       public static native void Packet_set_hop_data(long this_ptr, byte[] val);
+       // const uint8_t (*Packet_get_hmac(const struct LDKPacket *NONNULL_PTR this_ptr))[32];
+       public static native byte[] Packet_get_hmac(long this_ptr);
+       // void Packet_set_hmac(struct LDKPacket *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       public static native void Packet_set_hmac(long this_ptr, byte[] val);
+       // MUST_USE_RES struct LDKPacket Packet_new(uint8_t version_arg, struct LDKPublicKey public_key_arg, struct LDKCVec_u8Z hop_data_arg, struct LDKThirtyTwoBytes hmac_arg);
+       public static native long Packet_new(byte version_arg, byte[] public_key_arg, byte[] hop_data_arg, byte[] hmac_arg);
+       // uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg);
+       public static native long Packet_clone_ptr(long arg);
+       // struct LDKPacket Packet_clone(const struct LDKPacket *NONNULL_PTR orig);
+       public static native long Packet_clone(long orig);
+       // bool Packet_eq(const struct LDKPacket *NONNULL_PTR a, const struct LDKPacket *NONNULL_PTR b);
+       public static native boolean Packet_eq(long a, long b);
+       // struct LDKCVec_u8Z Packet_write(const struct LDKPacket *NONNULL_PTR obj);
+       public static native byte[] Packet_write(long obj);
        // void OnionMessageContents_free(struct LDKOnionMessageContents this_ptr);
        public static native void OnionMessageContents_free(long this_ptr);
        // uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg);
@@ -11016,6 +11697,20 @@ public class bindings {
        public static native void CustomOnionMessageContents_free(long this_ptr);
        // void BlindedPath_free(struct LDKBlindedPath this_obj);
        public static native void BlindedPath_free(long this_obj);
+       // struct LDKPublicKey BlindedPath_get_introduction_node_id(const struct LDKBlindedPath *NONNULL_PTR this_ptr);
+       public static native byte[] BlindedPath_get_introduction_node_id(long this_ptr);
+       // void BlindedPath_set_introduction_node_id(struct LDKBlindedPath *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       public static native void BlindedPath_set_introduction_node_id(long this_ptr, byte[] val);
+       // struct LDKPublicKey BlindedPath_get_blinding_point(const struct LDKBlindedPath *NONNULL_PTR this_ptr);
+       public static native byte[] BlindedPath_get_blinding_point(long this_ptr);
+       // void BlindedPath_set_blinding_point(struct LDKBlindedPath *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       public static native void BlindedPath_set_blinding_point(long this_ptr, byte[] val);
+       // struct LDKCVec_BlindedHopZ BlindedPath_get_blinded_hops(const struct LDKBlindedPath *NONNULL_PTR this_ptr);
+       public static native long[] BlindedPath_get_blinded_hops(long this_ptr);
+       // void BlindedPath_set_blinded_hops(struct LDKBlindedPath *NONNULL_PTR this_ptr, struct LDKCVec_BlindedHopZ val);
+       public static native void BlindedPath_set_blinded_hops(long this_ptr, long[] val);
+       // MUST_USE_RES struct LDKBlindedPath BlindedPath_new(struct LDKPublicKey introduction_node_id_arg, struct LDKPublicKey blinding_point_arg, struct LDKCVec_BlindedHopZ blinded_hops_arg);
+       public static native long BlindedPath_new(byte[] introduction_node_id_arg, byte[] blinding_point_arg, long[] blinded_hops_arg);
        // uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg);
        public static native long BlindedPath_clone_ptr(long arg);
        // struct LDKBlindedPath BlindedPath_clone(const struct LDKBlindedPath *NONNULL_PTR orig);
@@ -11026,6 +11721,16 @@ public class bindings {
        public static native boolean BlindedPath_eq(long a, long b);
        // void BlindedHop_free(struct LDKBlindedHop this_obj);
        public static native void BlindedHop_free(long this_obj);
+       // struct LDKPublicKey BlindedHop_get_blinded_node_id(const struct LDKBlindedHop *NONNULL_PTR this_ptr);
+       public static native byte[] BlindedHop_get_blinded_node_id(long this_ptr);
+       // void BlindedHop_set_blinded_node_id(struct LDKBlindedHop *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       public static native void BlindedHop_set_blinded_node_id(long this_ptr, byte[] val);
+       // struct LDKCVec_u8Z BlindedHop_get_encrypted_payload(const struct LDKBlindedHop *NONNULL_PTR this_ptr);
+       public static native byte[] BlindedHop_get_encrypted_payload(long this_ptr);
+       // void BlindedHop_set_encrypted_payload(struct LDKBlindedHop *NONNULL_PTR this_ptr, struct LDKCVec_u8Z val);
+       public static native void BlindedHop_set_encrypted_payload(long this_ptr, byte[] val);
+       // MUST_USE_RES struct LDKBlindedHop BlindedHop_new(struct LDKPublicKey blinded_node_id_arg, struct LDKCVec_u8Z encrypted_payload_arg);
+       public static native long BlindedHop_new(byte[] blinded_node_id_arg, byte[] encrypted_payload_arg);
        // uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg);
        public static native long BlindedHop_clone_ptr(long arg);
        // struct LDKBlindedHop BlindedHop_clone(const struct LDKBlindedHop *NONNULL_PTR orig);
@@ -11036,6 +11741,8 @@ public class bindings {
        public static native boolean BlindedHop_eq(long a, long b);
        // MUST_USE_RES struct LDKCResult_BlindedPathNoneZ BlindedPath_new_for_message(struct LDKCVec_PublicKeyZ node_pks, const struct LDKEntropySource *NONNULL_PTR entropy_source);
        public static native long BlindedPath_new_for_message(byte[][] node_pks, long entropy_source);
+       // MUST_USE_RES struct LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ BlindedPath_one_hop_for_payment(struct LDKPublicKey payee_node_id, struct LDKReceiveTlvs payee_tlvs, const struct LDKEntropySource *NONNULL_PTR entropy_source);
+       public static native long BlindedPath_one_hop_for_payment(byte[] payee_node_id, long payee_tlvs, long entropy_source);
        // struct LDKCVec_u8Z BlindedPath_write(const struct LDKBlindedPath *NONNULL_PTR obj);
        public static native byte[] BlindedPath_write(long obj);
        // struct LDKCResult_BlindedPathDecodeErrorZ BlindedPath_read(struct LDKu8slice ser);
@@ -11044,13 +11751,123 @@ public class bindings {
        public static native byte[] BlindedHop_write(long obj);
        // struct LDKCResult_BlindedHopDecodeErrorZ BlindedHop_read(struct LDKu8slice ser);
        public static native long BlindedHop_read(byte[] ser);
+       // void ForwardNode_free(struct LDKForwardNode this_obj);
+       public static native void ForwardNode_free(long this_obj);
+       // struct LDKForwardTlvs ForwardNode_get_tlvs(const struct LDKForwardNode *NONNULL_PTR this_ptr);
+       public static native long ForwardNode_get_tlvs(long this_ptr);
+       // void ForwardNode_set_tlvs(struct LDKForwardNode *NONNULL_PTR this_ptr, struct LDKForwardTlvs val);
+       public static native void ForwardNode_set_tlvs(long this_ptr, long val);
+       // struct LDKPublicKey ForwardNode_get_node_id(const struct LDKForwardNode *NONNULL_PTR this_ptr);
+       public static native byte[] ForwardNode_get_node_id(long this_ptr);
+       // void ForwardNode_set_node_id(struct LDKForwardNode *NONNULL_PTR this_ptr, struct LDKPublicKey val);
+       public static native void ForwardNode_set_node_id(long this_ptr, byte[] val);
+       // uint64_t ForwardNode_get_htlc_maximum_msat(const struct LDKForwardNode *NONNULL_PTR this_ptr);
+       public static native long ForwardNode_get_htlc_maximum_msat(long this_ptr);
+       // void ForwardNode_set_htlc_maximum_msat(struct LDKForwardNode *NONNULL_PTR this_ptr, uint64_t val);
+       public static native void ForwardNode_set_htlc_maximum_msat(long this_ptr, long val);
+       // MUST_USE_RES struct LDKForwardNode ForwardNode_new(struct LDKForwardTlvs tlvs_arg, struct LDKPublicKey node_id_arg, uint64_t htlc_maximum_msat_arg);
+       public static native long ForwardNode_new(long tlvs_arg, byte[] node_id_arg, long htlc_maximum_msat_arg);
+       // uint64_t ForwardNode_clone_ptr(LDKForwardNode *NONNULL_PTR arg);
+       public static native long ForwardNode_clone_ptr(long arg);
+       // struct LDKForwardNode ForwardNode_clone(const struct LDKForwardNode *NONNULL_PTR orig);
+       public static native long ForwardNode_clone(long orig);
+       // void ForwardTlvs_free(struct LDKForwardTlvs this_obj);
+       public static native void ForwardTlvs_free(long this_obj);
+       // uint64_t ForwardTlvs_get_short_channel_id(const struct LDKForwardTlvs *NONNULL_PTR this_ptr);
+       public static native long ForwardTlvs_get_short_channel_id(long this_ptr);
+       // void ForwardTlvs_set_short_channel_id(struct LDKForwardTlvs *NONNULL_PTR this_ptr, uint64_t val);
+       public static native void ForwardTlvs_set_short_channel_id(long this_ptr, long val);
+       // struct LDKPaymentRelay ForwardTlvs_get_payment_relay(const struct LDKForwardTlvs *NONNULL_PTR this_ptr);
+       public static native long ForwardTlvs_get_payment_relay(long this_ptr);
+       // void ForwardTlvs_set_payment_relay(struct LDKForwardTlvs *NONNULL_PTR this_ptr, struct LDKPaymentRelay val);
+       public static native void ForwardTlvs_set_payment_relay(long this_ptr, long val);
+       // struct LDKPaymentConstraints ForwardTlvs_get_payment_constraints(const struct LDKForwardTlvs *NONNULL_PTR this_ptr);
+       public static native long ForwardTlvs_get_payment_constraints(long this_ptr);
+       // void ForwardTlvs_set_payment_constraints(struct LDKForwardTlvs *NONNULL_PTR this_ptr, struct LDKPaymentConstraints val);
+       public static native void ForwardTlvs_set_payment_constraints(long this_ptr, long val);
+       // struct LDKBlindedHopFeatures ForwardTlvs_get_features(const struct LDKForwardTlvs *NONNULL_PTR this_ptr);
+       public static native long ForwardTlvs_get_features(long this_ptr);
+       // void ForwardTlvs_set_features(struct LDKForwardTlvs *NONNULL_PTR this_ptr, struct LDKBlindedHopFeatures val);
+       public static native void ForwardTlvs_set_features(long this_ptr, long val);
+       // MUST_USE_RES struct LDKForwardTlvs ForwardTlvs_new(uint64_t short_channel_id_arg, struct LDKPaymentRelay payment_relay_arg, struct LDKPaymentConstraints payment_constraints_arg, struct LDKBlindedHopFeatures features_arg);
+       public static native long ForwardTlvs_new(long short_channel_id_arg, long payment_relay_arg, long payment_constraints_arg, long features_arg);
+       // uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg);
+       public static native long ForwardTlvs_clone_ptr(long arg);
+       // struct LDKForwardTlvs ForwardTlvs_clone(const struct LDKForwardTlvs *NONNULL_PTR orig);
+       public static native long ForwardTlvs_clone(long orig);
+       // void ReceiveTlvs_free(struct LDKReceiveTlvs this_obj);
+       public static native void ReceiveTlvs_free(long this_obj);
+       // const uint8_t (*ReceiveTlvs_get_payment_secret(const struct LDKReceiveTlvs *NONNULL_PTR this_ptr))[32];
+       public static native byte[] ReceiveTlvs_get_payment_secret(long this_ptr);
+       // void ReceiveTlvs_set_payment_secret(struct LDKReceiveTlvs *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       public static native void ReceiveTlvs_set_payment_secret(long this_ptr, byte[] val);
+       // struct LDKPaymentConstraints ReceiveTlvs_get_payment_constraints(const struct LDKReceiveTlvs *NONNULL_PTR this_ptr);
+       public static native long ReceiveTlvs_get_payment_constraints(long this_ptr);
+       // void ReceiveTlvs_set_payment_constraints(struct LDKReceiveTlvs *NONNULL_PTR this_ptr, struct LDKPaymentConstraints val);
+       public static native void ReceiveTlvs_set_payment_constraints(long this_ptr, long val);
+       // MUST_USE_RES struct LDKReceiveTlvs ReceiveTlvs_new(struct LDKThirtyTwoBytes payment_secret_arg, struct LDKPaymentConstraints payment_constraints_arg);
+       public static native long ReceiveTlvs_new(byte[] payment_secret_arg, long payment_constraints_arg);
+       // uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg);
+       public static native long ReceiveTlvs_clone_ptr(long arg);
+       // struct LDKReceiveTlvs ReceiveTlvs_clone(const struct LDKReceiveTlvs *NONNULL_PTR orig);
+       public static native long ReceiveTlvs_clone(long orig);
+       // void PaymentRelay_free(struct LDKPaymentRelay this_obj);
+       public static native void PaymentRelay_free(long this_obj);
+       // uint16_t PaymentRelay_get_cltv_expiry_delta(const struct LDKPaymentRelay *NONNULL_PTR this_ptr);
+       public static native short PaymentRelay_get_cltv_expiry_delta(long this_ptr);
+       // void PaymentRelay_set_cltv_expiry_delta(struct LDKPaymentRelay *NONNULL_PTR this_ptr, uint16_t val);
+       public static native void PaymentRelay_set_cltv_expiry_delta(long this_ptr, short val);
+       // uint32_t PaymentRelay_get_fee_proportional_millionths(const struct LDKPaymentRelay *NONNULL_PTR this_ptr);
+       public static native int PaymentRelay_get_fee_proportional_millionths(long this_ptr);
+       // void PaymentRelay_set_fee_proportional_millionths(struct LDKPaymentRelay *NONNULL_PTR this_ptr, uint32_t val);
+       public static native void PaymentRelay_set_fee_proportional_millionths(long this_ptr, int val);
+       // uint32_t PaymentRelay_get_fee_base_msat(const struct LDKPaymentRelay *NONNULL_PTR this_ptr);
+       public static native int PaymentRelay_get_fee_base_msat(long this_ptr);
+       // void PaymentRelay_set_fee_base_msat(struct LDKPaymentRelay *NONNULL_PTR this_ptr, uint32_t val);
+       public static native void PaymentRelay_set_fee_base_msat(long this_ptr, int val);
+       // MUST_USE_RES struct LDKPaymentRelay PaymentRelay_new(uint16_t cltv_expiry_delta_arg, uint32_t fee_proportional_millionths_arg, uint32_t fee_base_msat_arg);
+       public static native long PaymentRelay_new(short cltv_expiry_delta_arg, int fee_proportional_millionths_arg, int fee_base_msat_arg);
+       // uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg);
+       public static native long PaymentRelay_clone_ptr(long arg);
+       // struct LDKPaymentRelay PaymentRelay_clone(const struct LDKPaymentRelay *NONNULL_PTR orig);
+       public static native long PaymentRelay_clone(long orig);
+       // void PaymentConstraints_free(struct LDKPaymentConstraints this_obj);
+       public static native void PaymentConstraints_free(long this_obj);
+       // uint32_t PaymentConstraints_get_max_cltv_expiry(const struct LDKPaymentConstraints *NONNULL_PTR this_ptr);
+       public static native int PaymentConstraints_get_max_cltv_expiry(long this_ptr);
+       // void PaymentConstraints_set_max_cltv_expiry(struct LDKPaymentConstraints *NONNULL_PTR this_ptr, uint32_t val);
+       public static native void PaymentConstraints_set_max_cltv_expiry(long this_ptr, int val);
+       // uint64_t PaymentConstraints_get_htlc_minimum_msat(const struct LDKPaymentConstraints *NONNULL_PTR this_ptr);
+       public static native long PaymentConstraints_get_htlc_minimum_msat(long this_ptr);
+       // void PaymentConstraints_set_htlc_minimum_msat(struct LDKPaymentConstraints *NONNULL_PTR this_ptr, uint64_t val);
+       public static native void PaymentConstraints_set_htlc_minimum_msat(long this_ptr, long val);
+       // MUST_USE_RES struct LDKPaymentConstraints PaymentConstraints_new(uint32_t max_cltv_expiry_arg, uint64_t htlc_minimum_msat_arg);
+       public static native long PaymentConstraints_new(int max_cltv_expiry_arg, long htlc_minimum_msat_arg);
+       // uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg);
+       public static native long PaymentConstraints_clone_ptr(long arg);
+       // struct LDKPaymentConstraints PaymentConstraints_clone(const struct LDKPaymentConstraints *NONNULL_PTR orig);
+       public static native long PaymentConstraints_clone(long orig);
+       // struct LDKCVec_u8Z ForwardTlvs_write(const struct LDKForwardTlvs *NONNULL_PTR obj);
+       public static native byte[] ForwardTlvs_write(long obj);
+       // struct LDKCVec_u8Z ReceiveTlvs_write(const struct LDKReceiveTlvs *NONNULL_PTR obj);
+       public static native byte[] ReceiveTlvs_write(long obj);
+       // struct LDKCResult_ReceiveTlvsDecodeErrorZ ReceiveTlvs_read(struct LDKu8slice ser);
+       public static native long ReceiveTlvs_read(byte[] ser);
+       // struct LDKCVec_u8Z PaymentRelay_write(const struct LDKPaymentRelay *NONNULL_PTR obj);
+       public static native byte[] PaymentRelay_write(long obj);
+       // struct LDKCResult_PaymentRelayDecodeErrorZ PaymentRelay_read(struct LDKu8slice ser);
+       public static native long PaymentRelay_read(byte[] ser);
+       // struct LDKCVec_u8Z PaymentConstraints_write(const struct LDKPaymentConstraints *NONNULL_PTR obj);
+       public static native byte[] PaymentConstraints_write(long obj);
+       // struct LDKCResult_PaymentConstraintsDecodeErrorZ PaymentConstraints_read(struct LDKu8slice ser);
+       public static native long PaymentConstraints_read(byte[] ser);
        // void PaymentPurpose_free(struct LDKPaymentPurpose this_ptr);
        public static native void PaymentPurpose_free(long this_ptr);
        // uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg);
        public static native long PaymentPurpose_clone_ptr(long arg);
        // struct LDKPaymentPurpose PaymentPurpose_clone(const struct LDKPaymentPurpose *NONNULL_PTR orig);
        public static native long PaymentPurpose_clone(long orig);
-       // struct LDKPaymentPurpose PaymentPurpose_invoice_payment(struct LDKCOption_PaymentPreimageZ payment_preimage, struct LDKThirtyTwoBytes payment_secret);
+       // struct LDKPaymentPurpose PaymentPurpose_invoice_payment(struct LDKCOption_ThirtyTwoBytesZ payment_preimage, struct LDKThirtyTwoBytes payment_secret);
        public static native long PaymentPurpose_invoice_payment(long payment_preimage, byte[] payment_secret);
        // struct LDKPaymentPurpose PaymentPurpose_spontaneous_payment(struct LDKThirtyTwoBytes a);
        public static native long PaymentPurpose_spontaneous_payment(byte[] a);
@@ -11060,6 +11877,36 @@ public class bindings {
        public static native byte[] PaymentPurpose_write(long obj);
        // struct LDKCResult_PaymentPurposeDecodeErrorZ PaymentPurpose_read(struct LDKu8slice ser);
        public static native long PaymentPurpose_read(byte[] ser);
+       // void ClaimedHTLC_free(struct LDKClaimedHTLC this_obj);
+       public static native void ClaimedHTLC_free(long this_obj);
+       // const uint8_t (*ClaimedHTLC_get_channel_id(const struct LDKClaimedHTLC *NONNULL_PTR this_ptr))[32];
+       public static native byte[] ClaimedHTLC_get_channel_id(long this_ptr);
+       // void ClaimedHTLC_set_channel_id(struct LDKClaimedHTLC *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
+       public static native void ClaimedHTLC_set_channel_id(long this_ptr, byte[] val);
+       // struct LDKU128 ClaimedHTLC_get_user_channel_id(const struct LDKClaimedHTLC *NONNULL_PTR this_ptr);
+       public static native byte[] ClaimedHTLC_get_user_channel_id(long this_ptr);
+       // void ClaimedHTLC_set_user_channel_id(struct LDKClaimedHTLC *NONNULL_PTR this_ptr, struct LDKU128 val);
+       public static native void ClaimedHTLC_set_user_channel_id(long this_ptr, byte[] val);
+       // uint32_t ClaimedHTLC_get_cltv_expiry(const struct LDKClaimedHTLC *NONNULL_PTR this_ptr);
+       public static native int ClaimedHTLC_get_cltv_expiry(long this_ptr);
+       // void ClaimedHTLC_set_cltv_expiry(struct LDKClaimedHTLC *NONNULL_PTR this_ptr, uint32_t val);
+       public static native void ClaimedHTLC_set_cltv_expiry(long this_ptr, int val);
+       // uint64_t ClaimedHTLC_get_value_msat(const struct LDKClaimedHTLC *NONNULL_PTR this_ptr);
+       public static native long ClaimedHTLC_get_value_msat(long this_ptr);
+       // void ClaimedHTLC_set_value_msat(struct LDKClaimedHTLC *NONNULL_PTR this_ptr, uint64_t val);
+       public static native void ClaimedHTLC_set_value_msat(long this_ptr, long val);
+       // MUST_USE_RES struct LDKClaimedHTLC ClaimedHTLC_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKU128 user_channel_id_arg, uint32_t cltv_expiry_arg, uint64_t value_msat_arg);
+       public static native long ClaimedHTLC_new(byte[] channel_id_arg, byte[] user_channel_id_arg, int cltv_expiry_arg, long value_msat_arg);
+       // uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg);
+       public static native long ClaimedHTLC_clone_ptr(long arg);
+       // struct LDKClaimedHTLC ClaimedHTLC_clone(const struct LDKClaimedHTLC *NONNULL_PTR orig);
+       public static native long ClaimedHTLC_clone(long orig);
+       // bool ClaimedHTLC_eq(const struct LDKClaimedHTLC *NONNULL_PTR a, const struct LDKClaimedHTLC *NONNULL_PTR b);
+       public static native boolean ClaimedHTLC_eq(long a, long b);
+       // struct LDKCVec_u8Z ClaimedHTLC_write(const struct LDKClaimedHTLC *NONNULL_PTR obj);
+       public static native byte[] ClaimedHTLC_write(long obj);
+       // struct LDKCResult_ClaimedHTLCDecodeErrorZ ClaimedHTLC_read(struct LDKu8slice ser);
+       public static native long ClaimedHTLC_read(byte[] ser);
        // void PathFailure_free(struct LDKPathFailure this_ptr);
        public static native void PathFailure_free(long this_ptr);
        // uint64_t PathFailure_clone_ptr(LDKPathFailure *NONNULL_PTR arg);
@@ -11100,6 +11947,8 @@ public class bindings {
        public static native long ClosureReason_outdated_channel_manager();
        // struct LDKClosureReason ClosureReason_counterparty_coop_closed_unfunded_channel(void);
        public static native long ClosureReason_counterparty_coop_closed_unfunded_channel();
+       // struct LDKClosureReason ClosureReason_funding_batch_closure(void);
+       public static native long ClosureReason_funding_batch_closure();
        // bool ClosureReason_eq(const struct LDKClosureReason *NONNULL_PTR a, const struct LDKClosureReason *NONNULL_PTR b);
        public static native boolean ClosureReason_eq(long a, long b);
        // struct LDKCVec_u8Z ClosureReason_write(const struct LDKClosureReason *NONNULL_PTR obj);
@@ -11154,17 +12003,17 @@ public class bindings {
        public static native long Event_clone(long orig);
        // struct LDKEvent Event_funding_generation_ready(struct LDKThirtyTwoBytes temporary_channel_id, struct LDKPublicKey counterparty_node_id, uint64_t channel_value_satoshis, struct LDKCVec_u8Z output_script, struct LDKU128 user_channel_id);
        public static native long Event_funding_generation_ready(byte[] temporary_channel_id, byte[] counterparty_node_id, long channel_value_satoshis, byte[] output_script, byte[] user_channel_id);
-       // struct LDKEvent Event_payment_claimable(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, struct LDKRecipientOnionFields onion_fields, uint64_t amount_msat, uint64_t counterparty_skimmed_fee_msat, struct LDKPaymentPurpose purpose, struct LDKThirtyTwoBytes via_channel_id, struct LDKCOption_u128Z via_user_channel_id, struct LDKCOption_u32Z claim_deadline);
-       public static native long Event_payment_claimable(byte[] receiver_node_id, byte[] payment_hash, long onion_fields, long amount_msat, long counterparty_skimmed_fee_msat, long purpose, byte[] via_channel_id, long via_user_channel_id, long claim_deadline);
-       // struct LDKEvent Event_payment_claimed(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, uint64_t amount_msat, struct LDKPaymentPurpose purpose);
-       public static native long Event_payment_claimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, long purpose);
-       // struct LDKEvent Event_payment_sent(struct LDKCOption_PaymentIdZ payment_id, struct LDKThirtyTwoBytes payment_preimage, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u64Z fee_paid_msat);
+       // struct LDKEvent Event_payment_claimable(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, struct LDKRecipientOnionFields onion_fields, uint64_t amount_msat, uint64_t counterparty_skimmed_fee_msat, struct LDKPaymentPurpose purpose, struct LDKCOption_ThirtyTwoBytesZ via_channel_id, struct LDKCOption_U128Z via_user_channel_id, struct LDKCOption_u32Z claim_deadline);
+       public static native long Event_payment_claimable(byte[] receiver_node_id, byte[] payment_hash, long onion_fields, long amount_msat, long counterparty_skimmed_fee_msat, long purpose, long via_channel_id, long via_user_channel_id, long claim_deadline);
+       // struct LDKEvent Event_payment_claimed(struct LDKPublicKey receiver_node_id, struct LDKThirtyTwoBytes payment_hash, uint64_t amount_msat, struct LDKPaymentPurpose purpose, struct LDKCVec_ClaimedHTLCZ htlcs, struct LDKCOption_u64Z sender_intended_total_msat);
+       public static native long Event_payment_claimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, long purpose, long[] htlcs, long sender_intended_total_msat);
+       // struct LDKEvent Event_payment_sent(struct LDKCOption_ThirtyTwoBytesZ payment_id, struct LDKThirtyTwoBytes payment_preimage, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_u64Z fee_paid_msat);
        public static native long Event_payment_sent(long payment_id, byte[] payment_preimage, byte[] payment_hash, long fee_paid_msat);
        // struct LDKEvent Event_payment_failed(struct LDKThirtyTwoBytes payment_id, struct LDKThirtyTwoBytes payment_hash, struct LDKCOption_PaymentFailureReasonZ reason);
        public static native long Event_payment_failed(byte[] payment_id, byte[] payment_hash, long reason);
-       // struct LDKEvent Event_payment_path_successful(struct LDKThirtyTwoBytes payment_id, struct LDKCOption_PaymentHashZ payment_hash, struct LDKPath path);
+       // struct LDKEvent Event_payment_path_successful(struct LDKThirtyTwoBytes payment_id, struct LDKCOption_ThirtyTwoBytesZ payment_hash, struct LDKPath path);
        public static native long Event_payment_path_successful(byte[] payment_id, long payment_hash, long path);
-       // struct LDKEvent Event_payment_path_failed(struct LDKCOption_PaymentIdZ payment_id, struct LDKThirtyTwoBytes payment_hash, bool payment_failed_permanently, struct LDKPathFailure failure, struct LDKPath path, struct LDKCOption_u64Z short_channel_id);
+       // struct LDKEvent Event_payment_path_failed(struct LDKCOption_ThirtyTwoBytesZ payment_id, struct LDKThirtyTwoBytes payment_hash, bool payment_failed_permanently, struct LDKPathFailure failure, struct LDKPath path, struct LDKCOption_u64Z short_channel_id);
        public static native long Event_payment_path_failed(long payment_id, byte[] payment_hash, boolean payment_failed_permanently, long failure, long path, long short_channel_id);
        // struct LDKEvent Event_probe_successful(struct LDKThirtyTwoBytes payment_id, struct LDKThirtyTwoBytes payment_hash, struct LDKPath path);
        public static native long Event_probe_successful(byte[] payment_id, byte[] payment_hash, long path);
@@ -11174,16 +12023,16 @@ public class bindings {
        public static native long Event_pending_htlcs_forwardable(long time_forwardable);
        // struct LDKEvent Event_htlcintercepted(struct LDKThirtyTwoBytes intercept_id, uint64_t requested_next_hop_scid, struct LDKThirtyTwoBytes payment_hash, uint64_t inbound_amount_msat, uint64_t expected_outbound_amount_msat);
        public static native long Event_htlcintercepted(byte[] intercept_id, long requested_next_hop_scid, byte[] payment_hash, long inbound_amount_msat, long expected_outbound_amount_msat);
-       // struct LDKEvent Event_spendable_outputs(struct LDKCVec_SpendableOutputDescriptorZ outputs);
-       public static native long Event_spendable_outputs(long[] outputs);
-       // struct LDKEvent Event_payment_forwarded(struct LDKThirtyTwoBytes prev_channel_id, struct LDKThirtyTwoBytes next_channel_id, struct LDKCOption_u64Z fee_earned_msat, bool claim_from_onchain_tx, struct LDKCOption_u64Z outbound_amount_forwarded_msat);
-       public static native long Event_payment_forwarded(byte[] prev_channel_id, byte[] next_channel_id, long fee_earned_msat, boolean claim_from_onchain_tx, long outbound_amount_forwarded_msat);
-       // struct LDKEvent Event_channel_pending(struct LDKThirtyTwoBytes channel_id, struct LDKU128 user_channel_id, struct LDKThirtyTwoBytes former_temporary_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKOutPoint funding_txo);
-       public static native long Event_channel_pending(byte[] channel_id, byte[] user_channel_id, byte[] former_temporary_channel_id, byte[] counterparty_node_id, long funding_txo);
+       // struct LDKEvent Event_spendable_outputs(struct LDKCVec_SpendableOutputDescriptorZ outputs, struct LDKCOption_ThirtyTwoBytesZ channel_id);
+       public static native long Event_spendable_outputs(long[] outputs, long channel_id);
+       // struct LDKEvent Event_payment_forwarded(struct LDKCOption_ThirtyTwoBytesZ prev_channel_id, struct LDKCOption_ThirtyTwoBytesZ next_channel_id, struct LDKCOption_u64Z fee_earned_msat, bool claim_from_onchain_tx, struct LDKCOption_u64Z outbound_amount_forwarded_msat);
+       public static native long Event_payment_forwarded(long prev_channel_id, long next_channel_id, long fee_earned_msat, boolean claim_from_onchain_tx, long outbound_amount_forwarded_msat);
+       // struct LDKEvent Event_channel_pending(struct LDKThirtyTwoBytes channel_id, struct LDKU128 user_channel_id, struct LDKCOption_ThirtyTwoBytesZ former_temporary_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKOutPoint funding_txo);
+       public static native long Event_channel_pending(byte[] channel_id, byte[] user_channel_id, long former_temporary_channel_id, byte[] counterparty_node_id, long funding_txo);
        // struct LDKEvent Event_channel_ready(struct LDKThirtyTwoBytes channel_id, struct LDKU128 user_channel_id, struct LDKPublicKey counterparty_node_id, struct LDKChannelTypeFeatures channel_type);
        public static native long Event_channel_ready(byte[] channel_id, byte[] user_channel_id, byte[] counterparty_node_id, long channel_type);
-       // struct LDKEvent Event_channel_closed(struct LDKThirtyTwoBytes channel_id, struct LDKU128 user_channel_id, struct LDKClosureReason reason);
-       public static native long Event_channel_closed(byte[] channel_id, byte[] user_channel_id, long reason);
+       // struct LDKEvent Event_channel_closed(struct LDKThirtyTwoBytes channel_id, struct LDKU128 user_channel_id, struct LDKClosureReason reason, struct LDKPublicKey counterparty_node_id, struct LDKCOption_u64Z channel_capacity_sats);
+       public static native long Event_channel_closed(byte[] channel_id, byte[] user_channel_id, long reason, byte[] counterparty_node_id, long channel_capacity_sats);
        // struct LDKEvent Event_discard_funding(struct LDKThirtyTwoBytes channel_id, struct LDKTransaction transaction);
        public static native long Event_discard_funding(byte[] channel_id, byte[] transaction);
        // struct LDKEvent Event_open_channel_request(struct LDKThirtyTwoBytes temporary_channel_id, struct LDKPublicKey counterparty_node_id, uint64_t funding_satoshis, uint64_t push_msat, struct LDKChannelTypeFeatures channel_type);
@@ -11232,7 +12081,7 @@ public class bindings {
        public static native long MessageSendEvent_send_tx_init_rbf(byte[] node_id, long msg);
        // struct LDKMessageSendEvent MessageSendEvent_send_tx_ack_rbf(struct LDKPublicKey node_id, struct LDKTxAckRbf msg);
        public static native long MessageSendEvent_send_tx_ack_rbf(byte[] node_id, long msg);
-       // struct LDKMessageSendEvent MessageSendEvent_send_tx_abort(struct LDKPublicKey node_id, struct LDKTxAddInput msg);
+       // struct LDKMessageSendEvent MessageSendEvent_send_tx_abort(struct LDKPublicKey node_id, struct LDKTxAbort msg);
        public static native long MessageSendEvent_send_tx_abort(byte[] node_id, long msg);
        // struct LDKMessageSendEvent MessageSendEvent_send_channel_ready(struct LDKPublicKey node_id, struct LDKChannelReady msg);
        public static native long MessageSendEvent_send_channel_ready(byte[] node_id, long msg);
@@ -11298,6 +12147,10 @@ public class bindings {
        public static native long ChannelDerivationParameters_clone(long orig);
        // bool ChannelDerivationParameters_eq(const struct LDKChannelDerivationParameters *NONNULL_PTR a, const struct LDKChannelDerivationParameters *NONNULL_PTR b);
        public static native boolean ChannelDerivationParameters_eq(long a, long b);
+       // struct LDKCVec_u8Z ChannelDerivationParameters_write(const struct LDKChannelDerivationParameters *NONNULL_PTR obj);
+       public static native byte[] ChannelDerivationParameters_write(long obj);
+       // struct LDKCResult_ChannelDerivationParametersDecodeErrorZ ChannelDerivationParameters_read(struct LDKu8slice ser);
+       public static native long ChannelDerivationParameters_read(byte[] ser);
        // void AnchorDescriptor_free(struct LDKAnchorDescriptor this_obj);
        public static native void AnchorDescriptor_free(long this_obj);
        // struct LDKChannelDerivationParameters AnchorDescriptor_get_channel_derivation_parameters(const struct LDKAnchorDescriptor *NONNULL_PTR this_ptr);
@@ -11322,7 +12175,7 @@ public class bindings {
        public static native long AnchorDescriptor_unsigned_tx_input(long this_arg);
        // MUST_USE_RES struct LDKCVec_u8Z AnchorDescriptor_witness_script(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg);
        public static native byte[] AnchorDescriptor_witness_script(long this_arg);
-       // MUST_USE_RES struct LDKWitness AnchorDescriptor_tx_input_witness(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg, struct LDKSignature signature);
+       // MUST_USE_RES struct LDKWitness AnchorDescriptor_tx_input_witness(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg, struct LDKECDSASignature signature);
        public static native byte[] AnchorDescriptor_tx_input_witness(long this_arg, byte[] signature);
        // MUST_USE_RES struct LDKWriteableEcdsaChannelSigner AnchorDescriptor_derive_channel_signer(const struct LDKAnchorDescriptor *NONNULL_PTR this_arg, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
        public static native long AnchorDescriptor_derive_channel_signer(long this_arg, long signer_provider);
@@ -11344,13 +12197,13 @@ public class bindings {
        public static native long HTLCDescriptor_get_htlc(long this_ptr);
        // void HTLCDescriptor_set_htlc(struct LDKHTLCDescriptor *NONNULL_PTR this_ptr, struct LDKHTLCOutputInCommitment val);
        public static native void HTLCDescriptor_set_htlc(long this_ptr, long val);
-       // struct LDKCOption_PaymentPreimageZ HTLCDescriptor_get_preimage(const struct LDKHTLCDescriptor *NONNULL_PTR this_ptr);
+       // struct LDKCOption_ThirtyTwoBytesZ HTLCDescriptor_get_preimage(const struct LDKHTLCDescriptor *NONNULL_PTR this_ptr);
        public static native long HTLCDescriptor_get_preimage(long this_ptr);
-       // void HTLCDescriptor_set_preimage(struct LDKHTLCDescriptor *NONNULL_PTR this_ptr, struct LDKCOption_PaymentPreimageZ val);
+       // void HTLCDescriptor_set_preimage(struct LDKHTLCDescriptor *NONNULL_PTR this_ptr, struct LDKCOption_ThirtyTwoBytesZ val);
        public static native void HTLCDescriptor_set_preimage(long this_ptr, long val);
-       // struct LDKSignature HTLCDescriptor_get_counterparty_sig(const struct LDKHTLCDescriptor *NONNULL_PTR this_ptr);
+       // struct LDKECDSASignature HTLCDescriptor_get_counterparty_sig(const struct LDKHTLCDescriptor *NONNULL_PTR this_ptr);
        public static native byte[] HTLCDescriptor_get_counterparty_sig(long this_ptr);
-       // void HTLCDescriptor_set_counterparty_sig(struct LDKHTLCDescriptor *NONNULL_PTR this_ptr, struct LDKSignature val);
+       // void HTLCDescriptor_set_counterparty_sig(struct LDKHTLCDescriptor *NONNULL_PTR this_ptr, struct LDKECDSASignature val);
        public static native void HTLCDescriptor_set_counterparty_sig(long this_ptr, byte[] val);
        // uint64_t HTLCDescriptor_clone_ptr(LDKHTLCDescriptor *NONNULL_PTR arg);
        public static native long HTLCDescriptor_clone_ptr(long arg);
@@ -11358,6 +12211,10 @@ public class bindings {
        public static native long HTLCDescriptor_clone(long orig);
        // bool HTLCDescriptor_eq(const struct LDKHTLCDescriptor *NONNULL_PTR a, const struct LDKHTLCDescriptor *NONNULL_PTR b);
        public static native boolean HTLCDescriptor_eq(long a, long b);
+       // struct LDKCVec_u8Z HTLCDescriptor_write(const struct LDKHTLCDescriptor *NONNULL_PTR obj);
+       public static native byte[] HTLCDescriptor_write(long obj);
+       // struct LDKCResult_HTLCDescriptorDecodeErrorZ HTLCDescriptor_read(struct LDKu8slice ser);
+       public static native long HTLCDescriptor_read(byte[] ser);
        // MUST_USE_RES struct LDKOutPoint HTLCDescriptor_outpoint(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg);
        public static native long HTLCDescriptor_outpoint(long this_arg);
        // MUST_USE_RES struct LDKTxOut HTLCDescriptor_previous_utxo(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg);
@@ -11368,7 +12225,7 @@ public class bindings {
        public static native long HTLCDescriptor_tx_output(long this_arg);
        // MUST_USE_RES struct LDKCVec_u8Z HTLCDescriptor_witness_script(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg);
        public static native byte[] HTLCDescriptor_witness_script(long this_arg);
-       // MUST_USE_RES struct LDKWitness HTLCDescriptor_tx_input_witness(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg, struct LDKSignature signature, struct LDKu8slice witness_script);
+       // MUST_USE_RES struct LDKWitness HTLCDescriptor_tx_input_witness(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg, struct LDKECDSASignature signature, struct LDKu8slice witness_script);
        public static native byte[] HTLCDescriptor_tx_input_witness(long this_arg, byte[] signature, byte[] witness_script);
        // MUST_USE_RES struct LDKWriteableEcdsaChannelSigner HTLCDescriptor_derive_channel_signer(const struct LDKHTLCDescriptor *NONNULL_PTR this_arg, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
        public static native long HTLCDescriptor_derive_channel_signer(long this_arg, long signer_provider);
@@ -11466,14 +12323,14 @@ public class bindings {
        public static native long BumpTransactionEventHandler_new(long broadcaster, long utxo_source, long signer_provider, long logger);
        // void BumpTransactionEventHandler_handle_event(const struct LDKBumpTransactionEventHandler *NONNULL_PTR this_arg, const struct LDKBumpTransactionEvent *NONNULL_PTR event);
        public static native void BumpTransactionEventHandler_handle_event(long this_arg, long event);
-       // void FilesystemPersister_free(struct LDKFilesystemPersister this_obj);
-       public static native void FilesystemPersister_free(long this_obj);
-       // MUST_USE_RES struct LDKFilesystemPersister FilesystemPersister_new(struct LDKStr path_to_channel_data);
-       public static native long FilesystemPersister_new(String path_to_channel_data);
-       // MUST_USE_RES struct LDKStr FilesystemPersister_get_data_dir(const struct LDKFilesystemPersister *NONNULL_PTR this_arg);
-       public static native String FilesystemPersister_get_data_dir(long this_arg);
-       // MUST_USE_RES struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ FilesystemPersister_read_channelmonitors(const struct LDKFilesystemPersister *NONNULL_PTR this_arg, struct LDKEntropySource entropy_source, const struct LDKSignerProvider *NONNULL_PTR signer_provider);
-       public static native long FilesystemPersister_read_channelmonitors(long this_arg, long entropy_source, long signer_provider);
+       // void FilesystemStore_free(struct LDKFilesystemStore this_obj);
+       public static native void FilesystemStore_free(long this_obj);
+       // MUST_USE_RES struct LDKFilesystemStore FilesystemStore_new(struct LDKStr data_dir);
+       public static native long FilesystemStore_new(String data_dir);
+       // MUST_USE_RES struct LDKStr FilesystemStore_get_data_dir(const struct LDKFilesystemStore *NONNULL_PTR this_arg);
+       public static native String FilesystemStore_get_data_dir(long this_arg);
+       // struct LDKKVStore FilesystemStore_as_KVStore(const struct LDKFilesystemStore *NONNULL_PTR this_arg);
+       public static native long FilesystemStore_as_KVStore(long this_arg);
        // void BackgroundProcessor_free(struct LDKBackgroundProcessor this_obj);
        public static native void BackgroundProcessor_free(long this_obj);
        // void GossipSync_free(struct LDKGossipSync this_ptr);
@@ -11486,9 +12343,9 @@ public class bindings {
        public static native long GossipSync_none();
        // MUST_USE_RES struct LDKBackgroundProcessor BackgroundProcessor_start(struct LDKPersister persister, struct LDKEventHandler event_handler, const struct LDKChainMonitor *NONNULL_PTR chain_monitor, const struct LDKChannelManager *NONNULL_PTR channel_manager, struct LDKGossipSync gossip_sync, const struct LDKPeerManager *NONNULL_PTR peer_manager, struct LDKLogger logger, struct LDKCOption_WriteableScoreZ scorer);
        public static native long BackgroundProcessor_start(long persister, long event_handler, long chain_monitor, long channel_manager, long gossip_sync, long peer_manager, long logger, long scorer);
-       // MUST_USE_RES struct LDKCResult_NoneErrorZ BackgroundProcessor_join(struct LDKBackgroundProcessor this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneIOErrorZ BackgroundProcessor_join(struct LDKBackgroundProcessor this_arg);
        public static native long BackgroundProcessor_join(long this_arg);
-       // MUST_USE_RES struct LDKCResult_NoneErrorZ BackgroundProcessor_stop(struct LDKBackgroundProcessor this_arg);
+       // MUST_USE_RES struct LDKCResult_NoneIOErrorZ BackgroundProcessor_stop(struct LDKBackgroundProcessor this_arg);
        public static native long BackgroundProcessor_stop(long this_arg);
        // void Bolt11ParseError_free(struct LDKBolt11ParseError this_ptr);
        public static native void Bolt11ParseError_free(long this_ptr);
@@ -11744,7 +12601,7 @@ public class bindings {
        public static native byte[] SignedRawBolt11Invoice_signable_hash(long this_arg);
        // MUST_USE_RES struct LDKBolt11InvoiceSignature SignedRawBolt11Invoice_signature(const struct LDKSignedRawBolt11Invoice *NONNULL_PTR this_arg);
        public static native long SignedRawBolt11Invoice_signature(long this_arg);
-       // MUST_USE_RES struct LDKCResult_PayeePubKeyErrorZ SignedRawBolt11Invoice_recover_payee_pub_key(const struct LDKSignedRawBolt11Invoice *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCResult_PayeePubKeySecp256k1ErrorZ SignedRawBolt11Invoice_recover_payee_pub_key(const struct LDKSignedRawBolt11Invoice *NONNULL_PTR this_arg);
        public static native long SignedRawBolt11Invoice_recover_payee_pub_key(long this_arg);
        // MUST_USE_RES bool SignedRawBolt11Invoice_check_signature(const struct LDKSignedRawBolt11Invoice *NONNULL_PTR this_arg);
        public static native boolean SignedRawBolt11Invoice_check_signature(long this_arg);
@@ -11762,7 +12619,7 @@ public class bindings {
        public static native long RawBolt11Invoice_expiry_time(long this_arg);
        // MUST_USE_RES struct LDKMinFinalCltvExpiryDelta RawBolt11Invoice_min_final_cltv_expiry_delta(const struct LDKRawBolt11Invoice *NONNULL_PTR this_arg);
        public static native long RawBolt11Invoice_min_final_cltv_expiry_delta(long this_arg);
-       // MUST_USE_RES struct LDKCOption_PaymentSecretZ RawBolt11Invoice_payment_secret(const struct LDKRawBolt11Invoice *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCOption_ThirtyTwoBytesZ RawBolt11Invoice_payment_secret(const struct LDKRawBolt11Invoice *NONNULL_PTR this_arg);
        public static native long RawBolt11Invoice_payment_secret(long this_arg);
        // MUST_USE_RES struct LDKCOption_CVec_u8ZZ RawBolt11Invoice_payment_metadata(const struct LDKRawBolt11Invoice *NONNULL_PTR this_arg);
        public static native long RawBolt11Invoice_payment_metadata(long this_arg);
@@ -11810,7 +12667,7 @@ public class bindings {
        public static native long Bolt11Invoice_features(long this_arg);
        // MUST_USE_RES struct LDKPublicKey Bolt11Invoice_recover_payee_pub_key(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
        public static native byte[] Bolt11Invoice_recover_payee_pub_key(long this_arg);
-       // MUST_USE_RES struct LDKCOption_DurationZ Bolt11Invoice_expires_at(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCOption_u64Z Bolt11Invoice_expires_at(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
        public static native long Bolt11Invoice_expires_at(long this_arg);
        // MUST_USE_RES uint64_t Bolt11Invoice_expiry_time(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
        public static native long Bolt11Invoice_expiry_time(long this_arg);
@@ -11824,7 +12681,7 @@ public class bindings {
        public static native boolean Bolt11Invoice_would_expire(long this_arg, long at_time);
        // MUST_USE_RES uint64_t Bolt11Invoice_min_final_cltv_expiry_delta(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
        public static native long Bolt11Invoice_min_final_cltv_expiry_delta(long this_arg);
-       // MUST_USE_RES struct LDKCVec_AddressZ Bolt11Invoice_fallback_addresses(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
+       // MUST_USE_RES struct LDKCVec_StrZ Bolt11Invoice_fallback_addresses(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
        public static native String[] Bolt11Invoice_fallback_addresses(long this_arg);
        // MUST_USE_RES struct LDKCVec_PrivateRouteZ Bolt11Invoice_private_routes(const struct LDKBolt11Invoice *NONNULL_PTR this_arg);
        public static native long[] Bolt11Invoice_private_routes(long this_arg);
@@ -11908,14 +12765,18 @@ public class bindings {
        public static native boolean SignOrCreationError_eq(long a, long b);
        // struct LDKStr SignOrCreationError_to_str(const struct LDKSignOrCreationError *NONNULL_PTR o);
        public static native String SignOrCreationError_to_str(long o);
-       // struct LDKCResult_PaymentIdPaymentErrorZ pay_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, struct LDKRetry retry_strategy, const struct LDKChannelManager *NONNULL_PTR channelmanager);
+       // struct LDKCResult_ThirtyTwoBytesPaymentErrorZ pay_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, struct LDKRetry retry_strategy, const struct LDKChannelManager *NONNULL_PTR channelmanager);
        public static native long pay_invoice(long invoice, long retry_strategy, long channelmanager);
        // struct LDKCResult_NonePaymentErrorZ pay_invoice_with_id(const struct LDKBolt11Invoice *NONNULL_PTR invoice, struct LDKThirtyTwoBytes payment_id, struct LDKRetry retry_strategy, const struct LDKChannelManager *NONNULL_PTR channelmanager);
        public static native long pay_invoice_with_id(long invoice, byte[] payment_id, long retry_strategy, long channelmanager);
-       // struct LDKCResult_PaymentIdPaymentErrorZ pay_zero_value_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, uint64_t amount_msats, struct LDKRetry retry_strategy, const struct LDKChannelManager *NONNULL_PTR channelmanager);
+       // struct LDKCResult_ThirtyTwoBytesPaymentErrorZ pay_zero_value_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, uint64_t amount_msats, struct LDKRetry retry_strategy, const struct LDKChannelManager *NONNULL_PTR channelmanager);
        public static native long pay_zero_value_invoice(long invoice, long amount_msats, long retry_strategy, long channelmanager);
        // struct LDKCResult_NonePaymentErrorZ pay_zero_value_invoice_with_id(const struct LDKBolt11Invoice *NONNULL_PTR invoice, uint64_t amount_msats, struct LDKThirtyTwoBytes payment_id, struct LDKRetry retry_strategy, const struct LDKChannelManager *NONNULL_PTR channelmanager);
        public static native long pay_zero_value_invoice_with_id(long invoice, long amount_msats, byte[] payment_id, long retry_strategy, long channelmanager);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ preflight_probe_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKCOption_u64Z liquidity_limit_multiplier);
+       public static native long preflight_probe_invoice(long invoice, long channelmanager, long liquidity_limit_multiplier);
+       // struct LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ preflight_probe_zero_value_invoice(const struct LDKBolt11Invoice *NONNULL_PTR invoice, uint64_t amount_msat, const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKCOption_u64Z liquidity_limit_multiplier);
+       public static native long preflight_probe_zero_value_invoice(long invoice, long amount_msat, long channelmanager, long liquidity_limit_multiplier);
        // void PaymentError_free(struct LDKPaymentError this_ptr);
        public static native void PaymentError_free(long this_ptr);
        // uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg);
@@ -11928,9 +12789,21 @@ public class bindings {
        public static native long PaymentError_sending(RetryableSendFailure a);
        // bool PaymentError_eq(const struct LDKPaymentError *NONNULL_PTR a, const struct LDKPaymentError *NONNULL_PTR b);
        public static native boolean PaymentError_eq(long a, long b);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(struct LDKCOption_u64Z amt_msat, struct LDKCOption_PaymentHashZ payment_hash, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
+       // void ProbingError_free(struct LDKProbingError this_ptr);
+       public static native void ProbingError_free(long this_ptr);
+       // uint64_t ProbingError_clone_ptr(LDKProbingError *NONNULL_PTR arg);
+       public static native long ProbingError_clone_ptr(long arg);
+       // struct LDKProbingError ProbingError_clone(const struct LDKProbingError *NONNULL_PTR orig);
+       public static native long ProbingError_clone(long orig);
+       // struct LDKProbingError ProbingError_invoice(struct LDKStr a);
+       public static native long ProbingError_invoice(String a);
+       // struct LDKProbingError ProbingError_sending(struct LDKProbeSendFailure a);
+       public static native long ProbingError_sending(long a);
+       // bool ProbingError_eq(const struct LDKProbingError *NONNULL_PTR a, const struct LDKProbingError *NONNULL_PTR b);
+       public static native boolean ProbingError_eq(long a, long b);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(struct LDKCOption_u64Z amt_msat, struct LDKCOption_ThirtyTwoBytesZ payment_hash, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
        public static native long create_phantom_invoice(long amt_msat, long payment_hash, String description, int invoice_expiry_delta_secs, long[] phantom_route_hints, long entropy_source, long node_signer, long logger, Currency network, long min_final_cltv_expiry_delta, long duration_since_epoch);
-       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(struct LDKCOption_u64Z amt_msat, struct LDKCOption_PaymentHashZ payment_hash, uint32_t invoice_expiry_delta_secs, struct LDKSha256 description_hash, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
+       // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(struct LDKCOption_u64Z amt_msat, struct LDKCOption_ThirtyTwoBytesZ payment_hash, uint32_t invoice_expiry_delta_secs, struct LDKSha256 description_hash, struct LDKCVec_PhantomRouteHintsZ phantom_route_hints, struct LDKEntropySource entropy_source, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u16Z min_final_cltv_expiry_delta, uint64_t duration_since_epoch);
        public static native long create_phantom_invoice_with_description_hash(long amt_msat, long payment_hash, int invoice_expiry_delta_secs, long description_hash, long[] phantom_route_hints, long entropy_source, long node_signer, long logger, Currency network, long min_final_cltv_expiry_delta, long duration_since_epoch);
        // struct LDKCResult_Bolt11InvoiceSignOrCreationErrorZ create_invoice_from_channelmanager(const struct LDKChannelManager *NONNULL_PTR channelmanager, struct LDKNodeSigner node_signer, struct LDKLogger logger, enum LDKCurrency network, struct LDKCOption_u64Z amt_msat, struct LDKStr description, uint32_t invoice_expiry_delta_secs, struct LDKCOption_u16Z min_final_cltv_expiry_delta);
        public static native long create_invoice_from_channelmanager(long channelmanager, long node_signer, long logger, Currency network, long amt_msat, String description, int invoice_expiry_delta_secs, long min_final_cltv_expiry_delta);
index d7638a8da7a119a11e8a9e0805571203d6708e4d..92e3834e83b370b71aaf87ccd65acb6f642d511c 100644 (file)
@@ -279,11 +279,11 @@ public class AcceptChannel extends CommonBase {
        /**
         * A request to pre-set the to-sender output's scriptPubkey for when we collaboratively close
         */
-       public Option_ScriptZ get_shutdown_scriptpubkey() {
+       public Option_CVec_u8ZZ get_shutdown_scriptpubkey() {
                long ret = bindings.AcceptChannel_get_shutdown_scriptpubkey(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -291,7 +291,7 @@ public class AcceptChannel extends CommonBase {
        /**
         * A request to pre-set the to-sender output's scriptPubkey for when we collaboratively close
         */
-       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_ScriptZ val) {
+       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_CVec_u8ZZ val) {
                bindings.AcceptChannel_set_shutdown_scriptpubkey(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -335,8 +335,10 @@ public class AcceptChannel extends CommonBase {
 
        /**
         * Constructs a new AcceptChannel given each field
+        * 
+        * Note that channel_type_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static AcceptChannel of(byte[] temporary_channel_id_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long channel_reserve_satoshis_arg, long htlc_minimum_msat_arg, int minimum_depth_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, org.ldk.structs.Option_ScriptZ shutdown_scriptpubkey_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg) {
+       public static AcceptChannel of(byte[] temporary_channel_id_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long channel_reserve_satoshis_arg, long htlc_minimum_msat_arg, int minimum_depth_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, org.ldk.structs.Option_CVec_u8ZZ shutdown_scriptpubkey_arg, @Nullable org.ldk.structs.ChannelTypeFeatures channel_type_arg) {
                long ret = bindings.AcceptChannel_new(InternalUtils.check_arr_len(temporary_channel_id_arg, 32), dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, channel_reserve_satoshis_arg, htlc_minimum_msat_arg, minimum_depth_arg, to_self_delay_arg, max_accepted_htlcs_arg, InternalUtils.check_arr_len(funding_pubkey_arg, 33), InternalUtils.check_arr_len(revocation_basepoint_arg, 33), InternalUtils.check_arr_len(payment_point_arg, 33), InternalUtils.check_arr_len(delayed_payment_basepoint_arg, 33), InternalUtils.check_arr_len(htlc_basepoint_arg, 33), InternalUtils.check_arr_len(first_per_commitment_point_arg, 33), shutdown_scriptpubkey_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr);
                Reference.reachabilityFence(temporary_channel_id_arg);
                Reference.reachabilityFence(dust_limit_satoshis_arg);
index 8ee200e83e632422e8a24a346a9631982428a6aa..7191800ee2c708117e6e726c5cfd10a6656314ad 100644 (file)
@@ -302,11 +302,11 @@ public class AcceptChannelV2 extends CommonBase {
         * Optionally, a request to pre-set the to-channel-acceptor output's scriptPubkey for when we
         * collaboratively close
         */
-       public Option_ScriptZ get_shutdown_scriptpubkey() {
+       public Option_CVec_u8ZZ get_shutdown_scriptpubkey() {
                long ret = bindings.AcceptChannelV2_get_shutdown_scriptpubkey(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -315,7 +315,7 @@ public class AcceptChannelV2 extends CommonBase {
         * Optionally, a request to pre-set the to-channel-acceptor output's scriptPubkey for when we
         * collaboratively close
         */
-       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_ScriptZ val) {
+       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_CVec_u8ZZ val) {
                bindings.AcceptChannelV2_set_shutdown_scriptpubkey(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -377,8 +377,10 @@ public class AcceptChannelV2 extends CommonBase {
 
        /**
         * Constructs a new AcceptChannelV2 given each field
+        * 
+        * Note that channel_type_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static AcceptChannelV2 of(byte[] temporary_channel_id_arg, long funding_satoshis_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, int minimum_depth_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_basepoint_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte[] second_per_commitment_point_arg, org.ldk.structs.Option_ScriptZ shutdown_scriptpubkey_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.enums.COption_NoneZ require_confirmed_inputs_arg) {
+       public static AcceptChannelV2 of(byte[] temporary_channel_id_arg, long funding_satoshis_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, int minimum_depth_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_basepoint_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte[] second_per_commitment_point_arg, org.ldk.structs.Option_CVec_u8ZZ shutdown_scriptpubkey_arg, @Nullable org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.enums.COption_NoneZ require_confirmed_inputs_arg) {
                long ret = bindings.AcceptChannelV2_new(InternalUtils.check_arr_len(temporary_channel_id_arg, 32), funding_satoshis_arg, dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, htlc_minimum_msat_arg, minimum_depth_arg, to_self_delay_arg, max_accepted_htlcs_arg, InternalUtils.check_arr_len(funding_pubkey_arg, 33), InternalUtils.check_arr_len(revocation_basepoint_arg, 33), InternalUtils.check_arr_len(payment_basepoint_arg, 33), InternalUtils.check_arr_len(delayed_payment_basepoint_arg, 33), InternalUtils.check_arr_len(htlc_basepoint_arg, 33), InternalUtils.check_arr_len(first_per_commitment_point_arg, 33), InternalUtils.check_arr_len(second_per_commitment_point_arg, 33), shutdown_scriptpubkey_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr, require_confirmed_inputs_arg);
                Reference.reachabilityFence(temporary_channel_id_arg);
                Reference.reachabilityFence(funding_satoshis_arg);
index 8cfe609bff5e1df3024d12ffb697b1bd8a10c4b8..cb7674ab79d603e48ba555ad1ab6926fcddf9b6c 100644 (file)
@@ -127,11 +127,11 @@ public class BackgroundProcessor extends CommonBase {
         * 
         * [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
         */
-       public Result_NoneErrorZ join() {
+       public Result_NoneIOErrorZ join() {
                long ret = bindings.BackgroundProcessor_join(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(this); };
                // Due to rust's strict-ownership memory model, in some cases we need to "move"
                // an object to pass exclusive ownership to the function being called.
@@ -155,11 +155,11 @@ public class BackgroundProcessor extends CommonBase {
         * 
         * [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
         */
-       public Result_NoneErrorZ stop() {
+       public Result_NoneIOErrorZ stop() {
                long ret = bindings.BackgroundProcessor_stop(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(this); };
                // Due to rust's strict-ownership memory model, in some cases we need to "move"
                // an object to pass exclusive ownership to the function being called.
index 66e53ae14b31405bfa13a075c821c1a657d33674..9ca3a8ddf87b963e755eab1b32b158b23dceb291 100644 (file)
@@ -9,8 +9,9 @@ import javax.annotation.Nullable;
 
 
 /**
- * Used to construct the blinded hops portion of a blinded path. These hops cannot be identified
- * by outside observers and thus can be used to hide the identity of the recipient.
+ * An encrypted payload and node id corresponding to a hop in a payment or onion message path, to
+ * be encoded in the sender's onion packet. These hops cannot be identified by outside observers
+ * and thus can be used to hide the identity of the recipient.
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class BlindedHop extends CommonBase {
@@ -21,6 +22,57 @@ public class BlindedHop extends CommonBase {
                if (ptr != 0) { bindings.BlindedHop_free(ptr); }
        }
 
+       /**
+        * The blinded node id of this hop in a [`BlindedPath`].
+        */
+       public byte[] get_blinded_node_id() {
+               byte[] ret = bindings.BlindedHop_get_blinded_node_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The blinded node id of this hop in a [`BlindedPath`].
+        */
+       public void set_blinded_node_id(byte[] val) {
+               bindings.BlindedHop_set_blinded_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The encrypted payload intended for this hop in a [`BlindedPath`].
+        * 
+        * Returns a copy of the field.
+        */
+       public byte[] get_encrypted_payload() {
+               byte[] ret = bindings.BlindedHop_get_encrypted_payload(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The encrypted payload intended for this hop in a [`BlindedPath`].
+        */
+       public void set_encrypted_payload(byte[] val) {
+               bindings.BlindedHop_set_encrypted_payload(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new BlindedHop given each field
+        */
+       public static BlindedHop of(byte[] blinded_node_id_arg, byte[] encrypted_payload_arg) {
+               long ret = bindings.BlindedHop_new(InternalUtils.check_arr_len(blinded_node_id_arg, 33), encrypted_payload_arg);
+               Reference.reachabilityFence(blinded_node_id_arg);
+               Reference.reachabilityFence(encrypted_payload_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.BlindedHop ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedHop(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        long clone_ptr() {
                long ret = bindings.BlindedHop_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
index 4660dff60188f28c254218dd51d704df8c431c35..1a35196d4d2e01147b06121e5a05fe299f8883dd 100644 (file)
@@ -87,6 +87,42 @@ public class BlindedHopFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.BlindedHopFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.BlindedHopFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
index 27a7a0e75a3a67f3548ceab023e3892c82eb9a90..5b91ed00085782cac993a1500161dcd48df1c437 100644 (file)
@@ -21,6 +21,98 @@ public class BlindedPath extends CommonBase {
                if (ptr != 0) { bindings.BlindedPath_free(ptr); }
        }
 
+       /**
+        * To send to a blinded path, the sender first finds a route to the unblinded
+        * `introduction_node_id`, which can unblind its [`encrypted_payload`] to find out the onion
+        * message or payment's next hop and forward it along.
+        * 
+        * [`encrypted_payload`]: BlindedHop::encrypted_payload
+        */
+       public byte[] get_introduction_node_id() {
+               byte[] ret = bindings.BlindedPath_get_introduction_node_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * To send to a blinded path, the sender first finds a route to the unblinded
+        * `introduction_node_id`, which can unblind its [`encrypted_payload`] to find out the onion
+        * message or payment's next hop and forward it along.
+        * 
+        * [`encrypted_payload`]: BlindedHop::encrypted_payload
+        */
+       public void set_introduction_node_id(byte[] val) {
+               bindings.BlindedPath_set_introduction_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Used by the introduction node to decrypt its [`encrypted_payload`] to forward the onion
+        * message or payment.
+        * 
+        * [`encrypted_payload`]: BlindedHop::encrypted_payload
+        */
+       public byte[] get_blinding_point() {
+               byte[] ret = bindings.BlindedPath_get_blinding_point(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Used by the introduction node to decrypt its [`encrypted_payload`] to forward the onion
+        * message or payment.
+        * 
+        * [`encrypted_payload`]: BlindedHop::encrypted_payload
+        */
+       public void set_blinding_point(byte[] val) {
+               bindings.BlindedPath_set_blinding_point(this.ptr, InternalUtils.check_arr_len(val, 33));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The hops composing the blinded path.
+        */
+       public BlindedHop[] get_blinded_hops() {
+               long[] ret = bindings.BlindedPath_get_blinded_hops(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_12_len = ret.length;
+               BlindedHop[] ret_conv_12_arr = new BlindedHop[ret_conv_12_len];
+               for (int m = 0; m < ret_conv_12_len; m++) {
+                       long ret_conv_12 = ret[m];
+                       org.ldk.structs.BlindedHop ret_conv_12_hu_conv = null; if (ret_conv_12 < 0 || ret_conv_12 > 4096) { ret_conv_12_hu_conv = new org.ldk.structs.BlindedHop(null, ret_conv_12); }
+                       if (ret_conv_12_hu_conv != null) { ret_conv_12_hu_conv.ptrs_to.add(this); };
+                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               }
+               return ret_conv_12_arr;
+       }
+
+       /**
+        * The hops composing the blinded path.
+        */
+       public void set_blinded_hops(BlindedHop[] val) {
+               bindings.BlindedPath_set_blinded_hops(this.ptr, val != null ? Arrays.stream(val).mapToLong(val_conv_12 -> val_conv_12 == null ? 0 : val_conv_12.ptr).toArray() : null);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               for (BlindedHop val_conv_12: val) { if (this != null) { this.ptrs_to.add(val_conv_12); }; };
+       }
+
+       /**
+        * Constructs a new BlindedPath given each field
+        */
+       public static BlindedPath of(byte[] introduction_node_id_arg, byte[] blinding_point_arg, BlindedHop[] blinded_hops_arg) {
+               long ret = bindings.BlindedPath_new(InternalUtils.check_arr_len(introduction_node_id_arg, 33), InternalUtils.check_arr_len(blinding_point_arg, 33), blinded_hops_arg != null ? Arrays.stream(blinded_hops_arg).mapToLong(blinded_hops_arg_conv_12 -> blinded_hops_arg_conv_12 == null ? 0 : blinded_hops_arg_conv_12.ptr).toArray() : null);
+               Reference.reachabilityFence(introduction_node_id_arg);
+               Reference.reachabilityFence(blinding_point_arg);
+               Reference.reachabilityFence(blinded_hops_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.BlindedPath ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedPath(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               for (BlindedHop blinded_hops_arg_conv_12: blinded_hops_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(blinded_hops_arg_conv_12); }; };
+               return ret_hu_conv;
+       }
+
        long clone_ptr() {
                long ret = bindings.BlindedPath_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
index fa48c2ffaf25e0f06c35c766bb2ebb0c33bd839b..efe7e133837e2b7946de2f32c5d8c58e6e821b3b 100644 (file)
@@ -226,11 +226,11 @@ public class Bolt11Invoice extends CommonBase {
         * Returns the Duration since the Unix epoch at which the invoice expires.
         * Returning None if overflow occurred.
         */
-       public Option_DurationZ expires_at() {
+       public Option_u64Z expires_at() {
                long ret = bindings.Bolt11Invoice_expires_at(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_DurationZ ret_hu_conv = org.ldk.structs.Option_DurationZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
index 46ee4e94f900015e1002bd96aca2c2ea0ad85bdc..7449c8eaae56f15079208b66b31ef72303d585a2 100644 (file)
@@ -87,6 +87,42 @@ public class Bolt11InvoiceFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.Bolt11InvoiceFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.Bolt11InvoiceFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
index e9088940c002c84316aa3ffe57af35073dcfdc8f..6f32a09db79954d487265865ac972a2ea80fc4e2 100644 (file)
@@ -46,8 +46,102 @@ public class Bolt12Invoice extends CommonBase {
        }
 
        /**
-        * A complete description of the purpose of the originating offer or refund. Intended to be
-        * displayed to the user but with the caveat that it has not been verified in any way.
+        * The chains that may be used when paying a requested invoice.
+        * 
+        * From [`Offer::chains`]; `None` if the invoice was created in response to a [`Refund`].
+        * 
+        * [`Offer::chains`]: crate::offers::offer::Offer::chains
+        */
+       public Option_CVec_ThirtyTwoBytesZZ offer_chains() {
+               long ret = bindings.Bolt12Invoice_offer_chains(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The chain that must be used when paying the invoice; selected from [`offer_chains`] if the
+        * invoice originated from an offer.
+        * 
+        * From [`InvoiceRequest::chain`] or [`Refund::chain`].
+        * 
+        * [`offer_chains`]: Self::offer_chains
+        * [`InvoiceRequest::chain`]: crate::offers::invoice_request::InvoiceRequest::chain
+        */
+       public byte[] chain() {
+               byte[] ret = bindings.Bolt12Invoice_chain(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Opaque bytes set by the originating [`Offer`].
+        * 
+        * From [`Offer::metadata`]; `None` if the invoice was created in response to a [`Refund`] or
+        * if the [`Offer`] did not set it.
+        * 
+        * [`Offer`]: crate::offers::offer::Offer
+        * [`Offer::metadata`]: crate::offers::offer::Offer::metadata
+        */
+       public Option_CVec_u8ZZ metadata() {
+               long ret = bindings.Bolt12Invoice_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The minimum amount required for a successful payment of a single item.
+        * 
+        * From [`Offer::amount`]; `None` if the invoice was created in response to a [`Refund`] or if
+        * the [`Offer`] did not set it.
+        * 
+        * [`Offer`]: crate::offers::offer::Offer
+        * [`Offer::amount`]: crate::offers::offer::Offer::amount
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Amount amount() {
+               long ret = bindings.Bolt12Invoice_amount(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Amount ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Amount(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to the originating [`Offer`].
+        * 
+        * From [`Offer::offer_features`]; `None` if the invoice was created in response to a
+        * [`Refund`].
+        * 
+        * [`Offer`]: crate::offers::offer::Offer
+        * [`Offer::offer_features`]: crate::offers::offer::Offer::offer_features
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public OfferFeatures offer_features() {
+               long ret = bindings.Bolt12Invoice_offer_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OfferFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A complete description of the purpose of the originating offer or refund.
+        * 
+        * From [`Offer::description`] or [`Refund::description`].
+        * 
+        * [`Offer::description`]: crate::offers::offer::Offer::description
         */
        public PrintableString description() {
                long ret = bindings.Bolt12Invoice_description(this.ptr);
@@ -58,6 +152,150 @@ public class Bolt12Invoice extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Duration since the Unix epoch when an invoice should no longer be requested.
+        * 
+        * From [`Offer::absolute_expiry`] or [`Refund::absolute_expiry`].
+        * 
+        * [`Offer::absolute_expiry`]: crate::offers::offer::Offer::absolute_expiry
+        */
+       public Option_u64Z absolute_expiry() {
+               long ret = bindings.Bolt12Invoice_absolute_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The issuer of the offer or refund.
+        * 
+        * From [`Offer::issuer`] or [`Refund::issuer`].
+        * 
+        * [`Offer::issuer`]: crate::offers::offer::Offer::issuer
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString issuer() {
+               long ret = bindings.Bolt12Invoice_issuer(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Paths to the recipient originating from publicly reachable nodes.
+        * 
+        * From [`Offer::paths`] or [`Refund::paths`].
+        * 
+        * [`Offer::paths`]: crate::offers::offer::Offer::paths
+        */
+       public BlindedPath[] message_paths() {
+               long[] ret = bindings.Bolt12Invoice_message_paths(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_13_len = ret.length;
+               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
+               for (int n = 0; n < ret_conv_13_len; n++) {
+                       long ret_conv_13 = ret[n];
+                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
+                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.add(this); };
+                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               }
+               return ret_conv_13_arr;
+       }
+
+       /**
+        * The quantity of items supported.
+        * 
+        * From [`Offer::supported_quantity`]; `None` if the invoice was created in response to a
+        * [`Refund`].
+        * 
+        * [`Offer::supported_quantity`]: crate::offers::offer::Offer::supported_quantity
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Quantity supported_quantity() {
+               long ret = bindings.Bolt12Invoice_supported_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Quantity ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Quantity(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * An unpredictable series of bytes from the payer.
+        * 
+        * From [`InvoiceRequest::payer_metadata`] or [`Refund::payer_metadata`].
+        */
+       public byte[] payer_metadata() {
+               byte[] ret = bindings.Bolt12Invoice_payer_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Features pertaining to requesting an invoice.
+        * 
+        * From [`InvoiceRequest::invoice_request_features`] or [`Refund::features`].
+        */
+       public InvoiceRequestFeatures invoice_request_features() {
+               long ret = bindings.Bolt12Invoice_invoice_request_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.InvoiceRequestFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceRequestFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The quantity of items requested or refunded for.
+        * 
+        * From [`InvoiceRequest::quantity`] or [`Refund::quantity`].
+        */
+       public Option_u64Z quantity() {
+               long ret = bindings.Bolt12Invoice_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A possibly transient pubkey used to sign the invoice request or to send an invoice for a
+        * refund in case there are no [`message_paths`].
+        * 
+        * [`message_paths`]: Self::message_paths
+        */
+       public byte[] payer_id() {
+               byte[] ret = bindings.Bolt12Invoice_payer_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A payer-provided note reflected back in the invoice.
+        * 
+        * From [`InvoiceRequest::payer_note`] or [`Refund::payer_note`].
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString payer_note() {
+               long ret = bindings.Bolt12Invoice_payer_note(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
        /**
         * Duration since the Unix epoch when the invoice was created.
         */
@@ -107,8 +345,8 @@ public class Bolt12Invoice extends CommonBase {
        /**
         * Features pertaining to paying an invoice.
         */
-       public Bolt12InvoiceFeatures features() {
-               long ret = bindings.Bolt12Invoice_features(this.ptr);
+       public Bolt12InvoiceFeatures invoice_features() {
+               long ret = bindings.Bolt12Invoice_invoice_features(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Bolt12InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, ret); }
@@ -125,6 +363,15 @@ public class Bolt12Invoice extends CommonBase {
                return ret;
        }
 
+       /**
+        * Signature of the invoice verified using [`Bolt12Invoice::signing_pubkey`].
+        */
+       public byte[] signature() {
+               byte[] ret = bindings.Bolt12Invoice_signature(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Hash that was used for signing the invoice.
         */
@@ -135,14 +382,17 @@ public class Bolt12Invoice extends CommonBase {
        }
 
        /**
-        * Verifies that the invoice was for a request or refund created using the given key.
+        * Verifies that the invoice was for a request or refund created using the given key. Returns
+        * the associated [`PaymentId`] to use when sending the payment.
         */
-       public boolean verify(org.ldk.structs.ExpandedKey key) {
-               boolean ret = bindings.Bolt12Invoice_verify(this.ptr, key == null ? 0 : key.ptr);
+       public Result_ThirtyTwoBytesNoneZ verify(org.ldk.structs.ExpandedKey key) {
+               long ret = bindings.Bolt12Invoice_verify(this.ptr, key == null ? 0 : key.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(key);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(key); };
-               return ret;
+               return ret_hu_conv;
        }
 
        /**
index 3417f26283d0f7212f195879a6080f3aed87d994..6874bc027d1649b62ee2b968bb0095355d62c3b0 100644 (file)
@@ -87,6 +87,42 @@ public class Bolt12InvoiceFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.Bolt12InvoiceFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.Bolt12InvoiceFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
index 6613db124109d24f9533c4787fdd147e468380b0..b19c44a42d2eb96e83b85a6e60c4540a573b4d5f 100644 (file)
@@ -174,8 +174,10 @@ public class ChannelCounterparty extends CommonBase {
 
        /**
         * Constructs a new ChannelCounterparty given each field
+        * 
+        * Note that forwarding_info_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ChannelCounterparty of(byte[] node_id_arg, org.ldk.structs.InitFeatures features_arg, long unspendable_punishment_reserve_arg, org.ldk.structs.CounterpartyForwardingInfo forwarding_info_arg, org.ldk.structs.Option_u64Z outbound_htlc_minimum_msat_arg, org.ldk.structs.Option_u64Z outbound_htlc_maximum_msat_arg) {
+       public static ChannelCounterparty of(byte[] node_id_arg, org.ldk.structs.InitFeatures features_arg, long unspendable_punishment_reserve_arg, @Nullable org.ldk.structs.CounterpartyForwardingInfo forwarding_info_arg, org.ldk.structs.Option_u64Z outbound_htlc_minimum_msat_arg, org.ldk.structs.Option_u64Z outbound_htlc_maximum_msat_arg) {
                long ret = bindings.ChannelCounterparty_new(InternalUtils.check_arr_len(node_id_arg, 33), features_arg == null ? 0 : features_arg.ptr, unspendable_punishment_reserve_arg, forwarding_info_arg == null ? 0 : forwarding_info_arg.ptr, outbound_htlc_minimum_msat_arg.ptr, outbound_htlc_maximum_msat_arg.ptr);
                Reference.reachabilityFence(node_id_arg);
                Reference.reachabilityFence(features_arg);
index 35a08da27f189dc26dc266813aef797f4e964d31..d4407a52b422c45c6614a3361e0099365b3b7abf 100644 (file)
@@ -134,4 +134,24 @@ public class ChannelDerivationParameters extends CommonBase {
                if (!(o instanceof ChannelDerivationParameters)) return false;
                return this.eq((ChannelDerivationParameters)o);
        }
+       /**
+        * Serialize the ChannelDerivationParameters object into a byte array which can be read by ChannelDerivationParameters_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.ChannelDerivationParameters_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a ChannelDerivationParameters from a byte array, created by ChannelDerivationParameters_write
+        */
+       public static Result_ChannelDerivationParametersDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.ChannelDerivationParameters_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelDerivationParametersDecodeErrorZ ret_hu_conv = Result_ChannelDerivationParametersDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
 }
index 8be52a2c809410dc85f77dd5696cf8aeebf46cd9..4ba94a43409be47f79aacae78ae2029454663e29 100644 (file)
@@ -313,9 +313,15 @@ public class ChannelDetails extends CommonBase {
        }
 
        /**
-        * The `user_channel_id` passed in to create_channel, or a random value if the channel was
-        * inbound. This may be zero for inbound channels serialized with LDK versions prior to
-        * 0.0.113.
+        * The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
+        * channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
+        * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
+        * `user_channel_id` will be randomized for an inbound channel.  This may be zero for objects
+        * serialized with LDK versions prior to 0.0.113.
+        * 
+        * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
+        * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
+        * [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
         */
        public UInt128 get_user_channel_id() {
                byte[] ret = bindings.ChannelDetails_get_user_channel_id(this.ptr);
@@ -325,9 +331,15 @@ public class ChannelDetails extends CommonBase {
        }
 
        /**
-        * The `user_channel_id` passed in to create_channel, or a random value if the channel was
-        * inbound. This may be zero for inbound channels serialized with LDK versions prior to
-        * 0.0.113.
+        * The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
+        * channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
+        * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
+        * `user_channel_id` will be randomized for an inbound channel.  This may be zero for objects
+        * serialized with LDK versions prior to 0.0.113.
+        * 
+        * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
+        * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
+        * [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
         */
        public void set_user_channel_id(org.ldk.util.UInt128 val) {
                bindings.ChannelDetails_set_user_channel_id(this.ptr, val.getLEBytes());
@@ -820,8 +832,12 @@ public class ChannelDetails extends CommonBase {
 
        /**
         * Constructs a new ChannelDetails given each field
+        * 
+        * Note that funding_txo_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Note that channel_type_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Note that config_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ChannelDetails of(byte[] channel_id_arg, org.ldk.structs.ChannelCounterparty counterparty_arg, org.ldk.structs.OutPoint funding_txo_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.structs.Option_u64Z short_channel_id_arg, org.ldk.structs.Option_u64Z outbound_scid_alias_arg, org.ldk.structs.Option_u64Z inbound_scid_alias_arg, long channel_value_satoshis_arg, org.ldk.structs.Option_u64Z unspendable_punishment_reserve_arg, org.ldk.util.UInt128 user_channel_id_arg, org.ldk.structs.Option_u32Z feerate_sat_per_1000_weight_arg, long balance_msat_arg, long outbound_capacity_msat_arg, long next_outbound_htlc_limit_msat_arg, long next_outbound_htlc_minimum_msat_arg, long inbound_capacity_msat_arg, org.ldk.structs.Option_u32Z confirmations_required_arg, org.ldk.structs.Option_u32Z confirmations_arg, org.ldk.structs.Option_u16Z force_close_spend_delay_arg, boolean is_outbound_arg, boolean is_channel_ready_arg, org.ldk.structs.Option_ChannelShutdownStateZ channel_shutdown_state_arg, boolean is_usable_arg, boolean is_public_arg, org.ldk.structs.Option_u64Z inbound_htlc_minimum_msat_arg, org.ldk.structs.Option_u64Z inbound_htlc_maximum_msat_arg, org.ldk.structs.ChannelConfig config_arg) {
+       public static ChannelDetails of(byte[] channel_id_arg, org.ldk.structs.ChannelCounterparty counterparty_arg, @Nullable org.ldk.structs.OutPoint funding_txo_arg, @Nullable org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.structs.Option_u64Z short_channel_id_arg, org.ldk.structs.Option_u64Z outbound_scid_alias_arg, org.ldk.structs.Option_u64Z inbound_scid_alias_arg, long channel_value_satoshis_arg, org.ldk.structs.Option_u64Z unspendable_punishment_reserve_arg, org.ldk.util.UInt128 user_channel_id_arg, org.ldk.structs.Option_u32Z feerate_sat_per_1000_weight_arg, long balance_msat_arg, long outbound_capacity_msat_arg, long next_outbound_htlc_limit_msat_arg, long next_outbound_htlc_minimum_msat_arg, long inbound_capacity_msat_arg, org.ldk.structs.Option_u32Z confirmations_required_arg, org.ldk.structs.Option_u32Z confirmations_arg, org.ldk.structs.Option_u16Z force_close_spend_delay_arg, boolean is_outbound_arg, boolean is_channel_ready_arg, org.ldk.structs.Option_ChannelShutdownStateZ channel_shutdown_state_arg, boolean is_usable_arg, boolean is_public_arg, org.ldk.structs.Option_u64Z inbound_htlc_minimum_msat_arg, org.ldk.structs.Option_u64Z inbound_htlc_maximum_msat_arg, @Nullable org.ldk.structs.ChannelConfig config_arg) {
                long ret = bindings.ChannelDetails_new(InternalUtils.check_arr_len(channel_id_arg, 32), counterparty_arg == null ? 0 : counterparty_arg.ptr, funding_txo_arg == null ? 0 : funding_txo_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr, short_channel_id_arg.ptr, outbound_scid_alias_arg.ptr, inbound_scid_alias_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, user_channel_id_arg.getLEBytes(), feerate_sat_per_1000_weight_arg.ptr, balance_msat_arg, outbound_capacity_msat_arg, next_outbound_htlc_limit_msat_arg, next_outbound_htlc_minimum_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, confirmations_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_channel_ready_arg, channel_shutdown_state_arg.ptr, is_usable_arg, is_public_arg, inbound_htlc_minimum_msat_arg.ptr, inbound_htlc_maximum_msat_arg.ptr, config_arg == null ? 0 : config_arg.ptr);
                Reference.reachabilityFence(channel_id_arg);
                Reference.reachabilityFence(counterparty_arg);
index 5ca1b8144272994665548a7272a8e26ea21b305a..107c6e2903716780b815a7c763975879305003ea 100644 (file)
@@ -87,6 +87,42 @@ public class ChannelFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.ChannelFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.ChannelFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
index e50a30554b1bcc8d5909a86886e108900f9ffa28..6be766d4da2ad44824abb822aeefec39cfb4bdfe 100644 (file)
@@ -21,12 +21,14 @@ import javax.annotation.Nullable;
  * called [`funding_transaction_generated`] for outbound channels) being closed.
  * 
  * Note that you can be a bit lazier about writing out `ChannelManager` than you can be with
- * [`ChannelMonitor`]. With [`ChannelMonitor`] you MUST write each monitor update out to disk before
- * returning from [`chain::Watch::watch_channel`]/[`update_channel`], with ChannelManagers, writing updates
- * happens out-of-band (and will prevent any other `ChannelManager` operations from occurring during
- * the serialization process). If the deserialized version is out-of-date compared to the
- * [`ChannelMonitor`] passed by reference to [`read`], those channels will be force-closed based on the
- * `ChannelMonitor` state and no funds will be lost (mod on-chain transaction fees).
+ * [`ChannelMonitor`]. With [`ChannelMonitor`] you MUST durably write each
+ * [`ChannelMonitorUpdate`] before returning from
+ * [`chain::Watch::watch_channel`]/[`update_channel`] or before completing async writes. With
+ * `ChannelManager`s, writing updates happens out-of-band (and will prevent any other
+ * `ChannelManager` operations from occurring during the serialization process). If the
+ * deserialized version is out-of-date compared to the [`ChannelMonitor`] passed by reference to
+ * [`read`], those channels will be force-closed based on the `ChannelMonitor` state and no funds
+ * will be lost (modulo on-chain transaction fees).
  * 
  * Note that the deserializer is only implemented for `(`[`BlockHash`]`, `[`ChannelManager`]`)`, which
  * tells you the last block hash which was connected. You should get the best block tip before using the manager.
@@ -164,7 +166,7 @@ public class ChannelManager extends CommonBase {
         * 
         * Note that override_config (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public Result__u832APIErrorZ create_channel(byte[] their_network_key, long channel_value_satoshis, long push_msat, org.ldk.util.UInt128 user_channel_id, @Nullable org.ldk.structs.UserConfig override_config) {
+       public Result_ThirtyTwoBytesAPIErrorZ create_channel(byte[] their_network_key, long channel_value_satoshis, long push_msat, org.ldk.util.UInt128 user_channel_id, @Nullable org.ldk.structs.UserConfig override_config) {
                long ret = bindings.ChannelManager_create_channel(this.ptr, InternalUtils.check_arr_len(their_network_key, 33), channel_value_satoshis, push_msat, user_channel_id.getLEBytes(), override_config == null ? 0 : override_config.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(their_network_key);
@@ -173,7 +175,7 @@ public class ChannelManager extends CommonBase {
                Reference.reachabilityFence(user_channel_id);
                Reference.reachabilityFence(override_config);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesAPIErrorZ ret_hu_conv = Result_ThirtyTwoBytesAPIErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(override_config); };
                return ret_hu_conv;
        }
@@ -432,9 +434,8 @@ public class ChannelManager extends CommonBase {
         * In general, a path may raise:
         * [`APIError::InvalidRoute`] when an invalid route or forwarding parameter (cltv_delta, fee,
         * node public key) is specified.
-        * [`APIError::ChannelUnavailable`] if the next-hop channel is not available for updates
-        * (including due to previous monitor update failure or new permanent monitor update
-        * failure).
+        * [`APIError::ChannelUnavailable`] if the next-hop channel is not available as it has been
+        * closed, doesn't exist, or the peer is currently disconnected.
         * [`APIError::MonitorUpdateInProgress`] if a new monitor update failure prevented sending the
         * relevant updates.
         * 
@@ -484,10 +485,12 @@ public class ChannelManager extends CommonBase {
        }
 
        /**
-        * Signals that no further retries for the given payment should occur. Useful if you have a
+        * Signals that no further attempts for the given payment should occur. Useful if you have a
         * pending outbound payment with retries remaining, but wish to stop retrying the payment before
         * retries are exhausted.
         * 
+        * # Event Generation
+        * 
         * If no [`Event::PaymentFailed`] event had been generated before, one will be generated as soon
         * as there are no remaining pending HTLCs for this payment.
         * 
@@ -495,11 +498,10 @@ public class ChannelManager extends CommonBase {
         * wait until you receive either a [`Event::PaymentFailed`] or [`Event::PaymentSent`] event to
         * determine the ultimate status of a payment.
         * 
-        * If an [`Event::PaymentFailed`] event is generated and we restart without this
-        * [`ChannelManager`] having been persisted, another [`Event::PaymentFailed`] may be generated.
+        * # Restart Behavior
         * 
-        * [`Event::PaymentFailed`]: events::Event::PaymentFailed
-        * [`Event::PaymentSent`]: events::Event::PaymentSent
+        * If an [`Event::PaymentFailed`] is generated and we restart without first persisting the
+        * [`ChannelManager`], another [`Event::PaymentFailed`] may be generated.
         */
        public void abandon_payment(byte[] payment_id) {
                bindings.ChannelManager_abandon_payment(this.ptr, InternalUtils.check_arr_len(payment_id, 32));
@@ -522,7 +524,7 @@ public class ChannelManager extends CommonBase {
         * 
         * [`send_payment`]: Self::send_payment
         */
-       public Result_PaymentHashPaymentSendFailureZ send_spontaneous_payment(org.ldk.structs.Route route, org.ldk.structs.Option_PaymentPreimageZ payment_preimage, org.ldk.structs.RecipientOnionFields recipient_onion, byte[] payment_id) {
+       public Result_ThirtyTwoBytesPaymentSendFailureZ send_spontaneous_payment(org.ldk.structs.Route route, org.ldk.structs.Option_ThirtyTwoBytesZ payment_preimage, org.ldk.structs.RecipientOnionFields recipient_onion, byte[] payment_id) {
                long ret = bindings.ChannelManager_send_spontaneous_payment(this.ptr, route == null ? 0 : route.ptr, payment_preimage.ptr, recipient_onion == null ? 0 : recipient_onion.ptr, InternalUtils.check_arr_len(payment_id, 32));
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(route);
@@ -530,7 +532,7 @@ public class ChannelManager extends CommonBase {
                Reference.reachabilityFence(recipient_onion);
                Reference.reachabilityFence(payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashPaymentSendFailureZ ret_hu_conv = Result_PaymentHashPaymentSendFailureZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesPaymentSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesPaymentSendFailureZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(route); };
                if (this != null) { this.ptrs_to.add(payment_preimage); };
                if (this != null) { this.ptrs_to.add(recipient_onion); };
@@ -546,7 +548,7 @@ public class ChannelManager extends CommonBase {
         * 
         * [`PaymentParameters::for_keysend`]: crate::routing::router::PaymentParameters::for_keysend
         */
-       public Result_PaymentHashRetryableSendFailureZ send_spontaneous_payment_with_retry(org.ldk.structs.Option_PaymentPreimageZ payment_preimage, org.ldk.structs.RecipientOnionFields recipient_onion, byte[] payment_id, org.ldk.structs.RouteParameters route_params, org.ldk.structs.Retry retry_strategy) {
+       public Result_ThirtyTwoBytesRetryableSendFailureZ send_spontaneous_payment_with_retry(org.ldk.structs.Option_ThirtyTwoBytesZ payment_preimage, org.ldk.structs.RecipientOnionFields recipient_onion, byte[] payment_id, org.ldk.structs.RouteParameters route_params, org.ldk.structs.Retry retry_strategy) {
                long ret = bindings.ChannelManager_send_spontaneous_payment_with_retry(this.ptr, payment_preimage.ptr, recipient_onion == null ? 0 : recipient_onion.ptr, InternalUtils.check_arr_len(payment_id, 32), route_params == null ? 0 : route_params.ptr, retry_strategy.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(payment_preimage);
@@ -555,7 +557,7 @@ public class ChannelManager extends CommonBase {
                Reference.reachabilityFence(route_params);
                Reference.reachabilityFence(retry_strategy);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashRetryableSendFailureZ ret_hu_conv = Result_PaymentHashRetryableSendFailureZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesRetryableSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesRetryableSendFailureZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(payment_preimage); };
                if (this != null) { this.ptrs_to.add(recipient_onion); };
                if (this != null) { this.ptrs_to.add(route_params); };
@@ -568,16 +570,63 @@ public class ChannelManager extends CommonBase {
         * [`PaymentHash`] of probes based on a static secret and a random [`PaymentId`], which allows
         * us to easily discern them from real payments.
         */
-       public Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ send_probe(org.ldk.structs.Path path) {
+       public Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ send_probe(org.ldk.structs.Path path) {
                long ret = bindings.ChannelManager_send_probe(this.ptr, path == null ? 0 : path.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(path);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(path); };
                return ret_hu_conv;
        }
 
+       /**
+        * Sends payment probes over all paths of a route that would be used to pay the given
+        * amount to the given `node_id`.
+        * 
+        * See [`ChannelManager::send_preflight_probes`] for more information.
+        */
+       public Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ send_spontaneous_preflight_probes(byte[] node_id, long amount_msat, int final_cltv_expiry_delta, org.ldk.structs.Option_u64Z liquidity_limit_multiplier) {
+               long ret = bindings.ChannelManager_send_spontaneous_preflight_probes(this.ptr, InternalUtils.check_arr_len(node_id, 33), amount_msat, final_cltv_expiry_delta, liquidity_limit_multiplier.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(node_id);
+               Reference.reachabilityFence(amount_msat);
+               Reference.reachabilityFence(final_cltv_expiry_delta);
+               Reference.reachabilityFence(liquidity_limit_multiplier);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(liquidity_limit_multiplier); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sends payment probes over all paths of a route that would be used to pay a route found
+        * according to the given [`RouteParameters`].
+        * 
+        * This may be used to send \"pre-flight\" probes, i.e., to train our scorer before conducting
+        * the actual payment. Note this is only useful if there likely is sufficient time for the
+        * probe to settle before sending out the actual payment, e.g., when waiting for user
+        * confirmation in a wallet UI.
+        * 
+        * Otherwise, there is a chance the probe could take up some liquidity needed to complete the
+        * actual payment. Users should therefore be cautious and might avoid sending probes if
+        * liquidity is scarce and/or they don't expect the probe to return before they send the
+        * payment. To mitigate this issue, channels with available liquidity less than the required
+        * amount times the given `liquidity_limit_multiplier` won't be used to send pre-flight
+        * probes. If `None` is given as `liquidity_limit_multiplier`, it defaults to `3`.
+        */
+       public Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ send_preflight_probes(org.ldk.structs.RouteParameters route_params, org.ldk.structs.Option_u64Z liquidity_limit_multiplier) {
+               long ret = bindings.ChannelManager_send_preflight_probes(this.ptr, route_params == null ? 0 : route_params.ptr, liquidity_limit_multiplier.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(route_params);
+               Reference.reachabilityFence(liquidity_limit_multiplier);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(route_params); };
+               if (this != null) { this.ptrs_to.add(liquidity_limit_multiplier); };
+               return ret_hu_conv;
+       }
+
        /**
         * Call this upon creation of a funding transaction for the given channel.
         * 
@@ -621,6 +670,28 @@ public class ChannelManager extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Call this upon creation of a batch funding transaction for the given channels.
+        * 
+        * Return values are identical to [`Self::funding_transaction_generated`], respective to
+        * each individual channel and transaction output.
+        * 
+        * Do NOT broadcast the funding transaction yourself. This batch funding transcaction
+        * will only be broadcast when we have safely received and persisted the counterparty's
+        * signature for each channel.
+        * 
+        * If there is an error, all channels in the batch are to be considered closed.
+        */
+       public Result_NoneAPIErrorZ batch_funding_transaction_generated(TwoTuple_ThirtyTwoBytesPublicKeyZ[] temporary_channels, byte[] funding_transaction) {
+               long ret = bindings.ChannelManager_batch_funding_transaction_generated(this.ptr, temporary_channels != null ? Arrays.stream(temporary_channels).mapToLong(temporary_channels_conv_35 -> temporary_channels_conv_35 != null ? temporary_channels_conv_35.ptr : 0).toArray() : null, funding_transaction);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(temporary_channels);
+               Reference.reachabilityFence(funding_transaction);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Atomically applies partial updates to the [`ChannelConfig`] of the given channels.
         * 
@@ -810,11 +881,12 @@ public class ChannelManager extends CommonBase {
         * 
         * See [`FailureCode`] for valid failure codes.
         */
-       public void fail_htlc_backwards_with_reason(byte[] payment_hash, org.ldk.enums.FailureCode failure_code) {
-               bindings.ChannelManager_fail_htlc_backwards_with_reason(this.ptr, InternalUtils.check_arr_len(payment_hash, 32), failure_code);
+       public void fail_htlc_backwards_with_reason(byte[] payment_hash, org.ldk.structs.FailureCode failure_code) {
+               bindings.ChannelManager_fail_htlc_backwards_with_reason(this.ptr, InternalUtils.check_arr_len(payment_hash, 32), failure_code.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(payment_hash);
                Reference.reachabilityFence(failure_code);
+               if (this != null) { this.ptrs_to.add(failure_code); };
        }
 
        /**
@@ -831,12 +903,17 @@ public class ChannelManager extends CommonBase {
         * event matches your expectation. If you fail to do so and call this method, you may provide
         * the sender \"proof-of-payment\" when they did not fulfill the full expected payment.
         * 
+        * This function will fail the payment if it has custom TLVs with even type numbers, as we
+        * will assume they are unknown. If you intend to accept even custom TLVs, you should use
+        * [`claim_funds_with_known_custom_tlvs`].
+        * 
         * [`Event::PaymentClaimable`]: crate::events::Event::PaymentClaimable
         * [`Event::PaymentClaimable::claim_deadline`]: crate::events::Event::PaymentClaimable::claim_deadline
         * [`Event::PaymentClaimed`]: crate::events::Event::PaymentClaimed
         * [`process_pending_events`]: EventsProvider::process_pending_events
         * [`create_inbound_payment`]: Self::create_inbound_payment
         * [`create_inbound_payment_for_hash`]: Self::create_inbound_payment_for_hash
+        * [`claim_funds_with_known_custom_tlvs`]: Self::claim_funds_with_known_custom_tlvs
         */
        public void claim_funds(byte[] payment_preimage) {
                bindings.ChannelManager_claim_funds(this.ptr, InternalUtils.check_arr_len(payment_preimage, 32));
@@ -844,6 +921,23 @@ public class ChannelManager extends CommonBase {
                Reference.reachabilityFence(payment_preimage);
        }
 
+       /**
+        * This is a variant of [`claim_funds`] that allows accepting a payment with custom TLVs with
+        * even type numbers.
+        * 
+        * # Note
+        * 
+        * You MUST check you've understood all even TLVs before using this to
+        * claim, otherwise you may unintentionally agree to some protocol you do not understand.
+        * 
+        * [`claim_funds`]: Self::claim_funds
+        */
+       public void claim_funds_with_known_custom_tlvs(byte[] payment_preimage) {
+               bindings.ChannelManager_claim_funds_with_known_custom_tlvs(this.ptr, InternalUtils.check_arr_len(payment_preimage, 32));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(payment_preimage);
+       }
+
        /**
         * Gets the node_id held by this ChannelManager
         */
@@ -947,14 +1041,14 @@ public class ChannelManager extends CommonBase {
         * [`PaymentPurpose::InvoicePayment::payment_preimage`]: events::PaymentPurpose::InvoicePayment::payment_preimage
         * [`create_inbound_payment_for_hash`]: Self::create_inbound_payment_for_hash
         */
-       public Result_C2Tuple_PaymentHashPaymentSecretZNoneZ create_inbound_payment(org.ldk.structs.Option_u64Z min_value_msat, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+       public Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ create_inbound_payment(org.ldk.structs.Option_u64Z min_value_msat, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
                long ret = bindings.ChannelManager_create_inbound_payment(this.ptr, min_value_msat.ptr, invoice_expiry_delta_secs, min_final_cltv_expiry_delta.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(min_value_msat);
                Reference.reachabilityFence(invoice_expiry_delta_secs);
                Reference.reachabilityFence(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentSecretZNoneZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.constr_from_ptr(ret);
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(min_value_msat); };
                if (this != null) { this.ptrs_to.add(min_final_cltv_expiry_delta); };
                return ret_hu_conv;
@@ -1008,7 +1102,7 @@ public class ChannelManager extends CommonBase {
         * [`create_inbound_payment`]: Self::create_inbound_payment
         * [`PaymentClaimable`]: events::Event::PaymentClaimable
         */
-       public Result_PaymentSecretNoneZ create_inbound_payment_for_hash(byte[] payment_hash, org.ldk.structs.Option_u64Z min_value_msat, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry) {
+       public Result_ThirtyTwoBytesNoneZ create_inbound_payment_for_hash(byte[] payment_hash, org.ldk.structs.Option_u64Z min_value_msat, int invoice_expiry_delta_secs, org.ldk.structs.Option_u16Z min_final_cltv_expiry) {
                long ret = bindings.ChannelManager_create_inbound_payment_for_hash(this.ptr, InternalUtils.check_arr_len(payment_hash, 32), min_value_msat.ptr, invoice_expiry_delta_secs, min_final_cltv_expiry.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(payment_hash);
@@ -1016,7 +1110,7 @@ public class ChannelManager extends CommonBase {
                Reference.reachabilityFence(invoice_expiry_delta_secs);
                Reference.reachabilityFence(min_final_cltv_expiry);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentSecretNoneZ ret_hu_conv = Result_PaymentSecretNoneZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(min_value_msat); };
                if (this != null) { this.ptrs_to.add(min_final_cltv_expiry); };
                return ret_hu_conv;
@@ -1028,13 +1122,13 @@ public class ChannelManager extends CommonBase {
         * 
         * [`create_inbound_payment`]: Self::create_inbound_payment
         */
-       public Result_PaymentPreimageAPIErrorZ get_payment_preimage(byte[] payment_hash, byte[] payment_secret) {
+       public Result_ThirtyTwoBytesAPIErrorZ get_payment_preimage(byte[] payment_hash, byte[] payment_secret) {
                long ret = bindings.ChannelManager_get_payment_preimage(this.ptr, InternalUtils.check_arr_len(payment_hash, 32), InternalUtils.check_arr_len(payment_secret, 32));
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(payment_hash);
                Reference.reachabilityFence(payment_secret);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentPreimageAPIErrorZ ret_hu_conv = Result_PaymentPreimageAPIErrorZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesAPIErrorZ ret_hu_conv = Result_ThirtyTwoBytesAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
@@ -1144,13 +1238,17 @@ public class ChannelManager extends CommonBase {
        }
 
        /**
-        * Gets a [`Future`] that completes when this [`ChannelManager`] needs to be persisted.
+        * Gets a [`Future`] that completes when this [`ChannelManager`] may need to be persisted or
+        * may have events that need processing.
+        * 
+        * In order to check if this [`ChannelManager`] needs persisting, call
+        * [`Self::get_and_clear_needs_persistence`].
         * 
         * Note that callbacks registered on the [`Future`] MUST NOT call back into this
         * [`ChannelManager`] and should instead register actions to be taken later.
         */
-       public Future get_persistable_update_future() {
-               long ret = bindings.ChannelManager_get_persistable_update_future(this.ptr);
+       public Future get_event_or_persistence_needed_future() {
+               long ret = bindings.ChannelManager_get_event_or_persistence_needed_future(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Future ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Future(null, ret); }
@@ -1158,6 +1256,15 @@ public class ChannelManager extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Returns true if this [`ChannelManager`] needs to be persisted.
+        */
+       public boolean get_and_clear_needs_persistence() {
+               boolean ret = bindings.ChannelManager_get_and_clear_needs_persistence(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Gets the latest best block which was connected either via the [`chain::Listen`] or
         * [`chain::Confirm`] interfaces.
index dc97efb416af2a2ed764a44c3118c03316d58ab4..d7b6b2cc900d4460305ebb3e52cfe6287a357f70 100644 (file)
@@ -189,7 +189,7 @@ public class ChannelMessageHandler extends CommonBase {
                 * If it's `None`, then no particular network chain hash compatibility will be enforced when
                 * connecting to peers.
                 */
-               Option_CVec_ChainHashZZ get_genesis_hashes();
+               Option_CVec_ThirtyTwoBytesZZ get_genesis_hashes();
        }
        private static class LDKChannelMessageHandlerHolder { ChannelMessageHandler held; }
        public static ChannelMessageHandler new_impl(ChannelMessageHandlerInterface arg, MessageSendEventsProvider.MessageSendEventsProviderInterface MessageSendEventsProvider_impl) {
@@ -364,7 +364,7 @@ public class ChannelMessageHandler extends CommonBase {
                                return result;
                        }
                        @Override public long get_genesis_hashes() {
-                               Option_CVec_ChainHashZZ ret = arg.get_genesis_hashes();
+                               Option_CVec_ThirtyTwoBytesZZ ret = arg.get_genesis_hashes();
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                if (impl_holder.held != null) { impl_holder.held.ptrs_to.add(ret); };
@@ -767,11 +767,11 @@ public class ChannelMessageHandler extends CommonBase {
         * If it's `None`, then no particular network chain hash compatibility will be enforced when
         * connecting to peers.
         */
-       public Option_CVec_ChainHashZZ get_genesis_hashes() {
+       public Option_CVec_ThirtyTwoBytesZZ get_genesis_hashes() {
                long ret = bindings.ChannelMessageHandler_get_genesis_hashes(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_ChainHashZZ ret_hu_conv = org.ldk.structs.Option_CVec_ChainHashZZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
index ebfc76fa87f9fa98b1838c95adc09189c90ecf20..5651deefa1d0464255f6809a0036c93974c57464 100644 (file)
@@ -92,11 +92,11 @@ public class ChannelMonitor extends CommonBase {
        /**
         * Gets the funding transaction outpoint of the channel this ChannelMonitor is monitoring for.
         */
-       public TwoTuple_OutPointScriptZ get_funding_txo() {
+       public TwoTuple_OutPointCVec_u8ZZ get_funding_txo() {
                long ret = bindings.ChannelMonitor_get_funding_txo(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_OutPointScriptZ ret_hu_conv = new TwoTuple_OutPointScriptZ(null, ret);
+               TwoTuple_OutPointCVec_u8ZZ ret_hu_conv = new TwoTuple_OutPointCVec_u8ZZ(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -105,18 +105,18 @@ public class ChannelMonitor extends CommonBase {
         * Gets a list of txids, with their output scripts (in the order they appear in the
         * transaction), which we must learn about spends of via block_connected().
         */
-       public TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ[] get_outputs_to_watch() {
+       public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ[] get_outputs_to_watch() {
                long[] ret = bindings.ChannelMonitor_get_outputs_to_watch(this.ptr);
                Reference.reachabilityFence(this);
-               int ret_conv_40_len = ret.length;
-               TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ[] ret_conv_40_arr = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ[ret_conv_40_len];
-               for (int o = 0; o < ret_conv_40_len; o++) {
-                       long ret_conv_40 = ret[o];
-                       TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ ret_conv_40_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(null, ret_conv_40);
-                       if (ret_conv_40_hu_conv != null) { ret_conv_40_hu_conv.ptrs_to.add(this); };
-                       ret_conv_40_arr[o] = ret_conv_40_hu_conv;
+               int ret_conv_52_len = ret.length;
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ[] ret_conv_52_arr = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ[ret_conv_52_len];
+               for (int a = 0; a < ret_conv_52_len; a++) {
+                       long ret_conv_52 = ret[a];
+                       TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ ret_conv_52_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ(null, ret_conv_52);
+                       if (ret_conv_52_hu_conv != null) { ret_conv_52_hu_conv.ptrs_to.add(this); };
+                       ret_conv_52_arr[a] = ret_conv_52_hu_conv;
                }
-               return ret_conv_40_arr;
+               return ret_conv_52_arr;
        }
 
        /**
@@ -171,6 +171,101 @@ public class ChannelMonitor extends CommonBase {
                if (this != null) { this.ptrs_to.add(handler); };
        }
 
+       /**
+        * Gets the counterparty's initial commitment transaction. The returned commitment
+        * transaction is unsigned. This is intended to be called during the initial persistence of
+        * the monitor (inside an implementation of [`Persist::persist_new_channel`]), to allow for
+        * watchtowers in the persistence pipeline to have enough data to form justice transactions.
+        * 
+        * This is similar to [`Self::counterparty_commitment_txs_from_update`], except
+        * that for the initial commitment transaction, we don't have a corresponding update.
+        * 
+        * This will only return `Some` for channel monitors that have been created after upgrading
+        * to LDK 0.0.117+.
+        * 
+        * [`Persist::persist_new_channel`]: crate::chain::chainmonitor::Persist::persist_new_channel
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public CommitmentTransaction initial_counterparty_commitment_tx() {
+               long ret = bindings.ChannelMonitor_initial_counterparty_commitment_tx(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.CommitmentTransaction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.CommitmentTransaction(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Gets all of the counterparty commitment transactions provided by the given update. This
+        * may be empty if the update doesn't include any new counterparty commitments. Returned
+        * commitment transactions are unsigned.
+        * 
+        * This is provided so that watchtower clients in the persistence pipeline are able to build
+        * justice transactions for each counterparty commitment upon each update. It's intended to be
+        * used within an implementation of [`Persist::update_persisted_channel`], which is provided
+        * with a monitor and an update. Once revoked, signing a justice transaction can be done using
+        * [`Self::sign_to_local_justice_tx`].
+        * 
+        * It is expected that a watchtower client may use this method to retrieve the latest counterparty
+        * commitment transaction(s), and then hold the necessary data until a later update in which
+        * the monitor has been updated with the corresponding revocation data, at which point the
+        * monitor can sign the justice transaction.
+        * 
+        * This will only return a non-empty list for monitor updates that have been created after
+        * upgrading to LDK 0.0.117+. Note that no restriction lies on the monitors themselves, which
+        * may have been created prior to upgrading.
+        * 
+        * [`Persist::update_persisted_channel`]: crate::chain::chainmonitor::Persist::update_persisted_channel
+        */
+       public CommitmentTransaction[] counterparty_commitment_txs_from_update(org.ldk.structs.ChannelMonitorUpdate update) {
+               long[] ret = bindings.ChannelMonitor_counterparty_commitment_txs_from_update(this.ptr, update == null ? 0 : update.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(update);
+               int ret_conv_23_len = ret.length;
+               CommitmentTransaction[] ret_conv_23_arr = new CommitmentTransaction[ret_conv_23_len];
+               for (int x = 0; x < ret_conv_23_len; x++) {
+                       long ret_conv_23 = ret[x];
+                       org.ldk.structs.CommitmentTransaction ret_conv_23_hu_conv = null; if (ret_conv_23 < 0 || ret_conv_23 > 4096) { ret_conv_23_hu_conv = new org.ldk.structs.CommitmentTransaction(null, ret_conv_23); }
+                       if (ret_conv_23_hu_conv != null) { ret_conv_23_hu_conv.ptrs_to.add(this); };
+                       ret_conv_23_arr[x] = ret_conv_23_hu_conv;
+               }
+               if (this != null) { this.ptrs_to.add(update); };
+               return ret_conv_23_arr;
+       }
+
+       /**
+        * Wrapper around [`EcdsaChannelSigner::sign_justice_revoked_output`] to make
+        * signing the justice transaction easier for implementors of
+        * [`chain::chainmonitor::Persist`]. On success this method returns the provided transaction
+        * signing the input at `input_idx`. This method will only produce a valid signature for
+        * a transaction spending the `to_local` output of a commitment transaction, i.e. this cannot
+        * be used for revoked HTLC outputs.
+        * 
+        * `Value` is the value of the output being spent by the input at `input_idx`, committed
+        * in the BIP 143 signature.
+        * 
+        * This method will only succeed if this monitor has received the revocation secret for the
+        * provided `commitment_number`. If a commitment number is provided that does not correspond
+        * to the commitment transaction being revoked, this will return a signed transaction, but
+        * the signature will not be valid.
+        * 
+        * [`EcdsaChannelSigner::sign_justice_revoked_output`]: crate::sign::EcdsaChannelSigner::sign_justice_revoked_output
+        * [`Persist`]: crate::chain::chainmonitor::Persist
+        */
+       public Result_TransactionNoneZ sign_to_local_justice_tx(byte[] justice_tx, long input_idx, long value, long commitment_number) {
+               long ret = bindings.ChannelMonitor_sign_to_local_justice_tx(this.ptr, justice_tx, input_idx, value, commitment_number);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(justice_tx);
+               Reference.reachabilityFence(input_idx);
+               Reference.reachabilityFence(value);
+               Reference.reachabilityFence(commitment_number);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_TransactionNoneZ ret_hu_conv = Result_TransactionNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Gets the `node_id` of the counterparty for this channel.
         * 
@@ -187,21 +282,20 @@ public class ChannelMonitor extends CommonBase {
        }
 
        /**
-        * Used by ChannelManager deserialization to broadcast the latest holder state if its copy of
-        * the Channel was out-of-date.
+        * Used by [`ChannelManager`] deserialization to broadcast the latest holder state if its copy
+        * of the channel state was out-of-date.
         * 
         * You may also use this to broadcast the latest local commitment transaction, either because
-        * a monitor update failed with [`ChannelMonitorUpdateStatus::PermanentFailure`] or because we've
-        * fallen behind (i.e. we've received proof that our counterparty side knows a revocation
-        * secret we gave them that they shouldn't know).
+        * a monitor update failed or because we've fallen behind (i.e. we've received proof that our
+        * counterparty side knows a revocation secret we gave them that they shouldn't know).
         * 
         * Broadcasting these transactions in the second case is UNSAFE, as they allow counterparty
         * side to punish you. Nevertheless you may want to broadcast them if counterparty doesn't
         * close channel with their commitment transaction after a substantial amount of time. Best
         * may be to contact the other node operator out-of-band to coordinate other options available
-        * to you. In any-case, the choice is up to you.
+        * to you.
         * 
-        * [`ChannelMonitorUpdateStatus::PermanentFailure`]: super::ChannelMonitorUpdateStatus::PermanentFailure
+        * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
        public byte[][] get_latest_holder_commitment_txn(org.ldk.structs.Logger logger) {
                byte[][] ret = bindings.ChannelMonitor_get_latest_holder_commitment_txn(this.ptr, logger.ptr);
@@ -224,7 +318,7 @@ public class ChannelMonitor extends CommonBase {
         * 
         * [`get_outputs_to_watch`]: #method.get_outputs_to_watch
         */
-       public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] block_connected(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, org.ldk.structs.Logger logger) {
+       public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] block_connected(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, org.ldk.structs.Logger logger) {
                long[] ret = bindings.ChannelMonitor_block_connected(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height, broadcaster.ptr, fee_estimator.ptr, logger.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(header);
@@ -233,18 +327,18 @@ public class ChannelMonitor extends CommonBase {
                Reference.reachabilityFence(broadcaster);
                Reference.reachabilityFence(fee_estimator);
                Reference.reachabilityFence(logger);
-               int ret_conv_39_len = ret.length;
-               TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret_conv_39_len];
-               for (int n = 0; n < ret_conv_39_len; n++) {
-                       long ret_conv_39 = ret[n];
-                       TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_conv_39_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret_conv_39);
-                       if (ret_conv_39_hu_conv != null) { ret_conv_39_hu_conv.ptrs_to.add(this); };
-                       ret_conv_39_arr[n] = ret_conv_39_hu_conv;
+               int ret_conv_49_len = ret.length;
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] ret_conv_49_arr = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[ret_conv_49_len];
+               for (int x = 0; x < ret_conv_49_len; x++) {
+                       long ret_conv_49 = ret[x];
+                       TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ ret_conv_49_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ(null, ret_conv_49);
+                       if (ret_conv_49_hu_conv != null) { ret_conv_49_hu_conv.ptrs_to.add(this); };
+                       ret_conv_49_arr[x] = ret_conv_49_hu_conv;
                }
                if (this != null) { this.ptrs_to.add(broadcaster); };
                if (this != null) { this.ptrs_to.add(fee_estimator); };
                if (this != null) { this.ptrs_to.add(logger); };
-               return ret_conv_39_arr;
+               return ret_conv_49_arr;
        }
 
        /**
@@ -273,7 +367,7 @@ public class ChannelMonitor extends CommonBase {
         * 
         * [`block_connected`]: Self::block_connected
         */
-       public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] transactions_confirmed(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, org.ldk.structs.Logger logger) {
+       public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] transactions_confirmed(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, org.ldk.structs.Logger logger) {
                long[] ret = bindings.ChannelMonitor_transactions_confirmed(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height, broadcaster.ptr, fee_estimator.ptr, logger.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(header);
@@ -282,18 +376,18 @@ public class ChannelMonitor extends CommonBase {
                Reference.reachabilityFence(broadcaster);
                Reference.reachabilityFence(fee_estimator);
                Reference.reachabilityFence(logger);
-               int ret_conv_39_len = ret.length;
-               TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret_conv_39_len];
-               for (int n = 0; n < ret_conv_39_len; n++) {
-                       long ret_conv_39 = ret[n];
-                       TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_conv_39_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret_conv_39);
-                       if (ret_conv_39_hu_conv != null) { ret_conv_39_hu_conv.ptrs_to.add(this); };
-                       ret_conv_39_arr[n] = ret_conv_39_hu_conv;
+               int ret_conv_49_len = ret.length;
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] ret_conv_49_arr = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[ret_conv_49_len];
+               for (int x = 0; x < ret_conv_49_len; x++) {
+                       long ret_conv_49 = ret[x];
+                       TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ ret_conv_49_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ(null, ret_conv_49);
+                       if (ret_conv_49_hu_conv != null) { ret_conv_49_hu_conv.ptrs_to.add(this); };
+                       ret_conv_49_arr[x] = ret_conv_49_hu_conv;
                }
                if (this != null) { this.ptrs_to.add(broadcaster); };
                if (this != null) { this.ptrs_to.add(fee_estimator); };
                if (this != null) { this.ptrs_to.add(logger); };
-               return ret_conv_39_arr;
+               return ret_conv_49_arr;
        }
 
        /**
@@ -325,7 +419,7 @@ public class ChannelMonitor extends CommonBase {
         * 
         * [`block_connected`]: Self::block_connected
         */
-       public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] best_block_updated(byte[] header, int height, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, org.ldk.structs.Logger logger) {
+       public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] best_block_updated(byte[] header, int height, org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, org.ldk.structs.Logger logger) {
                long[] ret = bindings.ChannelMonitor_best_block_updated(this.ptr, InternalUtils.check_arr_len(header, 80), height, broadcaster.ptr, fee_estimator.ptr, logger.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(header);
@@ -333,35 +427,35 @@ public class ChannelMonitor extends CommonBase {
                Reference.reachabilityFence(broadcaster);
                Reference.reachabilityFence(fee_estimator);
                Reference.reachabilityFence(logger);
-               int ret_conv_39_len = ret.length;
-               TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret_conv_39_len];
-               for (int n = 0; n < ret_conv_39_len; n++) {
-                       long ret_conv_39 = ret[n];
-                       TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_conv_39_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret_conv_39);
-                       if (ret_conv_39_hu_conv != null) { ret_conv_39_hu_conv.ptrs_to.add(this); };
-                       ret_conv_39_arr[n] = ret_conv_39_hu_conv;
+               int ret_conv_49_len = ret.length;
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] ret_conv_49_arr = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[ret_conv_49_len];
+               for (int x = 0; x < ret_conv_49_len; x++) {
+                       long ret_conv_49 = ret[x];
+                       TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ ret_conv_49_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ(null, ret_conv_49);
+                       if (ret_conv_49_hu_conv != null) { ret_conv_49_hu_conv.ptrs_to.add(this); };
+                       ret_conv_49_arr[x] = ret_conv_49_hu_conv;
                }
                if (this != null) { this.ptrs_to.add(broadcaster); };
                if (this != null) { this.ptrs_to.add(fee_estimator); };
                if (this != null) { this.ptrs_to.add(logger); };
-               return ret_conv_39_arr;
+               return ret_conv_49_arr;
        }
 
        /**
         * Returns the set of txids that should be monitored for re-organization out of the chain.
         */
-       public TwoTuple_TxidCOption_BlockHashZZ[] get_relevant_txids() {
+       public TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[] get_relevant_txids() {
                long[] ret = bindings.ChannelMonitor_get_relevant_txids(this.ptr);
                Reference.reachabilityFence(this);
-               int ret_conv_34_len = ret.length;
-               TwoTuple_TxidCOption_BlockHashZZ[] ret_conv_34_arr = new TwoTuple_TxidCOption_BlockHashZZ[ret_conv_34_len];
-               for (int i = 0; i < ret_conv_34_len; i++) {
-                       long ret_conv_34 = ret[i];
-                       TwoTuple_TxidCOption_BlockHashZZ ret_conv_34_hu_conv = new TwoTuple_TxidCOption_BlockHashZZ(null, ret_conv_34);
-                       if (ret_conv_34_hu_conv != null) { ret_conv_34_hu_conv.ptrs_to.add(this); };
-                       ret_conv_34_arr[i] = ret_conv_34_hu_conv;
+               int ret_conv_49_len = ret.length;
+               TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[] ret_conv_49_arr = new TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[ret_conv_49_len];
+               for (int x = 0; x < ret_conv_49_len; x++) {
+                       long ret_conv_49 = ret[x];
+                       TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ ret_conv_49_hu_conv = new TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ(null, ret_conv_49);
+                       if (ret_conv_49_hu_conv != null) { ret_conv_49_hu_conv.ptrs_to.add(this); };
+                       ret_conv_49_arr[x] = ret_conv_49_hu_conv;
                }
-               return ret_conv_34_arr;
+               return ret_conv_49_arr;
        }
 
        /**
@@ -395,6 +489,42 @@ public class ChannelMonitor extends CommonBase {
                if (this != null) { this.ptrs_to.add(logger); };
        }
 
+       /**
+        * Returns the descriptors for relevant outputs (i.e., those that we can spend) within the
+        * transaction if they exist and the transaction has at least [`ANTI_REORG_DELAY`]
+        * confirmations. For [`SpendableOutputDescriptor::DelayedPaymentOutput`] descriptors to be
+        * returned, the transaction must have at least `max(ANTI_REORG_DELAY, to_self_delay)`
+        * confirmations.
+        * 
+        * Descriptors returned by this method are primarily exposed via [`Event::SpendableOutputs`]
+        * once they are no longer under reorg risk. This method serves as a way to retrieve these
+        * descriptors at a later time, either for historical purposes, or to replay any
+        * missed/unhandled descriptors. For the purpose of gathering historical records, if the
+        * channel close has fully resolved (i.e., [`ChannelMonitor::get_claimable_balances`] returns
+        * an empty set), you can retrieve all spendable outputs by providing all descendant spending
+        * transactions starting from the channel's funding transaction and going down three levels.
+        * 
+        * `tx` is a transaction we'll scan the outputs of. Any transaction can be provided. If any
+        * outputs which can be spent by us are found, at least one descriptor is returned.
+        * 
+        * `confirmation_height` must be the height of the block in which `tx` was included in.
+        */
+       public SpendableOutputDescriptor[] get_spendable_outputs(byte[] tx, int confirmation_height) {
+               long[] ret = bindings.ChannelMonitor_get_spendable_outputs(this.ptr, tx, confirmation_height);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(tx);
+               Reference.reachabilityFence(confirmation_height);
+               int ret_conv_27_len = ret.length;
+               SpendableOutputDescriptor[] ret_conv_27_arr = new SpendableOutputDescriptor[ret_conv_27_len];
+               for (int b = 0; b < ret_conv_27_len; b++) {
+                       long ret_conv_27 = ret[b];
+                       org.ldk.structs.SpendableOutputDescriptor ret_conv_27_hu_conv = org.ldk.structs.SpendableOutputDescriptor.constr_from_ptr(ret_conv_27);
+                       if (ret_conv_27_hu_conv != null) { ret_conv_27_hu_conv.ptrs_to.add(this); };
+                       ret_conv_27_arr[b] = ret_conv_27_hu_conv;
+               }
+               return ret_conv_27_arr;
+       }
+
        /**
         * Gets the balances in this channel which are either claimable by us if we were to
         * force-close the channel now or which are claimable on-chain (possibly awaiting
@@ -406,8 +536,7 @@ public class ChannelMonitor extends CommonBase {
         * confirmations on the claim transaction.
         * 
         * Note that for `ChannelMonitors` which track a channel which went on-chain with versions of
-        * LDK prior to 0.0.111, balances may not be fully captured if our counterparty broadcasted
-        * a revoked state.
+        * LDK prior to 0.0.111, not all or excess balances may be included.
         * 
         * See [`Balance`] for additional details on the types of claimable balances which
         * may be returned here and their meanings.
index e458ae5a2733d8464f2f7e7250a5cdcc0cae1818..aab749c205cfc730783cd2ac181b070476ff197e 100644 (file)
@@ -162,6 +162,18 @@ public class ChannelPublicKeys extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the ChannelPublicKeys.
+        */
+       public long hash() {
+               long ret = bindings.ChannelPublicKeys_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two ChannelPublicKeyss contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index b6326ee5ef2cbfa715f0eae320c034d8cc600f94..639b355a83a8542c527b657f30e2781e2dbc6c83 100644 (file)
@@ -117,11 +117,11 @@ public class ChannelReestablish extends CommonBase {
        /**
         * The next funding transaction ID
         */
-       public Option_TxidZ get_next_funding_txid() {
+       public Option_ThirtyTwoBytesZ get_next_funding_txid() {
                long ret = bindings.ChannelReestablish_get_next_funding_txid(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_TxidZ ret_hu_conv = org.ldk.structs.Option_TxidZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -129,7 +129,7 @@ public class ChannelReestablish extends CommonBase {
        /**
         * The next funding transaction ID
         */
-       public void set_next_funding_txid(org.ldk.structs.Option_TxidZ val) {
+       public void set_next_funding_txid(org.ldk.structs.Option_ThirtyTwoBytesZ val) {
                bindings.ChannelReestablish_set_next_funding_txid(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -139,7 +139,7 @@ public class ChannelReestablish extends CommonBase {
        /**
         * Constructs a new ChannelReestablish given each field
         */
-       public static ChannelReestablish of(byte[] channel_id_arg, long next_local_commitment_number_arg, long next_remote_commitment_number_arg, byte[] your_last_per_commitment_secret_arg, byte[] my_current_per_commitment_point_arg, org.ldk.structs.Option_TxidZ next_funding_txid_arg) {
+       public static ChannelReestablish of(byte[] channel_id_arg, long next_local_commitment_number_arg, long next_remote_commitment_number_arg, byte[] your_last_per_commitment_secret_arg, byte[] my_current_per_commitment_point_arg, org.ldk.structs.Option_ThirtyTwoBytesZ next_funding_txid_arg) {
                long ret = bindings.ChannelReestablish_new(InternalUtils.check_arr_len(channel_id_arg, 32), next_local_commitment_number_arg, next_remote_commitment_number_arg, InternalUtils.check_arr_len(your_last_per_commitment_secret_arg, 32), InternalUtils.check_arr_len(my_current_per_commitment_point_arg, 33), next_funding_txid_arg.ptr);
                Reference.reachabilityFence(channel_id_arg);
                Reference.reachabilityFence(next_local_commitment_number_arg);
index e9a63150fd84e12e4908e2acf4e03afedb7dd2d5..cba450382f4de9038dd2ee6e54375506a0e5deb0 100644 (file)
@@ -166,8 +166,11 @@ public class ChannelTransactionParameters extends CommonBase {
 
        /**
         * Constructs a new ChannelTransactionParameters given each field
+        * 
+        * Note that counterparty_parameters_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
+        * Note that funding_outpoint_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ChannelTransactionParameters of(org.ldk.structs.ChannelPublicKeys holder_pubkeys_arg, short holder_selected_contest_delay_arg, boolean is_outbound_from_holder_arg, org.ldk.structs.CounterpartyChannelTransactionParameters counterparty_parameters_arg, org.ldk.structs.OutPoint funding_outpoint_arg, org.ldk.structs.ChannelTypeFeatures channel_type_features_arg) {
+       public static ChannelTransactionParameters of(org.ldk.structs.ChannelPublicKeys holder_pubkeys_arg, short holder_selected_contest_delay_arg, boolean is_outbound_from_holder_arg, @Nullable org.ldk.structs.CounterpartyChannelTransactionParameters counterparty_parameters_arg, @Nullable org.ldk.structs.OutPoint funding_outpoint_arg, org.ldk.structs.ChannelTypeFeatures channel_type_features_arg) {
                long ret = bindings.ChannelTransactionParameters_new(holder_pubkeys_arg == null ? 0 : holder_pubkeys_arg.ptr, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg == null ? 0 : counterparty_parameters_arg.ptr, funding_outpoint_arg == null ? 0 : funding_outpoint_arg.ptr, channel_type_features_arg == null ? 0 : channel_type_features_arg.ptr);
                Reference.reachabilityFence(holder_pubkeys_arg);
                Reference.reachabilityFence(holder_selected_contest_delay_arg);
@@ -203,6 +206,18 @@ public class ChannelTransactionParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the ChannelTransactionParameters.
+        */
+       public long hash() {
+               long ret = bindings.ChannelTransactionParameters_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two ChannelTransactionParameterss contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index 5252edd2746a1e4175b735c8fd2c564fa99d1751..6c8d03d37184c20fb08055242fa05be1ee6f2b4b 100644 (file)
@@ -96,6 +96,42 @@ public class ChannelTypeFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.ChannelTypeFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.ChannelTypeFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
@@ -254,6 +290,40 @@ public class ChannelTypeFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Set this feature as optional.
+        */
+       public void set_taproot_optional() {
+               bindings.ChannelTypeFeatures_set_taproot_optional(this.ptr);
+               Reference.reachabilityFence(this);
+       }
+
+       /**
+        * Set this feature as required.
+        */
+       public void set_taproot_required() {
+               bindings.ChannelTypeFeatures_set_taproot_required(this.ptr);
+               Reference.reachabilityFence(this);
+       }
+
+       /**
+        * Checks if this feature is supported.
+        */
+       public boolean supports_taproot() {
+               boolean ret = bindings.ChannelTypeFeatures_supports_taproot(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Checks if this feature is required.
+        */
+       public boolean requires_taproot() {
+               boolean ret = bindings.ChannelTypeFeatures_requires_taproot(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Set this feature as optional.
         */
index 303ccde3c997d0dc63347083dd3e14fe45d38e1f..19e2ffc023e637d27e3254b36ac5e94c3fd55c92 100644 (file)
@@ -169,8 +169,10 @@ public class ChannelUpdateInfo extends CommonBase {
 
        /**
         * Constructs a new ChannelUpdateInfo given each field
+        * 
+        * Note that last_update_message_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ChannelUpdateInfo of(int last_update_arg, boolean enabled_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, org.ldk.structs.RoutingFees fees_arg, org.ldk.structs.ChannelUpdate last_update_message_arg) {
+       public static ChannelUpdateInfo of(int last_update_arg, boolean enabled_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, org.ldk.structs.RoutingFees fees_arg, @Nullable org.ldk.structs.ChannelUpdate last_update_message_arg) {
                long ret = bindings.ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg == null ? 0 : fees_arg.ptr, last_update_message_arg == null ? 0 : last_update_message_arg.ptr);
                Reference.reachabilityFence(last_update_arg);
                Reference.reachabilityFence(enabled_arg);
index 6dcec4a64926d0f81b4b5810e79198bca205d873..0aba7c6ca856b8faf018964a3d4dea3c8145f7f1 100644 (file)
@@ -9,7 +9,7 @@ import javax.annotation.Nullable;
 
 
 /**
- * Proposed use of a channel passed as a parameter to [`Score::channel_penalty_msat`].
+ * Proposed use of a channel passed as a parameter to [`ScoreLookUp::channel_penalty_msat`].
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class ChannelUsage extends CommonBase {
diff --git a/src/main/java/org/ldk/structs/ClaimedHTLC.java b/src/main/java/org/ldk/structs/ClaimedHTLC.java
new file mode 100644 (file)
index 0000000..3cea8cd
--- /dev/null
@@ -0,0 +1,190 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Information about an HTLC that is part of a payment that can be claimed.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ClaimedHTLC extends CommonBase {
+       ClaimedHTLC(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.ClaimedHTLC_free(ptr); }
+       }
+
+       /**
+        * The `channel_id` of the channel over which the HTLC was received.
+        */
+       public byte[] get_channel_id() {
+               byte[] ret = bindings.ClaimedHTLC_get_channel_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The `channel_id` of the channel over which the HTLC was received.
+        */
+       public void set_channel_id(byte[] val) {
+               bindings.ClaimedHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The `user_channel_id` of the channel over which the HTLC was received. This is the value
+        * passed in to [`ChannelManager::create_channel`] for outbound channels, or to
+        * [`ChannelManager::accept_inbound_channel`] for inbound channels if
+        * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
+        * `user_channel_id` will be randomized for an inbound channel.
+        * 
+        * This field will be zero for a payment that was serialized prior to LDK version 0.0.117. (This
+        * should only happen in the case that a payment was claimable prior to LDK version 0.0.117, but
+        * was not actually claimed until after upgrading.)
+        * 
+        * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
+        * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
+        * [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
+        */
+       public UInt128 get_user_channel_id() {
+               byte[] ret = bindings.ClaimedHTLC_get_user_channel_id(this.ptr);
+               Reference.reachabilityFence(this);
+               org.ldk.util.UInt128 ret_conv = new org.ldk.util.UInt128(ret);
+               return ret_conv;
+       }
+
+       /**
+        * The `user_channel_id` of the channel over which the HTLC was received. This is the value
+        * passed in to [`ChannelManager::create_channel`] for outbound channels, or to
+        * [`ChannelManager::accept_inbound_channel`] for inbound channels if
+        * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
+        * `user_channel_id` will be randomized for an inbound channel.
+        * 
+        * This field will be zero for a payment that was serialized prior to LDK version 0.0.117. (This
+        * should only happen in the case that a payment was claimable prior to LDK version 0.0.117, but
+        * was not actually claimed until after upgrading.)
+        * 
+        * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
+        * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
+        * [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
+        */
+       public void set_user_channel_id(org.ldk.util.UInt128 val) {
+               bindings.ClaimedHTLC_set_user_channel_id(this.ptr, val.getLEBytes());
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The block height at which this HTLC expires.
+        */
+       public int get_cltv_expiry() {
+               int ret = bindings.ClaimedHTLC_get_cltv_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The block height at which this HTLC expires.
+        */
+       public void set_cltv_expiry(int val) {
+               bindings.ClaimedHTLC_set_cltv_expiry(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The amount (in msats) of this part of an MPP.
+        */
+       public long get_value_msat() {
+               long ret = bindings.ClaimedHTLC_get_value_msat(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The amount (in msats) of this part of an MPP.
+        */
+       public void set_value_msat(long val) {
+               bindings.ClaimedHTLC_set_value_msat(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new ClaimedHTLC given each field
+        */
+       public static ClaimedHTLC of(byte[] channel_id_arg, org.ldk.util.UInt128 user_channel_id_arg, int cltv_expiry_arg, long value_msat_arg) {
+               long ret = bindings.ClaimedHTLC_new(InternalUtils.check_arr_len(channel_id_arg, 32), user_channel_id_arg.getLEBytes(), cltv_expiry_arg, value_msat_arg);
+               Reference.reachabilityFence(channel_id_arg);
+               Reference.reachabilityFence(user_channel_id_arg);
+               Reference.reachabilityFence(cltv_expiry_arg);
+               Reference.reachabilityFence(value_msat_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ClaimedHTLC ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ClaimedHTLC(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.ClaimedHTLC_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ClaimedHTLC
+        */
+       public ClaimedHTLC clone() {
+               long ret = bindings.ClaimedHTLC_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ClaimedHTLC ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ClaimedHTLC(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two ClaimedHTLCs contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public boolean eq(org.ldk.structs.ClaimedHTLC b) {
+               boolean ret = bindings.ClaimedHTLC_eq(this.ptr, b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(b);
+               if (this != null) { this.ptrs_to.add(b); };
+               return ret;
+       }
+
+       @Override public boolean equals(Object o) {
+               if (!(o instanceof ClaimedHTLC)) return false;
+               return this.eq((ClaimedHTLC)o);
+       }
+       /**
+        * Serialize the ClaimedHTLC object into a byte array which can be read by ClaimedHTLC_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.ClaimedHTLC_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a ClaimedHTLC from a byte array, created by ClaimedHTLC_write
+        */
+       public static Result_ClaimedHTLCDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.ClaimedHTLC_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ClaimedHTLCDecodeErrorZ ret_hu_conv = Result_ClaimedHTLCDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index cfb4968dc4045ce40f15ccc97222684b44e25975..e38d5987b370eb4fb599a6964c842b1a930d72fe 100644 (file)
@@ -107,8 +107,10 @@ public class ClosingSigned extends CommonBase {
 
        /**
         * Constructs a new ClosingSigned given each field
+        * 
+        * Note that fee_range_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static ClosingSigned of(byte[] channel_id_arg, long fee_satoshis_arg, byte[] signature_arg, org.ldk.structs.ClosingSignedFeeRange fee_range_arg) {
+       public static ClosingSigned of(byte[] channel_id_arg, long fee_satoshis_arg, byte[] signature_arg, @Nullable org.ldk.structs.ClosingSignedFeeRange fee_range_arg) {
                long ret = bindings.ClosingSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), fee_satoshis_arg, InternalUtils.check_arr_len(signature_arg, 64), fee_range_arg == null ? 0 : fee_range_arg.ptr);
                Reference.reachabilityFence(channel_id_arg);
                Reference.reachabilityFence(fee_satoshis_arg);
index 23e76e9c6ec30b1eac41c67ef18834629c3732e8..b4da105e045e997a61d117cebb9cb333b08783fe 100644 (file)
@@ -48,6 +48,9 @@ public class ClosureReason extends CommonBase {
                if (raw_val.getClass() == bindings.LDKClosureReason.CounterpartyCoopClosedUnfundedChannel.class) {
                        return new CounterpartyCoopClosedUnfundedChannel(ptr, (bindings.LDKClosureReason.CounterpartyCoopClosedUnfundedChannel)raw_val);
                }
+               if (raw_val.getClass() == bindings.LDKClosureReason.FundingBatchClosure.class) {
+                       return new FundingBatchClosure(ptr, (bindings.LDKClosureReason.FundingBatchClosure)raw_val);
+               }
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
@@ -164,6 +167,15 @@ public class ClosureReason extends CommonBase {
                        super(null, ptr);
                }
        }
+       /**
+        * Another channel in the same funding batch closed before the funding transaction
+        * was ready to be broadcast.
+        */
+       public final static class FundingBatchClosure extends ClosureReason {
+               private FundingBatchClosure(long ptr, bindings.LDKClosureReason.FundingBatchClosure obj) {
+                       super(null, ptr);
+               }
+       }
        long clone_ptr() {
                long ret = bindings.ClosureReason_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
@@ -284,6 +296,17 @@ public class ClosureReason extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Utility method to constructs a new FundingBatchClosure-variant ClosureReason
+        */
+       public static ClosureReason funding_batch_closure() {
+               long ret = bindings.ClosureReason_funding_batch_closure();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ClosureReason ret_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        /**
         * Checks if two ClosureReasons contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index 1797cfbf5b83716fe021ca034a0f442876e0c683..fd0685ab1fd683b938b7ed213934a2dfc1295bc2 100644 (file)
@@ -180,8 +180,10 @@ public class CommitmentUpdate extends CommonBase {
 
        /**
         * Constructs a new CommitmentUpdate given each field
+        * 
+        * Note that update_fee_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static CommitmentUpdate of(UpdateAddHTLC[] update_add_htlcs_arg, UpdateFulfillHTLC[] update_fulfill_htlcs_arg, UpdateFailHTLC[] update_fail_htlcs_arg, UpdateFailMalformedHTLC[] update_fail_malformed_htlcs_arg, org.ldk.structs.UpdateFee update_fee_arg, org.ldk.structs.CommitmentSigned commitment_signed_arg) {
+       public static CommitmentUpdate of(UpdateAddHTLC[] update_add_htlcs_arg, UpdateFulfillHTLC[] update_fulfill_htlcs_arg, UpdateFailHTLC[] update_fail_htlcs_arg, UpdateFailMalformedHTLC[] update_fail_malformed_htlcs_arg, @Nullable org.ldk.structs.UpdateFee update_fee_arg, org.ldk.structs.CommitmentSigned commitment_signed_arg) {
                long ret = bindings.CommitmentUpdate_new(update_add_htlcs_arg != null ? Arrays.stream(update_add_htlcs_arg).mapToLong(update_add_htlcs_arg_conv_15 -> update_add_htlcs_arg_conv_15 == null ? 0 : update_add_htlcs_arg_conv_15.ptr).toArray() : null, update_fulfill_htlcs_arg != null ? Arrays.stream(update_fulfill_htlcs_arg).mapToLong(update_fulfill_htlcs_arg_conv_19 -> update_fulfill_htlcs_arg_conv_19 == null ? 0 : update_fulfill_htlcs_arg_conv_19.ptr).toArray() : null, update_fail_htlcs_arg != null ? Arrays.stream(update_fail_htlcs_arg).mapToLong(update_fail_htlcs_arg_conv_16 -> update_fail_htlcs_arg_conv_16 == null ? 0 : update_fail_htlcs_arg_conv_16.ptr).toArray() : null, update_fail_malformed_htlcs_arg != null ? Arrays.stream(update_fail_malformed_htlcs_arg).mapToLong(update_fail_malformed_htlcs_arg_conv_25 -> update_fail_malformed_htlcs_arg_conv_25 == null ? 0 : update_fail_malformed_htlcs_arg_conv_25.ptr).toArray() : null, update_fee_arg == null ? 0 : update_fee_arg.ptr, commitment_signed_arg == null ? 0 : commitment_signed_arg.ptr);
                Reference.reachabilityFence(update_add_htlcs_arg);
                Reference.reachabilityFence(update_fulfill_htlcs_arg);
index a5a60b7725019c534e9b095034708c94236e749f..9029aefb6aaa40a1b069efa07817b0ac4d69448d 100644 (file)
@@ -130,7 +130,7 @@ public class Confirm extends CommonBase {
                 * [`transactions_confirmed`]: Self::transactions_confirmed
                 * [`transaction_unconfirmed`]: Self::transaction_unconfirmed
                 */
-               TwoTuple_TxidCOption_BlockHashZZ[] get_relevant_txids();
+               TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[] get_relevant_txids();
        }
        private static class LDKConfirmHolder { Confirm held; }
        public static Confirm new_impl(ConfirmInterface arg) {
@@ -157,9 +157,9 @@ public class Confirm extends CommonBase {
                                Reference.reachabilityFence(arg);
                        }
                        @Override public long[] get_relevant_txids() {
-                               TwoTuple_TxidCOption_BlockHashZZ[] ret = arg.get_relevant_txids();
+                               TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[] ret = arg.get_relevant_txids();
                                Reference.reachabilityFence(arg);
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_34 -> ret_conv_34 == null ? 0 : ret_conv_34.clone_ptr()).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_49 -> ret_conv_49 == null ? 0 : ret_conv_49.clone_ptr()).toArray() : null;
                                return result;
                        }
                });
@@ -241,18 +241,18 @@ public class Confirm extends CommonBase {
         * [`transactions_confirmed`]: Self::transactions_confirmed
         * [`transaction_unconfirmed`]: Self::transaction_unconfirmed
         */
-       public TwoTuple_TxidCOption_BlockHashZZ[] get_relevant_txids() {
+       public TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[] get_relevant_txids() {
                long[] ret = bindings.Confirm_get_relevant_txids(this.ptr);
                Reference.reachabilityFence(this);
-               int ret_conv_34_len = ret.length;
-               TwoTuple_TxidCOption_BlockHashZZ[] ret_conv_34_arr = new TwoTuple_TxidCOption_BlockHashZZ[ret_conv_34_len];
-               for (int i = 0; i < ret_conv_34_len; i++) {
-                       long ret_conv_34 = ret[i];
-                       TwoTuple_TxidCOption_BlockHashZZ ret_conv_34_hu_conv = new TwoTuple_TxidCOption_BlockHashZZ(null, ret_conv_34);
-                       if (ret_conv_34_hu_conv != null) { ret_conv_34_hu_conv.ptrs_to.add(this); };
-                       ret_conv_34_arr[i] = ret_conv_34_hu_conv;
+               int ret_conv_49_len = ret.length;
+               TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[] ret_conv_49_arr = new TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ[ret_conv_49_len];
+               for (int x = 0; x < ret_conv_49_len; x++) {
+                       long ret_conv_49 = ret[x];
+                       TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ ret_conv_49_hu_conv = new TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ(null, ret_conv_49);
+                       if (ret_conv_49_hu_conv != null) { ret_conv_49_hu_conv.ptrs_to.add(this); };
+                       ret_conv_49_arr[x] = ret_conv_49_hu_conv;
                }
-               return ret_conv_34_arr;
+               return ret_conv_49_arr;
        }
 
 }
index 1d9c7d51eddd2d4cdf2502c965864a99ffe9d7ee..ce9db6448ea2dc2b9b25372224ce6aacedfee248 100644 (file)
@@ -92,6 +92,18 @@ public class CounterpartyChannelTransactionParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the CounterpartyChannelTransactionParameters.
+        */
+       public long hash() {
+               long ret = bindings.CounterpartyChannelTransactionParameters_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two CounterpartyChannelTransactionParameterss contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index 40785f72d717e51d315de223110a0c83e298e40c..c86311fdfa2d908a7571b0926868e9dd926a7394 100644 (file)
@@ -197,6 +197,18 @@ public class DelayedPaymentOutputDescriptor extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the DelayedPaymentOutputDescriptor.
+        */
+       public long hash() {
+               long ret = bindings.DelayedPaymentOutputDescriptor_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two DelayedPaymentOutputDescriptors contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index a5bcc447b8b3bf8e7d630f0cb4059cdec596a092..6b238aad6566db84a0a070a26278953d7162af82 100644 (file)
@@ -59,7 +59,7 @@ public class EcdsaChannelSigner extends CommonBase {
                 * Note that all the relevant preimages will be provided, but there may also be additional
                 * irrelevant or duplicate preimages.
                 */
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(CommitmentTransaction commitment_tx, byte[][] preimages);
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_counterparty_commitment(CommitmentTransaction commitment_tx, byte[][] preimages);
                /**
                 * Validate the counterparty's revocation.
                 * 
@@ -84,7 +84,7 @@ public class EcdsaChannelSigner extends CommonBase {
                 * 
                 * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
                 */
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx);
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx);
                /**
                 * Create a signature for the given input in a transaction spending an HTLC transaction output
                 * or a commitment transaction `to_local` output when our counterparty broadcasts an old state.
@@ -101,7 +101,7 @@ public class EcdsaChannelSigner extends CommonBase {
                 * not allow the spending of any funds by itself (you need our holder `revocation_secret` to do
                 * so).
                 */
-               Result_SignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key);
+               Result_ECDSASignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key);
                /**
                 * Create a signature for the given input in a transaction spending a commitment transaction
                 * HTLC output when our counterparty broadcasts an old state.
@@ -122,7 +122,7 @@ public class EcdsaChannelSigner extends CommonBase {
                 * `htlc` holds HTLC elements (hash, timelock), thus changing the format of the witness script
                 * (which is committed to in the BIP 143 signatures).
                 */
-               Result_SignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc);
+               Result_ECDSASignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc);
                /**
                 * Computes the signature for a commitment transaction's HTLC output used as an input within
                 * `htlc_tx`, which spends the commitment transaction at index `input`. The signature returned
@@ -132,7 +132,7 @@ public class EcdsaChannelSigner extends CommonBase {
                 * 
                 * [`EcdsaSighashType::All`]: bitcoin::blockdata::transaction::EcdsaSighashType::All
                 */
-               Result_SignatureNoneZ sign_holder_htlc_transaction(byte[] htlc_tx, long input, HTLCDescriptor htlc_descriptor);
+               Result_ECDSASignatureNoneZ sign_holder_htlc_transaction(byte[] htlc_tx, long input, HTLCDescriptor htlc_descriptor);
                /**
                 * Create a signature for a claiming transaction for a HTLC output on a counterparty's commitment
                 * transaction, either offered or received.
@@ -152,19 +152,19 @@ public class EcdsaChannelSigner extends CommonBase {
                 * channel state keys, which are then included in the witness script and committed to in the
                 * BIP 143 signature.
                 */
-               Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc);
+               Result_ECDSASignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc);
                /**
                 * Create a signature for a (proposed) closing transaction.
                 * 
                 * Note that, due to rounding, there may be one \"missing\" satoshi, and either party may have
                 * chosen to forgo their output as dust.
                 */
-               Result_SignatureNoneZ sign_closing_transaction(ClosingTransaction closing_tx);
+               Result_ECDSASignatureNoneZ sign_closing_transaction(ClosingTransaction closing_tx);
                /**
                 * Computes the signature for a commitment transaction's anchor output used as an
                 * input within `anchor_tx`, which spends the commitment transaction, at index `input`.
                 */
-               Result_SignatureNoneZ sign_holder_anchor_input(byte[] anchor_tx, long input);
+               Result_ECDSASignatureNoneZ sign_holder_anchor_input(byte[] anchor_tx, long input);
                /**
                 * Signs a channel announcement message with our funding key proving it comes from one of the
                 * channel participants.
@@ -176,7 +176,7 @@ public class EcdsaChannelSigner extends CommonBase {
                 * our counterparty may (though likely will not) close the channel on us for violating the
                 * protocol.
                 */
-               Result_SignatureNoneZ sign_channel_announcement_with_funding_key(UnsignedChannelAnnouncement msg);
+               Result_ECDSASignatureNoneZ sign_channel_announcement_with_funding_key(UnsignedChannelAnnouncement msg);
        }
        private static class LDKEcdsaChannelSignerHolder { EcdsaChannelSigner held; }
        public static EcdsaChannelSigner new_impl(EcdsaChannelSignerInterface arg, ChannelSigner.ChannelSignerInterface ChannelSigner_impl, ChannelPublicKeys pubkeys) {
@@ -184,7 +184,7 @@ public class EcdsaChannelSigner extends CommonBase {
                impl_holder.held = new EcdsaChannelSigner(new bindings.LDKEcdsaChannelSigner() {
                        @Override public long sign_counterparty_commitment(long commitment_tx, byte[][] preimages) {
                                org.ldk.structs.CommitmentTransaction commitment_tx_hu_conv = null; if (commitment_tx < 0 || commitment_tx > 4096) { commitment_tx_hu_conv = new org.ldk.structs.CommitmentTransaction(null, commitment_tx); }
-                               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_counterparty_commitment(commitment_tx_hu_conv, preimages);
+                               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret = arg.sign_counterparty_commitment(commitment_tx_hu_conv, preimages);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -197,54 +197,54 @@ public class EcdsaChannelSigner extends CommonBase {
                        }
                        @Override public long sign_holder_commitment_and_htlcs(long commitment_tx) {
                                org.ldk.structs.HolderCommitmentTransaction commitment_tx_hu_conv = null; if (commitment_tx < 0 || commitment_tx > 4096) { commitment_tx_hu_conv = new org.ldk.structs.HolderCommitmentTransaction(null, commitment_tx); }
-                               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv);
+                               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
-                               Result_SignatureNoneZ ret = arg.sign_justice_revoked_output(justice_tx, input, amount, per_commitment_key);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_justice_revoked_output(justice_tx, input, amount, per_commitment_key);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, long htlc) {
                                org.ldk.structs.HTLCOutputInCommitment htlc_hu_conv = null; if (htlc < 0 || htlc > 4096) { htlc_hu_conv = new org.ldk.structs.HTLCOutputInCommitment(null, htlc); }
-                               Result_SignatureNoneZ ret = arg.sign_justice_revoked_htlc(justice_tx, input, amount, per_commitment_key, htlc_hu_conv);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_justice_revoked_htlc(justice_tx, input, amount, per_commitment_key, htlc_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_holder_htlc_transaction(byte[] htlc_tx, long input, long htlc_descriptor) {
                                org.ldk.structs.HTLCDescriptor htlc_descriptor_hu_conv = null; if (htlc_descriptor < 0 || htlc_descriptor > 4096) { htlc_descriptor_hu_conv = new org.ldk.structs.HTLCDescriptor(null, htlc_descriptor); }
-                               Result_SignatureNoneZ ret = arg.sign_holder_htlc_transaction(htlc_tx, input, htlc_descriptor_hu_conv);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_holder_htlc_transaction(htlc_tx, input, htlc_descriptor_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, long htlc) {
                                org.ldk.structs.HTLCOutputInCommitment htlc_hu_conv = null; if (htlc < 0 || htlc > 4096) { htlc_hu_conv = new org.ldk.structs.HTLCOutputInCommitment(null, htlc); }
-                               Result_SignatureNoneZ ret = arg.sign_counterparty_htlc_transaction(htlc_tx, input, amount, per_commitment_point, htlc_hu_conv);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_counterparty_htlc_transaction(htlc_tx, input, amount, per_commitment_point, htlc_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_closing_transaction(long closing_tx) {
                                org.ldk.structs.ClosingTransaction closing_tx_hu_conv = null; if (closing_tx < 0 || closing_tx > 4096) { closing_tx_hu_conv = new org.ldk.structs.ClosingTransaction(null, closing_tx); }
-                               Result_SignatureNoneZ ret = arg.sign_closing_transaction(closing_tx_hu_conv);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_closing_transaction(closing_tx_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_holder_anchor_input(byte[] anchor_tx, long input) {
-                               Result_SignatureNoneZ ret = arg.sign_holder_anchor_input(anchor_tx, input);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_holder_anchor_input(anchor_tx, input);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_channel_announcement_with_funding_key(long msg) {
                                org.ldk.structs.UnsignedChannelAnnouncement msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.UnsignedChannelAnnouncement(null, msg); }
-                               Result_SignatureNoneZ ret = arg.sign_channel_announcement_with_funding_key(msg_hu_conv);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_channel_announcement_with_funding_key(msg_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -277,13 +277,13 @@ public class EcdsaChannelSigner extends CommonBase {
         * Note that all the relevant preimages will be provided, but there may also be additional
         * irrelevant or duplicate preimages.
         */
-       public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(org.ldk.structs.CommitmentTransaction commitment_tx, byte[][] preimages) {
+       public Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_counterparty_commitment(org.ldk.structs.CommitmentTransaction commitment_tx, byte[][] preimages) {
                long ret = bindings.EcdsaChannelSigner_sign_counterparty_commitment(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr, preimages != null ? Arrays.stream(preimages).map(preimages_conv_8 -> InternalUtils.check_arr_len(preimages_conv_8, 32)).toArray(byte[][]::new) : null);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(commitment_tx);
                Reference.reachabilityFence(preimages);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_hu_conv = Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(commitment_tx); };
                return ret_hu_conv;
        }
@@ -321,12 +321,12 @@ public class EcdsaChannelSigner extends CommonBase {
         * 
         * [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
         */
-       public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(org.ldk.structs.HolderCommitmentTransaction commitment_tx) {
+       public Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_holder_commitment_and_htlcs(org.ldk.structs.HolderCommitmentTransaction commitment_tx) {
                long ret = bindings.EcdsaChannelSigner_sign_holder_commitment_and_htlcs(this.ptr, commitment_tx == null ? 0 : commitment_tx.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(commitment_tx);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_hu_conv = Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(commitment_tx); };
                return ret_hu_conv;
        }
@@ -347,7 +347,7 @@ public class EcdsaChannelSigner extends CommonBase {
         * not allow the spending of any funds by itself (you need our holder `revocation_secret` to do
         * so).
         */
-       public Result_SignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
+       public Result_ECDSASignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
                long ret = bindings.EcdsaChannelSigner_sign_justice_revoked_output(this.ptr, justice_tx, input, amount, InternalUtils.check_arr_len(per_commitment_key, 32));
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(justice_tx);
@@ -355,7 +355,7 @@ public class EcdsaChannelSigner extends CommonBase {
                Reference.reachabilityFence(amount);
                Reference.reachabilityFence(per_commitment_key);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
@@ -379,7 +379,7 @@ public class EcdsaChannelSigner extends CommonBase {
         * `htlc` holds HTLC elements (hash, timelock), thus changing the format of the witness script
         * (which is committed to in the BIP 143 signatures).
         */
-       public Result_SignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, org.ldk.structs.HTLCOutputInCommitment htlc) {
+       public Result_ECDSASignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, org.ldk.structs.HTLCOutputInCommitment htlc) {
                long ret = bindings.EcdsaChannelSigner_sign_justice_revoked_htlc(this.ptr, justice_tx, input, amount, InternalUtils.check_arr_len(per_commitment_key, 32), htlc == null ? 0 : htlc.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(justice_tx);
@@ -388,7 +388,7 @@ public class EcdsaChannelSigner extends CommonBase {
                Reference.reachabilityFence(per_commitment_key);
                Reference.reachabilityFence(htlc);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(htlc); };
                return ret_hu_conv;
        }
@@ -402,14 +402,14 @@ public class EcdsaChannelSigner extends CommonBase {
         * 
         * [`EcdsaSighashType::All`]: bitcoin::blockdata::transaction::EcdsaSighashType::All
         */
-       public Result_SignatureNoneZ sign_holder_htlc_transaction(byte[] htlc_tx, long input, org.ldk.structs.HTLCDescriptor htlc_descriptor) {
+       public Result_ECDSASignatureNoneZ sign_holder_htlc_transaction(byte[] htlc_tx, long input, org.ldk.structs.HTLCDescriptor htlc_descriptor) {
                long ret = bindings.EcdsaChannelSigner_sign_holder_htlc_transaction(this.ptr, htlc_tx, input, htlc_descriptor == null ? 0 : htlc_descriptor.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(htlc_tx);
                Reference.reachabilityFence(input);
                Reference.reachabilityFence(htlc_descriptor);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(htlc_descriptor); };
                return ret_hu_conv;
        }
@@ -433,7 +433,7 @@ public class EcdsaChannelSigner extends CommonBase {
         * channel state keys, which are then included in the witness script and committed to in the
         * BIP 143 signature.
         */
-       public Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, org.ldk.structs.HTLCOutputInCommitment htlc) {
+       public Result_ECDSASignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, org.ldk.structs.HTLCOutputInCommitment htlc) {
                long ret = bindings.EcdsaChannelSigner_sign_counterparty_htlc_transaction(this.ptr, htlc_tx, input, amount, InternalUtils.check_arr_len(per_commitment_point, 33), htlc == null ? 0 : htlc.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(htlc_tx);
@@ -442,7 +442,7 @@ public class EcdsaChannelSigner extends CommonBase {
                Reference.reachabilityFence(per_commitment_point);
                Reference.reachabilityFence(htlc);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(htlc); };
                return ret_hu_conv;
        }
@@ -453,12 +453,12 @@ public class EcdsaChannelSigner extends CommonBase {
         * Note that, due to rounding, there may be one \"missing\" satoshi, and either party may have
         * chosen to forgo their output as dust.
         */
-       public Result_SignatureNoneZ sign_closing_transaction(org.ldk.structs.ClosingTransaction closing_tx) {
+       public Result_ECDSASignatureNoneZ sign_closing_transaction(org.ldk.structs.ClosingTransaction closing_tx) {
                long ret = bindings.EcdsaChannelSigner_sign_closing_transaction(this.ptr, closing_tx == null ? 0 : closing_tx.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(closing_tx);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(closing_tx); };
                return ret_hu_conv;
        }
@@ -467,13 +467,13 @@ public class EcdsaChannelSigner extends CommonBase {
         * Computes the signature for a commitment transaction's anchor output used as an
         * input within `anchor_tx`, which spends the commitment transaction, at index `input`.
         */
-       public Result_SignatureNoneZ sign_holder_anchor_input(byte[] anchor_tx, long input) {
+       public Result_ECDSASignatureNoneZ sign_holder_anchor_input(byte[] anchor_tx, long input) {
                long ret = bindings.EcdsaChannelSigner_sign_holder_anchor_input(this.ptr, anchor_tx, input);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(anchor_tx);
                Reference.reachabilityFence(input);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
@@ -488,12 +488,12 @@ public class EcdsaChannelSigner extends CommonBase {
         * our counterparty may (though likely will not) close the channel on us for violating the
         * protocol.
         */
-       public Result_SignatureNoneZ sign_channel_announcement_with_funding_key(org.ldk.structs.UnsignedChannelAnnouncement msg) {
+       public Result_ECDSASignatureNoneZ sign_channel_announcement_with_funding_key(org.ldk.structs.UnsignedChannelAnnouncement msg) {
                long ret = bindings.EcdsaChannelSigner_sign_channel_announcement_with_funding_key(this.ptr, msg == null ? 0 : msg.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(msg); };
                return ret_hu_conv;
        }
index 5142bf90b724832ae81abf72fec5253536cc00e7..90a5fecf781b7d5d3b84c7f3f5dc636aa38f45c7 100644 (file)
@@ -122,11 +122,15 @@ public class Event extends CommonBase {
                */
                public final byte[] output_script;
                /**
-                * The `user_channel_id` value passed in to [`ChannelManager::create_channel`], or a
-                * random value for an inbound channel. This may be zero for objects serialized with LDK
-                * versions prior to 0.0.113.
+                * The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
+                * channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
+                * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
+                * `user_channel_id` will be randomized for an inbound channel.  This may be zero for objects
+                * serialized with LDK versions prior to 0.0.113.
                 * 
                 * [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
+                * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
+                * [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
                */
                public final org.ldk.util.UInt128 user_channel_id;
                private FundingGenerationReady(long ptr, bindings.LDKEvent.FundingGenerationReady obj) {
@@ -147,9 +151,19 @@ public class Event extends CommonBase {
         * Note that if the preimage is not known, you should call
         * [`ChannelManager::fail_htlc_backwards`] or [`ChannelManager::fail_htlc_backwards_with_reason`]
         * to free up resources for this HTLC and avoid network congestion.
-        * If you fail to call either [`ChannelManager::claim_funds`], [`ChannelManager::fail_htlc_backwards`],
-        * or [`ChannelManager::fail_htlc_backwards_with_reason`] within the HTLC's timeout, the HTLC will be
-        * automatically failed.
+        * 
+        * If [`Event::PaymentClaimable::onion_fields`] is `Some`, and includes custom TLVs with even type
+        * numbers, you should use [`ChannelManager::fail_htlc_backwards_with_reason`] with
+        * [`FailureCode::InvalidOnionPayload`] if you fail to understand and handle the contents, or
+        * [`ChannelManager::claim_funds_with_known_custom_tlvs`] upon successful handling.
+        * If you don't intend to check for custom TLVs, you can simply use
+        * [`ChannelManager::claim_funds`], which will automatically fail back even custom TLVs.
+        * 
+        * If you fail to call [`ChannelManager::claim_funds`],
+        * [`ChannelManager::claim_funds_with_known_custom_tlvs`],
+        * [`ChannelManager::fail_htlc_backwards`], or
+        * [`ChannelManager::fail_htlc_backwards_with_reason`] within the HTLC's timeout, the HTLC will
+        * be automatically failed.
         * 
         * # Note
         * LDK will not stop an inbound payment from being paid multiple times, so multiple
@@ -161,6 +175,8 @@ public class Event extends CommonBase {
         * This event used to be called `PaymentReceived` in LDK versions 0.0.112 and earlier.
         * 
         * [`ChannelManager::claim_funds`]: crate::ln::channelmanager::ChannelManager::claim_funds
+        * [`ChannelManager::claim_funds_with_known_custom_tlvs`]: crate::ln::channelmanager::ChannelManager::claim_funds_with_known_custom_tlvs
+        * [`FailureCode::InvalidOnionPayload`]: crate::ln::channelmanager::FailureCode::InvalidOnionPayload
         * [`ChannelManager::fail_htlc_backwards`]: crate::ln::channelmanager::ChannelManager::fail_htlc_backwards
         * [`ChannelManager::fail_htlc_backwards_with_reason`]: crate::ln::channelmanager::ChannelManager::fail_htlc_backwards_with_reason
         */
@@ -220,14 +236,12 @@ public class Event extends CommonBase {
                public final org.ldk.structs.PaymentPurpose purpose;
                /**
                 * The `channel_id` indicating over which channel we received the payment.
-                * 
-                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
                */
-               @Nullable public final byte[] via_channel_id;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ via_channel_id;
                /**
                 * The `user_channel_id` indicating over which channel we received the payment.
                */
-               public final org.ldk.structs.Option_u128Z via_user_channel_id;
+               public final org.ldk.structs.Option_U128Z via_user_channel_id;
                /**
                 * The block height at which this payment will be failed back and will no longer be
                 * eligible for claiming.
@@ -252,9 +266,12 @@ public class Event extends CommonBase {
                        org.ldk.structs.PaymentPurpose purpose_hu_conv = org.ldk.structs.PaymentPurpose.constr_from_ptr(purpose);
                        if (purpose_hu_conv != null) { purpose_hu_conv.ptrs_to.add(this); };
                        this.purpose = purpose_hu_conv;
-                       this.via_channel_id = obj.via_channel_id;
+                       long via_channel_id = obj.via_channel_id;
+                       org.ldk.structs.Option_ThirtyTwoBytesZ via_channel_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(via_channel_id);
+                       if (via_channel_id_hu_conv != null) { via_channel_id_hu_conv.ptrs_to.add(this); };
+                       this.via_channel_id = via_channel_id_hu_conv;
                        long via_user_channel_id = obj.via_user_channel_id;
-                       org.ldk.structs.Option_u128Z via_user_channel_id_hu_conv = org.ldk.structs.Option_u128Z.constr_from_ptr(via_user_channel_id);
+                       org.ldk.structs.Option_U128Z via_user_channel_id_hu_conv = org.ldk.structs.Option_U128Z.constr_from_ptr(via_user_channel_id);
                        if (via_user_channel_id_hu_conv != null) { via_user_channel_id_hu_conv.ptrs_to.add(this); };
                        this.via_user_channel_id = via_user_channel_id_hu_conv;
                        long claim_deadline = obj.claim_deadline;
@@ -306,6 +323,16 @@ public class Event extends CommonBase {
                 * spontaneous payment.
                */
                public final org.ldk.structs.PaymentPurpose purpose;
+               /**
+                * The HTLCs that comprise the claimed payment. This will be empty for events serialized prior
+                * to LDK version 0.0.117.
+               */
+               public final ClaimedHTLC[] htlcs;
+               /**
+                * The sender-intended sum total of all the MPP parts. This will be `None` for events
+                * serialized prior to LDK version 0.0.117.
+               */
+               public final org.ldk.structs.Option_u64Z sender_intended_total_msat;
                private PaymentClaimed(long ptr, bindings.LDKEvent.PaymentClaimed obj) {
                        super(null, ptr);
                        this.receiver_node_id = obj.receiver_node_id;
@@ -315,6 +342,20 @@ public class Event extends CommonBase {
                        org.ldk.structs.PaymentPurpose purpose_hu_conv = org.ldk.structs.PaymentPurpose.constr_from_ptr(purpose);
                        if (purpose_hu_conv != null) { purpose_hu_conv.ptrs_to.add(this); };
                        this.purpose = purpose_hu_conv;
+                       long[] htlcs = obj.htlcs;
+                       int htlcs_conv_13_len = htlcs.length;
+                       ClaimedHTLC[] htlcs_conv_13_arr = new ClaimedHTLC[htlcs_conv_13_len];
+                       for (int n = 0; n < htlcs_conv_13_len; n++) {
+                               long htlcs_conv_13 = htlcs[n];
+                               org.ldk.structs.ClaimedHTLC htlcs_conv_13_hu_conv = null; if (htlcs_conv_13 < 0 || htlcs_conv_13 > 4096) { htlcs_conv_13_hu_conv = new org.ldk.structs.ClaimedHTLC(null, htlcs_conv_13); }
+                               if (htlcs_conv_13_hu_conv != null) { htlcs_conv_13_hu_conv.ptrs_to.add(this); };
+                               htlcs_conv_13_arr[n] = htlcs_conv_13_hu_conv;
+                       }
+                       this.htlcs = htlcs_conv_13_arr;
+                       long sender_intended_total_msat = obj.sender_intended_total_msat;
+                       org.ldk.structs.Option_u64Z sender_intended_total_msat_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(sender_intended_total_msat);
+                       if (sender_intended_total_msat_hu_conv != null) { sender_intended_total_msat_hu_conv.ptrs_to.add(this); };
+                       this.sender_intended_total_msat = sender_intended_total_msat_hu_conv;
                }
        }
        /**
@@ -330,7 +371,7 @@ public class Event extends CommonBase {
                 * 
                 * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
                */
-               public final org.ldk.structs.Option_PaymentIdZ payment_id;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ payment_id;
                /**
                 * The preimage to the hash given to ChannelManager::send_payment.
                 * Note that this serves as a payment receipt, if you wish to have such a thing, you must
@@ -358,7 +399,7 @@ public class Event extends CommonBase {
                private PaymentSent(long ptr, bindings.LDKEvent.PaymentSent obj) {
                        super(null, ptr);
                        long payment_id = obj.payment_id;
-                       org.ldk.structs.Option_PaymentIdZ payment_id_hu_conv = org.ldk.structs.Option_PaymentIdZ.constr_from_ptr(payment_id);
+                       org.ldk.structs.Option_ThirtyTwoBytesZ payment_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(payment_id);
                        if (payment_id_hu_conv != null) { payment_id_hu_conv.ptrs_to.add(this); };
                        this.payment_id = payment_id_hu_conv;
                        this.payment_preimage = obj.payment_preimage;
@@ -377,6 +418,11 @@ public class Event extends CommonBase {
         * payment is no longer retryable, due either to the [`Retry`] provided or
         * [`ChannelManager::abandon_payment`] having been called for the corresponding payment.
         * 
+        * In exceedingly rare cases, it is possible that an [`Event::PaymentFailed`] is generated for
+        * a payment after an [`Event::PaymentSent`] event for this same payment has already been
+        * received and processed. In this case, the [`Event::PaymentFailed`] event MUST be ignored,
+        * and the payment MUST be treated as having succeeded.
+        * 
         * [`Retry`]: crate::ln::channelmanager::Retry
         * [`ChannelManager::abandon_payment`]: crate::ln::channelmanager::ChannelManager::abandon_payment
         */
@@ -428,7 +474,7 @@ public class Event extends CommonBase {
                 * 
                 * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
                */
-               public final org.ldk.structs.Option_PaymentHashZ payment_hash;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash;
                /**
                 * The payment path that was successful.
                 * 
@@ -439,7 +485,7 @@ public class Event extends CommonBase {
                        super(null, ptr);
                        this.payment_id = obj.payment_id;
                        long payment_hash = obj.payment_hash;
-                       org.ldk.structs.Option_PaymentHashZ payment_hash_hu_conv = org.ldk.structs.Option_PaymentHashZ.constr_from_ptr(payment_hash);
+                       org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(payment_hash);
                        if (payment_hash_hu_conv != null) { payment_hash_hu_conv.ptrs_to.add(this); };
                        this.payment_hash = payment_hash_hu_conv;
                        long path = obj.path;
@@ -469,7 +515,7 @@ public class Event extends CommonBase {
                 * [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
                 * [`ChannelManager::abandon_payment`]: crate::ln::channelmanager::ChannelManager::abandon_payment
                */
-               public final org.ldk.structs.Option_PaymentIdZ payment_id;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ payment_id;
                /**
                 * The hash that was given to [`ChannelManager::send_payment`].
                 * 
@@ -507,7 +553,7 @@ public class Event extends CommonBase {
                private PaymentPathFailed(long ptr, bindings.LDKEvent.PaymentPathFailed obj) {
                        super(null, ptr);
                        long payment_id = obj.payment_id;
-                       org.ldk.structs.Option_PaymentIdZ payment_id_hu_conv = org.ldk.structs.Option_PaymentIdZ.constr_from_ptr(payment_id);
+                       org.ldk.structs.Option_ThirtyTwoBytesZ payment_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(payment_id);
                        if (payment_id_hu_conv != null) { payment_id_hu_conv.ptrs_to.add(this); };
                        this.payment_id = payment_id_hu_conv;
                        this.payment_hash = obj.payment_hash;
@@ -682,6 +728,12 @@ public class Event extends CommonBase {
                 * The outputs which you should store as spendable by you.
                */
                public final SpendableOutputDescriptor[] outputs;
+               /**
+                * The `channel_id` indicating which channel the spendable outputs belong to.
+                * 
+                * This will always be `Some` for events generated by LDK versions 0.0.117 and above.
+               */
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ channel_id;
                private SpendableOutputs(long ptr, bindings.LDKEvent.SpendableOutputs obj) {
                        super(null, ptr);
                        long[] outputs = obj.outputs;
@@ -694,6 +746,10 @@ public class Event extends CommonBase {
                                outputs_conv_27_arr[b] = outputs_conv_27_hu_conv;
                        }
                        this.outputs = outputs_conv_27_arr;
+                       long channel_id = obj.channel_id;
+                       org.ldk.structs.Option_ThirtyTwoBytesZ channel_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(channel_id);
+                       if (channel_id_hu_conv != null) { channel_id_hu_conv.ptrs_to.add(this); };
+                       this.channel_id = channel_id_hu_conv;
                }
        }
        /**
@@ -704,17 +760,13 @@ public class Event extends CommonBase {
                /**
                 * The incoming channel between the previous node and us. This is only `None` for events
                 * generated or serialized by versions prior to 0.0.107.
-                * 
-                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
                */
-               @Nullable public final byte[] prev_channel_id;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ prev_channel_id;
                /**
                 * The outgoing channel between the next node and us. This is only `None` for events
                 * generated or serialized by versions prior to 0.0.107.
-                * 
-                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
                */
-               @Nullable public final byte[] next_channel_id;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ next_channel_id;
                /**
                 * The fee, in milli-satoshis, which was earned as a result of the payment.
                 * 
@@ -744,8 +796,14 @@ public class Event extends CommonBase {
                public final org.ldk.structs.Option_u64Z outbound_amount_forwarded_msat;
                private PaymentForwarded(long ptr, bindings.LDKEvent.PaymentForwarded obj) {
                        super(null, ptr);
-                       this.prev_channel_id = obj.prev_channel_id;
-                       this.next_channel_id = obj.next_channel_id;
+                       long prev_channel_id = obj.prev_channel_id;
+                       org.ldk.structs.Option_ThirtyTwoBytesZ prev_channel_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(prev_channel_id);
+                       if (prev_channel_id_hu_conv != null) { prev_channel_id_hu_conv.ptrs_to.add(this); };
+                       this.prev_channel_id = prev_channel_id_hu_conv;
+                       long next_channel_id = obj.next_channel_id;
+                       org.ldk.structs.Option_ThirtyTwoBytesZ next_channel_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(next_channel_id);
+                       if (next_channel_id_hu_conv != null) { next_channel_id_hu_conv.ptrs_to.add(this); };
+                       this.next_channel_id = next_channel_id_hu_conv;
                        long fee_earned_msat = obj.fee_earned_msat;
                        org.ldk.structs.Option_u64Z fee_earned_msat_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(fee_earned_msat);
                        if (fee_earned_msat_hu_conv != null) { fee_earned_msat_hu_conv.ptrs_to.add(this); };
@@ -785,10 +843,8 @@ public class Event extends CommonBase {
                 * The `temporary_channel_id` this channel used to be known by during channel establishment.
                 * 
                 * Will be `None` for channels created prior to LDK version 0.0.115.
-                * 
-                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
                */
-               @Nullable public final byte[] former_temporary_channel_id;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ former_temporary_channel_id;
                /**
                 * The `node_id` of the channel counterparty.
                */
@@ -803,7 +859,10 @@ public class Event extends CommonBase {
                        byte[] user_channel_id = obj.user_channel_id;
                        org.ldk.util.UInt128 user_channel_id_conv = new org.ldk.util.UInt128(user_channel_id);
                        this.user_channel_id = user_channel_id_conv;
-                       this.former_temporary_channel_id = obj.former_temporary_channel_id;
+                       long former_temporary_channel_id = obj.former_temporary_channel_id;
+                       org.ldk.structs.Option_ThirtyTwoBytesZ former_temporary_channel_id_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(former_temporary_channel_id);
+                       if (former_temporary_channel_id_hu_conv != null) { former_temporary_channel_id_hu_conv.ptrs_to.add(this); };
+                       this.former_temporary_channel_id = former_temporary_channel_id_hu_conv;
                        this.counterparty_node_id = obj.counterparty_node_id;
                        long funding_txo = obj.funding_txo;
                        org.ldk.structs.OutPoint funding_txo_hu_conv = null; if (funding_txo < 0 || funding_txo > 4096) { funding_txo_hu_conv = new org.ldk.structs.OutPoint(null, funding_txo); }
@@ -857,6 +916,13 @@ public class Event extends CommonBase {
        /**
         * Used to indicate that a previously opened channel with the given `channel_id` is in the
         * process of closure.
+        * 
+        * Note that this event is only triggered for accepted channels: if the
+        * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true and the channel is
+        * rejected, no `ChannelClosed` event will be sent.
+        * 
+        * [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
+        * [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
         */
        public final static class ChannelClosed extends Event {
                /**
@@ -881,6 +947,20 @@ public class Event extends CommonBase {
                 * The reason the channel was closed.
                */
                public final org.ldk.structs.ClosureReason reason;
+               /**
+                * Counterparty in the closed channel.
+                * 
+                * This field will be `None` for objects serialized prior to LDK 0.0.117.
+                * 
+                * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
+               */
+               @Nullable public final byte[] counterparty_node_id;
+               /**
+                * Channel capacity of the closing channel (sats).
+                * 
+                * This field will be `None` for objects serialized prior to LDK 0.0.117.
+               */
+               public final org.ldk.structs.Option_u64Z channel_capacity_sats;
                private ChannelClosed(long ptr, bindings.LDKEvent.ChannelClosed obj) {
                        super(null, ptr);
                        this.channel_id = obj.channel_id;
@@ -891,11 +971,18 @@ public class Event extends CommonBase {
                        org.ldk.structs.ClosureReason reason_hu_conv = org.ldk.structs.ClosureReason.constr_from_ptr(reason);
                        if (reason_hu_conv != null) { reason_hu_conv.ptrs_to.add(this); };
                        this.reason = reason_hu_conv;
+                       this.counterparty_node_id = obj.counterparty_node_id;
+                       long channel_capacity_sats = obj.channel_capacity_sats;
+                       org.ldk.structs.Option_u64Z channel_capacity_sats_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(channel_capacity_sats);
+                       if (channel_capacity_sats_hu_conv != null) { channel_capacity_sats_hu_conv.ptrs_to.add(this); };
+                       this.channel_capacity_sats = channel_capacity_sats_hu_conv;
                }
        }
        /**
         * Used to indicate to the user that they can abandon the funding transaction and recycle the
         * inputs for another purpose.
+        * 
+        * This event is not guaranteed to be generated for channels that are closed due to a restart.
         */
        public final static class DiscardFunding extends Event {
                /**
@@ -915,8 +1002,9 @@ public class Event extends CommonBase {
        /**
         * Indicates a request to open a new channel by a peer.
         * 
-        * To accept the request, call [`ChannelManager::accept_inbound_channel`]. To reject the
-        * request, call [`ChannelManager::force_close_without_broadcasting_txn`].
+        * To accept the request, call [`ChannelManager::accept_inbound_channel`]. To reject the request,
+        * call [`ChannelManager::force_close_without_broadcasting_txn`]. Note that a ['ChannelClosed`]
+        * event will _not_ be triggered if the channel is rejected.
         * 
         * The event is only triggered when a new open channel request is received and the
         * [`UserConfig::manually_accept_inbound_channels`] config flag is set to true.
@@ -1076,8 +1164,8 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new PaymentClaimable-variant Event
         */
-       public static Event payment_claimable(byte[] receiver_node_id, byte[] payment_hash, org.ldk.structs.RecipientOnionFields onion_fields, long amount_msat, long counterparty_skimmed_fee_msat, org.ldk.structs.PaymentPurpose purpose, byte[] via_channel_id, org.ldk.structs.Option_u128Z via_user_channel_id, org.ldk.structs.Option_u32Z claim_deadline) {
-               long ret = bindings.Event_payment_claimable(InternalUtils.check_arr_len(receiver_node_id, 33), InternalUtils.check_arr_len(payment_hash, 32), onion_fields == null ? 0 : onion_fields.ptr, amount_msat, counterparty_skimmed_fee_msat, purpose.ptr, InternalUtils.check_arr_len(via_channel_id, 32), via_user_channel_id.ptr, claim_deadline.ptr);
+       public static Event payment_claimable(byte[] receiver_node_id, byte[] payment_hash, org.ldk.structs.RecipientOnionFields onion_fields, long amount_msat, long counterparty_skimmed_fee_msat, org.ldk.structs.PaymentPurpose purpose, org.ldk.structs.Option_ThirtyTwoBytesZ via_channel_id, org.ldk.structs.Option_U128Z via_user_channel_id, org.ldk.structs.Option_u32Z claim_deadline) {
+               long ret = bindings.Event_payment_claimable(InternalUtils.check_arr_len(receiver_node_id, 33), InternalUtils.check_arr_len(payment_hash, 32), onion_fields == null ? 0 : onion_fields.ptr, amount_msat, counterparty_skimmed_fee_msat, purpose.ptr, via_channel_id.ptr, via_user_channel_id.ptr, claim_deadline.ptr);
                Reference.reachabilityFence(receiver_node_id);
                Reference.reachabilityFence(payment_hash);
                Reference.reachabilityFence(onion_fields);
@@ -1092,6 +1180,7 @@ public class Event extends CommonBase {
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(onion_fields); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(purpose); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(via_channel_id); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(via_user_channel_id); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(claim_deadline); };
                return ret_hu_conv;
@@ -1100,23 +1189,27 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new PaymentClaimed-variant Event
         */
-       public static Event payment_claimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, org.ldk.structs.PaymentPurpose purpose) {
-               long ret = bindings.Event_payment_claimed(InternalUtils.check_arr_len(receiver_node_id, 33), InternalUtils.check_arr_len(payment_hash, 32), amount_msat, purpose.ptr);
+       public static Event payment_claimed(byte[] receiver_node_id, byte[] payment_hash, long amount_msat, org.ldk.structs.PaymentPurpose purpose, ClaimedHTLC[] htlcs, org.ldk.structs.Option_u64Z sender_intended_total_msat) {
+               long ret = bindings.Event_payment_claimed(InternalUtils.check_arr_len(receiver_node_id, 33), InternalUtils.check_arr_len(payment_hash, 32), amount_msat, purpose.ptr, htlcs != null ? Arrays.stream(htlcs).mapToLong(htlcs_conv_13 -> htlcs_conv_13 == null ? 0 : htlcs_conv_13.ptr).toArray() : null, sender_intended_total_msat.ptr);
                Reference.reachabilityFence(receiver_node_id);
                Reference.reachabilityFence(payment_hash);
                Reference.reachabilityFence(amount_msat);
                Reference.reachabilityFence(purpose);
+               Reference.reachabilityFence(htlcs);
+               Reference.reachabilityFence(sender_intended_total_msat);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(purpose); };
+               for (ClaimedHTLC htlcs_conv_13: htlcs) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(htlcs_conv_13); }; };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(sender_intended_total_msat); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new PaymentSent-variant Event
         */
-       public static Event payment_sent(org.ldk.structs.Option_PaymentIdZ payment_id, byte[] payment_preimage, byte[] payment_hash, org.ldk.structs.Option_u64Z fee_paid_msat) {
+       public static Event payment_sent(org.ldk.structs.Option_ThirtyTwoBytesZ payment_id, byte[] payment_preimage, byte[] payment_hash, org.ldk.structs.Option_u64Z fee_paid_msat) {
                long ret = bindings.Event_payment_sent(payment_id.ptr, InternalUtils.check_arr_len(payment_preimage, 32), InternalUtils.check_arr_len(payment_hash, 32), fee_paid_msat.ptr);
                Reference.reachabilityFence(payment_id);
                Reference.reachabilityFence(payment_preimage);
@@ -1148,7 +1241,7 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new PaymentPathSuccessful-variant Event
         */
-       public static Event payment_path_successful(byte[] payment_id, org.ldk.structs.Option_PaymentHashZ payment_hash, org.ldk.structs.Path path) {
+       public static Event payment_path_successful(byte[] payment_id, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, org.ldk.structs.Path path) {
                long ret = bindings.Event_payment_path_successful(InternalUtils.check_arr_len(payment_id, 32), payment_hash.ptr, path == null ? 0 : path.ptr);
                Reference.reachabilityFence(payment_id);
                Reference.reachabilityFence(payment_hash);
@@ -1164,7 +1257,7 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new PaymentPathFailed-variant Event
         */
-       public static Event payment_path_failed(org.ldk.structs.Option_PaymentIdZ payment_id, byte[] payment_hash, boolean payment_failed_permanently, org.ldk.structs.PathFailure failure, org.ldk.structs.Path path, org.ldk.structs.Option_u64Z short_channel_id) {
+       public static Event payment_path_failed(org.ldk.structs.Option_ThirtyTwoBytesZ payment_id, byte[] payment_hash, boolean payment_failed_permanently, org.ldk.structs.PathFailure failure, org.ldk.structs.Path path, org.ldk.structs.Option_u64Z short_channel_id) {
                long ret = bindings.Event_payment_path_failed(payment_id.ptr, InternalUtils.check_arr_len(payment_hash, 32), payment_failed_permanently, failure.ptr, path == null ? 0 : path.ptr, short_channel_id.ptr);
                Reference.reachabilityFence(payment_id);
                Reference.reachabilityFence(payment_hash);
@@ -1245,21 +1338,23 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new SpendableOutputs-variant Event
         */
-       public static Event spendable_outputs(SpendableOutputDescriptor[] outputs) {
-               long ret = bindings.Event_spendable_outputs(outputs != null ? Arrays.stream(outputs).mapToLong(outputs_conv_27 -> outputs_conv_27.ptr).toArray() : null);
+       public static Event spendable_outputs(SpendableOutputDescriptor[] outputs, org.ldk.structs.Option_ThirtyTwoBytesZ channel_id) {
+               long ret = bindings.Event_spendable_outputs(outputs != null ? Arrays.stream(outputs).mapToLong(outputs_conv_27 -> outputs_conv_27.ptr).toArray() : null, channel_id.ptr);
                Reference.reachabilityFence(outputs);
+               Reference.reachabilityFence(channel_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                for (SpendableOutputDescriptor outputs_conv_27: outputs) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(outputs_conv_27); }; };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channel_id); };
                return ret_hu_conv;
        }
 
        /**
         * Utility method to constructs a new PaymentForwarded-variant Event
         */
-       public static Event payment_forwarded(byte[] prev_channel_id, byte[] next_channel_id, org.ldk.structs.Option_u64Z fee_earned_msat, boolean claim_from_onchain_tx, org.ldk.structs.Option_u64Z outbound_amount_forwarded_msat) {
-               long ret = bindings.Event_payment_forwarded(InternalUtils.check_arr_len(prev_channel_id, 32), InternalUtils.check_arr_len(next_channel_id, 32), fee_earned_msat.ptr, claim_from_onchain_tx, outbound_amount_forwarded_msat.ptr);
+       public static Event payment_forwarded(org.ldk.structs.Option_ThirtyTwoBytesZ prev_channel_id, org.ldk.structs.Option_ThirtyTwoBytesZ next_channel_id, org.ldk.structs.Option_u64Z fee_earned_msat, boolean claim_from_onchain_tx, org.ldk.structs.Option_u64Z outbound_amount_forwarded_msat) {
+               long ret = bindings.Event_payment_forwarded(prev_channel_id.ptr, next_channel_id.ptr, fee_earned_msat.ptr, claim_from_onchain_tx, outbound_amount_forwarded_msat.ptr);
                Reference.reachabilityFence(prev_channel_id);
                Reference.reachabilityFence(next_channel_id);
                Reference.reachabilityFence(fee_earned_msat);
@@ -1268,6 +1363,8 @@ public class Event extends CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(prev_channel_id); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(next_channel_id); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(fee_earned_msat); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(outbound_amount_forwarded_msat); };
                return ret_hu_conv;
@@ -1276,8 +1373,8 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new ChannelPending-variant Event
         */
-       public static Event channel_pending(byte[] channel_id, org.ldk.util.UInt128 user_channel_id, byte[] former_temporary_channel_id, byte[] counterparty_node_id, org.ldk.structs.OutPoint funding_txo) {
-               long ret = bindings.Event_channel_pending(InternalUtils.check_arr_len(channel_id, 32), user_channel_id.getLEBytes(), InternalUtils.check_arr_len(former_temporary_channel_id, 32), InternalUtils.check_arr_len(counterparty_node_id, 33), funding_txo == null ? 0 : funding_txo.ptr);
+       public static Event channel_pending(byte[] channel_id, org.ldk.util.UInt128 user_channel_id, org.ldk.structs.Option_ThirtyTwoBytesZ former_temporary_channel_id, byte[] counterparty_node_id, org.ldk.structs.OutPoint funding_txo) {
+               long ret = bindings.Event_channel_pending(InternalUtils.check_arr_len(channel_id, 32), user_channel_id.getLEBytes(), former_temporary_channel_id.ptr, InternalUtils.check_arr_len(counterparty_node_id, 33), funding_txo == null ? 0 : funding_txo.ptr);
                Reference.reachabilityFence(channel_id);
                Reference.reachabilityFence(user_channel_id);
                Reference.reachabilityFence(former_temporary_channel_id);
@@ -1286,6 +1383,7 @@ public class Event extends CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(former_temporary_channel_id); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(funding_txo); };
                return ret_hu_conv;
        }
@@ -1309,15 +1407,18 @@ public class Event extends CommonBase {
        /**
         * Utility method to constructs a new ChannelClosed-variant Event
         */
-       public static Event channel_closed(byte[] channel_id, org.ldk.util.UInt128 user_channel_id, org.ldk.structs.ClosureReason reason) {
-               long ret = bindings.Event_channel_closed(InternalUtils.check_arr_len(channel_id, 32), user_channel_id.getLEBytes(), reason.ptr);
+       public static Event channel_closed(byte[] channel_id, org.ldk.util.UInt128 user_channel_id, org.ldk.structs.ClosureReason reason, byte[] counterparty_node_id, org.ldk.structs.Option_u64Z channel_capacity_sats) {
+               long ret = bindings.Event_channel_closed(InternalUtils.check_arr_len(channel_id, 32), user_channel_id.getLEBytes(), reason.ptr, InternalUtils.check_arr_len(counterparty_node_id, 33), channel_capacity_sats.ptr);
                Reference.reachabilityFence(channel_id);
                Reference.reachabilityFence(user_channel_id);
                Reference.reachabilityFence(reason);
+               Reference.reachabilityFence(counterparty_node_id);
+               Reference.reachabilityFence(channel_capacity_sats);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Event ret_hu_conv = org.ldk.structs.Event.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(reason); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channel_capacity_sats); };
                return ret_hu_conv;
        }
 
diff --git a/src/main/java/org/ldk/structs/FailureCode.java b/src/main/java/org/ldk/structs/FailureCode.java
new file mode 100644 (file)
index 0000000..a76cbcd
--- /dev/null
@@ -0,0 +1,152 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * This enum is used to specify which error data to send to peers when failing back an HTLC
+ * using [`ChannelManager::fail_htlc_backwards_with_reason`].
+ * 
+ * For more info on failure codes, see <https://github.com/lightning/bolts/blob/master/04-onion-routing.md#failure-messages>.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class FailureCode extends CommonBase {
+       private FailureCode(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.FailureCode_free(ptr); }
+       }
+       static FailureCode constr_from_ptr(long ptr) {
+               bindings.LDKFailureCode raw_val = bindings.LDKFailureCode_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKFailureCode.TemporaryNodeFailure.class) {
+                       return new TemporaryNodeFailure(ptr, (bindings.LDKFailureCode.TemporaryNodeFailure)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKFailureCode.RequiredNodeFeatureMissing.class) {
+                       return new RequiredNodeFeatureMissing(ptr, (bindings.LDKFailureCode.RequiredNodeFeatureMissing)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKFailureCode.IncorrectOrUnknownPaymentDetails.class) {
+                       return new IncorrectOrUnknownPaymentDetails(ptr, (bindings.LDKFailureCode.IncorrectOrUnknownPaymentDetails)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKFailureCode.InvalidOnionPayload.class) {
+                       return new InvalidOnionPayload(ptr, (bindings.LDKFailureCode.InvalidOnionPayload)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * We had a temporary error processing the payment. Useful if no other error codes fit
+        * and you want to indicate that the payer may want to retry.
+        */
+       public final static class TemporaryNodeFailure extends FailureCode {
+               private TemporaryNodeFailure(long ptr, bindings.LDKFailureCode.TemporaryNodeFailure obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * We have a required feature which was not in this onion. For example, you may require
+        * some additional metadata that was not provided with this payment.
+        */
+       public final static class RequiredNodeFeatureMissing extends FailureCode {
+               private RequiredNodeFeatureMissing(long ptr, bindings.LDKFailureCode.RequiredNodeFeatureMissing obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * You may wish to use this when a `payment_preimage` is unknown, or the CLTV expiry of
+        * the HTLC is too close to the current block height for safe handling.
+        * Using this failure code in [`ChannelManager::fail_htlc_backwards_with_reason`] is
+        * equivalent to calling [`ChannelManager::fail_htlc_backwards`].
+        */
+       public final static class IncorrectOrUnknownPaymentDetails extends FailureCode {
+               private IncorrectOrUnknownPaymentDetails(long ptr, bindings.LDKFailureCode.IncorrectOrUnknownPaymentDetails obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * We failed to process the payload after the onion was decrypted. You may wish to
+        * use this when receiving custom HTLC TLVs with even type numbers that you don't recognize.
+        * 
+        * If available, the tuple data may include the type number and byte offset in the
+        * decrypted byte stream where the failure occurred.
+        */
+       public final static class InvalidOnionPayload extends FailureCode {
+               public final org.ldk.structs.Option_C2Tuple_u64u16ZZ invalid_onion_payload;
+               private InvalidOnionPayload(long ptr, bindings.LDKFailureCode.InvalidOnionPayload obj) {
+                       super(null, ptr);
+                       long invalid_onion_payload = obj.invalid_onion_payload;
+                       org.ldk.structs.Option_C2Tuple_u64u16ZZ invalid_onion_payload_hu_conv = org.ldk.structs.Option_C2Tuple_u64u16ZZ.constr_from_ptr(invalid_onion_payload);
+                       if (invalid_onion_payload_hu_conv != null) { invalid_onion_payload_hu_conv.ptrs_to.add(this); };
+                       this.invalid_onion_payload = invalid_onion_payload_hu_conv;
+               }
+       }
+       long clone_ptr() {
+               long ret = bindings.FailureCode_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the FailureCode
+        */
+       public FailureCode clone() {
+               long ret = bindings.FailureCode_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FailureCode ret_hu_conv = org.ldk.structs.FailureCode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new TemporaryNodeFailure-variant FailureCode
+        */
+       public static FailureCode temporary_node_failure() {
+               long ret = bindings.FailureCode_temporary_node_failure();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FailureCode ret_hu_conv = org.ldk.structs.FailureCode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new RequiredNodeFeatureMissing-variant FailureCode
+        */
+       public static FailureCode required_node_feature_missing() {
+               long ret = bindings.FailureCode_required_node_feature_missing();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FailureCode ret_hu_conv = org.ldk.structs.FailureCode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new IncorrectOrUnknownPaymentDetails-variant FailureCode
+        */
+       public static FailureCode incorrect_or_unknown_payment_details() {
+               long ret = bindings.FailureCode_incorrect_or_unknown_payment_details();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FailureCode ret_hu_conv = org.ldk.structs.FailureCode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new InvalidOnionPayload-variant FailureCode
+        */
+       public static FailureCode invalid_onion_payload(org.ldk.structs.Option_C2Tuple_u64u16ZZ a) {
+               long ret = bindings.FailureCode_invalid_onion_payload(a.ptr);
+               Reference.reachabilityFence(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FailureCode ret_hu_conv = org.ldk.structs.FailureCode.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(a); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/FilesystemPersister.java b/src/main/java/org/ldk/structs/FilesystemPersister.java
deleted file mode 100644 (file)
index f80fb3a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * FilesystemPersister persists channel data on disk, where each channel's
- * data is stored in a file named after its funding outpoint.
- * 
- * Warning: this module does the best it can with calls to persist data, but it
- * can only guarantee that the data is passed to the drive. It is up to the
- * drive manufacturers to do the actual persistence properly, which they often
- * don't (especially on consumer-grade hardware). Therefore, it is up to the
- * user to validate their entire storage stack, to ensure the writes are
- * persistent.
- * Corollary: especially when dealing with larger amounts of money, it is best
- * practice to have multiple channel data backups and not rely only on one
- * FilesystemPersister.
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class FilesystemPersister extends CommonBase {
-       FilesystemPersister(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.FilesystemPersister_free(ptr); }
-       }
-
-       /**
-        * Initialize a new FilesystemPersister and set the path to the individual channels'
-        * files.
-        */
-       public static FilesystemPersister of(java.lang.String path_to_channel_data) {
-               long ret = bindings.FilesystemPersister_new(path_to_channel_data);
-               Reference.reachabilityFence(path_to_channel_data);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.FilesystemPersister ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.FilesystemPersister(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Get the directory which was provided when this persister was initialized.
-        */
-       public String get_data_dir() {
-               String ret = bindings.FilesystemPersister_get_data_dir(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Read `ChannelMonitor`s from disk.
-        */
-       public Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ read_channelmonitors(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.SignerProvider signer_provider) {
-               long ret = bindings.FilesystemPersister_read_channelmonitors(this.ptr, entropy_source.ptr, signer_provider.ptr);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(entropy_source);
-               Reference.reachabilityFence(signer_provider);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ ret_hu_conv = Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.constr_from_ptr(ret);
-               if (this != null) { this.ptrs_to.add(entropy_source); };
-               if (this != null) { this.ptrs_to.add(signer_provider); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/FilesystemStore.java b/src/main/java/org/ldk/structs/FilesystemStore.java
new file mode 100644 (file)
index 0000000..898f790
--- /dev/null
@@ -0,0 +1,57 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A [`KVStore`] implementation that writes to and reads from the file system.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class FilesystemStore extends CommonBase {
+       FilesystemStore(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.FilesystemStore_free(ptr); }
+       }
+
+       /**
+        * Constructs a new [`FilesystemStore`].
+        */
+       public static FilesystemStore of(java.lang.String data_dir) {
+               long ret = bindings.FilesystemStore_new(data_dir);
+               Reference.reachabilityFence(data_dir);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.FilesystemStore ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.FilesystemStore(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Returns the data directory.
+        */
+       public String get_data_dir() {
+               String ret = bindings.FilesystemStore_get_data_dir(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Constructs a new KVStore which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned KVStore must be freed before this_arg is
+        */
+       public KVStore as_KVStore() {
+               long ret = bindings.FilesystemStore_as_KVStore(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               KVStore ret_hu_conv = new KVStore(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
index 213ab4d490344e5e442a7682493a50720399cc19..3a3084143edf582c3271eabb67be99ec4e5b3142 100644 (file)
@@ -9,7 +9,7 @@ import javax.annotation.Nullable;
 
 
 /**
- * [`Score`] implementation that uses a fixed penalty.
+ * [`ScoreLookUp`] implementation that uses a fixed penalty.
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class FixedPenaltyScorer extends CommonBase {
@@ -51,14 +51,27 @@ public class FixedPenaltyScorer extends CommonBase {
        }
 
        /**
-        * Constructs a new Score which calls the relevant methods on this_arg.
-        * This copies the `inner` pointer in this_arg and thus the returned Score must be freed before this_arg is
+        * Constructs a new ScoreLookUp which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreLookUp must be freed before this_arg is
         */
-       public Score as_Score() {
-               long ret = bindings.FixedPenaltyScorer_as_Score(this.ptr);
+       public ScoreLookUp as_ScoreLookUp() {
+               long ret = bindings.FixedPenaltyScorer_as_ScoreLookUp(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Score ret_hu_conv = new Score(null, ret);
+               ScoreLookUp ret_hu_conv = new ScoreLookUp(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new ScoreUpdate which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreUpdate must be freed before this_arg is
+        */
+       public ScoreUpdate as_ScoreUpdate() {
+               long ret = bindings.FixedPenaltyScorer_as_ScoreUpdate(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ScoreUpdate ret_hu_conv = new ScoreUpdate(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
diff --git a/src/main/java/org/ldk/structs/ForwardNode.java b/src/main/java/org/ldk/structs/ForwardNode.java
new file mode 100644 (file)
index 0000000..f57432a
--- /dev/null
@@ -0,0 +1,116 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An intermediate node, its outbound channel, and relay parameters.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ForwardNode extends CommonBase {
+       ForwardNode(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.ForwardNode_free(ptr); }
+       }
+
+       /**
+        * The TLVs for this node's [`BlindedHop`], where the fee parameters contained within are also
+        * used for [`BlindedPayInfo`] construction.
+        */
+       public ForwardTlvs get_tlvs() {
+               long ret = bindings.ForwardNode_get_tlvs(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ForwardTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardTlvs(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The TLVs for this node's [`BlindedHop`], where the fee parameters contained within are also
+        * used for [`BlindedPayInfo`] construction.
+        */
+       public void set_tlvs(org.ldk.structs.ForwardTlvs val) {
+               bindings.ForwardNode_set_tlvs(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       /**
+        * This node's pubkey.
+        */
+       public byte[] get_node_id() {
+               byte[] ret = bindings.ForwardNode_get_node_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * This node's pubkey.
+        */
+       public void set_node_id(byte[] val) {
+               bindings.ForwardNode_set_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The maximum value, in msat, that may be accepted by this node.
+        */
+       public long get_htlc_maximum_msat() {
+               long ret = bindings.ForwardNode_get_htlc_maximum_msat(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The maximum value, in msat, that may be accepted by this node.
+        */
+       public void set_htlc_maximum_msat(long val) {
+               bindings.ForwardNode_set_htlc_maximum_msat(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new ForwardNode given each field
+        */
+       public static ForwardNode of(org.ldk.structs.ForwardTlvs tlvs_arg, byte[] node_id_arg, long htlc_maximum_msat_arg) {
+               long ret = bindings.ForwardNode_new(tlvs_arg == null ? 0 : tlvs_arg.ptr, InternalUtils.check_arr_len(node_id_arg, 33), htlc_maximum_msat_arg);
+               Reference.reachabilityFence(tlvs_arg);
+               Reference.reachabilityFence(node_id_arg);
+               Reference.reachabilityFence(htlc_maximum_msat_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardNode(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(tlvs_arg); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.ForwardNode_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ForwardNode
+        */
+       public ForwardNode clone() {
+               long ret = bindings.ForwardNode_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ForwardNode ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardNode(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/ForwardTlvs.java b/src/main/java/org/ldk/structs/ForwardTlvs.java
new file mode 100644 (file)
index 0000000..0dcc106
--- /dev/null
@@ -0,0 +1,158 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Data to construct a [`BlindedHop`] for forwarding a payment.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ForwardTlvs extends CommonBase {
+       ForwardTlvs(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.ForwardTlvs_free(ptr); }
+       }
+
+       /**
+        * The short channel id this payment should be forwarded out over.
+        */
+       public long get_short_channel_id() {
+               long ret = bindings.ForwardTlvs_get_short_channel_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The short channel id this payment should be forwarded out over.
+        */
+       public void set_short_channel_id(long val) {
+               bindings.ForwardTlvs_set_short_channel_id(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Payment parameters for relaying over [`Self::short_channel_id`].
+        */
+       public PaymentRelay get_payment_relay() {
+               long ret = bindings.ForwardTlvs_get_payment_relay(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentRelay ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentRelay(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Payment parameters for relaying over [`Self::short_channel_id`].
+        */
+       public void set_payment_relay(org.ldk.structs.PaymentRelay val) {
+               bindings.ForwardTlvs_set_payment_relay(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       /**
+        * Payment constraints for relaying over [`Self::short_channel_id`].
+        */
+       public PaymentConstraints get_payment_constraints() {
+               long ret = bindings.ForwardTlvs_get_payment_constraints(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentConstraints ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentConstraints(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Payment constraints for relaying over [`Self::short_channel_id`].
+        */
+       public void set_payment_constraints(org.ldk.structs.PaymentConstraints val) {
+               bindings.ForwardTlvs_set_payment_constraints(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       /**
+        * Supported and required features when relaying a payment onion containing this object's
+        * corresponding [`BlindedHop::encrypted_payload`].
+        * 
+        * [`BlindedHop::encrypted_payload`]: crate::blinded_path::BlindedHop::encrypted_payload
+        */
+       public BlindedHopFeatures get_features() {
+               long ret = bindings.ForwardTlvs_get_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.BlindedHopFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.BlindedHopFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Supported and required features when relaying a payment onion containing this object's
+        * corresponding [`BlindedHop::encrypted_payload`].
+        * 
+        * [`BlindedHop::encrypted_payload`]: crate::blinded_path::BlindedHop::encrypted_payload
+        */
+       public void set_features(org.ldk.structs.BlindedHopFeatures val) {
+               bindings.ForwardTlvs_set_features(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       /**
+        * Constructs a new ForwardTlvs given each field
+        */
+       public static ForwardTlvs of(long short_channel_id_arg, org.ldk.structs.PaymentRelay payment_relay_arg, org.ldk.structs.PaymentConstraints payment_constraints_arg, org.ldk.structs.BlindedHopFeatures features_arg) {
+               long ret = bindings.ForwardTlvs_new(short_channel_id_arg, payment_relay_arg == null ? 0 : payment_relay_arg.ptr, payment_constraints_arg == null ? 0 : payment_constraints_arg.ptr, features_arg == null ? 0 : features_arg.ptr);
+               Reference.reachabilityFence(short_channel_id_arg);
+               Reference.reachabilityFence(payment_relay_arg);
+               Reference.reachabilityFence(payment_constraints_arg);
+               Reference.reachabilityFence(features_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ForwardTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardTlvs(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_relay_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_constraints_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(features_arg); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.ForwardTlvs_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ForwardTlvs
+        */
+       public ForwardTlvs clone() {
+               long ret = bindings.ForwardTlvs_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ForwardTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ForwardTlvs(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the ForwardTlvs object into a byte array which can be read by ForwardTlvs_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.ForwardTlvs_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+}
index 91319a3bd51215376639bb915d6a9a2f0a828faf..50fddf0c76d71273a5a1a881fddfca842be4532f 100644 (file)
@@ -112,11 +112,11 @@ public class HTLCDescriptor extends CommonBase {
         * The preimage, if `Some`, to claim the HTLC output with. If `None`, the timeout path must be
         * taken.
         */
-       public Option_PaymentPreimageZ get_preimage() {
+       public Option_ThirtyTwoBytesZ get_preimage() {
                long ret = bindings.HTLCDescriptor_get_preimage(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentPreimageZ ret_hu_conv = org.ldk.structs.Option_PaymentPreimageZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -125,7 +125,7 @@ public class HTLCDescriptor extends CommonBase {
         * The preimage, if `Some`, to claim the HTLC output with. If `None`, the timeout path must be
         * taken.
         */
-       public void set_preimage(org.ldk.structs.Option_PaymentPreimageZ val) {
+       public void set_preimage(org.ldk.structs.Option_ThirtyTwoBytesZ val) {
                bindings.HTLCDescriptor_set_preimage(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -185,6 +185,26 @@ public class HTLCDescriptor extends CommonBase {
                if (!(o instanceof HTLCDescriptor)) return false;
                return this.eq((HTLCDescriptor)o);
        }
+       /**
+        * Serialize the HTLCDescriptor object into a byte array which can be read by HTLCDescriptor_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.HTLCDescriptor_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a HTLCDescriptor from a byte array, created by HTLCDescriptor_write
+        */
+       public static Result_HTLCDescriptorDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.HTLCDescriptor_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HTLCDescriptorDecodeErrorZ ret_hu_conv = Result_HTLCDescriptorDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Returns the outpoint of the HTLC output in the commitment transaction. This is the outpoint
         * being spent by the HTLC input in the HTLC transaction.
index 060c60c03541993a1cfcbc15903e4304819f2f3b..be812ad1db7f4f1892499c1d929288b331de9829 100644 (file)
@@ -174,8 +174,12 @@ public class InMemorySigner extends CommonBase {
        /**
         * Returns the counterparty's pubkeys.
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
+       @Nullable
        public ChannelPublicKeys counterparty_pubkeys() {
                long ret = bindings.InMemorySigner_counterparty_pubkeys(this.ptr);
                Reference.reachabilityFence(this);
@@ -190,12 +194,16 @@ public class InMemorySigner extends CommonBase {
         * transactions, i.e., the amount of time that we have to wait to recover our funds if we
         * broadcast a transaction.
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
         */
-       public short counterparty_selected_contest_delay() {
-               short ret = bindings.InMemorySigner_counterparty_selected_contest_delay(this.ptr);
+       public Option_u16Z counterparty_selected_contest_delay() {
+               long ret = bindings.InMemorySigner_counterparty_selected_contest_delay(this.ptr);
                Reference.reachabilityFence(this);
-               return ret;
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u16Z ret_hu_conv = org.ldk.structs.Option_u16Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
        }
 
        /**
@@ -203,30 +211,42 @@ public class InMemorySigner extends CommonBase {
         * by our counterparty, i.e., the amount of time that they have to wait to recover their funds
         * if they broadcast a transaction.
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
         */
-       public short holder_selected_contest_delay() {
-               short ret = bindings.InMemorySigner_holder_selected_contest_delay(this.ptr);
+       public Option_u16Z holder_selected_contest_delay() {
+               long ret = bindings.InMemorySigner_holder_selected_contest_delay(this.ptr);
                Reference.reachabilityFence(this);
-               return ret;
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u16Z ret_hu_conv = org.ldk.structs.Option_u16Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
        }
 
        /**
         * Returns whether the holder is the initiator.
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
         */
-       public boolean is_outbound() {
-               boolean ret = bindings.InMemorySigner_is_outbound(this.ptr);
+       public Option_boolZ is_outbound() {
+               long ret = bindings.InMemorySigner_is_outbound(this.ptr);
                Reference.reachabilityFence(this);
-               return ret;
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_boolZ ret_hu_conv = org.ldk.structs.Option_boolZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
        }
 
        /**
         * Funding outpoint
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
+       @Nullable
        public OutPoint funding_outpoint() {
                long ret = bindings.InMemorySigner_funding_outpoint(this.ptr);
                Reference.reachabilityFence(this);
@@ -240,8 +260,12 @@ public class InMemorySigner extends CommonBase {
         * Returns a [`ChannelTransactionParameters`] for this channel, to be used when verifying or
         * building transactions.
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
+       @Nullable
        public ChannelTransactionParameters get_channel_parameters() {
                long ret = bindings.InMemorySigner_get_channel_parameters(this.ptr);
                Reference.reachabilityFence(this);
@@ -255,8 +279,12 @@ public class InMemorySigner extends CommonBase {
         * Returns the channel type features of the channel parameters. Should be helpful for
         * determining a channel's category, i. e. legacy/anchors/taproot/etc.
         * 
-        * Will panic if [`ChannelSigner::provide_channel_parameters`] has not been called before.
+        * Will return `None` if [`ChannelSigner::provide_channel_parameters`] has not been called.
+        * In general, this is safe to `unwrap` only in [`ChannelSigner`] implementation.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
+       @Nullable
        public ChannelTypeFeatures channel_type_features() {
                long ret = bindings.InMemorySigner_channel_type_features(this.ptr);
                Reference.reachabilityFence(this);
index 135adca35810b839b0658fc26013736c1a3e4a1c..da5281f593082ddd13e6f0597bff71acec3a63c3 100644 (file)
@@ -51,11 +51,11 @@ public class Init extends CommonBase {
         * 
         * Returns a copy of the field.
         */
-       public Option_CVec_ChainHashZZ get_networks() {
+       public Option_CVec_ThirtyTwoBytesZZ get_networks() {
                long ret = bindings.Init_get_networks(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_ChainHashZZ ret_hu_conv = org.ldk.structs.Option_CVec_ChainHashZZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -65,7 +65,7 @@ public class Init extends CommonBase {
         * 
         * If there are no common chains, the connection will be closed.
         */
-       public void set_networks(org.ldk.structs.Option_CVec_ChainHashZZ val) {
+       public void set_networks(org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ val) {
                bindings.Init_set_networks(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -80,11 +80,11 @@ public class Init extends CommonBase {
         * public IPv4 address (NAT) and use that for a [`NodeAnnouncement`] update message containing
         * the new address.
         */
-       public Option_NetAddressZ get_remote_network_address() {
+       public Option_SocketAddressZ get_remote_network_address() {
                long ret = bindings.Init_get_remote_network_address(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_NetAddressZ ret_hu_conv = org.ldk.structs.Option_NetAddressZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_SocketAddressZ ret_hu_conv = org.ldk.structs.Option_SocketAddressZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -97,7 +97,7 @@ public class Init extends CommonBase {
         * public IPv4 address (NAT) and use that for a [`NodeAnnouncement`] update message containing
         * the new address.
         */
-       public void set_remote_network_address(org.ldk.structs.Option_NetAddressZ val) {
+       public void set_remote_network_address(org.ldk.structs.Option_SocketAddressZ val) {
                bindings.Init_set_remote_network_address(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -107,7 +107,7 @@ public class Init extends CommonBase {
        /**
         * Constructs a new Init given each field
         */
-       public static Init of(org.ldk.structs.InitFeatures features_arg, org.ldk.structs.Option_CVec_ChainHashZZ networks_arg, org.ldk.structs.Option_NetAddressZ remote_network_address_arg) {
+       public static Init of(org.ldk.structs.InitFeatures features_arg, org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ networks_arg, org.ldk.structs.Option_SocketAddressZ remote_network_address_arg) {
                long ret = bindings.Init_new(features_arg == null ? 0 : features_arg.ptr, networks_arg.ptr, remote_network_address_arg.ptr);
                Reference.reachabilityFence(features_arg);
                Reference.reachabilityFence(networks_arg);
index 8e962ddcddf287f9c209a7d1e5889b386ae5f6a2..9ec8bab0ef18a274d575420c032ac640d9d52f61 100644 (file)
@@ -87,6 +87,42 @@ public class InitFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.InitFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.InitFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
@@ -542,6 +578,40 @@ public class InitFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Set this feature as optional.
+        */
+       public void set_taproot_optional() {
+               bindings.InitFeatures_set_taproot_optional(this.ptr);
+               Reference.reachabilityFence(this);
+       }
+
+       /**
+        * Set this feature as required.
+        */
+       public void set_taproot_required() {
+               bindings.InitFeatures_set_taproot_required(this.ptr);
+               Reference.reachabilityFence(this);
+       }
+
+       /**
+        * Checks if this feature is supported.
+        */
+       public boolean supports_taproot() {
+               boolean ret = bindings.InitFeatures_supports_taproot(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Checks if this feature is required.
+        */
+       public boolean requires_taproot() {
+               boolean ret = bindings.InitFeatures_requires_taproot(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Set this feature as optional.
         */
index 8b996d41e95354dcf4e323f59d1151c2f24d4670..0ac16f01bfa3ae377e3d899d0156620d14245290 100644 (file)
@@ -80,8 +80,10 @@ public class InvoiceError extends CommonBase {
 
        /**
         * Constructs a new InvoiceError given each field
+        * 
+        * Note that erroneous_field_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static InvoiceError of(org.ldk.structs.ErroneousField erroneous_field_arg, org.ldk.structs.UntrustedString message_arg) {
+       public static InvoiceError of(@Nullable org.ldk.structs.ErroneousField erroneous_field_arg, org.ldk.structs.UntrustedString message_arg) {
                long ret = bindings.InvoiceError_new(erroneous_field_arg == null ? 0 : erroneous_field_arg.ptr, message_arg == null ? 0 : message_arg.ptr);
                Reference.reachabilityFence(erroneous_field_arg);
                Reference.reachabilityFence(message_arg);
index 8fed3238317c5d8f2c7a22f78c34b4ceb9e74230..2706e52dd88bc3b09a03951156ae8eeb40725c7a 100644 (file)
@@ -44,14 +44,147 @@ public class InvoiceRequest extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * The chains that may be used when paying a requested invoice (e.g., bitcoin mainnet).
+        * Payments must be denominated in units of the minimal lightning-payable unit (e.g., msats)
+        * for the selected chain.
+        */
+       public byte[][] chains() {
+               byte[][] ret = bindings.InvoiceRequest_chains(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Opaque bytes set by the originator. Useful for authentication and validating fields since it
+        * is reflected in `invoice_request` messages along with all the other fields from the `offer`.
+        */
+       public Option_CVec_u8ZZ metadata() {
+               long ret = bindings.InvoiceRequest_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The minimum amount required for a successful payment of a single item.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Amount amount() {
+               long ret = bindings.InvoiceRequest_amount(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Amount ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Amount(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A complete description of the purpose of the payment. Intended to be displayed to the user
+        * but with the caveat that it has not been verified in any way.
+        */
+       public PrintableString description() {
+               long ret = bindings.InvoiceRequest_description(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to the offer.
+        */
+       public OfferFeatures offer_features() {
+               long ret = bindings.InvoiceRequest_offer_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OfferFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Duration since the Unix epoch when an invoice should no longer be requested.
+        * 
+        * If `None`, the offer does not expire.
+        */
+       public Option_u64Z absolute_expiry() {
+               long ret = bindings.InvoiceRequest_absolute_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The issuer of the offer, possibly beginning with `user@domain` or `domain`. Intended to be
+        * displayed to the user but with the caveat that it has not been verified in any way.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString issuer() {
+               long ret = bindings.InvoiceRequest_issuer(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
+        * recipient privacy by obfuscating its node id.
+        */
+       public BlindedPath[] paths() {
+               long[] ret = bindings.InvoiceRequest_paths(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_13_len = ret.length;
+               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
+               for (int n = 0; n < ret_conv_13_len; n++) {
+                       long ret_conv_13 = ret[n];
+                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
+                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.add(this); };
+                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               }
+               return ret_conv_13_arr;
+       }
+
+       /**
+        * The quantity of items supported.
+        */
+       public Quantity supported_quantity() {
+               long ret = bindings.InvoiceRequest_supported_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Quantity ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Quantity(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The public key used by the recipient to sign invoices.
+        */
+       public byte[] signing_pubkey() {
+               byte[] ret = bindings.InvoiceRequest_signing_pubkey(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * An unpredictable series of bytes, typically containing information about the derivation of
         * [`payer_id`].
         * 
         * [`payer_id`]: Self::payer_id
         */
-       public byte[] metadata() {
-               byte[] ret = bindings.InvoiceRequest_metadata(this.ptr);
+       public byte[] payer_metadata() {
+               byte[] ret = bindings.InvoiceRequest_payer_metadata(this.ptr);
                Reference.reachabilityFence(this);
                return ret;
        }
@@ -83,8 +216,8 @@ public class InvoiceRequest extends CommonBase {
        /**
         * Features pertaining to requesting an invoice.
         */
-       public InvoiceRequestFeatures features() {
-               long ret = bindings.InvoiceRequest_features(this.ptr);
+       public InvoiceRequestFeatures invoice_request_features() {
+               long ret = bindings.InvoiceRequest_invoice_request_features(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.InvoiceRequestFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceRequestFeatures(null, ret); }
@@ -130,19 +263,31 @@ public class InvoiceRequest extends CommonBase {
        }
 
        /**
-        * Verifies that the request was for an offer created using the given key. Returns the derived
-        * keys need to sign an [`Bolt12Invoice`] for the request if they could be extracted from the
-        * metadata.
+        * Signature of the invoice request using [`payer_id`].
+        * 
+        * [`payer_id`]: Self::payer_id
+        */
+       public byte[] signature() {
+               byte[] ret = bindings.InvoiceRequest_signature(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Verifies that the request was for an offer created using the given key. Returns the verified
+        * request which contains the derived keys needed to sign a [`Bolt12Invoice`] for the request
+        * if they could be extracted from the metadata.
         * 
         * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
         */
-       public Result_COption_KeyPairZNoneZ verify(org.ldk.structs.ExpandedKey key) {
+       public Result_VerifiedInvoiceRequestNoneZ verify(org.ldk.structs.ExpandedKey key) {
                long ret = bindings.InvoiceRequest_verify(this.ptr, key == null ? 0 : key.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(key);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_KeyPairZNoneZ ret_hu_conv = Result_COption_KeyPairZNoneZ.constr_from_ptr(ret);
+               Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(key); };
+               if (this != null) { this.ptrs_to.add(this); };
                return ret_hu_conv;
        }
 
index 775264c9f56ff4a190131312df2782aedb6578a0..ecc7d0b820ebade55bfa263b2609da0020c73e2c 100644 (file)
@@ -87,6 +87,42 @@ public class InvoiceRequestFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.InvoiceRequestFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.InvoiceRequestFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
diff --git a/src/main/java/org/ldk/structs/KVStore.java b/src/main/java/org/ldk/structs/KVStore.java
new file mode 100644 (file)
index 0000000..ed39c4d
--- /dev/null
@@ -0,0 +1,219 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+/**
+ * Provides an interface that allows storage and retrieval of persisted values that are associated
+ * with given keys.
+ * 
+ * In order to avoid collisions the key space is segmented based on the given `primary_namespace`s
+ * and `secondary_namespace`s. Implementations of this trait are free to handle them in different
+ * ways, as long as per-namespace key uniqueness is asserted.
+ * 
+ * Keys and namespaces are required to be valid ASCII strings in the range of
+ * [`KVSTORE_NAMESPACE_KEY_ALPHABET`] and no longer than [`KVSTORE_NAMESPACE_KEY_MAX_LEN`]. Empty
+ * primary namespaces and secondary namespaces (`\"\"`) are assumed to be a valid, however, if
+ * `primary_namespace` is empty, `secondary_namespace` is required to be empty, too. This means
+ * that concerns should always be separated by primary namespace first, before secondary
+ * namespaces are used. While the number of primary namespaces will be relatively small and is
+ * determined at compile time, there may be many secondary namespaces per primary namespace. Note
+ * that per-namespace uniqueness needs to also hold for keys *and* namespaces in any given
+ * namespace, i.e., conflicts between keys and equally named
+ * primary namespaces/secondary namespaces must be avoided.
+ * 
+ * Note:** Users migrating custom persistence backends from the pre-v0.0.117 `KVStorePersister`
+ * interface can use a concatenation of `[{primary_namespace}/[{secondary_namespace}/]]{key}` to
+ * recover a `key` compatible with the data model previously assumed by `KVStorePersister::persist`.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class KVStore extends CommonBase {
+       final bindings.LDKKVStore bindings_instance;
+       KVStore(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
+       private KVStore(bindings.LDKKVStore arg) {
+               super(bindings.LDKKVStore_new(arg));
+               this.ptrs_to.add(arg);
+               this.bindings_instance = arg;
+       }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.KVStore_free(ptr); } super.finalize();
+       }
+       /**
+        * Destroys the object, freeing associated resources. After this call, any access
+        * to this object may result in a SEGFAULT or worse.
+        *
+        * You should generally NEVER call this method. You should let the garbage collector
+        * do this for you when it finalizes objects. However, it may be useful for types
+        * which represent locks and should be closed immediately to avoid holding locks
+        * until the GC runs.
+        */
+       public void destroy() {
+               if (ptr != 0) { bindings.KVStore_free(ptr); }
+               ptr = 0;
+       }
+       public static interface KVStoreInterface {
+               /**
+                * Returns the data stored for the given `primary_namespace`, `secondary_namespace`, and
+                * `key`.
+                * 
+                * Returns an [`ErrorKind::NotFound`] if the given `key` could not be found in the given
+                * `primary_namespace` and `secondary_namespace`.
+                * 
+                * [`ErrorKind::NotFound`]: io::ErrorKind::NotFound
+                */
+               Result_CVec_u8ZIOErrorZ read(String primary_namespace, String secondary_namespace, String key);
+               /**
+                * Persists the given data under the given `key`.
+                * 
+                * Will create the given `primary_namespace` and `secondary_namespace` if not already present
+                * in the store.
+                */
+               Result_NoneIOErrorZ write(String primary_namespace, String secondary_namespace, String key, byte[] buf);
+               /**
+                * Removes any data that had previously been persisted under the given `key`.
+                * 
+                * If the `lazy` flag is set to `true`, the backend implementation might choose to lazily
+                * remove the given `key` at some point in time after the method returns, e.g., as part of an
+                * eventual batch deletion of multiple keys. As a consequence, subsequent calls to
+                * [`KVStore::list`] might include the removed key until the changes are actually persisted.
+                * 
+                * Note that while setting the `lazy` flag reduces the I/O burden of multiple subsequent
+                * `remove` calls, it also influences the atomicity guarantees as lazy `remove`s could
+                * potentially get lost on crash after the method returns. Therefore, this flag should only be
+                * set for `remove` operations that can be safely replayed at a later time.
+                * 
+                * Returns successfully if no data will be stored for the given `primary_namespace`,
+                * `secondary_namespace`, and `key`, independently of whether it was present before its
+                * invokation or not.
+                */
+               Result_NoneIOErrorZ remove(String primary_namespace, String secondary_namespace, String key, boolean lazy);
+               /**
+                * Returns a list of keys that are stored under the given `secondary_namespace` in
+                * `primary_namespace`.
+                * 
+                * Returns the keys in arbitrary order, so users requiring a particular order need to sort the
+                * returned keys. Returns an empty list if `primary_namespace` or `secondary_namespace` is unknown.
+                */
+               Result_CVec_StrZIOErrorZ list(String primary_namespace, String secondary_namespace);
+       }
+       private static class LDKKVStoreHolder { KVStore held; }
+       public static KVStore new_impl(KVStoreInterface arg) {
+               final LDKKVStoreHolder impl_holder = new LDKKVStoreHolder();
+               impl_holder.held = new KVStore(new bindings.LDKKVStore() {
+                       @Override public long read(String primary_namespace, String secondary_namespace, String key) {
+                               Result_CVec_u8ZIOErrorZ ret = arg.read(primary_namespace, secondary_namespace, key);
+                               Reference.reachabilityFence(arg);
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
+                       }
+                       @Override public long write(String primary_namespace, String secondary_namespace, String key, byte[] buf) {
+                               Result_NoneIOErrorZ ret = arg.write(primary_namespace, secondary_namespace, key, buf);
+                               Reference.reachabilityFence(arg);
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
+                       }
+                       @Override public long remove(String primary_namespace, String secondary_namespace, String key, boolean lazy) {
+                               Result_NoneIOErrorZ ret = arg.remove(primary_namespace, secondary_namespace, key, lazy);
+                               Reference.reachabilityFence(arg);
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
+                       }
+                       @Override public long list(String primary_namespace, String secondary_namespace) {
+                               Result_CVec_StrZIOErrorZ ret = arg.list(primary_namespace, secondary_namespace);
+                               Reference.reachabilityFence(arg);
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
+                       }
+               });
+               return impl_holder.held;
+       }
+       /**
+        * Returns the data stored for the given `primary_namespace`, `secondary_namespace`, and
+        * `key`.
+        * 
+        * Returns an [`ErrorKind::NotFound`] if the given `key` could not be found in the given
+        * `primary_namespace` and `secondary_namespace`.
+        * 
+        * [`ErrorKind::NotFound`]: io::ErrorKind::NotFound
+        */
+       public Result_CVec_u8ZIOErrorZ read(java.lang.String primary_namespace, java.lang.String secondary_namespace, java.lang.String key) {
+               long ret = bindings.KVStore_read(this.ptr, primary_namespace, secondary_namespace, key);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(primary_namespace);
+               Reference.reachabilityFence(secondary_namespace);
+               Reference.reachabilityFence(key);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZIOErrorZ ret_hu_conv = Result_CVec_u8ZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Persists the given data under the given `key`.
+        * 
+        * Will create the given `primary_namespace` and `secondary_namespace` if not already present
+        * in the store.
+        */
+       public Result_NoneIOErrorZ write(java.lang.String primary_namespace, java.lang.String secondary_namespace, java.lang.String key, byte[] buf) {
+               long ret = bindings.KVStore_write(this.ptr, primary_namespace, secondary_namespace, key, buf);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(primary_namespace);
+               Reference.reachabilityFence(secondary_namespace);
+               Reference.reachabilityFence(key);
+               Reference.reachabilityFence(buf);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Removes any data that had previously been persisted under the given `key`.
+        * 
+        * If the `lazy` flag is set to `true`, the backend implementation might choose to lazily
+        * remove the given `key` at some point in time after the method returns, e.g., as part of an
+        * eventual batch deletion of multiple keys. As a consequence, subsequent calls to
+        * [`KVStore::list`] might include the removed key until the changes are actually persisted.
+        * 
+        * Note that while setting the `lazy` flag reduces the I/O burden of multiple subsequent
+        * `remove` calls, it also influences the atomicity guarantees as lazy `remove`s could
+        * potentially get lost on crash after the method returns. Therefore, this flag should only be
+        * set for `remove` operations that can be safely replayed at a later time.
+        * 
+        * Returns successfully if no data will be stored for the given `primary_namespace`,
+        * `secondary_namespace`, and `key`, independently of whether it was present before its
+        * invokation or not.
+        */
+       public Result_NoneIOErrorZ remove(java.lang.String primary_namespace, java.lang.String secondary_namespace, java.lang.String key, boolean lazy) {
+               long ret = bindings.KVStore_remove(this.ptr, primary_namespace, secondary_namespace, key, lazy);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(primary_namespace);
+               Reference.reachabilityFence(secondary_namespace);
+               Reference.reachabilityFence(key);
+               Reference.reachabilityFence(lazy);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Returns a list of keys that are stored under the given `secondary_namespace` in
+        * `primary_namespace`.
+        * 
+        * Returns the keys in arbitrary order, so users requiring a particular order need to sort the
+        * returned keys. Returns an empty list if `primary_namespace` or `secondary_namespace` is unknown.
+        */
+       public Result_CVec_StrZIOErrorZ list(java.lang.String primary_namespace, java.lang.String secondary_namespace) {
+               long ret = bindings.KVStore_list(this.ptr, primary_namespace, secondary_namespace);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(primary_namespace);
+               Reference.reachabilityFence(secondary_namespace);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_StrZIOErrorZ ret_hu_conv = Result_CVec_StrZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index f3cecf91355207c50a0a2e1ef95704d9a5d5f3d6..02fcf7115d0ca74e49a071d6c62f309a20b9ba62 100644 (file)
@@ -95,13 +95,13 @@ public class KeysManager extends CommonBase {
         * May panic if the [`SpendableOutputDescriptor`]s were not generated by channels which used
         * this [`KeysManager`] or one of the [`InMemorySigner`] created by this [`KeysManager`].
         */
-       public Result_PartiallySignedTransactionNoneZ sign_spendable_outputs_psbt(SpendableOutputDescriptor[] descriptors, byte[] psbt) {
+       public Result_CVec_u8ZNoneZ sign_spendable_outputs_psbt(SpendableOutputDescriptor[] descriptors, byte[] psbt) {
                long ret = bindings.KeysManager_sign_spendable_outputs_psbt(this.ptr, descriptors != null ? Arrays.stream(descriptors).mapToLong(descriptors_conv_27 -> descriptors_conv_27.ptr).toArray() : null, psbt);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(descriptors);
                Reference.reachabilityFence(psbt);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PartiallySignedTransactionNoneZ ret_hu_conv = Result_PartiallySignedTransactionNoneZ.constr_from_ptr(ret);
+               Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
                for (SpendableOutputDescriptor descriptors_conv_27: descriptors) { if (this != null) { this.ptrs_to.add(descriptors_conv_27); }; };
                return ret_hu_conv;
        }
@@ -125,7 +125,7 @@ public class KeysManager extends CommonBase {
         * May panic if the [`SpendableOutputDescriptor`]s were not generated by channels which used
         * this [`KeysManager`] or one of the [`InMemorySigner`] created by this [`KeysManager`].
         */
-       public Result_TransactionNoneZ spend_spendable_outputs(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_PackedLockTimeZ locktime) {
+       public Result_TransactionNoneZ spend_spendable_outputs(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_u32Z locktime) {
                long ret = bindings.KeysManager_spend_spendable_outputs(this.ptr, descriptors != null ? Arrays.stream(descriptors).mapToLong(descriptors_conv_27 -> descriptors_conv_27.ptr).toArray() : null, outputs != null ? Arrays.stream(outputs).mapToLong(outputs_conv_7 -> outputs_conv_7.ptr).toArray() : null, change_destination_script, feerate_sat_per_1000_weight, locktime.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(descriptors);
index a8cc6788bd2e48d7c11af3d0856bea5ba51e9410..4a03833cdf448cb9ba6f60444bf9baf642f9fa57 100644 (file)
@@ -10,10 +10,10 @@ import javax.annotation.Nullable;
 /**
  * A scorer that is accessed under a lock.
  * 
- * Needed so that calls to [`Score::channel_penalty_msat`] in [`find_route`] can be made while
- * having shared ownership of a scorer but without requiring internal locking in [`Score`]
+ * Needed so that calls to [`ScoreLookUp::channel_penalty_msat`] in [`find_route`] can be made while
+ * having shared ownership of a scorer but without requiring internal locking in [`ScoreUpdate`]
  * implementations. Internal locking would be detrimental to route finding performance and could
- * result in [`Score::channel_penalty_msat`] returning a different value for the same channel.
+ * result in [`ScoreLookUp::channel_penalty_msat`] returning a different value for the same channel.
  * 
  * [`find_route`]: crate::routing::router::find_route
  */
@@ -45,16 +45,27 @@ public class LockableScore extends CommonBase {
        }
        public static interface LockableScoreInterface {
                /**
-                * Returns the locked scorer.
+                * Returns read locked scorer.
                 */
-               Score lock();
+               ScoreLookUp read_lock();
+               /**
+                * Returns write locked scorer.
+                */
+               ScoreUpdate write_lock();
        }
        private static class LDKLockableScoreHolder { LockableScore held; }
        public static LockableScore new_impl(LockableScoreInterface arg) {
                final LDKLockableScoreHolder impl_holder = new LDKLockableScoreHolder();
                impl_holder.held = new LockableScore(new bindings.LDKLockableScore() {
-                       @Override public long lock() {
-                               Score ret = arg.lock();
+                       @Override public long read_lock() {
+                               ScoreLookUp ret = arg.read_lock();
+                               Reference.reachabilityFence(arg);
+                               long result = ret.ptr;
+                               if (impl_holder.held != null) { impl_holder.held.ptrs_to.add(ret); };
+                               return result;
+                       }
+                       @Override public long write_lock() {
+                               ScoreUpdate ret = arg.write_lock();
                                Reference.reachabilityFence(arg);
                                long result = ret.ptr;
                                if (impl_holder.held != null) { impl_holder.held.ptrs_to.add(ret); };
@@ -64,13 +75,25 @@ public class LockableScore extends CommonBase {
                return impl_holder.held;
        }
        /**
-        * Returns the locked scorer.
+        * Returns read locked scorer.
+        */
+       public ScoreLookUp read_lock() {
+               long ret = bindings.LockableScore_read_lock(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ScoreLookUp ret_hu_conv = new ScoreLookUp(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Returns write locked scorer.
         */
-       public Score lock() {
-               long ret = bindings.LockableScore_lock(this.ptr);
+       public ScoreUpdate write_lock() {
+               long ret = bindings.LockableScore_write_lock(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Score ret_hu_conv = new Score(null, ret);
+               ScoreUpdate ret_hu_conv = new ScoreUpdate(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
index f72bc0780b7727a65659227afae03679dee89307..b1d4575b3a9535aeb8405ae9df7bc650c8152e96 100644 (file)
@@ -431,12 +431,12 @@ public class MessageSendEvent extends CommonBase {
                /**
                 * The message which should be sent.
                */
-               public final org.ldk.structs.TxAddInput msg;
+               public final org.ldk.structs.TxAbort msg;
                private SendTxAbort(long ptr, bindings.LDKMessageSendEvent.SendTxAbort obj) {
                        super(null, ptr);
                        this.node_id = obj.node_id;
                        long msg = obj.msg;
-                       org.ldk.structs.TxAddInput msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.TxAddInput(null, msg); }
+                       org.ldk.structs.TxAbort msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new org.ldk.structs.TxAbort(null, msg); }
                        if (msg_hu_conv != null) { msg_hu_conv.ptrs_to.add(this); };
                        this.msg = msg_hu_conv;
                }
@@ -1034,7 +1034,7 @@ public class MessageSendEvent extends CommonBase {
        /**
         * Utility method to constructs a new SendTxAbort-variant MessageSendEvent
         */
-       public static MessageSendEvent send_tx_abort(byte[] node_id, org.ldk.structs.TxAddInput msg) {
+       public static MessageSendEvent send_tx_abort(byte[] node_id, org.ldk.structs.TxAbort msg) {
                long ret = bindings.MessageSendEvent_send_tx_abort(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr);
                Reference.reachabilityFence(node_id);
                Reference.reachabilityFence(msg);
index 72564a64c79f14c36400b99aa2c25d1cd54d1102..cb641761a580549e8254d8739299224db1cd7c3f 100644 (file)
@@ -24,15 +24,12 @@ public class MonitorEvent extends CommonBase {
                if (raw_val.getClass() == bindings.LDKMonitorEvent.HTLCEvent.class) {
                        return new HTLCEvent(ptr, (bindings.LDKMonitorEvent.HTLCEvent)raw_val);
                }
-               if (raw_val.getClass() == bindings.LDKMonitorEvent.CommitmentTxConfirmed.class) {
-                       return new CommitmentTxConfirmed(ptr, (bindings.LDKMonitorEvent.CommitmentTxConfirmed)raw_val);
+               if (raw_val.getClass() == bindings.LDKMonitorEvent.HolderForceClosed.class) {
+                       return new HolderForceClosed(ptr, (bindings.LDKMonitorEvent.HolderForceClosed)raw_val);
                }
                if (raw_val.getClass() == bindings.LDKMonitorEvent.Completed.class) {
                        return new Completed(ptr, (bindings.LDKMonitorEvent.Completed)raw_val);
                }
-               if (raw_val.getClass() == bindings.LDKMonitorEvent.UpdateFailed.class) {
-                       return new UpdateFailed(ptr, (bindings.LDKMonitorEvent.UpdateFailed)raw_val);
-               }
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
@@ -52,14 +49,14 @@ public class MonitorEvent extends CommonBase {
        /**
         * A monitor event that the Channel's commitment transaction was confirmed.
         */
-       public final static class CommitmentTxConfirmed extends MonitorEvent {
-               public final org.ldk.structs.OutPoint commitment_tx_confirmed;
-               private CommitmentTxConfirmed(long ptr, bindings.LDKMonitorEvent.CommitmentTxConfirmed obj) {
+       public final static class HolderForceClosed extends MonitorEvent {
+               public final org.ldk.structs.OutPoint holder_force_closed;
+               private HolderForceClosed(long ptr, bindings.LDKMonitorEvent.HolderForceClosed obj) {
                        super(null, ptr);
-                       long commitment_tx_confirmed = obj.commitment_tx_confirmed;
-                       org.ldk.structs.OutPoint commitment_tx_confirmed_hu_conv = null; if (commitment_tx_confirmed < 0 || commitment_tx_confirmed > 4096) { commitment_tx_confirmed_hu_conv = new org.ldk.structs.OutPoint(null, commitment_tx_confirmed); }
-                       if (commitment_tx_confirmed_hu_conv != null) { commitment_tx_confirmed_hu_conv.ptrs_to.add(this); };
-                       this.commitment_tx_confirmed = commitment_tx_confirmed_hu_conv;
+                       long holder_force_closed = obj.holder_force_closed;
+                       org.ldk.structs.OutPoint holder_force_closed_hu_conv = null; if (holder_force_closed < 0 || holder_force_closed > 4096) { holder_force_closed_hu_conv = new org.ldk.structs.OutPoint(null, holder_force_closed); }
+                       if (holder_force_closed_hu_conv != null) { holder_force_closed_hu_conv.ptrs_to.add(this); };
+                       this.holder_force_closed = holder_force_closed_hu_conv;
                }
        }
        /**
@@ -90,22 +87,6 @@ public class MonitorEvent extends CommonBase {
                        this.monitor_update_id = obj.monitor_update_id;
                }
        }
-       /**
-        * Indicates a [`ChannelMonitor`] update has failed. See
-        * [`ChannelMonitorUpdateStatus::PermanentFailure`] for more information on how this is used.
-        * 
-        * [`ChannelMonitorUpdateStatus::PermanentFailure`]: super::ChannelMonitorUpdateStatus::PermanentFailure
-        */
-       public final static class UpdateFailed extends MonitorEvent {
-               public final org.ldk.structs.OutPoint update_failed;
-               private UpdateFailed(long ptr, bindings.LDKMonitorEvent.UpdateFailed obj) {
-                       super(null, ptr);
-                       long update_failed = obj.update_failed;
-                       org.ldk.structs.OutPoint update_failed_hu_conv = null; if (update_failed < 0 || update_failed > 4096) { update_failed_hu_conv = new org.ldk.structs.OutPoint(null, update_failed); }
-                       if (update_failed_hu_conv != null) { update_failed_hu_conv.ptrs_to.add(this); };
-                       this.update_failed = update_failed_hu_conv;
-               }
-       }
        long clone_ptr() {
                long ret = bindings.MonitorEvent_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
@@ -138,10 +119,10 @@ public class MonitorEvent extends CommonBase {
        }
 
        /**
-        * Utility method to constructs a new CommitmentTxConfirmed-variant MonitorEvent
+        * Utility method to constructs a new HolderForceClosed-variant MonitorEvent
         */
-       public static MonitorEvent commitment_tx_confirmed(org.ldk.structs.OutPoint a) {
-               long ret = bindings.MonitorEvent_commitment_tx_confirmed(a == null ? 0 : a.ptr);
+       public static MonitorEvent holder_force_closed(org.ldk.structs.OutPoint a) {
+               long ret = bindings.MonitorEvent_holder_force_closed(a == null ? 0 : a.ptr);
                Reference.reachabilityFence(a);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.MonitorEvent ret_hu_conv = org.ldk.structs.MonitorEvent.constr_from_ptr(ret);
@@ -164,19 +145,6 @@ public class MonitorEvent extends CommonBase {
                return ret_hu_conv;
        }
 
-       /**
-        * Utility method to constructs a new UpdateFailed-variant MonitorEvent
-        */
-       public static MonitorEvent update_failed(org.ldk.structs.OutPoint a) {
-               long ret = bindings.MonitorEvent_update_failed(a == null ? 0 : a.ptr);
-               Reference.reachabilityFence(a);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.MonitorEvent ret_hu_conv = org.ldk.structs.MonitorEvent.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(a); };
-               return ret_hu_conv;
-       }
-
        /**
         * Checks if two MonitorEvents contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
diff --git a/src/main/java/org/ldk/structs/MonitorUpdatingPersister.java b/src/main/java/org/ldk/structs/MonitorUpdatingPersister.java
new file mode 100644 (file)
index 0000000..4b4fd8f
--- /dev/null
@@ -0,0 +1,220 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Implements [`Persist`] in a way that writes and reads both [`ChannelMonitor`]s and
+ * [`ChannelMonitorUpdate`]s.
+ * 
+ * # Overview
+ * 
+ * The main benefit this provides over the [`KVStore`]'s [`Persist`] implementation is decreased
+ * I/O bandwidth and storage churn, at the expense of more IOPS (including listing, reading, and
+ * deleting) and complexity. This is because it writes channel monitor differential updates,
+ * whereas the other (default) implementation rewrites the entire monitor on each update. For
+ * routing nodes, updates can happen many times per second to a channel, and monitors can be tens
+ * of megabytes (or more). Updates can be as small as a few hundred bytes.
+ * 
+ * Note that monitors written with `MonitorUpdatingPersister` are _not_ backward-compatible with
+ * the default [`KVStore`]'s [`Persist`] implementation. They have a prepended byte sequence,
+ * [`MONITOR_UPDATING_PERSISTER_PREPEND_SENTINEL`], applied to prevent deserialization with other
+ * persisters. This is because monitors written by this struct _may_ have unapplied updates. In
+ * order to downgrade, you must ensure that all updates are applied to the monitor, and remove the
+ * sentinel bytes.
+ * 
+ * # Storing monitors
+ * 
+ * Monitors are stored by implementing the [`Persist`] trait, which has two functions:
+ * 
+ * - [`Persist::persist_new_channel`], which persists whole [`ChannelMonitor`]s.
+ * - [`Persist::update_persisted_channel`], which persists only a [`ChannelMonitorUpdate`]
+ * 
+ * Whole [`ChannelMonitor`]s are stored in the [`CHANNEL_MONITOR_PERSISTENCE_PRIMARY_NAMESPACE`],
+ * using the familiar encoding of an [`OutPoint`] (for example, `[SOME-64-CHAR-HEX-STRING]_1`).
+ * 
+ * Each [`ChannelMonitorUpdate`] is stored in a dynamic secondary namespace, as follows:
+ * 
+ * - primary namespace: [`CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE`]
+ * - secondary namespace: [the monitor's encoded outpoint name]
+ * 
+ * Under that secondary namespace, each update is stored with a number string, like `21`, which
+ * represents its `update_id` value.
+ * 
+ * For example, consider this channel, named for its transaction ID and index, or [`OutPoint`]:
+ * 
+ * - Transaction ID: `deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef`
+ * - Index: `1`
+ * 
+ * Full channel monitors would be stored at a single key:
+ * 
+ * `[CHANNEL_MONITOR_PERSISTENCE_PRIMARY_NAMESPACE]/deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_1`
+ * 
+ * Updates would be stored as follows (with `/` delimiting primary_namespace/secondary_namespace/key):
+ * 
+ * ```text
+ * [CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE]/deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_1/1
+ * [CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE]/deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_1/2
+ * [CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE]/deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_1/3
+ * ```
+ * ... and so on.
+ * 
+ * # Reading channel state from storage
+ * 
+ * Channel state can be reconstructed by calling
+ * [`MonitorUpdatingPersister::read_all_channel_monitors_with_updates`]. Alternatively, users can
+ * list channel monitors themselves and load channels individually using
+ * [`MonitorUpdatingPersister::read_channel_monitor_with_updates`].
+ * 
+ * ## EXTREMELY IMPORTANT
+ * 
+ * It is extremely important that your [`KVStore::read`] implementation uses the
+ * [`io::ErrorKind::NotFound`] variant correctly: that is, when a file is not found, and _only_ in
+ * that circumstance (not when there is really a permissions error, for example). This is because
+ * neither channel monitor reading function lists updates. Instead, either reads the monitor, and
+ * using its stored `update_id`, synthesizes update storage keys, and tries them in sequence until
+ * one is not found. All _other_ errors will be bubbled up in the function's [`Result`].
+ * 
+ * # Pruning stale channel updates
+ * 
+ * Stale updates are pruned when a full monitor is written. The old monitor is first read, and if
+ * that succeeds, updates in the range between the old and new monitors are deleted. The `lazy`
+ * flag is used on the [`KVStore::remove`] method, so there are no guarantees that the deletions
+ * will complete. However, stale updates are not a problem for data integrity, since updates are
+ * only read that are higher than the stored [`ChannelMonitor`]'s `update_id`.
+ * 
+ * If you have many stale updates stored (such as after a crash with pending lazy deletes), and
+ * would like to get rid of them, consider using the
+ * [`MonitorUpdatingPersister::cleanup_stale_updates`] function.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class MonitorUpdatingPersister extends CommonBase {
+       MonitorUpdatingPersister(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.MonitorUpdatingPersister_free(ptr); }
+       }
+
+       /**
+        * Constructs a new [`MonitorUpdatingPersister`].
+        * 
+        * The `maximum_pending_updates` parameter controls how many updates may be stored before a
+        * [`MonitorUpdatingPersister`] consolidates updates by writing a full monitor. Note that
+        * consolidation will frequently occur with fewer updates than what you set here; this number
+        * is merely the maximum that may be stored. When setting this value, consider that for higher
+        * values of `maximum_pending_updates`:
+        * 
+        * - [`MonitorUpdatingPersister`] will tend to write more [`ChannelMonitorUpdate`]s than
+        * [`ChannelMonitor`]s, approaching one [`ChannelMonitor`] write for every
+        * `maximum_pending_updates` [`ChannelMonitorUpdate`]s.
+        * - [`MonitorUpdatingPersister`] will issue deletes differently. Lazy deletes will come in
+        * \"waves\" for each [`ChannelMonitor`] write. A larger `maximum_pending_updates` means bigger,
+        * less frequent \"waves.\"
+        * - [`MonitorUpdatingPersister`] will potentially have more listing to do if you need to run
+        * [`MonitorUpdatingPersister::cleanup_stale_updates`].
+        */
+       public static MonitorUpdatingPersister of(org.ldk.structs.KVStore kv_store, org.ldk.structs.Logger logger, long maximum_pending_updates, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.SignerProvider signer_provider) {
+               long ret = bindings.MonitorUpdatingPersister_new(kv_store.ptr, logger.ptr, maximum_pending_updates, entropy_source.ptr, signer_provider.ptr);
+               Reference.reachabilityFence(kv_store);
+               Reference.reachabilityFence(logger);
+               Reference.reachabilityFence(maximum_pending_updates);
+               Reference.reachabilityFence(entropy_source);
+               Reference.reachabilityFence(signer_provider);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.MonitorUpdatingPersister ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.MonitorUpdatingPersister(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(kv_store); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(logger); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(signer_provider); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Reads all stored channel monitors, along with any stored updates for them.
+        * 
+        * It is extremely important that your [`KVStore::read`] implementation uses the
+        * [`io::ErrorKind::NotFound`] variant correctly. For more information, please see the
+        * documentation for [`MonitorUpdatingPersister`].
+        */
+       public Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ read_all_channel_monitors_with_updates(org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator) {
+               long ret = bindings.MonitorUpdatingPersister_read_all_channel_monitors_with_updates(this.ptr, broadcaster.ptr, fee_estimator.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(broadcaster);
+               Reference.reachabilityFence(fee_estimator);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(broadcaster); };
+               if (this != null) { this.ptrs_to.add(fee_estimator); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a single channel monitor, along with any stored updates for it.
+        * 
+        * It is extremely important that your [`KVStore::read`] implementation uses the
+        * [`io::ErrorKind::NotFound`] variant correctly. For more information, please see the
+        * documentation for [`MonitorUpdatingPersister`].
+        * 
+        * For `monitor_key`, channel storage keys be the channel's transaction ID and index, or
+        * [`OutPoint`], with an underscore `_` between them. For example, given:
+        * 
+        * - Transaction ID: `deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef`
+        * - Index: `1`
+        * 
+        * The correct `monitor_key` would be:
+        * `deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_1`
+        * 
+        * Loading a large number of monitors will be faster if done in parallel. You can use this
+        * function to accomplish this. Take care to limit the number of parallel readers.
+        */
+       public Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ read_channel_monitor_with_updates(org.ldk.structs.BroadcasterInterface broadcaster, org.ldk.structs.FeeEstimator fee_estimator, java.lang.String monitor_key) {
+               long ret = bindings.MonitorUpdatingPersister_read_channel_monitor_with_updates(this.ptr, broadcaster.ptr, fee_estimator.ptr, monitor_key);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(broadcaster);
+               Reference.reachabilityFence(fee_estimator);
+               Reference.reachabilityFence(monitor_key);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(broadcaster); };
+               if (this != null) { this.ptrs_to.add(fee_estimator); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Cleans up stale updates for all monitors.
+        * 
+        * This function works by first listing all monitors, and then for each of them, listing all
+        * updates. The updates that have an `update_id` less than or equal to than the stored monitor
+        * are deleted. The deletion can either be lazy or non-lazy based on the `lazy` flag; this will
+        * be passed to [`KVStore::remove`].
+        */
+       public Result_NoneIOErrorZ cleanup_stale_updates(boolean lazy) {
+               long ret = bindings.MonitorUpdatingPersister_cleanup_stale_updates(this.ptr, lazy);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(lazy);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new Persist which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned Persist must be freed before this_arg is
+        */
+       public Persist as_Persist() {
+               long ret = bindings.MonitorUpdatingPersister_as_Persist(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Persist ret_hu_conv = new Persist(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/MultiThreadedScoreLock.java b/src/main/java/org/ldk/structs/MultiThreadedScoreLock.java
deleted file mode 100644 (file)
index c27835e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A locked `MultiThreadedLockableScore`.
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class MultiThreadedScoreLock extends CommonBase {
-       MultiThreadedScoreLock(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.MultiThreadedScoreLock_free(ptr); }
-       }
-
-       /**
-        * Serialize the MultiThreadedScoreLock object into a byte array which can be read by MultiThreadedScoreLock_read
-        */
-       public byte[] write() {
-               byte[] ret = bindings.MultiThreadedScoreLock_write(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Constructs a new Score which calls the relevant methods on this_arg.
-        * This copies the `inner` pointer in this_arg and thus the returned Score must be freed before this_arg is
-        */
-       public Score as_Score() {
-               long ret = bindings.MultiThreadedScoreLock_as_Score(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Score ret_hu_conv = new Score(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/MultiThreadedScoreLockRead.java b/src/main/java/org/ldk/structs/MultiThreadedScoreLockRead.java
new file mode 100644 (file)
index 0000000..4d36c1f
--- /dev/null
@@ -0,0 +1,36 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A locked `MultiThreadedLockableScore`.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class MultiThreadedScoreLockRead extends CommonBase {
+       MultiThreadedScoreLockRead(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.MultiThreadedScoreLockRead_free(ptr); }
+       }
+
+       /**
+        * Constructs a new ScoreLookUp which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreLookUp must be freed before this_arg is
+        */
+       public ScoreLookUp as_ScoreLookUp() {
+               long ret = bindings.MultiThreadedScoreLockRead_as_ScoreLookUp(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ScoreLookUp ret_hu_conv = new ScoreLookUp(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/MultiThreadedScoreLockWrite.java b/src/main/java/org/ldk/structs/MultiThreadedScoreLockWrite.java
new file mode 100644 (file)
index 0000000..c827b9f
--- /dev/null
@@ -0,0 +1,45 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A locked `MultiThreadedLockableScore`.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class MultiThreadedScoreLockWrite extends CommonBase {
+       MultiThreadedScoreLockWrite(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.MultiThreadedScoreLockWrite_free(ptr); }
+       }
+
+       /**
+        * Serialize the MultiThreadedScoreLockWrite object into a byte array which can be read by MultiThreadedScoreLockWrite_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.MultiThreadedScoreLockWrite_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Constructs a new ScoreUpdate which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreUpdate must be freed before this_arg is
+        */
+       public ScoreUpdate as_ScoreUpdate() {
+               long ret = bindings.MultiThreadedScoreLockWrite_as_ScoreUpdate(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ScoreUpdate ret_hu_conv = new ScoreUpdate(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/NetAddress.java b/src/main/java/org/ldk/structs/NetAddress.java
deleted file mode 100644 (file)
index 9714ec7..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An address which can be used to connect to a remote peer.
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class NetAddress extends CommonBase {
-       private NetAddress(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.NetAddress_free(ptr); }
-       }
-       static NetAddress constr_from_ptr(long ptr) {
-               bindings.LDKNetAddress raw_val = bindings.LDKNetAddress_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKNetAddress.IPv4.class) {
-                       return new IPv4(ptr, (bindings.LDKNetAddress.IPv4)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKNetAddress.IPv6.class) {
-                       return new IPv6(ptr, (bindings.LDKNetAddress.IPv6)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKNetAddress.OnionV2.class) {
-                       return new OnionV2(ptr, (bindings.LDKNetAddress.OnionV2)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKNetAddress.OnionV3.class) {
-                       return new OnionV3(ptr, (bindings.LDKNetAddress.OnionV3)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKNetAddress.Hostname.class) {
-                       return new Hostname(ptr, (bindings.LDKNetAddress.Hostname)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * An IPv4 address/port on which the peer is listening.
-        */
-       public final static class IPv4 extends NetAddress {
-               /**
-                * The 4-byte IPv4 address
-               */
-               public final byte[] addr;
-               /**
-                * The port on which the node is listening
-               */
-               public final short port;
-               private IPv4(long ptr, bindings.LDKNetAddress.IPv4 obj) {
-                       super(null, ptr);
-                       this.addr = obj.addr;
-                       this.port = obj.port;
-               }
-       }
-       /**
-        * An IPv6 address/port on which the peer is listening.
-        */
-       public final static class IPv6 extends NetAddress {
-               /**
-                * The 16-byte IPv6 address
-               */
-               public final byte[] addr;
-               /**
-                * The port on which the node is listening
-               */
-               public final short port;
-               private IPv6(long ptr, bindings.LDKNetAddress.IPv6 obj) {
-                       super(null, ptr);
-                       this.addr = obj.addr;
-                       this.port = obj.port;
-               }
-       }
-       /**
-        * An old-style Tor onion address/port on which the peer is listening.
-        * 
-        * This field is deprecated and the Tor network generally no longer supports V2 Onion
-        * addresses. Thus, the details are not parsed here.
-        */
-       public final static class OnionV2 extends NetAddress {
-               public final byte[] onion_v2;
-               private OnionV2(long ptr, bindings.LDKNetAddress.OnionV2 obj) {
-                       super(null, ptr);
-                       this.onion_v2 = obj.onion_v2;
-               }
-       }
-       /**
-        * A new-style Tor onion address/port on which the peer is listening.
-        * 
-        * To create the human-readable \"hostname\", concatenate the ED25519 pubkey, checksum, and version,
-        * wrap as base32 and append \".onion\".
-        */
-       public final static class OnionV3 extends NetAddress {
-               /**
-                * The ed25519 long-term public key of the peer
-               */
-               public final byte[] ed25519_pubkey;
-               /**
-                * The checksum of the pubkey and version, as included in the onion address
-               */
-               public final short checksum;
-               /**
-                * The version byte, as defined by the Tor Onion v3 spec.
-               */
-               public final byte version;
-               /**
-                * The port on which the node is listening
-               */
-               public final short port;
-               private OnionV3(long ptr, bindings.LDKNetAddress.OnionV3 obj) {
-                       super(null, ptr);
-                       this.ed25519_pubkey = obj.ed25519_pubkey;
-                       this.checksum = obj.checksum;
-                       this.version = obj.version;
-                       this.port = obj.port;
-               }
-       }
-       /**
-        * A hostname/port on which the peer is listening.
-        */
-       public final static class Hostname extends NetAddress {
-               /**
-                * The hostname on which the node is listening.
-               */
-               public final org.ldk.structs.Hostname hostname;
-               /**
-                * The port on which the node is listening.
-               */
-               public final short port;
-               private Hostname(long ptr, bindings.LDKNetAddress.Hostname obj) {
-                       super(null, ptr);
-                       long hostname = obj.hostname;
-                       org.ldk.structs.Hostname hostname_hu_conv = null; if (hostname < 0 || hostname > 4096) { hostname_hu_conv = new org.ldk.structs.Hostname(null, hostname); }
-                       if (hostname_hu_conv != null) { hostname_hu_conv.ptrs_to.add(this); };
-                       this.hostname = hostname_hu_conv;
-                       this.port = obj.port;
-               }
-       }
-       long clone_ptr() {
-               long ret = bindings.NetAddress_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a copy of the NetAddress
-        */
-       public NetAddress clone() {
-               long ret = bindings.NetAddress_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetAddress ret_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Utility method to constructs a new IPv4-variant NetAddress
-        */
-       public static NetAddress ipv4(byte[] addr, short port) {
-               long ret = bindings.NetAddress_ipv4(InternalUtils.check_arr_len(addr, 4), port);
-               Reference.reachabilityFence(addr);
-               Reference.reachabilityFence(port);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetAddress ret_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Utility method to constructs a new IPv6-variant NetAddress
-        */
-       public static NetAddress ipv6(byte[] addr, short port) {
-               long ret = bindings.NetAddress_ipv6(InternalUtils.check_arr_len(addr, 16), port);
-               Reference.reachabilityFence(addr);
-               Reference.reachabilityFence(port);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetAddress ret_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Utility method to constructs a new OnionV2-variant NetAddress
-        */
-       public static NetAddress onion_v2(byte[] a) {
-               long ret = bindings.NetAddress_onion_v2(InternalUtils.check_arr_len(a, 12));
-               Reference.reachabilityFence(a);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetAddress ret_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Utility method to constructs a new OnionV3-variant NetAddress
-        */
-       public static NetAddress onion_v3(byte[] ed25519_pubkey, short checksum, byte version, short port) {
-               long ret = bindings.NetAddress_onion_v3(InternalUtils.check_arr_len(ed25519_pubkey, 32), checksum, version, port);
-               Reference.reachabilityFence(ed25519_pubkey);
-               Reference.reachabilityFence(checksum);
-               Reference.reachabilityFence(version);
-               Reference.reachabilityFence(port);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetAddress ret_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Utility method to constructs a new Hostname-variant NetAddress
-        */
-       public static NetAddress hostname(org.ldk.structs.Hostname hostname, short port) {
-               long ret = bindings.NetAddress_hostname(hostname == null ? 0 : hostname.ptr, port);
-               Reference.reachabilityFence(hostname);
-               Reference.reachabilityFence(port);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.NetAddress ret_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(hostname); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if two NetAddresss contain equal inner contents.
-        * This ignores pointers and is_owned flags and looks at the values in fields.
-        */
-       public boolean eq(org.ldk.structs.NetAddress b) {
-               boolean ret = bindings.NetAddress_eq(this.ptr, b == null ? 0 : b.ptr);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(b);
-               return ret;
-       }
-
-       @Override public boolean equals(Object o) {
-               if (!(o instanceof NetAddress)) return false;
-               return this.eq((NetAddress)o);
-       }
-       /**
-        * Serialize the NetAddress object into a byte array which can be read by NetAddress_read
-        */
-       public byte[] write() {
-               byte[] ret = bindings.NetAddress_write(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Read a NetAddress from a byte array, created by NetAddress_write
-        */
-       public static Result_NetAddressDecodeErrorZ read(byte[] ser) {
-               long ret = bindings.NetAddress_read(ser);
-               Reference.reachabilityFence(ser);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NetAddressDecodeErrorZ ret_hu_conv = Result_NetAddressDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
index 23559ffc3f7d5fa93673d13b7b62f07f889af261..6dd6c51c0e1b4d08ca714a134fe92b5faf7aa97b 100644 (file)
@@ -141,8 +141,10 @@ public class NodeAnnouncementInfo extends CommonBase {
 
        /**
         * Constructs a new NodeAnnouncementInfo given each field
+        * 
+        * Note that announcement_message_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static NodeAnnouncementInfo of(org.ldk.structs.NodeFeatures features_arg, int last_update_arg, byte[] rgb_arg, org.ldk.structs.NodeAlias alias_arg, org.ldk.structs.NodeAnnouncement announcement_message_arg) {
+       public static NodeAnnouncementInfo of(org.ldk.structs.NodeFeatures features_arg, int last_update_arg, byte[] rgb_arg, org.ldk.structs.NodeAlias alias_arg, @Nullable org.ldk.structs.NodeAnnouncement announcement_message_arg) {
                long ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr, last_update_arg, InternalUtils.check_arr_len(rgb_arg, 3), alias_arg == null ? 0 : alias_arg.ptr, announcement_message_arg == null ? 0 : announcement_message_arg.ptr);
                Reference.reachabilityFence(features_arg);
                Reference.reachabilityFence(last_update_arg);
@@ -196,18 +198,18 @@ public class NodeAnnouncementInfo extends CommonBase {
        /**
         * Internet-level addresses via which one can connect to the node
         */
-       public NetAddress[] addresses() {
+       public SocketAddress[] addresses() {
                long[] ret = bindings.NodeAnnouncementInfo_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);
-                       if (ret_conv_12_hu_conv != null) { ret_conv_12_hu_conv.ptrs_to.add(this); };
-                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               int ret_conv_15_len = ret.length;
+               SocketAddress[] ret_conv_15_arr = new SocketAddress[ret_conv_15_len];
+               for (int p = 0; p < ret_conv_15_len; p++) {
+                       long ret_conv_15 = ret[p];
+                       org.ldk.structs.SocketAddress ret_conv_15_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret_conv_15);
+                       if (ret_conv_15_hu_conv != null) { ret_conv_15_hu_conv.ptrs_to.add(this); };
+                       ret_conv_15_arr[p] = ret_conv_15_hu_conv;
                }
-               return ret_conv_12_arr;
+               return ret_conv_15_arr;
        }
 
        /**
index 5b0532d70da5091d7824e28aa09e7ccd8a34501a..44472bcbd968ba5d59939eed58bc8dfe2d356e90 100644 (file)
@@ -87,6 +87,42 @@ public class NodeFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.NodeFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.NodeFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
@@ -517,6 +553,40 @@ public class NodeFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Set this feature as optional.
+        */
+       public void set_taproot_optional() {
+               bindings.NodeFeatures_set_taproot_optional(this.ptr);
+               Reference.reachabilityFence(this);
+       }
+
+       /**
+        * Set this feature as required.
+        */
+       public void set_taproot_required() {
+               bindings.NodeFeatures_set_taproot_required(this.ptr);
+               Reference.reachabilityFence(this);
+       }
+
+       /**
+        * Checks if this feature is supported.
+        */
+       public boolean supports_taproot() {
+               boolean ret = bindings.NodeFeatures_supports_taproot(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Checks if this feature is required.
+        */
+       public boolean requires_taproot() {
+               boolean ret = bindings.NodeFeatures_requires_taproot(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Set this feature as optional.
         */
index 3a5352ad33c9060ce6af12f3ac91e8fd54a7ba29..b18198869c36351686441741a4cb67c473ab29c7 100644 (file)
@@ -62,11 +62,11 @@ public class NodeId extends CommonBase {
        /**
         * Get the public key from this NodeId
         */
-       public Result_PublicKeyErrorZ as_pubkey() {
+       public Result_PublicKeySecp256k1ErrorZ as_pubkey() {
                long ret = bindings.NodeId_as_pubkey(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
+               Result_PublicKeySecp256k1ErrorZ ret_hu_conv = Result_PublicKeySecp256k1ErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index 0b7e93fd760a127328bf3ece7f050033f42bee6a..e1617e846f53b1ffd4a75b086e3f3b106665f97c 100644 (file)
@@ -73,8 +73,10 @@ public class NodeInfo extends CommonBase {
 
        /**
         * Constructs a new NodeInfo given each field
+        * 
+        * Note that announcement_info_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static NodeInfo of(long[] channels_arg, org.ldk.structs.NodeAnnouncementInfo announcement_info_arg) {
+       public static NodeInfo of(long[] channels_arg, @Nullable org.ldk.structs.NodeAnnouncementInfo announcement_info_arg) {
                long ret = bindings.NodeInfo_new(channels_arg, announcement_info_arg == null ? 0 : announcement_info_arg.ptr);
                Reference.reachabilityFence(channels_arg);
                Reference.reachabilityFence(announcement_info_arg);
index 4fa2f011f527beb3592b642bfbabf448147e9b6a..3b3a7f2bae1760525faf417fd02fded27bd85bd3 100644 (file)
@@ -68,7 +68,7 @@ public class NodeSigner extends CommonBase {
                 * 
                 * Errors if the [`Recipient`] variant is not supported by the implementation.
                 */
-               Result_SharedSecretNoneZ ecdh(Recipient recipient, byte[] other_key, Option_ScalarZ tweak);
+               Result_ThirtyTwoBytesNoneZ ecdh(Recipient recipient, byte[] other_key, Option_BigEndianScalarZ tweak);
                /**
                 * Sign an invoice.
                 * 
@@ -83,6 +83,34 @@ public class NodeSigner extends CommonBase {
                 * Errors if the [`Recipient`] variant is not supported by the implementation.
                 */
                Result_RecoverableSignatureNoneZ sign_invoice(byte[] hrp_bytes, UInt5[] invoice_data, Recipient recipient);
+               /**
+                * Signs the [`TaggedHash`] of a BOLT 12 invoice request.
+                * 
+                * May be called by a function passed to [`UnsignedInvoiceRequest::sign`] where
+                * `invoice_request` is the callee.
+                * 
+                * Implementors may check that the `invoice_request` is expected rather than blindly signing
+                * the tagged hash. An `Ok` result should sign `invoice_request.tagged_hash().as_digest()` with
+                * the node's signing key or an ephemeral key to preserve privacy, whichever is associated with
+                * [`UnsignedInvoiceRequest::payer_id`].
+                * 
+                * [`TaggedHash`]: crate::offers::merkle::TaggedHash
+                */
+               Result_SchnorrSignatureNoneZ sign_bolt12_invoice_request(UnsignedInvoiceRequest invoice_request);
+               /**
+                * Signs the [`TaggedHash`] of a BOLT 12 invoice.
+                * 
+                * May be called by a function passed to [`UnsignedBolt12Invoice::sign`] where `invoice` is the
+                * callee.
+                * 
+                * Implementors may check that the `invoice` is expected rather than blindly signing the tagged
+                * hash. An `Ok` result should sign `invoice.tagged_hash().as_digest()` with the node's signing
+                * key or an ephemeral key to preserve privacy, whichever is associated with
+                * [`UnsignedBolt12Invoice::signing_pubkey`].
+                * 
+                * [`TaggedHash`]: crate::offers::merkle::TaggedHash
+                */
+               Result_SchnorrSignatureNoneZ sign_bolt12_invoice(UnsignedBolt12Invoice invoice);
                /**
                 * Sign a gossip message.
                 * 
@@ -91,7 +119,7 @@ public class NodeSigner extends CommonBase {
                 * message to be broadcast, as otherwise it may prevent one from receiving funds over the
                 * corresponding channel.
                 */
-               Result_SignatureNoneZ sign_gossip_message(UnsignedGossipMessage msg);
+               Result_ECDSASignatureNoneZ sign_gossip_message(UnsignedGossipMessage msg);
        }
        private static class LDKNodeSignerHolder { NodeSigner held; }
        public static NodeSigner new_impl(NodeSignerInterface arg) {
@@ -110,9 +138,9 @@ public class NodeSigner extends CommonBase {
                                return result;
                        }
                        @Override public long ecdh(Recipient recipient, byte[] other_key, long tweak) {
-                               org.ldk.structs.Option_ScalarZ tweak_hu_conv = org.ldk.structs.Option_ScalarZ.constr_from_ptr(tweak);
+                               org.ldk.structs.Option_BigEndianScalarZ tweak_hu_conv = org.ldk.structs.Option_BigEndianScalarZ.constr_from_ptr(tweak);
                                if (tweak_hu_conv != null) { tweak_hu_conv.ptrs_to.add(this); };
-                               Result_SharedSecretNoneZ ret = arg.ecdh(recipient, other_key, tweak_hu_conv);
+                               Result_ThirtyTwoBytesNoneZ ret = arg.ecdh(recipient, other_key, tweak_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -130,10 +158,24 @@ public class NodeSigner extends CommonBase {
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
+                       @Override public long sign_bolt12_invoice_request(long invoice_request) {
+                               org.ldk.structs.UnsignedInvoiceRequest invoice_request_hu_conv = null; if (invoice_request < 0 || invoice_request > 4096) { invoice_request_hu_conv = new org.ldk.structs.UnsignedInvoiceRequest(null, invoice_request); }
+                               Result_SchnorrSignatureNoneZ ret = arg.sign_bolt12_invoice_request(invoice_request_hu_conv);
+                               Reference.reachabilityFence(arg);
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
+                       }
+                       @Override public long sign_bolt12_invoice(long invoice) {
+                               org.ldk.structs.UnsignedBolt12Invoice invoice_hu_conv = null; if (invoice < 0 || invoice > 4096) { invoice_hu_conv = new org.ldk.structs.UnsignedBolt12Invoice(null, invoice); }
+                               Result_SchnorrSignatureNoneZ ret = arg.sign_bolt12_invoice(invoice_hu_conv);
+                               Reference.reachabilityFence(arg);
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
+                       }
                        @Override public long sign_gossip_message(long msg) {
                                org.ldk.structs.UnsignedGossipMessage msg_hu_conv = org.ldk.structs.UnsignedGossipMessage.constr_from_ptr(msg);
                                if (msg_hu_conv != null) { msg_hu_conv.ptrs_to.add(this); };
-                               Result_SignatureNoneZ ret = arg.sign_gossip_message(msg_hu_conv);
+                               Result_ECDSASignatureNoneZ ret = arg.sign_gossip_message(msg_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -185,14 +227,14 @@ public class NodeSigner extends CommonBase {
         * 
         * Errors if the [`Recipient`] variant is not supported by the implementation.
         */
-       public Result_SharedSecretNoneZ ecdh(org.ldk.enums.Recipient recipient, byte[] other_key, org.ldk.structs.Option_ScalarZ tweak) {
+       public Result_ThirtyTwoBytesNoneZ ecdh(org.ldk.enums.Recipient recipient, byte[] other_key, org.ldk.structs.Option_BigEndianScalarZ tweak) {
                long ret = bindings.NodeSigner_ecdh(this.ptr, recipient, InternalUtils.check_arr_len(other_key, 33), tweak.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(recipient);
                Reference.reachabilityFence(other_key);
                Reference.reachabilityFence(tweak);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SharedSecretNoneZ ret_hu_conv = Result_SharedSecretNoneZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(tweak); };
                return ret_hu_conv;
        }
@@ -221,6 +263,52 @@ public class NodeSigner extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Signs the [`TaggedHash`] of a BOLT 12 invoice request.
+        * 
+        * May be called by a function passed to [`UnsignedInvoiceRequest::sign`] where
+        * `invoice_request` is the callee.
+        * 
+        * Implementors may check that the `invoice_request` is expected rather than blindly signing
+        * the tagged hash. An `Ok` result should sign `invoice_request.tagged_hash().as_digest()` with
+        * the node's signing key or an ephemeral key to preserve privacy, whichever is associated with
+        * [`UnsignedInvoiceRequest::payer_id`].
+        * 
+        * [`TaggedHash`]: crate::offers::merkle::TaggedHash
+        */
+       public Result_SchnorrSignatureNoneZ sign_bolt12_invoice_request(org.ldk.structs.UnsignedInvoiceRequest invoice_request) {
+               long ret = bindings.NodeSigner_sign_bolt12_invoice_request(this.ptr, invoice_request == null ? 0 : invoice_request.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(invoice_request);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SchnorrSignatureNoneZ ret_hu_conv = Result_SchnorrSignatureNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(invoice_request); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Signs the [`TaggedHash`] of a BOLT 12 invoice.
+        * 
+        * May be called by a function passed to [`UnsignedBolt12Invoice::sign`] where `invoice` is the
+        * callee.
+        * 
+        * Implementors may check that the `invoice` is expected rather than blindly signing the tagged
+        * hash. An `Ok` result should sign `invoice.tagged_hash().as_digest()` with the node's signing
+        * key or an ephemeral key to preserve privacy, whichever is associated with
+        * [`UnsignedBolt12Invoice::signing_pubkey`].
+        * 
+        * [`TaggedHash`]: crate::offers::merkle::TaggedHash
+        */
+       public Result_SchnorrSignatureNoneZ sign_bolt12_invoice(org.ldk.structs.UnsignedBolt12Invoice invoice) {
+               long ret = bindings.NodeSigner_sign_bolt12_invoice(this.ptr, invoice == null ? 0 : invoice.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(invoice);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SchnorrSignatureNoneZ ret_hu_conv = Result_SchnorrSignatureNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(invoice); };
+               return ret_hu_conv;
+       }
+
        /**
         * Sign a gossip message.
         * 
@@ -229,12 +317,12 @@ public class NodeSigner extends CommonBase {
         * message to be broadcast, as otherwise it may prevent one from receiving funds over the
         * corresponding channel.
         */
-       public Result_SignatureNoneZ sign_gossip_message(org.ldk.structs.UnsignedGossipMessage msg) {
+       public Result_ECDSASignatureNoneZ sign_gossip_message(org.ldk.structs.UnsignedGossipMessage msg) {
                long ret = bindings.NodeSigner_sign_gossip_message(this.ptr, msg.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(msg);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(msg); };
                return ret_hu_conv;
        }
index f4a8e58b723eb32de77836d2ebf95301a78f9ae8..cbda12ee34651a7abd16887e851877525977af6a 100644 (file)
@@ -61,16 +61,6 @@ public class Offer extends CommonBase {
                return ret;
        }
 
-       /**
-        * Returns whether the given chain is supported by the offer.
-        */
-       public boolean supports_chain(byte[] chain) {
-               boolean ret = bindings.Offer_supports_chain(this.ptr, InternalUtils.check_arr_len(chain, 32));
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(chain);
-               return ret;
-       }
-
        /**
         * Opaque bytes set by the originator. Useful for authentication and validating fields since it
         * is reflected in `invoice_request` messages along with all the other fields from the `offer`.
@@ -115,8 +105,8 @@ public class Offer extends CommonBase {
        /**
         * Features pertaining to the offer.
         */
-       public OfferFeatures features() {
-               long ret = bindings.Offer_features(this.ptr);
+       public OfferFeatures offer_features() {
+               long ret = bindings.Offer_offer_features(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.OfferFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferFeatures(null, ret); }
@@ -129,24 +119,15 @@ public class Offer extends CommonBase {
         * 
         * If `None`, the offer does not expire.
         */
-       public Option_DurationZ absolute_expiry() {
+       public Option_u64Z absolute_expiry() {
                long ret = bindings.Offer_absolute_expiry(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_DurationZ ret_hu_conv = org.ldk.structs.Option_DurationZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
 
-       /**
-        * Whether the offer has expired.
-        */
-       public boolean is_expired() {
-               boolean ret = bindings.Offer_is_expired(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
        /**
         * The issuer of the offer, possibly beginning with `user@domain` or `domain`. Intended to be
         * displayed to the user but with the caveat that it has not been verified in any way.
@@ -193,6 +174,34 @@ public class Offer extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * The public key used by the recipient to sign invoices.
+        */
+       public byte[] signing_pubkey() {
+               byte[] ret = bindings.Offer_signing_pubkey(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Returns whether the given chain is supported by the offer.
+        */
+       public boolean supports_chain(byte[] chain) {
+               boolean ret = bindings.Offer_supports_chain(this.ptr, InternalUtils.check_arr_len(chain, 32));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(chain);
+               return ret;
+       }
+
+       /**
+        * Whether the offer has expired.
+        */
+       public boolean is_expired() {
+               boolean ret = bindings.Offer_is_expired(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Returns whether the given quantity is valid for the offer.
         */
@@ -214,15 +223,6 @@ public class Offer extends CommonBase {
                return ret;
        }
 
-       /**
-        * The public key used by the recipient to sign invoices.
-        */
-       public byte[] signing_pubkey() {
-               byte[] ret = bindings.Offer_signing_pubkey(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
        /**
         * Serialize the Offer object into a byte array which can be read by Offer_read
         */
index a4a8eb83890fa1cb9c5765789278e7da728d8d2a..cd09f8864936343ba190c6100795882b5008298d 100644 (file)
@@ -87,6 +87,42 @@ public class OfferFeatures extends CommonBase {
                return ret;
        }
 
+       /**
+        * Sets a required feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Required bits are even. If an odd bit is given, then the corresponding even bit will
+        * be set instead (i.e., `bit - 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_required_feature_bit(long bit) {
+               long ret = bindings.OfferFeatures_set_required_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sets an optional feature bit. Errors if `bit` is outside the feature range as defined
+        * by [BOLT 9].
+        * 
+        * Note: Optional bits are odd. If an even bit is given, then the corresponding odd bit will be
+        * set instead (i.e., `bit + 1`).
+        * 
+        * [BOLT 9]: https://github.com/lightning/bolts/blob/master/09-features.md
+        */
+       public Result_NoneNoneZ set_optional_feature_bit(long bit) {
+               long ret = bindings.OfferFeatures_set_optional_feature_bit(this.ptr, bit);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(bit);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Sets a required custom feature bit. Errors if `bit` is outside the custom range as defined
         * by [bLIP 2] or if it is a known `T` feature.
index 8b780bbe9b7450c5814e8ea8880318ff1c4d22f1..68b2acd5604d90bda84e244cc8c4d9e4022d384d 100644 (file)
@@ -38,6 +38,42 @@ public class OnionMessage extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The full onion packet including hop data, pubkey, and hmac
+        */
+       public Packet get_onion_routing_packet() {
+               long ret = bindings.OnionMessage_get_onion_routing_packet(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Packet ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Packet(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The full onion packet including hop data, pubkey, and hmac
+        */
+       public void set_onion_routing_packet(org.ldk.structs.Packet val) {
+               bindings.OnionMessage_set_onion_routing_packet(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       /**
+        * Constructs a new OnionMessage given each field
+        */
+       public static OnionMessage of(byte[] blinding_point_arg, org.ldk.structs.Packet onion_routing_packet_arg) {
+               long ret = bindings.OnionMessage_new(InternalUtils.check_arr_len(blinding_point_arg, 33), onion_routing_packet_arg == null ? 0 : onion_routing_packet_arg.ptr);
+               Reference.reachabilityFence(blinding_point_arg);
+               Reference.reachabilityFence(onion_routing_packet_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OnionMessage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OnionMessage(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(onion_routing_packet_arg); };
+               return ret_hu_conv;
+       }
+
        long clone_ptr() {
                long ret = bindings.OnionMessage_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
index 25096464ed4fa7cda62e4cffd7532a7d56527984..de456b4c4d54ca9437396ee6e4e34d69836ef1c9 100644 (file)
@@ -355,11 +355,11 @@ public class OpenChannel extends CommonBase {
        /**
         * A request to pre-set the to-sender output's `scriptPubkey` for when we collaboratively close
         */
-       public Option_ScriptZ get_shutdown_scriptpubkey() {
+       public Option_CVec_u8ZZ get_shutdown_scriptpubkey() {
                long ret = bindings.OpenChannel_get_shutdown_scriptpubkey(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -367,7 +367,7 @@ public class OpenChannel extends CommonBase {
        /**
         * A request to pre-set the to-sender output's `scriptPubkey` for when we collaboratively close
         */
-       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_ScriptZ val) {
+       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_CVec_u8ZZ val) {
                bindings.OpenChannel_set_shutdown_scriptpubkey(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -409,8 +409,10 @@ public class OpenChannel extends CommonBase {
 
        /**
         * Constructs a new OpenChannel given each field
+        * 
+        * Note that channel_type_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static OpenChannel of(byte[] chain_hash_arg, byte[] temporary_channel_id_arg, long funding_satoshis_arg, long push_msat_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long channel_reserve_satoshis_arg, long htlc_minimum_msat_arg, int feerate_per_kw_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte channel_flags_arg, org.ldk.structs.Option_ScriptZ shutdown_scriptpubkey_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg) {
+       public static OpenChannel of(byte[] chain_hash_arg, byte[] temporary_channel_id_arg, long funding_satoshis_arg, long push_msat_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long channel_reserve_satoshis_arg, long htlc_minimum_msat_arg, int feerate_per_kw_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte channel_flags_arg, org.ldk.structs.Option_CVec_u8ZZ shutdown_scriptpubkey_arg, @Nullable org.ldk.structs.ChannelTypeFeatures channel_type_arg) {
                long ret = bindings.OpenChannel_new(InternalUtils.check_arr_len(chain_hash_arg, 32), InternalUtils.check_arr_len(temporary_channel_id_arg, 32), funding_satoshis_arg, push_msat_arg, dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, channel_reserve_satoshis_arg, htlc_minimum_msat_arg, feerate_per_kw_arg, to_self_delay_arg, max_accepted_htlcs_arg, InternalUtils.check_arr_len(funding_pubkey_arg, 33), InternalUtils.check_arr_len(revocation_basepoint_arg, 33), InternalUtils.check_arr_len(payment_point_arg, 33), InternalUtils.check_arr_len(delayed_payment_basepoint_arg, 33), InternalUtils.check_arr_len(htlc_basepoint_arg, 33), InternalUtils.check_arr_len(first_per_commitment_point_arg, 33), channel_flags_arg, shutdown_scriptpubkey_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr);
                Reference.reachabilityFence(chain_hash_arg);
                Reference.reachabilityFence(temporary_channel_id_arg);
index 87ba18871c8997ab913e01d08e346a0a961e1bf8..6b248cb13bbed32b6276abccf123299c6cffce42 100644 (file)
@@ -374,11 +374,11 @@ public class OpenChannelV2 extends CommonBase {
         * Optionally, a request to pre-set the to-channel-initiator output's scriptPubkey for when we
         * collaboratively close
         */
-       public Option_ScriptZ get_shutdown_scriptpubkey() {
+       public Option_CVec_u8ZZ get_shutdown_scriptpubkey() {
                long ret = bindings.OpenChannelV2_get_shutdown_scriptpubkey(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -387,7 +387,7 @@ public class OpenChannelV2 extends CommonBase {
         * Optionally, a request to pre-set the to-channel-initiator output's scriptPubkey for when we
         * collaboratively close
         */
-       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_ScriptZ val) {
+       public void set_shutdown_scriptpubkey(org.ldk.structs.Option_CVec_u8ZZ val) {
                bindings.OpenChannelV2_set_shutdown_scriptpubkey(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -445,8 +445,10 @@ public class OpenChannelV2 extends CommonBase {
 
        /**
         * Constructs a new OpenChannelV2 given each field
+        * 
+        * Note that channel_type_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static OpenChannelV2 of(byte[] chain_hash_arg, byte[] temporary_channel_id_arg, int funding_feerate_sat_per_1000_weight_arg, int commitment_feerate_sat_per_1000_weight_arg, long funding_satoshis_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, int locktime_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_basepoint_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte[] second_per_commitment_point_arg, byte channel_flags_arg, org.ldk.structs.Option_ScriptZ shutdown_scriptpubkey_arg, org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.enums.COption_NoneZ require_confirmed_inputs_arg) {
+       public static OpenChannelV2 of(byte[] chain_hash_arg, byte[] temporary_channel_id_arg, int funding_feerate_sat_per_1000_weight_arg, int commitment_feerate_sat_per_1000_weight_arg, long funding_satoshis_arg, long dust_limit_satoshis_arg, long max_htlc_value_in_flight_msat_arg, long htlc_minimum_msat_arg, short to_self_delay_arg, short max_accepted_htlcs_arg, int locktime_arg, byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_basepoint_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg, byte[] first_per_commitment_point_arg, byte[] second_per_commitment_point_arg, byte channel_flags_arg, org.ldk.structs.Option_CVec_u8ZZ shutdown_scriptpubkey_arg, @Nullable org.ldk.structs.ChannelTypeFeatures channel_type_arg, org.ldk.enums.COption_NoneZ require_confirmed_inputs_arg) {
                long ret = bindings.OpenChannelV2_new(InternalUtils.check_arr_len(chain_hash_arg, 32), InternalUtils.check_arr_len(temporary_channel_id_arg, 32), funding_feerate_sat_per_1000_weight_arg, commitment_feerate_sat_per_1000_weight_arg, funding_satoshis_arg, dust_limit_satoshis_arg, max_htlc_value_in_flight_msat_arg, htlc_minimum_msat_arg, to_self_delay_arg, max_accepted_htlcs_arg, locktime_arg, InternalUtils.check_arr_len(funding_pubkey_arg, 33), InternalUtils.check_arr_len(revocation_basepoint_arg, 33), InternalUtils.check_arr_len(payment_basepoint_arg, 33), InternalUtils.check_arr_len(delayed_payment_basepoint_arg, 33), InternalUtils.check_arr_len(htlc_basepoint_arg, 33), InternalUtils.check_arr_len(first_per_commitment_point_arg, 33), InternalUtils.check_arr_len(second_per_commitment_point_arg, 33), channel_flags_arg, shutdown_scriptpubkey_arg.ptr, channel_type_arg == null ? 0 : channel_type_arg.ptr, require_confirmed_inputs_arg);
                Reference.reachabilityFence(chain_hash_arg);
                Reference.reachabilityFence(temporary_channel_id_arg);
diff --git a/src/main/java/org/ldk/structs/Option_BigEndianScalarZ.java b/src/main/java/org/ldk/structs/Option_BigEndianScalarZ.java
new file mode 100644 (file)
index 0000000..6b6df6a
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::BigEndianScalar or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_BigEndianScalarZ extends CommonBase {
+       private Option_BigEndianScalarZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_BigEndianScalarZ_free(ptr); }
+       }
+       static Option_BigEndianScalarZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_BigEndianScalarZ raw_val = bindings.LDKCOption_BigEndianScalarZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_BigEndianScalarZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_BigEndianScalarZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_BigEndianScalarZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_BigEndianScalarZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_BigEndianScalarZ contains a crate::c_types::BigEndianScalar
+        */
+       public final static class Some extends Option_BigEndianScalarZ {
+               public final org.ldk.structs.BigEndianScalar some;
+               private Some(long ptr, bindings.LDKCOption_BigEndianScalarZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       BigEndianScalar some_conv = new BigEndianScalar(null, some);
+                       this.some = some_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_BigEndianScalarZ contains nothing
+        */
+       public final static class None extends Option_BigEndianScalarZ {
+               private None(long ptr, bindings.LDKCOption_BigEndianScalarZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_BigEndianScalarZ containing a crate::c_types::BigEndianScalar
+        */
+       public static Option_BigEndianScalarZ some(byte[] o_big_endian_bytes) {
+               long ret = bindings.COption_BigEndianScalarZ_some(bindings.BigEndianScalar_new(InternalUtils.check_arr_len(o_big_endian_bytes, 32)));
+               Reference.reachabilityFence(o_big_endian_bytes);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_BigEndianScalarZ ret_hu_conv = org.ldk.structs.Option_BigEndianScalarZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               ;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_BigEndianScalarZ containing nothing
+        */
+       public static Option_BigEndianScalarZ none() {
+               long ret = bindings.COption_BigEndianScalarZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_BigEndianScalarZ ret_hu_conv = org.ldk.structs.Option_BigEndianScalarZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_BigEndianScalarZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_BigEndianScalarZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_BigEndianScalarZ clone() {
+               long ret = bindings.COption_BigEndianScalarZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_BigEndianScalarZ ret_hu_conv = org.ldk.structs.Option_BigEndianScalarZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_BlockHashZ.java b/src/main/java/org/ldk/structs/Option_BlockHashZ.java
deleted file mode 100644 (file)
index 5d17ff0..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_BlockHashZ extends CommonBase {
-       private Option_BlockHashZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_BlockHashZ_free(ptr); }
-       }
-       static Option_BlockHashZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_BlockHashZ raw_val = bindings.LDKCOption_BlockHashZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_BlockHashZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_BlockHashZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_BlockHashZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_BlockHashZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_BlockHashZ contains a crate::c_types::ThirtyTwoBytes
-        */
-       public final static class Some extends Option_BlockHashZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_BlockHashZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_BlockHashZ contains nothing
-        */
-       public final static class None extends Option_BlockHashZ {
-               private None(long ptr, bindings.LDKCOption_BlockHashZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_BlockHashZ containing a crate::c_types::ThirtyTwoBytes
-        */
-       public static Option_BlockHashZ some(byte[] o) {
-               long ret = bindings.COption_BlockHashZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_BlockHashZ ret_hu_conv = org.ldk.structs.Option_BlockHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_BlockHashZ containing nothing
-        */
-       public static Option_BlockHashZ none() {
-               long ret = bindings.COption_BlockHashZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_BlockHashZ ret_hu_conv = org.ldk.structs.Option_BlockHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_BlockHashZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_BlockHashZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_BlockHashZ clone() {
-               long ret = bindings.COption_BlockHashZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_BlockHashZ ret_hu_conv = org.ldk.structs.Option_BlockHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_C2Tuple_EightU16sEightU16sZZ.java b/src/main/java/org/ldk/structs/Option_C2Tuple_EightU16sEightU16sZZ.java
deleted file mode 100644 (file)
index bcc8af0..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::derived::C2Tuple__u168_u168Z or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_C2Tuple_EightU16sEightU16sZZ extends CommonBase {
-       private Option_C2Tuple_EightU16sEightU16sZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_C2Tuple_EightU16sEightU16sZZ_free(ptr); }
-       }
-       static Option_C2Tuple_EightU16sEightU16sZZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ raw_val = bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_C2Tuple_EightU16sEightU16sZZ contains a crate::c_types::derived::C2Tuple__u168_u168Z
-        */
-       public final static class Some extends Option_C2Tuple_EightU16sEightU16sZZ {
-               public final org.ldk.structs.TwoTuple__u168_u168Z some;
-               private Some(long ptr, bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ.Some obj) {
-                       super(null, ptr);
-                       long some = obj.some;
-                       TwoTuple__u168_u168Z some_hu_conv = new TwoTuple__u168_u168Z(null, some);
-                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.add(this); };
-                       this.some = some_hu_conv;
-               }
-       }
-       /**
-        * When we're in this state, this COption_C2Tuple_EightU16sEightU16sZZ contains nothing
-        */
-       public final static class None extends Option_C2Tuple_EightU16sEightU16sZZ {
-               private None(long ptr, bindings.LDKCOption_C2Tuple_EightU16sEightU16sZZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_C2Tuple_EightU16sEightU16sZZ containing a crate::c_types::derived::C2Tuple__u168_u168Z
-        */
-       public static Option_C2Tuple_EightU16sEightU16sZZ some(org.ldk.structs.TwoTuple__u168_u168Z o) {
-               long ret = bindings.COption_C2Tuple_EightU16sEightU16sZZ_some(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_C2Tuple_EightU16sEightU16sZZ containing nothing
-        */
-       public static Option_C2Tuple_EightU16sEightU16sZZ none() {
-               long ret = bindings.COption_C2Tuple_EightU16sEightU16sZZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_C2Tuple_EightU16sEightU16sZZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_C2Tuple_EightU16sEightU16sZZ clone() {
-               long ret = bindings.COption_C2Tuple_EightU16sEightU16sZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.java b/src/main/java/org/ldk/structs/Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.java
new file mode 100644 (file)
index 0000000..55decc8
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::derived::C2Tuple__u1632_u1632Z or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ extends CommonBase {
+       private Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_free(ptr); }
+       }
+       static Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ raw_val = bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ contains a crate::c_types::derived::C2Tuple__u1632_u1632Z
+        */
+       public final static class Some extends Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ {
+               public final org.ldk.structs.TwoTuple__u1632_u1632Z some;
+               private Some(long ptr, bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       TwoTuple__u1632_u1632Z some_hu_conv = new TwoTuple__u1632_u1632Z(null, some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.add(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ contains nothing
+        */
+       public final static class None extends Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ {
+               private None(long ptr, bindings.LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ containing a crate::c_types::derived::C2Tuple__u1632_u1632Z
+        */
+       public static Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ some(org.ldk.structs.TwoTuple__u1632_u1632Z o) {
+               long ret = bindings.COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_some(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ containing nothing
+        */
+       public static Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ none() {
+               long ret = bindings.COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_C2Tuple_u64u16ZZ.java b/src/main/java/org/ldk/structs/Option_C2Tuple_u64u16ZZ.java
new file mode 100644 (file)
index 0000000..bfb9fd9
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::derived::C2Tuple_u64u16Z or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_C2Tuple_u64u16ZZ extends CommonBase {
+       private Option_C2Tuple_u64u16ZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_C2Tuple_u64u16ZZ_free(ptr); }
+       }
+       static Option_C2Tuple_u64u16ZZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_C2Tuple_u64u16ZZ raw_val = bindings.LDKCOption_C2Tuple_u64u16ZZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_C2Tuple_u64u16ZZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_C2Tuple_u64u16ZZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_C2Tuple_u64u16ZZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_C2Tuple_u64u16ZZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_C2Tuple_u64u16ZZ contains a crate::c_types::derived::C2Tuple_u64u16Z
+        */
+       public final static class Some extends Option_C2Tuple_u64u16ZZ {
+               public final org.ldk.structs.TwoTuple_u64u16Z some;
+               private Some(long ptr, bindings.LDKCOption_C2Tuple_u64u16ZZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       TwoTuple_u64u16Z some_hu_conv = new TwoTuple_u64u16Z(null, some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.add(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_C2Tuple_u64u16ZZ contains nothing
+        */
+       public final static class None extends Option_C2Tuple_u64u16ZZ {
+               private None(long ptr, bindings.LDKCOption_C2Tuple_u64u16ZZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_C2Tuple_u64u16ZZ containing a crate::c_types::derived::C2Tuple_u64u16Z
+        */
+       public static Option_C2Tuple_u64u16ZZ some(org.ldk.structs.TwoTuple_u64u16Z o) {
+               long ret = bindings.COption_C2Tuple_u64u16ZZ_some(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_u64u16ZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_u64u16ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_C2Tuple_u64u16ZZ containing nothing
+        */
+       public static Option_C2Tuple_u64u16ZZ none() {
+               long ret = bindings.COption_C2Tuple_u64u16ZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_u64u16ZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_u64u16ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_C2Tuple_u64u16ZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_C2Tuple_u64u16ZZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_C2Tuple_u64u16ZZ clone() {
+               long ret = bindings.COption_C2Tuple_u64u16ZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_C2Tuple_u64u16ZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_u64u16ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_CVec_ChainHashZZ.java b/src/main/java/org/ldk/structs/Option_CVec_ChainHashZZ.java
deleted file mode 100644 (file)
index 8587a99..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::derived::CVec_ChainHashZ or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_CVec_ChainHashZZ extends CommonBase {
-       private Option_CVec_ChainHashZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_CVec_ChainHashZZ_free(ptr); }
-       }
-       static Option_CVec_ChainHashZZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_CVec_ChainHashZZ raw_val = bindings.LDKCOption_CVec_ChainHashZZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_CVec_ChainHashZZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_CVec_ChainHashZZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_CVec_ChainHashZZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_CVec_ChainHashZZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_CVec_ChainHashZZ contains a crate::c_types::derived::CVec_ChainHashZ
-        */
-       public final static class Some extends Option_CVec_ChainHashZZ {
-               public final byte[][] some;
-               private Some(long ptr, bindings.LDKCOption_CVec_ChainHashZZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_CVec_ChainHashZZ contains nothing
-        */
-       public final static class None extends Option_CVec_ChainHashZZ {
-               private None(long ptr, bindings.LDKCOption_CVec_ChainHashZZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_CVec_ChainHashZZ containing a crate::c_types::derived::CVec_ChainHashZ
-        */
-       public static Option_CVec_ChainHashZZ some(byte[][] o) {
-               long ret = bindings.COption_CVec_ChainHashZZ_some(o != null ? Arrays.stream(o).map(o_conv_8 -> InternalUtils.check_arr_len(o_conv_8, 32)).toArray(byte[][]::new) : null);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_ChainHashZZ ret_hu_conv = org.ldk.structs.Option_CVec_ChainHashZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_CVec_ChainHashZZ containing nothing
-        */
-       public static Option_CVec_ChainHashZZ none() {
-               long ret = bindings.COption_CVec_ChainHashZZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_ChainHashZZ ret_hu_conv = org.ldk.structs.Option_CVec_ChainHashZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_CVec_ChainHashZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_CVec_ChainHashZZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_CVec_ChainHashZZ clone() {
-               long ret = bindings.COption_CVec_ChainHashZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_ChainHashZZ ret_hu_conv = org.ldk.structs.Option_CVec_ChainHashZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_CVec_NetAddressZZ.java b/src/main/java/org/ldk/structs/Option_CVec_NetAddressZZ.java
deleted file mode 100644 (file)
index 09c22d9..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::derived::CVec_NetAddressZ or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_CVec_NetAddressZZ extends CommonBase {
-       private Option_CVec_NetAddressZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_CVec_NetAddressZZ_free(ptr); }
-       }
-       static Option_CVec_NetAddressZZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_CVec_NetAddressZZ raw_val = bindings.LDKCOption_CVec_NetAddressZZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_CVec_NetAddressZZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_CVec_NetAddressZZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_CVec_NetAddressZZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_CVec_NetAddressZZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_CVec_NetAddressZZ contains a crate::c_types::derived::CVec_NetAddressZ
-        */
-       public final static class Some extends Option_CVec_NetAddressZZ {
-               public final NetAddress[] some;
-               private Some(long ptr, bindings.LDKCOption_CVec_NetAddressZZ.Some obj) {
-                       super(null, ptr);
-                       long[] some = obj.some;
-                       int some_conv_12_len = some.length;
-                       NetAddress[] some_conv_12_arr = new NetAddress[some_conv_12_len];
-                       for (int m = 0; m < some_conv_12_len; m++) {
-                               long some_conv_12 = some[m];
-                               org.ldk.structs.NetAddress some_conv_12_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(some_conv_12);
-                               if (some_conv_12_hu_conv != null) { some_conv_12_hu_conv.ptrs_to.add(this); };
-                               some_conv_12_arr[m] = some_conv_12_hu_conv;
-                       }
-                       this.some = some_conv_12_arr;
-               }
-       }
-       /**
-        * When we're in this state, this COption_CVec_NetAddressZZ contains nothing
-        */
-       public final static class None extends Option_CVec_NetAddressZZ {
-               private None(long ptr, bindings.LDKCOption_CVec_NetAddressZZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_CVec_NetAddressZZ containing a crate::c_types::derived::CVec_NetAddressZ
-        */
-       public static Option_CVec_NetAddressZZ some(NetAddress[] o) {
-               long ret = bindings.COption_CVec_NetAddressZZ_some(o != null ? Arrays.stream(o).mapToLong(o_conv_12 -> o_conv_12.ptr).toArray() : null);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_NetAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_NetAddressZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               for (NetAddress o_conv_12: o) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o_conv_12); }; };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_CVec_NetAddressZZ containing nothing
-        */
-       public static Option_CVec_NetAddressZZ none() {
-               long ret = bindings.COption_CVec_NetAddressZZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_NetAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_NetAddressZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_CVec_NetAddressZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_CVec_NetAddressZZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_CVec_NetAddressZZ clone() {
-               long ret = bindings.COption_CVec_NetAddressZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_NetAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_NetAddressZZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_CVec_SocketAddressZZ.java b/src/main/java/org/ldk/structs/Option_CVec_SocketAddressZZ.java
new file mode 100644 (file)
index 0000000..40991ae
--- /dev/null
@@ -0,0 +1,103 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::derived::CVec_SocketAddressZ or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_CVec_SocketAddressZZ extends CommonBase {
+       private Option_CVec_SocketAddressZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_CVec_SocketAddressZZ_free(ptr); }
+       }
+       static Option_CVec_SocketAddressZZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_CVec_SocketAddressZZ raw_val = bindings.LDKCOption_CVec_SocketAddressZZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_CVec_SocketAddressZZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_CVec_SocketAddressZZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_CVec_SocketAddressZZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_CVec_SocketAddressZZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_CVec_SocketAddressZZ contains a crate::c_types::derived::CVec_SocketAddressZ
+        */
+       public final static class Some extends Option_CVec_SocketAddressZZ {
+               public final SocketAddress[] some;
+               private Some(long ptr, bindings.LDKCOption_CVec_SocketAddressZZ.Some obj) {
+                       super(null, ptr);
+                       long[] some = obj.some;
+                       int some_conv_15_len = some.length;
+                       SocketAddress[] some_conv_15_arr = new SocketAddress[some_conv_15_len];
+                       for (int p = 0; p < some_conv_15_len; p++) {
+                               long some_conv_15 = some[p];
+                               org.ldk.structs.SocketAddress some_conv_15_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(some_conv_15);
+                               if (some_conv_15_hu_conv != null) { some_conv_15_hu_conv.ptrs_to.add(this); };
+                               some_conv_15_arr[p] = some_conv_15_hu_conv;
+                       }
+                       this.some = some_conv_15_arr;
+               }
+       }
+       /**
+        * When we're in this state, this COption_CVec_SocketAddressZZ contains nothing
+        */
+       public final static class None extends Option_CVec_SocketAddressZZ {
+               private None(long ptr, bindings.LDKCOption_CVec_SocketAddressZZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_CVec_SocketAddressZZ containing a crate::c_types::derived::CVec_SocketAddressZ
+        */
+       public static Option_CVec_SocketAddressZZ some(SocketAddress[] o) {
+               long ret = bindings.COption_CVec_SocketAddressZZ_some(o != null ? Arrays.stream(o).mapToLong(o_conv_15 -> o_conv_15.ptr).toArray() : null);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_SocketAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_SocketAddressZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               for (SocketAddress o_conv_15: o) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o_conv_15); }; };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_CVec_SocketAddressZZ containing nothing
+        */
+       public static Option_CVec_SocketAddressZZ none() {
+               long ret = bindings.COption_CVec_SocketAddressZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_SocketAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_SocketAddressZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_CVec_SocketAddressZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_CVec_SocketAddressZZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_CVec_SocketAddressZZ clone() {
+               long ret = bindings.COption_CVec_SocketAddressZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_SocketAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_SocketAddressZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_CVec_ThirtyTwoBytesZZ.java b/src/main/java/org/ldk/structs/Option_CVec_ThirtyTwoBytesZZ.java
new file mode 100644 (file)
index 0000000..acef6d7
--- /dev/null
@@ -0,0 +1,93 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::derived::CVec_ThirtyTwoBytesZ or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_CVec_ThirtyTwoBytesZZ extends CommonBase {
+       private Option_CVec_ThirtyTwoBytesZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_CVec_ThirtyTwoBytesZZ_free(ptr); }
+       }
+       static Option_CVec_ThirtyTwoBytesZZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_CVec_ThirtyTwoBytesZZ raw_val = bindings.LDKCOption_CVec_ThirtyTwoBytesZZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_CVec_ThirtyTwoBytesZZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_CVec_ThirtyTwoBytesZZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_CVec_ThirtyTwoBytesZZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_CVec_ThirtyTwoBytesZZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_CVec_ThirtyTwoBytesZZ contains a crate::c_types::derived::CVec_ThirtyTwoBytesZ
+        */
+       public final static class Some extends Option_CVec_ThirtyTwoBytesZZ {
+               public final byte[][] some;
+               private Some(long ptr, bindings.LDKCOption_CVec_ThirtyTwoBytesZZ.Some obj) {
+                       super(null, ptr);
+                       this.some = obj.some;
+               }
+       }
+       /**
+        * When we're in this state, this COption_CVec_ThirtyTwoBytesZZ contains nothing
+        */
+       public final static class None extends Option_CVec_ThirtyTwoBytesZZ {
+               private None(long ptr, bindings.LDKCOption_CVec_ThirtyTwoBytesZZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_CVec_ThirtyTwoBytesZZ containing a crate::c_types::derived::CVec_ThirtyTwoBytesZ
+        */
+       public static Option_CVec_ThirtyTwoBytesZZ some(byte[][] o) {
+               long ret = bindings.COption_CVec_ThirtyTwoBytesZZ_some(o != null ? Arrays.stream(o).map(o_conv_8 -> InternalUtils.check_arr_len(o_conv_8, 32)).toArray(byte[][]::new) : null);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_CVec_ThirtyTwoBytesZZ containing nothing
+        */
+       public static Option_CVec_ThirtyTwoBytesZZ none() {
+               long ret = bindings.COption_CVec_ThirtyTwoBytesZZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_CVec_ThirtyTwoBytesZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_CVec_ThirtyTwoBytesZZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_CVec_ThirtyTwoBytesZZ clone() {
+               long ret = bindings.COption_CVec_ThirtyTwoBytesZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_DurationZ.java b/src/main/java/org/ldk/structs/Option_DurationZ.java
deleted file mode 100644 (file)
index d9d12eb..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a u64 or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_DurationZ extends CommonBase {
-       private Option_DurationZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_DurationZ_free(ptr); }
-       }
-       static Option_DurationZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_DurationZ raw_val = bindings.LDKCOption_DurationZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_DurationZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_DurationZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_DurationZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_DurationZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_DurationZ contains a u64
-        */
-       public final static class Some extends Option_DurationZ {
-               public final long some;
-               private Some(long ptr, bindings.LDKCOption_DurationZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_DurationZ contains nothing
-        */
-       public final static class None extends Option_DurationZ {
-               private None(long ptr, bindings.LDKCOption_DurationZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_DurationZ containing a u64
-        */
-       public static Option_DurationZ some(long o) {
-               long ret = bindings.COption_DurationZ_some(o);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_DurationZ ret_hu_conv = org.ldk.structs.Option_DurationZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_DurationZ containing nothing
-        */
-       public static Option_DurationZ none() {
-               long ret = bindings.COption_DurationZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_DurationZ ret_hu_conv = org.ldk.structs.Option_DurationZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_DurationZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_DurationZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_DurationZ clone() {
-               long ret = bindings.COption_DurationZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_DurationZ ret_hu_conv = org.ldk.structs.Option_DurationZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_KeyPairZ.java b/src/main/java/org/ldk/structs/Option_KeyPairZ.java
deleted file mode 100644 (file)
index a454bd1..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::SecretKey or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_KeyPairZ extends CommonBase {
-       private Option_KeyPairZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_KeyPairZ_free(ptr); }
-       }
-       static Option_KeyPairZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_KeyPairZ raw_val = bindings.LDKCOption_KeyPairZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_KeyPairZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_KeyPairZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_KeyPairZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_KeyPairZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_KeyPairZ contains a crate::c_types::SecretKey
-        */
-       public final static class Some extends Option_KeyPairZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_KeyPairZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_KeyPairZ contains nothing
-        */
-       public final static class None extends Option_KeyPairZ {
-               private None(long ptr, bindings.LDKCOption_KeyPairZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_KeyPairZ containing a crate::c_types::SecretKey
-        */
-       public static Option_KeyPairZ some(byte[] o) {
-               long ret = bindings.COption_KeyPairZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_KeyPairZ ret_hu_conv = org.ldk.structs.Option_KeyPairZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_KeyPairZ containing nothing
-        */
-       public static Option_KeyPairZ none() {
-               long ret = bindings.COption_KeyPairZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_KeyPairZ ret_hu_conv = org.ldk.structs.Option_KeyPairZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_KeyPairZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_KeyPairZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_KeyPairZ clone() {
-               long ret = bindings.COption_KeyPairZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_KeyPairZ ret_hu_conv = org.ldk.structs.Option_KeyPairZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_NetAddressZ.java b/src/main/java/org/ldk/structs/Option_NetAddressZ.java
deleted file mode 100644 (file)
index 27eeb47..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::lightning::ln::msgs::NetAddress or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_NetAddressZ extends CommonBase {
-       private Option_NetAddressZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_NetAddressZ_free(ptr); }
-       }
-       static Option_NetAddressZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_NetAddressZ raw_val = bindings.LDKCOption_NetAddressZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_NetAddressZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_NetAddressZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_NetAddressZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_NetAddressZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_NetAddressZ contains a crate::lightning::ln::msgs::NetAddress
-        */
-       public final static class Some extends Option_NetAddressZ {
-               public final org.ldk.structs.NetAddress some;
-               private Some(long ptr, bindings.LDKCOption_NetAddressZ.Some obj) {
-                       super(null, ptr);
-                       long some = obj.some;
-                       org.ldk.structs.NetAddress some_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(some);
-                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.add(this); };
-                       this.some = some_hu_conv;
-               }
-       }
-       /**
-        * When we're in this state, this COption_NetAddressZ contains nothing
-        */
-       public final static class None extends Option_NetAddressZ {
-               private None(long ptr, bindings.LDKCOption_NetAddressZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_NetAddressZ containing a crate::lightning::ln::msgs::NetAddress
-        */
-       public static Option_NetAddressZ some(org.ldk.structs.NetAddress o) {
-               long ret = bindings.COption_NetAddressZ_some(o.ptr);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_NetAddressZ ret_hu_conv = org.ldk.structs.Option_NetAddressZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_NetAddressZ containing nothing
-        */
-       public static Option_NetAddressZ none() {
-               long ret = bindings.COption_NetAddressZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_NetAddressZ ret_hu_conv = org.ldk.structs.Option_NetAddressZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_NetAddressZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_NetAddressZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_NetAddressZ clone() {
-               long ret = bindings.COption_NetAddressZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_NetAddressZ ret_hu_conv = org.ldk.structs.Option_NetAddressZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_PackedLockTimeZ.java b/src/main/java/org/ldk/structs/Option_PackedLockTimeZ.java
deleted file mode 100644 (file)
index 50914db..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a u32 or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_PackedLockTimeZ extends CommonBase {
-       private Option_PackedLockTimeZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_PackedLockTimeZ_free(ptr); }
-       }
-       static Option_PackedLockTimeZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_PackedLockTimeZ raw_val = bindings.LDKCOption_PackedLockTimeZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_PackedLockTimeZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_PackedLockTimeZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_PackedLockTimeZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_PackedLockTimeZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_PackedLockTimeZ contains a u32
-        */
-       public final static class Some extends Option_PackedLockTimeZ {
-               public final int some;
-               private Some(long ptr, bindings.LDKCOption_PackedLockTimeZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_PackedLockTimeZ contains nothing
-        */
-       public final static class None extends Option_PackedLockTimeZ {
-               private None(long ptr, bindings.LDKCOption_PackedLockTimeZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_PackedLockTimeZ containing a u32
-        */
-       public static Option_PackedLockTimeZ some(int o) {
-               long ret = bindings.COption_PackedLockTimeZ_some(o);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PackedLockTimeZ ret_hu_conv = org.ldk.structs.Option_PackedLockTimeZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_PackedLockTimeZ containing nothing
-        */
-       public static Option_PackedLockTimeZ none() {
-               long ret = bindings.COption_PackedLockTimeZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PackedLockTimeZ ret_hu_conv = org.ldk.structs.Option_PackedLockTimeZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_PackedLockTimeZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_PackedLockTimeZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_PackedLockTimeZ clone() {
-               long ret = bindings.COption_PackedLockTimeZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PackedLockTimeZ ret_hu_conv = org.ldk.structs.Option_PackedLockTimeZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_PaymentHashZ.java b/src/main/java/org/ldk/structs/Option_PaymentHashZ.java
deleted file mode 100644 (file)
index d71eb94..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_PaymentHashZ extends CommonBase {
-       private Option_PaymentHashZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_PaymentHashZ_free(ptr); }
-       }
-       static Option_PaymentHashZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_PaymentHashZ raw_val = bindings.LDKCOption_PaymentHashZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentHashZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_PaymentHashZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentHashZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_PaymentHashZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_PaymentHashZ contains a crate::c_types::ThirtyTwoBytes
-        */
-       public final static class Some extends Option_PaymentHashZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_PaymentHashZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_PaymentHashZ contains nothing
-        */
-       public final static class None extends Option_PaymentHashZ {
-               private None(long ptr, bindings.LDKCOption_PaymentHashZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_PaymentHashZ containing a crate::c_types::ThirtyTwoBytes
-        */
-       public static Option_PaymentHashZ some(byte[] o) {
-               long ret = bindings.COption_PaymentHashZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentHashZ ret_hu_conv = org.ldk.structs.Option_PaymentHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_PaymentHashZ containing nothing
-        */
-       public static Option_PaymentHashZ none() {
-               long ret = bindings.COption_PaymentHashZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentHashZ ret_hu_conv = org.ldk.structs.Option_PaymentHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_PaymentHashZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_PaymentHashZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_PaymentHashZ clone() {
-               long ret = bindings.COption_PaymentHashZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentHashZ ret_hu_conv = org.ldk.structs.Option_PaymentHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_PaymentIdZ.java b/src/main/java/org/ldk/structs/Option_PaymentIdZ.java
deleted file mode 100644 (file)
index 318f3d3..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_PaymentIdZ extends CommonBase {
-       private Option_PaymentIdZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_PaymentIdZ_free(ptr); }
-       }
-       static Option_PaymentIdZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_PaymentIdZ raw_val = bindings.LDKCOption_PaymentIdZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentIdZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_PaymentIdZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentIdZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_PaymentIdZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_PaymentIdZ contains a crate::c_types::ThirtyTwoBytes
-        */
-       public final static class Some extends Option_PaymentIdZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_PaymentIdZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_PaymentIdZ contains nothing
-        */
-       public final static class None extends Option_PaymentIdZ {
-               private None(long ptr, bindings.LDKCOption_PaymentIdZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_PaymentIdZ containing a crate::c_types::ThirtyTwoBytes
-        */
-       public static Option_PaymentIdZ some(byte[] o) {
-               long ret = bindings.COption_PaymentIdZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentIdZ ret_hu_conv = org.ldk.structs.Option_PaymentIdZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_PaymentIdZ containing nothing
-        */
-       public static Option_PaymentIdZ none() {
-               long ret = bindings.COption_PaymentIdZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentIdZ ret_hu_conv = org.ldk.structs.Option_PaymentIdZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_PaymentIdZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_PaymentIdZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_PaymentIdZ clone() {
-               long ret = bindings.COption_PaymentIdZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentIdZ ret_hu_conv = org.ldk.structs.Option_PaymentIdZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_PaymentPreimageZ.java b/src/main/java/org/ldk/structs/Option_PaymentPreimageZ.java
deleted file mode 100644 (file)
index 00aa60c..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_PaymentPreimageZ extends CommonBase {
-       private Option_PaymentPreimageZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_PaymentPreimageZ_free(ptr); }
-       }
-       static Option_PaymentPreimageZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_PaymentPreimageZ raw_val = bindings.LDKCOption_PaymentPreimageZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentPreimageZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_PaymentPreimageZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentPreimageZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_PaymentPreimageZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_PaymentPreimageZ contains a crate::c_types::ThirtyTwoBytes
-        */
-       public final static class Some extends Option_PaymentPreimageZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_PaymentPreimageZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_PaymentPreimageZ contains nothing
-        */
-       public final static class None extends Option_PaymentPreimageZ {
-               private None(long ptr, bindings.LDKCOption_PaymentPreimageZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_PaymentPreimageZ containing a crate::c_types::ThirtyTwoBytes
-        */
-       public static Option_PaymentPreimageZ some(byte[] o) {
-               long ret = bindings.COption_PaymentPreimageZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentPreimageZ ret_hu_conv = org.ldk.structs.Option_PaymentPreimageZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_PaymentPreimageZ containing nothing
-        */
-       public static Option_PaymentPreimageZ none() {
-               long ret = bindings.COption_PaymentPreimageZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentPreimageZ ret_hu_conv = org.ldk.structs.Option_PaymentPreimageZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_PaymentPreimageZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_PaymentPreimageZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_PaymentPreimageZ clone() {
-               long ret = bindings.COption_PaymentPreimageZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentPreimageZ ret_hu_conv = org.ldk.structs.Option_PaymentPreimageZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_PaymentSecretZ.java b/src/main/java/org/ldk/structs/Option_PaymentSecretZ.java
deleted file mode 100644 (file)
index 103b151..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_PaymentSecretZ extends CommonBase {
-       private Option_PaymentSecretZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_PaymentSecretZ_free(ptr); }
-       }
-       static Option_PaymentSecretZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_PaymentSecretZ raw_val = bindings.LDKCOption_PaymentSecretZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentSecretZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_PaymentSecretZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_PaymentSecretZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_PaymentSecretZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_PaymentSecretZ contains a crate::c_types::ThirtyTwoBytes
-        */
-       public final static class Some extends Option_PaymentSecretZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_PaymentSecretZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_PaymentSecretZ contains nothing
-        */
-       public final static class None extends Option_PaymentSecretZ {
-               private None(long ptr, bindings.LDKCOption_PaymentSecretZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_PaymentSecretZ containing a crate::c_types::ThirtyTwoBytes
-        */
-       public static Option_PaymentSecretZ some(byte[] o) {
-               long ret = bindings.COption_PaymentSecretZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentSecretZ ret_hu_conv = org.ldk.structs.Option_PaymentSecretZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_PaymentSecretZ containing nothing
-        */
-       public static Option_PaymentSecretZ none() {
-               long ret = bindings.COption_PaymentSecretZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentSecretZ ret_hu_conv = org.ldk.structs.Option_PaymentSecretZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_PaymentSecretZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_PaymentSecretZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_PaymentSecretZ clone() {
-               long ret = bindings.COption_PaymentSecretZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentSecretZ ret_hu_conv = org.ldk.structs.Option_PaymentSecretZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_ScalarZ.java b/src/main/java/org/ldk/structs/Option_ScalarZ.java
deleted file mode 100644 (file)
index 78b28c8..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::BigEndianScalar or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_ScalarZ extends CommonBase {
-       private Option_ScalarZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_ScalarZ_free(ptr); }
-       }
-       static Option_ScalarZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_ScalarZ raw_val = bindings.LDKCOption_ScalarZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_ScalarZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_ScalarZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_ScalarZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_ScalarZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_ScalarZ contains a crate::c_types::BigEndianScalar
-        */
-       public final static class Some extends Option_ScalarZ {
-               public final org.ldk.structs.BigEndianScalar some;
-               private Some(long ptr, bindings.LDKCOption_ScalarZ.Some obj) {
-                       super(null, ptr);
-                       long some = obj.some;
-                       BigEndianScalar some_conv = new BigEndianScalar(null, some);
-                       this.some = some_conv;
-               }
-       }
-       /**
-        * When we're in this state, this COption_ScalarZ contains nothing
-        */
-       public final static class None extends Option_ScalarZ {
-               private None(long ptr, bindings.LDKCOption_ScalarZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_ScalarZ containing a crate::c_types::BigEndianScalar
-        */
-       public static Option_ScalarZ some(byte[] o_big_endian_bytes) {
-               long ret = bindings.COption_ScalarZ_some(bindings.BigEndianScalar_new(InternalUtils.check_arr_len(o_big_endian_bytes, 32)));
-               Reference.reachabilityFence(o_big_endian_bytes);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScalarZ ret_hu_conv = org.ldk.structs.Option_ScalarZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               ;
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_ScalarZ containing nothing
-        */
-       public static Option_ScalarZ none() {
-               long ret = bindings.COption_ScalarZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScalarZ ret_hu_conv = org.ldk.structs.Option_ScalarZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_ScalarZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_ScalarZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_ScalarZ clone() {
-               long ret = bindings.COption_ScalarZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScalarZ ret_hu_conv = org.ldk.structs.Option_ScalarZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_ScriptZ.java b/src/main/java/org/ldk/structs/Option_ScriptZ.java
deleted file mode 100644 (file)
index 18bf0f4..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::derived::CVec_u8Z or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_ScriptZ extends CommonBase {
-       private Option_ScriptZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_ScriptZ_free(ptr); }
-       }
-       static Option_ScriptZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_ScriptZ raw_val = bindings.LDKCOption_ScriptZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_ScriptZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_ScriptZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_ScriptZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_ScriptZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_ScriptZ contains a crate::c_types::derived::CVec_u8Z
-        */
-       public final static class Some extends Option_ScriptZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_ScriptZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_ScriptZ contains nothing
-        */
-       public final static class None extends Option_ScriptZ {
-               private None(long ptr, bindings.LDKCOption_ScriptZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_ScriptZ containing a crate::c_types::derived::CVec_u8Z
-        */
-       public static Option_ScriptZ some(byte[] o) {
-               long ret = bindings.COption_ScriptZ_some(o);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_ScriptZ containing nothing
-        */
-       public static Option_ScriptZ none() {
-               long ret = bindings.COption_ScriptZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_ScriptZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_ScriptZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_ScriptZ clone() {
-               long ret = bindings.COption_ScriptZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_ScriptZ ret_hu_conv = org.ldk.structs.Option_ScriptZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_SecretKeyZ.java b/src/main/java/org/ldk/structs/Option_SecretKeyZ.java
new file mode 100644 (file)
index 0000000..10b2100
--- /dev/null
@@ -0,0 +1,93 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::SecretKey or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_SecretKeyZ extends CommonBase {
+       private Option_SecretKeyZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_SecretKeyZ_free(ptr); }
+       }
+       static Option_SecretKeyZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_SecretKeyZ raw_val = bindings.LDKCOption_SecretKeyZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_SecretKeyZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_SecretKeyZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_SecretKeyZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_SecretKeyZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_SecretKeyZ contains a crate::c_types::SecretKey
+        */
+       public final static class Some extends Option_SecretKeyZ {
+               public final byte[] some;
+               private Some(long ptr, bindings.LDKCOption_SecretKeyZ.Some obj) {
+                       super(null, ptr);
+                       this.some = obj.some;
+               }
+       }
+       /**
+        * When we're in this state, this COption_SecretKeyZ contains nothing
+        */
+       public final static class None extends Option_SecretKeyZ {
+               private None(long ptr, bindings.LDKCOption_SecretKeyZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_SecretKeyZ containing a crate::c_types::SecretKey
+        */
+       public static Option_SecretKeyZ some(byte[] o) {
+               long ret = bindings.COption_SecretKeyZ_some(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_SecretKeyZ containing nothing
+        */
+       public static Option_SecretKeyZ none() {
+               long ret = bindings.COption_SecretKeyZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_SecretKeyZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_SecretKeyZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_SecretKeyZ clone() {
+               long ret = bindings.COption_SecretKeyZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_SocketAddressZ.java b/src/main/java/org/ldk/structs/Option_SocketAddressZ.java
new file mode 100644 (file)
index 0000000..5fffe51
--- /dev/null
@@ -0,0 +1,97 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::lightning::ln::msgs::SocketAddress or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_SocketAddressZ extends CommonBase {
+       private Option_SocketAddressZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_SocketAddressZ_free(ptr); }
+       }
+       static Option_SocketAddressZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_SocketAddressZ raw_val = bindings.LDKCOption_SocketAddressZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_SocketAddressZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_SocketAddressZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_SocketAddressZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_SocketAddressZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_SocketAddressZ contains a crate::lightning::ln::msgs::SocketAddress
+        */
+       public final static class Some extends Option_SocketAddressZ {
+               public final org.ldk.structs.SocketAddress some;
+               private Some(long ptr, bindings.LDKCOption_SocketAddressZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       org.ldk.structs.SocketAddress some_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(some);
+                       if (some_hu_conv != null) { some_hu_conv.ptrs_to.add(this); };
+                       this.some = some_hu_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_SocketAddressZ contains nothing
+        */
+       public final static class None extends Option_SocketAddressZ {
+               private None(long ptr, bindings.LDKCOption_SocketAddressZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_SocketAddressZ containing a crate::lightning::ln::msgs::SocketAddress
+        */
+       public static Option_SocketAddressZ some(org.ldk.structs.SocketAddress o) {
+               long ret = bindings.COption_SocketAddressZ_some(o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SocketAddressZ ret_hu_conv = org.ldk.structs.Option_SocketAddressZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_SocketAddressZ containing nothing
+        */
+       public static Option_SocketAddressZ none() {
+               long ret = bindings.COption_SocketAddressZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SocketAddressZ ret_hu_conv = org.ldk.structs.Option_SocketAddressZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_SocketAddressZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_SocketAddressZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_SocketAddressZ clone() {
+               long ret = bindings.COption_SocketAddressZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SocketAddressZ ret_hu_conv = org.ldk.structs.Option_SocketAddressZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_ThirtyTwoBytesZ.java b/src/main/java/org/ldk/structs/Option_ThirtyTwoBytesZ.java
new file mode 100644 (file)
index 0000000..66152aa
--- /dev/null
@@ -0,0 +1,93 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_ThirtyTwoBytesZ extends CommonBase {
+       private Option_ThirtyTwoBytesZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_ThirtyTwoBytesZ_free(ptr); }
+       }
+       static Option_ThirtyTwoBytesZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_ThirtyTwoBytesZ raw_val = bindings.LDKCOption_ThirtyTwoBytesZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_ThirtyTwoBytesZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_ThirtyTwoBytesZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_ThirtyTwoBytesZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_ThirtyTwoBytesZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_ThirtyTwoBytesZ contains a crate::c_types::ThirtyTwoBytes
+        */
+       public final static class Some extends Option_ThirtyTwoBytesZ {
+               public final byte[] some;
+               private Some(long ptr, bindings.LDKCOption_ThirtyTwoBytesZ.Some obj) {
+                       super(null, ptr);
+                       this.some = obj.some;
+               }
+       }
+       /**
+        * When we're in this state, this COption_ThirtyTwoBytesZ contains nothing
+        */
+       public final static class None extends Option_ThirtyTwoBytesZ {
+               private None(long ptr, bindings.LDKCOption_ThirtyTwoBytesZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_ThirtyTwoBytesZ containing a crate::c_types::ThirtyTwoBytes
+        */
+       public static Option_ThirtyTwoBytesZ some(byte[] o) {
+               long ret = bindings.COption_ThirtyTwoBytesZ_some(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_ThirtyTwoBytesZ containing nothing
+        */
+       public static Option_ThirtyTwoBytesZ none() {
+               long ret = bindings.COption_ThirtyTwoBytesZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_ThirtyTwoBytesZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_ThirtyTwoBytesZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_ThirtyTwoBytesZ clone() {
+               long ret = bindings.COption_ThirtyTwoBytesZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_TxidZ.java b/src/main/java/org/ldk/structs/Option_TxidZ.java
deleted file mode 100644 (file)
index 21151ee..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::ThirtyTwoBytes or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_TxidZ extends CommonBase {
-       private Option_TxidZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_TxidZ_free(ptr); }
-       }
-       static Option_TxidZ constr_from_ptr(long ptr) {
-               bindings.LDKCOption_TxidZ raw_val = bindings.LDKCOption_TxidZ_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_TxidZ.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_TxidZ.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_TxidZ.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_TxidZ.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_TxidZ contains a crate::c_types::ThirtyTwoBytes
-        */
-       public final static class Some extends Option_TxidZ {
-               public final byte[] some;
-               private Some(long ptr, bindings.LDKCOption_TxidZ.Some obj) {
-                       super(null, ptr);
-                       this.some = obj.some;
-               }
-       }
-       /**
-        * When we're in this state, this COption_TxidZ contains nothing
-        */
-       public final static class None extends Option_TxidZ {
-               private None(long ptr, bindings.LDKCOption_TxidZ.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_TxidZ containing a crate::c_types::ThirtyTwoBytes
-        */
-       public static Option_TxidZ some(byte[] o) {
-               long ret = bindings.COption_TxidZ_some(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_TxidZ ret_hu_conv = org.ldk.structs.Option_TxidZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_TxidZ containing nothing
-        */
-       public static Option_TxidZ none() {
-               long ret = bindings.COption_TxidZ_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_TxidZ ret_hu_conv = org.ldk.structs.Option_TxidZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_TxidZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_TxidZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_TxidZ clone() {
-               long ret = bindings.COption_TxidZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_TxidZ ret_hu_conv = org.ldk.structs.Option_TxidZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_U128Z.java b/src/main/java/org/ldk/structs/Option_U128Z.java
new file mode 100644 (file)
index 0000000..a509c91
--- /dev/null
@@ -0,0 +1,95 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::c_types::U128 or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_U128Z extends CommonBase {
+       private Option_U128Z(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_U128Z_free(ptr); }
+       }
+       static Option_U128Z constr_from_ptr(long ptr) {
+               bindings.LDKCOption_U128Z raw_val = bindings.LDKCOption_U128Z_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_U128Z.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_U128Z.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_U128Z.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_U128Z.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_U128Z contains a crate::c_types::U128
+        */
+       public final static class Some extends Option_U128Z {
+               public final org.ldk.util.UInt128 some;
+               private Some(long ptr, bindings.LDKCOption_U128Z.Some obj) {
+                       super(null, ptr);
+                       byte[] some = obj.some;
+                       org.ldk.util.UInt128 some_conv = new org.ldk.util.UInt128(some);
+                       this.some = some_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_U128Z contains nothing
+        */
+       public final static class None extends Option_U128Z {
+               private None(long ptr, bindings.LDKCOption_U128Z.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_U128Z containing a crate::c_types::U128
+        */
+       public static Option_U128Z some(org.ldk.util.UInt128 o) {
+               long ret = bindings.COption_U128Z_some(o.getLEBytes());
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_U128Z ret_hu_conv = org.ldk.structs.Option_U128Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_U128Z containing nothing
+        */
+       public static Option_U128Z none() {
+               long ret = bindings.COption_U128Z_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_U128Z ret_hu_conv = org.ldk.structs.Option_U128Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_U128Z_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_U128Z which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_U128Z clone() {
+               long ret = bindings.COption_U128Z_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_U128Z ret_hu_conv = org.ldk.structs.Option_U128Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_f64Z.java b/src/main/java/org/ldk/structs/Option_f64Z.java
new file mode 100644 (file)
index 0000000..be3feff
--- /dev/null
@@ -0,0 +1,93 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a f64 or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_f64Z extends CommonBase {
+       private Option_f64Z(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_f64Z_free(ptr); }
+       }
+       static Option_f64Z constr_from_ptr(long ptr) {
+               bindings.LDKCOption_f64Z raw_val = bindings.LDKCOption_f64Z_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_f64Z.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_f64Z.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_f64Z.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_f64Z.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_f64Z contains a f64
+        */
+       public final static class Some extends Option_f64Z {
+               public final double some;
+               private Some(long ptr, bindings.LDKCOption_f64Z.Some obj) {
+                       super(null, ptr);
+                       this.some = obj.some;
+               }
+       }
+       /**
+        * When we're in this state, this COption_f64Z contains nothing
+        */
+       public final static class None extends Option_f64Z {
+               private None(long ptr, bindings.LDKCOption_f64Z.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_f64Z containing a f64
+        */
+       public static Option_f64Z some(double o) {
+               long ret = bindings.COption_f64Z_some(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_f64Z ret_hu_conv = org.ldk.structs.Option_f64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_f64Z containing nothing
+        */
+       public static Option_f64Z none() {
+               long ret = bindings.COption_f64Z_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_f64Z ret_hu_conv = org.ldk.structs.Option_f64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_f64Z_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_f64Z which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_f64Z clone() {
+               long ret = bindings.COption_f64Z_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_f64Z ret_hu_conv = org.ldk.structs.Option_f64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_u128Z.java b/src/main/java/org/ldk/structs/Option_u128Z.java
deleted file mode 100644 (file)
index 43b2807..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * An enum which can either contain a crate::c_types::U128 or not
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class Option_u128Z extends CommonBase {
-       private Option_u128Z(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.COption_u128Z_free(ptr); }
-       }
-       static Option_u128Z constr_from_ptr(long ptr) {
-               bindings.LDKCOption_u128Z raw_val = bindings.LDKCOption_u128Z_ref_from_ptr(ptr);
-               if (raw_val.getClass() == bindings.LDKCOption_u128Z.Some.class) {
-                       return new Some(ptr, (bindings.LDKCOption_u128Z.Some)raw_val);
-               }
-               if (raw_val.getClass() == bindings.LDKCOption_u128Z.None.class) {
-                       return new None(ptr, (bindings.LDKCOption_u128Z.None)raw_val);
-               }
-               assert false; return null; // Unreachable without extending the (internal) bindings interface
-       }
-
-       /**
-        * When we're in this state, this COption_u128Z contains a crate::c_types::U128
-        */
-       public final static class Some extends Option_u128Z {
-               public final org.ldk.util.UInt128 some;
-               private Some(long ptr, bindings.LDKCOption_u128Z.Some obj) {
-                       super(null, ptr);
-                       byte[] some = obj.some;
-                       org.ldk.util.UInt128 some_conv = new org.ldk.util.UInt128(some);
-                       this.some = some_conv;
-               }
-       }
-       /**
-        * When we're in this state, this COption_u128Z contains nothing
-        */
-       public final static class None extends Option_u128Z {
-               private None(long ptr, bindings.LDKCOption_u128Z.None obj) {
-                       super(null, ptr);
-               }
-       }
-       /**
-        * Constructs a new COption_u128Z containing a crate::c_types::U128
-        */
-       public static Option_u128Z some(org.ldk.util.UInt128 o) {
-               long ret = bindings.COption_u128Z_some(o.getLEBytes());
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_u128Z ret_hu_conv = org.ldk.structs.Option_u128Z.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Constructs a new COption_u128Z containing nothing
-        */
-       public static Option_u128Z none() {
-               long ret = bindings.COption_u128Z_none();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_u128Z ret_hu_conv = org.ldk.structs.Option_u128Z.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.COption_u128Z_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new COption_u128Z which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Option_u128Z clone() {
-               long ret = bindings.COption_u128Z_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_u128Z ret_hu_conv = org.ldk.structs.Option_u128Z.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Option_usizeZ.java b/src/main/java/org/ldk/structs/Option_usizeZ.java
new file mode 100644 (file)
index 0000000..174322d
--- /dev/null
@@ -0,0 +1,93 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a usize or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_usizeZ extends CommonBase {
+       private Option_usizeZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_usizeZ_free(ptr); }
+       }
+       static Option_usizeZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_usizeZ raw_val = bindings.LDKCOption_usizeZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_usizeZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_usizeZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_usizeZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_usizeZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_usizeZ contains a usize
+        */
+       public final static class Some extends Option_usizeZ {
+               public final long some;
+               private Some(long ptr, bindings.LDKCOption_usizeZ.Some obj) {
+                       super(null, ptr);
+                       this.some = obj.some;
+               }
+       }
+       /**
+        * When we're in this state, this COption_usizeZ contains nothing
+        */
+       public final static class None extends Option_usizeZ {
+               private None(long ptr, bindings.LDKCOption_usizeZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_usizeZ containing a usize
+        */
+       public static Option_usizeZ some(long o) {
+               long ret = bindings.COption_usizeZ_some(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_usizeZ ret_hu_conv = org.ldk.structs.Option_usizeZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_usizeZ containing nothing
+        */
+       public static Option_usizeZ none() {
+               long ret = bindings.COption_usizeZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_usizeZ ret_hu_conv = org.ldk.structs.Option_usizeZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_usizeZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_usizeZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_usizeZ clone() {
+               long ret = bindings.COption_usizeZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_usizeZ ret_hu_conv = org.ldk.structs.Option_usizeZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Packet.java b/src/main/java/org/ldk/structs/Packet.java
new file mode 100644 (file)
index 0000000..d9ab086
--- /dev/null
@@ -0,0 +1,156 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Packet of hop data for next peer
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Packet extends CommonBase {
+       Packet(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.Packet_free(ptr); }
+       }
+
+       /**
+        * Bolt 04 version number
+        */
+       public byte get_version() {
+               byte ret = bindings.Packet_get_version(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Bolt 04 version number
+        */
+       public void set_version(byte val) {
+               bindings.Packet_set_version(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * A random sepc256k1 point, used to build the ECDH shared secret to decrypt hop_data
+        */
+       public byte[] get_public_key() {
+               byte[] ret = bindings.Packet_get_public_key(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A random sepc256k1 point, used to build the ECDH shared secret to decrypt hop_data
+        */
+       public void set_public_key(byte[] val) {
+               bindings.Packet_set_public_key(this.ptr, InternalUtils.check_arr_len(val, 33));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Encrypted payload for the next hop
+        * 
+        * Returns a copy of the field.
+        */
+       public byte[] get_hop_data() {
+               byte[] ret = bindings.Packet_get_hop_data(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Encrypted payload for the next hop
+        */
+       public void set_hop_data(byte[] val) {
+               bindings.Packet_set_hop_data(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * HMAC to verify the integrity of hop_data
+        */
+       public byte[] get_hmac() {
+               byte[] ret = bindings.Packet_get_hmac(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * HMAC to verify the integrity of hop_data
+        */
+       public void set_hmac(byte[] val) {
+               bindings.Packet_set_hmac(this.ptr, InternalUtils.check_arr_len(val, 32));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new Packet given each field
+        */
+       public static Packet of(byte version_arg, byte[] public_key_arg, byte[] hop_data_arg, byte[] hmac_arg) {
+               long ret = bindings.Packet_new(version_arg, InternalUtils.check_arr_len(public_key_arg, 33), hop_data_arg, InternalUtils.check_arr_len(hmac_arg, 32));
+               Reference.reachabilityFence(version_arg);
+               Reference.reachabilityFence(public_key_arg);
+               Reference.reachabilityFence(hop_data_arg);
+               Reference.reachabilityFence(hmac_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Packet ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Packet(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.Packet_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the Packet
+        */
+       public Packet clone() {
+               long ret = bindings.Packet_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Packet ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Packet(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two Packets contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        * Two objects with NULL inner values will be considered "equal" here.
+        */
+       public boolean eq(org.ldk.structs.Packet b) {
+               boolean ret = bindings.Packet_eq(this.ptr, b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(b);
+               if (this != null) { this.ptrs_to.add(b); };
+               return ret;
+       }
+
+       @Override public boolean equals(Object o) {
+               if (!(o instanceof Packet)) return false;
+               return this.eq((Packet)o);
+       }
+       /**
+        * Serialize the Packet object into a byte array which can be read by Packet_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.Packet_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+}
index bb6259edf57d0725278bccaf943beaf004ca817a..e7b777d4f5a9e919bb5c72491686b6eedeecd607 100644 (file)
@@ -77,8 +77,10 @@ public class Path extends CommonBase {
 
        /**
         * Constructs a new Path given each field
+        * 
+        * Note that blinded_tail_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static Path of(RouteHop[] hops_arg, org.ldk.structs.BlindedTail blinded_tail_arg) {
+       public static Path of(RouteHop[] hops_arg, @Nullable org.ldk.structs.BlindedTail blinded_tail_arg) {
                long ret = bindings.Path_new(hops_arg != null ? Arrays.stream(hops_arg).mapToLong(hops_arg_conv_10 -> hops_arg_conv_10 == null ? 0 : hops_arg_conv_10.ptr).toArray() : null, blinded_tail_arg == null ? 0 : blinded_tail_arg.ptr);
                Reference.reachabilityFence(hops_arg);
                Reference.reachabilityFence(blinded_tail_arg);
diff --git a/src/main/java/org/ldk/structs/PaymentConstraints.java b/src/main/java/org/ldk/structs/PaymentConstraints.java
new file mode 100644 (file)
index 0000000..90953d2
--- /dev/null
@@ -0,0 +1,116 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Constraints for relaying over a given [`BlindedHop`].
+ * 
+ * [`BlindedHop`]: crate::blinded_path::BlindedHop
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class PaymentConstraints extends CommonBase {
+       PaymentConstraints(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.PaymentConstraints_free(ptr); }
+       }
+
+       /**
+        * The maximum total CLTV delta that is acceptable when relaying a payment over this
+        * [`BlindedHop`].
+        */
+       public int get_max_cltv_expiry() {
+               int ret = bindings.PaymentConstraints_get_max_cltv_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The maximum total CLTV delta that is acceptable when relaying a payment over this
+        * [`BlindedHop`].
+        */
+       public void set_max_cltv_expiry(int val) {
+               bindings.PaymentConstraints_set_max_cltv_expiry(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * The minimum value, in msat, that may be accepted by the node corresponding to this
+        * [`BlindedHop`].
+        */
+       public long get_htlc_minimum_msat() {
+               long ret = bindings.PaymentConstraints_get_htlc_minimum_msat(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The minimum value, in msat, that may be accepted by the node corresponding to this
+        * [`BlindedHop`].
+        */
+       public void set_htlc_minimum_msat(long val) {
+               bindings.PaymentConstraints_set_htlc_minimum_msat(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new PaymentConstraints given each field
+        */
+       public static PaymentConstraints of(int max_cltv_expiry_arg, long htlc_minimum_msat_arg) {
+               long ret = bindings.PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
+               Reference.reachabilityFence(max_cltv_expiry_arg);
+               Reference.reachabilityFence(htlc_minimum_msat_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentConstraints ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentConstraints(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.PaymentConstraints_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the PaymentConstraints
+        */
+       public PaymentConstraints clone() {
+               long ret = bindings.PaymentConstraints_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentConstraints ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentConstraints(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the PaymentConstraints object into a byte array which can be read by PaymentConstraints_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.PaymentConstraints_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a PaymentConstraints from a byte array, created by PaymentConstraints_write
+        */
+       public static Result_PaymentConstraintsDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.PaymentConstraints_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentConstraintsDecodeErrorZ ret_hu_conv = Result_PaymentConstraintsDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index 4cc0fbdf65994cdd59e03dd2b7286394b7fa8c91..6d83caf99fc0dc7fd5654bacc4b958033086713b 100644 (file)
@@ -312,4 +312,16 @@ public class PaymentParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Creates parameters for paying to a blinded payee from the provided blinded route hints.
+        */
+       public static PaymentParameters blinded(TwoTuple_BlindedPayInfoBlindedPathZ[] blinded_route_hints) {
+               long ret = bindings.PaymentParameters_blinded(blinded_route_hints != null ? Arrays.stream(blinded_route_hints).mapToLong(blinded_route_hints_conv_37 -> blinded_route_hints_conv_37 != null ? blinded_route_hints_conv_37.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(blinded_route_hints);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentParameters(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
 }
index c149fa3b8429303caf39d4dde87d7f09e8ccbd58..8e98eb57b868f07e0345f5d61cb5bbd425fed052 100644 (file)
@@ -43,7 +43,7 @@ public class PaymentPurpose extends CommonBase {
                 * [`ChannelManager::create_inbound_payment`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment
                 * [`ChannelManager::claim_funds`]: crate::ln::channelmanager::ChannelManager::claim_funds
                */
-               public final org.ldk.structs.Option_PaymentPreimageZ payment_preimage;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ payment_preimage;
                /**
                 * The \"payment secret\". This authenticates the sender to the recipient, preventing a
                 * number of deanonymization attacks during the routing process.
@@ -60,7 +60,7 @@ public class PaymentPurpose extends CommonBase {
                private InvoicePayment(long ptr, bindings.LDKPaymentPurpose.InvoicePayment obj) {
                        super(null, ptr);
                        long payment_preimage = obj.payment_preimage;
-                       org.ldk.structs.Option_PaymentPreimageZ payment_preimage_hu_conv = org.ldk.structs.Option_PaymentPreimageZ.constr_from_ptr(payment_preimage);
+                       org.ldk.structs.Option_ThirtyTwoBytesZ payment_preimage_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(payment_preimage);
                        if (payment_preimage_hu_conv != null) { payment_preimage_hu_conv.ptrs_to.add(this); };
                        this.payment_preimage = payment_preimage_hu_conv;
                        this.payment_secret = obj.payment_secret;
@@ -98,7 +98,7 @@ public class PaymentPurpose extends CommonBase {
        /**
         * Utility method to constructs a new InvoicePayment-variant PaymentPurpose
         */
-       public static PaymentPurpose invoice_payment(org.ldk.structs.Option_PaymentPreimageZ payment_preimage, byte[] payment_secret) {
+       public static PaymentPurpose invoice_payment(org.ldk.structs.Option_ThirtyTwoBytesZ payment_preimage, byte[] payment_secret) {
                long ret = bindings.PaymentPurpose_invoice_payment(payment_preimage.ptr, InternalUtils.check_arr_len(payment_secret, 32));
                Reference.reachabilityFence(payment_preimage);
                Reference.reachabilityFence(payment_secret);
diff --git a/src/main/java/org/ldk/structs/PaymentRelay.java b/src/main/java/org/ldk/structs/PaymentRelay.java
new file mode 100644 (file)
index 0000000..eb864b9
--- /dev/null
@@ -0,0 +1,133 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Parameters for relaying over a given [`BlindedHop`].
+ * 
+ * [`BlindedHop`]: crate::blinded_path::BlindedHop
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class PaymentRelay extends CommonBase {
+       PaymentRelay(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.PaymentRelay_free(ptr); }
+       }
+
+       /**
+        * Number of blocks subtracted from an incoming HTLC's `cltv_expiry` for this [`BlindedHop`].
+        */
+       public short get_cltv_expiry_delta() {
+               short ret = bindings.PaymentRelay_get_cltv_expiry_delta(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Number of blocks subtracted from an incoming HTLC's `cltv_expiry` for this [`BlindedHop`].
+        */
+       public void set_cltv_expiry_delta(short val) {
+               bindings.PaymentRelay_set_cltv_expiry_delta(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Liquidity fee charged (in millionths of the amount transferred) for relaying a payment over
+        * this [`BlindedHop`], (i.e., 10,000 is 1%).
+        */
+       public int get_fee_proportional_millionths() {
+               int ret = bindings.PaymentRelay_get_fee_proportional_millionths(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Liquidity fee charged (in millionths of the amount transferred) for relaying a payment over
+        * this [`BlindedHop`], (i.e., 10,000 is 1%).
+        */
+       public void set_fee_proportional_millionths(int val) {
+               bindings.PaymentRelay_set_fee_proportional_millionths(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Base fee charged (in millisatoshi) for relaying a payment over this [`BlindedHop`].
+        */
+       public int get_fee_base_msat() {
+               int ret = bindings.PaymentRelay_get_fee_base_msat(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Base fee charged (in millisatoshi) for relaying a payment over this [`BlindedHop`].
+        */
+       public void set_fee_base_msat(int val) {
+               bindings.PaymentRelay_set_fee_base_msat(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new PaymentRelay given each field
+        */
+       public static PaymentRelay of(short cltv_expiry_delta_arg, int fee_proportional_millionths_arg, int fee_base_msat_arg) {
+               long ret = bindings.PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
+               Reference.reachabilityFence(cltv_expiry_delta_arg);
+               Reference.reachabilityFence(fee_proportional_millionths_arg);
+               Reference.reachabilityFence(fee_base_msat_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentRelay ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentRelay(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.PaymentRelay_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the PaymentRelay
+        */
+       public PaymentRelay clone() {
+               long ret = bindings.PaymentRelay_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentRelay ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentRelay(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the PaymentRelay object into a byte array which can be read by PaymentRelay_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.PaymentRelay_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a PaymentRelay from a byte array, created by PaymentRelay_write
+        */
+       public static Result_PaymentRelayDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.PaymentRelay_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentRelayDecodeErrorZ ret_hu_conv = Result_PaymentRelayDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index 3f3ddfc3cd5b98c7cf4dd1dc8f1b607ed520ee07..19bf83e59f68dd5038ff476733ee3f294d090764 100644 (file)
@@ -263,4 +263,19 @@ public class PaymentSendFailure extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if two PaymentSendFailures contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public boolean eq(org.ldk.structs.PaymentSendFailure b) {
+               boolean ret = bindings.PaymentSendFailure_eq(this.ptr, b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(b);
+               return ret;
+       }
+
+       @Override public boolean equals(Object o) {
+               if (!(o instanceof PaymentSendFailure)) return false;
+               return this.eq((PaymentSendFailure)o);
+       }
 }
index 426fe73c01b3c62213d85e30da2e05ab43801a37..c12f1d159c57587c0602d994aaf1fadc41ad47ee 100644 (file)
@@ -83,18 +83,18 @@ public class PeerManager extends CommonBase {
         * The returned `Option`s will only be `Some` if an address had been previously given via
         * [`Self::new_outbound_connection`] or [`Self::new_inbound_connection`].
         */
-       public TwoTuple_PublicKeyCOption_NetAddressZZ[] get_peer_node_ids() {
+       public TwoTuple_PublicKeyCOption_SocketAddressZZ[] get_peer_node_ids() {
                long[] ret = bindings.PeerManager_get_peer_node_ids(this.ptr);
                Reference.reachabilityFence(this);
-               int ret_conv_40_len = ret.length;
-               TwoTuple_PublicKeyCOption_NetAddressZZ[] ret_conv_40_arr = new TwoTuple_PublicKeyCOption_NetAddressZZ[ret_conv_40_len];
-               for (int o = 0; o < ret_conv_40_len; o++) {
-                       long ret_conv_40 = ret[o];
-                       TwoTuple_PublicKeyCOption_NetAddressZZ ret_conv_40_hu_conv = new TwoTuple_PublicKeyCOption_NetAddressZZ(null, ret_conv_40);
-                       if (ret_conv_40_hu_conv != null) { ret_conv_40_hu_conv.ptrs_to.add(this); };
-                       ret_conv_40_arr[o] = ret_conv_40_hu_conv;
+               int ret_conv_43_len = ret.length;
+               TwoTuple_PublicKeyCOption_SocketAddressZZ[] ret_conv_43_arr = new TwoTuple_PublicKeyCOption_SocketAddressZZ[ret_conv_43_len];
+               for (int r = 0; r < ret_conv_43_len; r++) {
+                       long ret_conv_43 = ret[r];
+                       TwoTuple_PublicKeyCOption_SocketAddressZZ ret_conv_43_hu_conv = new TwoTuple_PublicKeyCOption_SocketAddressZZ(null, ret_conv_43);
+                       if (ret_conv_43_hu_conv != null) { ret_conv_43_hu_conv.ptrs_to.add(this); };
+                       ret_conv_43_arr[r] = ret_conv_43_hu_conv;
                }
-               return ret_conv_40_arr;
+               return ret_conv_43_arr;
        }
 
        /**
@@ -114,7 +114,7 @@ public class PeerManager extends CommonBase {
         * 
         * [`socket_disconnected`]: PeerManager::socket_disconnected
         */
-       public Result_CVec_u8ZPeerHandleErrorZ new_outbound_connection(byte[] their_node_id, org.ldk.structs.SocketDescriptor descriptor, org.ldk.structs.Option_NetAddressZ remote_network_address) {
+       public Result_CVec_u8ZPeerHandleErrorZ new_outbound_connection(byte[] their_node_id, org.ldk.structs.SocketDescriptor descriptor, org.ldk.structs.Option_SocketAddressZ remote_network_address) {
                long ret = bindings.PeerManager_new_outbound_connection(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), descriptor.ptr, remote_network_address.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(their_node_id);
@@ -144,7 +144,7 @@ public class PeerManager extends CommonBase {
         * 
         * [`socket_disconnected`]: PeerManager::socket_disconnected
         */
-       public Result_NonePeerHandleErrorZ new_inbound_connection(org.ldk.structs.SocketDescriptor descriptor, org.ldk.structs.Option_NetAddressZ remote_network_address) {
+       public Result_NonePeerHandleErrorZ new_inbound_connection(org.ldk.structs.SocketDescriptor descriptor, org.ldk.structs.Option_SocketAddressZ remote_network_address) {
                long ret = bindings.PeerManager_new_inbound_connection(this.ptr, descriptor.ptr, remote_network_address.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(descriptor);
@@ -300,13 +300,13 @@ public class PeerManager extends CommonBase {
         * 
         * [`get_and_clear_pending_msg_events`]: MessageSendEventsProvider::get_and_clear_pending_msg_events
         */
-       public void broadcast_node_announcement(byte[] rgb, byte[] alias, NetAddress[] addresses) {
-               bindings.PeerManager_broadcast_node_announcement(this.ptr, InternalUtils.check_arr_len(rgb, 3), InternalUtils.check_arr_len(alias, 32), addresses != null ? Arrays.stream(addresses).mapToLong(addresses_conv_12 -> addresses_conv_12.ptr).toArray() : null);
+       public void broadcast_node_announcement(byte[] rgb, byte[] alias, SocketAddress[] addresses) {
+               bindings.PeerManager_broadcast_node_announcement(this.ptr, InternalUtils.check_arr_len(rgb, 3), InternalUtils.check_arr_len(alias, 32), addresses != null ? Arrays.stream(addresses).mapToLong(addresses_conv_15 -> addresses_conv_15.ptr).toArray() : null);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(rgb);
                Reference.reachabilityFence(alias);
                Reference.reachabilityFence(addresses);
-               for (NetAddress addresses_conv_12: addresses) { if (this != null) { this.ptrs_to.add(addresses_conv_12); }; };
+               for (SocketAddress addresses_conv_15: addresses) { if (this != null) { this.ptrs_to.add(addresses_conv_15); }; };
        }
 
 }
index 9bd8bde44a4348b61a7731b720b61a3026c4a2ea..db7a6114b84d10f2a8253601422c1a28d75671a0 100644 (file)
@@ -11,23 +11,58 @@ import javax.annotation.Nullable;
  * `Persist` defines behavior for persisting channel monitors: this could mean
  * writing once to disk, and/or uploading to one or more backup services.
  * 
- * Each method can return three possible values:
- * If persistence (including any relevant `fsync()` calls) happens immediately, the
- * implementation should return [`ChannelMonitorUpdateStatus::Completed`], indicating normal
- * channel operation should continue.
- * If persistence happens asynchronously, implementations should first ensure the
- * [`ChannelMonitor`] or [`ChannelMonitorUpdate`] are written durably to disk, and then return
- * [`ChannelMonitorUpdateStatus::InProgress`] while the update continues in the background.
- * Once the update completes, [`ChainMonitor::channel_monitor_updated`] should be called with
- * the corresponding [`MonitorUpdateId`].
+ * Persistence can happen in one of two ways - synchronously completing before the trait method
+ * calls return or asynchronously in the background.
+ * 
+ * # For those implementing synchronous persistence
+ * 
+ * If persistence completes fully (including any relevant `fsync()` calls), the implementation
+ * should return [`ChannelMonitorUpdateStatus::Completed`], indicating normal channel operation
+ * should continue.
+ * 
+ * If persistence fails for some reason, implementations should consider returning
+ * [`ChannelMonitorUpdateStatus::InProgress`] and retry all pending persistence operations in
+ * the background with [`ChainMonitor::list_pending_monitor_updates`] and
+ * [`ChainMonitor::get_monitor`].
+ * 
+ * Once a full [`ChannelMonitor`] has been persisted, all pending updates for that channel can
+ * be marked as complete via [`ChainMonitor::channel_monitor_updated`].
+ * 
+ * If at some point no further progress can be made towards persisting the pending updates, the
+ * node should simply shut down.
+ * 
+ * If the persistence has failed and cannot be retried further (e.g. because of an outage),
+ * [`ChannelMonitorUpdateStatus::UnrecoverableError`] can be used, though this will result in
+ * an immediate panic and future operations in LDK generally failing.
+ * 
+ * # For those implementing asynchronous persistence
+ * 
+ * All calls should generally spawn a background task and immediately return
+ * [`ChannelMonitorUpdateStatus::InProgress`]. Once the update completes,
+ * [`ChainMonitor::channel_monitor_updated`] should be called with the corresponding
+ * [`MonitorUpdateId`].
  * 
  * Note that unlike the direct [`chain::Watch`] interface,
  * [`ChainMonitor::channel_monitor_updated`] must be called once for *each* update which occurs.
  * 
- * If persistence fails for some reason, implementations should return
- * [`ChannelMonitorUpdateStatus::PermanentFailure`], in which case the channel will likely be
- * closed without broadcasting the latest state. See
- * [`ChannelMonitorUpdateStatus::PermanentFailure`] for more details.
+ * If at some point no further progress can be made towards persisting a pending update, the node
+ * should simply shut down. Until then, the background task should either loop indefinitely, or
+ * persistence should be regularly retried with [`ChainMonitor::list_pending_monitor_updates`]
+ * and [`ChainMonitor::get_monitor`] (note that if a full monitor is persisted all pending
+ * monitor updates may be marked completed).
+ * 
+ * # Using remote watchtowers
+ * 
+ * Watchtowers may be updated as a part of an implementation of this trait, utilizing the async
+ * update process described above while the watchtower is being updated. The following methods are
+ * provided for bulding transactions for a watchtower:
+ * [`ChannelMonitor::initial_counterparty_commitment_tx`],
+ * [`ChannelMonitor::counterparty_commitment_txs_from_update`],
+ * [`ChannelMonitor::sign_to_local_justice_tx`], [`TrustedCommitmentTransaction::revokeable_output_index`],
+ * [`TrustedCommitmentTransaction::build_to_local_justice_tx`].
+ * 
+ * [`TrustedCommitmentTransaction::revokeable_output_index`]: crate::ln::chan_utils::TrustedCommitmentTransaction::revokeable_output_index
+ * [`TrustedCommitmentTransaction::build_to_local_justice_tx`]: crate::ln::chan_utils::TrustedCommitmentTransaction::build_to_local_justice_tx
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class Persist extends CommonBase {
@@ -82,8 +117,8 @@ public class Persist extends CommonBase {
                 * updated monitor itself to disk/backups. See the [`Persist`] trait documentation for more
                 * details.
                 * 
-                * During blockchain synchronization operations, this may be called with no
-                * [`ChannelMonitorUpdate`], in which case the full [`ChannelMonitor`] needs to be persisted.
+                * During blockchain synchronization operations, and in some rare cases, this may be called with
+                * no [`ChannelMonitorUpdate`], in which case the full [`ChannelMonitor`] needs to be persisted.
                 * Note that after the full [`ChannelMonitor`] is persisted any previous
                 * [`ChannelMonitorUpdate`]s which were persisted should be discarded - they can no longer be
                 * applied to the persisted [`ChannelMonitor`] as they were already applied.
@@ -179,8 +214,8 @@ public class Persist extends CommonBase {
         * updated monitor itself to disk/backups. See the [`Persist`] trait documentation for more
         * details.
         * 
-        * During blockchain synchronization operations, this may be called with no
-        * [`ChannelMonitorUpdate`], in which case the full [`ChannelMonitor`] needs to be persisted.
+        * During blockchain synchronization operations, and in some rare cases, this may be called with
+        * no [`ChannelMonitorUpdate`], in which case the full [`ChannelMonitor`] needs to be persisted.
         * Note that after the full [`ChannelMonitor`] is persisted any previous
         * [`ChannelMonitorUpdate`]s which were persisted should be discarded - they can no longer be
         * applied to the persisted [`ChannelMonitor`] as they were already applied.
index d735aa249efda015c14bf7c1eca665bac26930b9..3a63215fb06b1e34258b57e1bdf48433914097ec 100644 (file)
@@ -40,15 +40,15 @@ public class Persister extends CommonBase {
                /**
                 * Persist the given ['ChannelManager'] to disk, returning an error if persistence failed.
                 */
-               Result_NoneErrorZ persist_manager(ChannelManager channel_manager);
+               Result_NoneIOErrorZ persist_manager(ChannelManager channel_manager);
                /**
                 * Persist the given [`NetworkGraph`] to disk, returning an error if persistence failed.
                 */
-               Result_NoneErrorZ persist_graph(NetworkGraph network_graph);
+               Result_NoneIOErrorZ persist_graph(NetworkGraph network_graph);
                /**
                 * Persist the given [`WriteableScore`] to disk, returning an error if persistence failed.
                 */
-               Result_NoneErrorZ persist_scorer(WriteableScore scorer);
+               Result_NoneIOErrorZ persist_scorer(WriteableScore scorer);
        }
        private static class LDKPersisterHolder { Persister held; }
        public static Persister new_impl(PersisterInterface arg) {
@@ -56,14 +56,14 @@ public class Persister extends CommonBase {
                impl_holder.held = new Persister(new bindings.LDKPersister() {
                        @Override public long persist_manager(long channel_manager) {
                                org.ldk.structs.ChannelManager channel_manager_hu_conv = null; if (channel_manager < 0 || channel_manager > 4096) { channel_manager_hu_conv = new org.ldk.structs.ChannelManager(null, channel_manager); }
-                               Result_NoneErrorZ ret = arg.persist_manager(channel_manager_hu_conv);
+                               Result_NoneIOErrorZ ret = arg.persist_manager(channel_manager_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long persist_graph(long network_graph) {
                                org.ldk.structs.NetworkGraph network_graph_hu_conv = null; if (network_graph < 0 || network_graph > 4096) { network_graph_hu_conv = new org.ldk.structs.NetworkGraph(null, network_graph); }
-                               Result_NoneErrorZ ret = arg.persist_graph(network_graph_hu_conv);
+                               Result_NoneIOErrorZ ret = arg.persist_graph(network_graph_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -71,7 +71,7 @@ public class Persister extends CommonBase {
                        @Override public long persist_scorer(long scorer) {
                                WriteableScore ret_hu_conv = new WriteableScore(null, scorer);
                                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-                               Result_NoneErrorZ ret = arg.persist_scorer(ret_hu_conv);
+                               Result_NoneIOErrorZ ret = arg.persist_scorer(ret_hu_conv);
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -82,12 +82,12 @@ public class Persister extends CommonBase {
        /**
         * Persist the given ['ChannelManager'] to disk, returning an error if persistence failed.
         */
-       public Result_NoneErrorZ persist_manager(org.ldk.structs.ChannelManager channel_manager) {
+       public Result_NoneIOErrorZ persist_manager(org.ldk.structs.ChannelManager channel_manager) {
                long ret = bindings.Persister_persist_manager(this.ptr, channel_manager == null ? 0 : channel_manager.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(channel_manager);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(channel_manager); };
                return ret_hu_conv;
        }
@@ -95,12 +95,12 @@ public class Persister extends CommonBase {
        /**
         * Persist the given [`NetworkGraph`] to disk, returning an error if persistence failed.
         */
-       public Result_NoneErrorZ persist_graph(org.ldk.structs.NetworkGraph network_graph) {
+       public Result_NoneIOErrorZ persist_graph(org.ldk.structs.NetworkGraph network_graph) {
                long ret = bindings.Persister_persist_graph(this.ptr, network_graph == null ? 0 : network_graph.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(network_graph);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(network_graph); };
                return ret_hu_conv;
        }
@@ -108,12 +108,12 @@ public class Persister extends CommonBase {
        /**
         * Persist the given [`WriteableScore`] to disk, returning an error if persistence failed.
         */
-       public Result_NoneErrorZ persist_scorer(org.ldk.structs.WriteableScore scorer) {
+       public Result_NoneIOErrorZ persist_scorer(org.ldk.structs.WriteableScore scorer) {
                long ret = bindings.Persister_persist_scorer(this.ptr, scorer.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(scorer);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(scorer); };
                return ret_hu_conv;
        }
index bb34752f75c116eb7dbb1d4139f39f3596469fb1..f3791cf6fa43ffefbbcbb827f82a9ebe3d13cf45 100644 (file)
@@ -101,7 +101,7 @@ public class PhantomKeysManager extends CommonBase {
        /**
         * See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
         */
-       public Result_TransactionNoneZ spend_spendable_outputs(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_PackedLockTimeZ locktime) {
+       public Result_TransactionNoneZ spend_spendable_outputs(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_u32Z locktime) {
                long ret = bindings.PhantomKeysManager_spend_spendable_outputs(this.ptr, descriptors != null ? Arrays.stream(descriptors).mapToLong(descriptors_conv_27 -> descriptors_conv_27.ptr).toArray() : null, outputs != null ? Arrays.stream(outputs).mapToLong(outputs_conv_7 -> outputs_conv_7.ptr).toArray() : null, change_destination_script, feerate_sat_per_1000_weight, locktime.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(descriptors);
index b423b9839757bde324ddfdf15619d013a9215bfc..b317cd238390736d48a81c284551e8443fa8201e 100644 (file)
@@ -9,7 +9,7 @@ import javax.annotation.Nullable;
 
 
 /**
- * [`Score`] implementation using channel success probability distributions.
+ * [`ScoreLookUp`] implementation using channel success probability distributions.
  * 
  * Channels are tracked with upper and lower liquidity bounds - when an HTLC fails at a channel,
  * we learn that the upper-bound on the available liquidity is lower than the amount of the HTLC.
@@ -19,7 +19,7 @@ import javax.annotation.Nullable;
  * These bounds are then used to determine a success probability using the formula from
  * Optimally Reliable & Cheap Payment Flows on the Lightning Network* by Rene Pickhardt
  * and Stefan Richter [[1]] (i.e. `(upper_bound - payment_amount) / (upper_bound - lower_bound)`).
- * 
+ * 6762, 1070
  * This probability is combined with the [`liquidity_penalty_multiplier_msat`] and
  * [`liquidity_penalty_amount_multiplier_msat`] parameters to calculate a concrete penalty in
  * milli-satoshis. The penalties, when added across all hops, have the property of being linear in
@@ -104,34 +104,89 @@ public class ProbabilisticScorer extends CommonBase {
         * Query the historical estimated minimum and maximum liquidity available for sending a
         * payment over the channel with `scid` towards the given `target` node.
         * 
-        * Returns two sets of 8 buckets. The first set describes the octiles for lower-bound
-        * liquidity estimates, the second set describes the octiles for upper-bound liquidity
-        * estimates. Each bucket describes the relative frequency at which we've seen a liquidity
-        * bound in the octile relative to the channel's total capacity, on an arbitrary scale.
-        * Because the values are slowly decayed, more recent data points are weighted more heavily
-        * than older datapoints.
+        * Returns two sets of 32 buckets. The first set describes the lower-bound liquidity history,
+        * the second set describes the upper-bound liquidity history. Each bucket describes the
+        * relative frequency at which we've seen a liquidity bound in the bucket's range relative to
+        * the channel's total capacity, on an arbitrary scale. Because the values are slowly decayed,
+        * more recent data points are weighted more heavily than older datapoints.
+        * 
+        * Note that the range of each bucket varies by its location to provide more granular results
+        * at the edges of a channel's capacity, where it is more likely to sit.
         * 
-        * When scoring, the estimated probability that an upper-/lower-bound lies in a given octile
-        * relative to the channel's total capacity is calculated by dividing that bucket's value with
-        * the total of all buckets for the given bound.
+        * When scoring, the estimated probability that an upper-/lower-bound lies in a given bucket
+        * is calculated by dividing that bucket's value with the total value of all buckets.
         * 
-        * For example, a value of `[0, 0, 0, 0, 0, 0, 32]` indicates that we believe the probability
-        * of a bound being in the top octile to be 100%, and have never (recently) seen it in any
-        * other octiles. A value of `[31, 0, 0, 0, 0, 0, 0, 32]` indicates we've seen the bound being
-        * both in the top and bottom octile, and roughly with similar (recent) frequency.
+        * For example, using a lower bucket count for illustrative purposes, a value of
+        * `[0, 0, 0, ..., 0, 32]` indicates that we believe the probability of a bound being very
+        * close to the channel's capacity to be 100%, and have never (recently) seen it in any other
+        * bucket. A value of `[31, 0, 0, ..., 0, 0, 32]` indicates we've seen the bound being both
+        * in the top and bottom bucket, and roughly with similar (recent) frequency.
         * 
         * Because the datapoints are decayed slowly over time, values will eventually return to
-        * `Some(([0; 8], [0; 8]))`.
+        * `Some(([1; 32], [1; 32]))` and then to `None` once no datapoints remain.
+        * 
+        * In order to fetch a single success probability from the buckets provided here, as used in
+        * the scoring model, see [`Self::historical_estimated_payment_success_probability`].
         */
-       public Option_C2Tuple_EightU16sEightU16sZZ historical_estimated_channel_liquidity_probabilities(long scid, org.ldk.structs.NodeId target) {
+       public Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ historical_estimated_channel_liquidity_probabilities(long scid, org.ldk.structs.NodeId target) {
                long ret = bindings.ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(this.ptr, scid, target == null ? 0 : target.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(scid);
                Reference.reachabilityFence(target);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_EightU16sEightU16sZZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ ret_hu_conv = org.ldk.structs.Option_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               if (this != null) { this.ptrs_to.add(target); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Query the probability of payment success sending the given `amount_msat` over the channel
+        * with `scid` towards the given `target` node, based on the historical estimated liquidity
+        * bounds.
+        * 
+        * These are the same bounds as returned by
+        * [`Self::historical_estimated_channel_liquidity_probabilities`] (but not those returned by
+        * [`Self::estimated_channel_liquidity_range`]).
+        */
+       public Option_f64Z historical_estimated_payment_success_probability(long scid, org.ldk.structs.NodeId target, long amount_msat, org.ldk.structs.ProbabilisticScoringFeeParameters params) {
+               long ret = bindings.ProbabilisticScorer_historical_estimated_payment_success_probability(this.ptr, scid, target == null ? 0 : target.ptr, amount_msat, params == null ? 0 : params.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(scid);
+               Reference.reachabilityFence(target);
+               Reference.reachabilityFence(amount_msat);
+               Reference.reachabilityFence(params);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_f64Z ret_hu_conv = org.ldk.structs.Option_f64Z.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                if (this != null) { this.ptrs_to.add(target); };
+               if (this != null) { this.ptrs_to.add(params); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new ScoreLookUp which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreLookUp must be freed before this_arg is
+        */
+       public ScoreLookUp as_ScoreLookUp() {
+               long ret = bindings.ProbabilisticScorer_as_ScoreLookUp(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ScoreLookUp ret_hu_conv = new ScoreLookUp(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new ScoreUpdate which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreUpdate must be freed before this_arg is
+        */
+       public ScoreUpdate as_ScoreUpdate() {
+               long ret = bindings.ProbabilisticScorer_as_ScoreUpdate(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ScoreUpdate ret_hu_conv = new ScoreUpdate(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
 
index d5890db8e461ed1cd758497ce652443dcad4567c..68e5e54529c7227a74c47cf77752877620c8a573 100644 (file)
@@ -49,12 +49,13 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * A multiplier used with the payment amount to calculate a fixed penalty applied to each
-        * channel, in excess of the [`base_penalty_msat`].
+        * A multiplier used with the total amount flowing over a channel to calculate a fixed penalty
+        * applied to each channel, in excess of the [`base_penalty_msat`].
         * 
         * The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
         * fees plus penalty) for large payments. The penalty is computed as the product of this
-        * multiplier and `2^30`ths of the payment amount.
+        * multiplier and `2^30`ths of the total amount flowing over a channel (i.e. the payment
+        * amount plus the amount of any other HTLCs flowing we sent over the same channel).
         * 
         * ie `base_penalty_amount_multiplier_msat * amount_msat / 2^30`
         * 
@@ -69,12 +70,13 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * A multiplier used with the payment amount to calculate a fixed penalty applied to each
-        * channel, in excess of the [`base_penalty_msat`].
+        * A multiplier used with the total amount flowing over a channel to calculate a fixed penalty
+        * applied to each channel, in excess of the [`base_penalty_msat`].
         * 
         * The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
         * fees plus penalty) for large payments. The penalty is computed as the product of this
-        * multiplier and `2^30`ths of the payment amount.
+        * multiplier and `2^30`ths of the total amount flowing over a channel (i.e. the payment
+        * amount plus the amount of any other HTLCs flowing we sent over the same channel).
         * 
         * ie `base_penalty_amount_multiplier_msat * amount_msat / 2^30`
         * 
@@ -137,14 +139,14 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * A multiplier used in conjunction with a payment amount and the negative `log10` of the
-        * channel's success probability for the payment, as determined by our latest estimates of the
-        * channel's liquidity, to determine the amount penalty.
+        * A multiplier used in conjunction with the total amount flowing over a channel and the
+        * negative `log10` of the channel's success probability for the payment, as determined by our
+        * latest estimates of the channel's liquidity, to determine the amount penalty.
         * 
         * The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
         * fees plus penalty) for large payments. The penalty is computed as the product of this
-        * multiplier and `2^20`ths of the payment amount, weighted by the negative `log10` of the
-        * success probability.
+        * multiplier and `2^20`ths of the amount flowing over this channel, weighted by the negative
+        * `log10` of the success probability.
         * 
         * `-log10(success_probability) * liquidity_penalty_amount_multiplier_msat * amount_msat / 2^20`
         * 
@@ -163,14 +165,14 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * A multiplier used in conjunction with a payment amount and the negative `log10` of the
-        * channel's success probability for the payment, as determined by our latest estimates of the
-        * channel's liquidity, to determine the amount penalty.
+        * A multiplier used in conjunction with the total amount flowing over a channel and the
+        * negative `log10` of the channel's success probability for the payment, as determined by our
+        * latest estimates of the channel's liquidity, to determine the amount penalty.
         * 
         * The purpose of the amount penalty is to avoid having fees dominate the channel cost (i.e.,
         * fees plus penalty) for large payments. The penalty is computed as the product of this
-        * multiplier and `2^20`ths of the payment amount, weighted by the negative `log10` of the
-        * success probability.
+        * multiplier and `2^20`ths of the amount flowing over this channel, weighted by the negative
+        * `log10` of the success probability.
         * 
         * `-log10(success_probability) * liquidity_penalty_amount_multiplier_msat * amount_msat / 2^20`
         * 
@@ -233,13 +235,15 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * A multiplier used in conjunction with the payment amount and the negative `log10` of the
-        * channel's success probability for the payment, as determined based on the history of our
-        * estimates of the channel's available liquidity, to determine a penalty.
+        * A multiplier used in conjunction with the total amount flowing over a channel and the
+        * negative `log10` of the channel's success probability for the payment, as determined based
+        * on the history of our estimates of the channel's available liquidity, to determine a
+        * penalty.
         * 
         * The purpose of the amount penalty is to avoid having fees dominate the channel cost for
-        * large payments. The penalty is computed as the product of this multiplier and the `2^20`ths
-        * of the payment amount, weighted by the negative `log10` of the success probability.
+        * large payments. The penalty is computed as the product of this multiplier and `2^20`ths
+        * of the amount flowing over this channel, weighted by the negative `log10` of the success
+        * probability.
         * 
         * This penalty is similar to [`liquidity_penalty_amount_multiplier_msat`], however, instead
         * of using only our latest estimate for the current liquidity available in the channel, it
@@ -259,13 +263,15 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * A multiplier used in conjunction with the payment amount and the negative `log10` of the
-        * channel's success probability for the payment, as determined based on the history of our
-        * estimates of the channel's available liquidity, to determine a penalty.
+        * A multiplier used in conjunction with the total amount flowing over a channel and the
+        * negative `log10` of the channel's success probability for the payment, as determined based
+        * on the history of our estimates of the channel's available liquidity, to determine a
+        * penalty.
         * 
         * The purpose of the amount penalty is to avoid having fees dominate the channel cost for
-        * large payments. The penalty is computed as the product of this multiplier and the `2^20`ths
-        * of the payment amount, weighted by the negative `log10` of the success probability.
+        * large payments. The penalty is computed as the product of this multiplier and `2^20`ths
+        * of the amount flowing over this channel, weighted by the negative `log10` of the success
+        * probability.
         * 
         * This penalty is similar to [`liquidity_penalty_amount_multiplier_msat`], however, instead
         * of using only our latest estimate for the current liquidity available in the channel, it
@@ -315,8 +321,9 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * This penalty is applied when the amount we're attempting to send over a channel exceeds our
-        * current estimate of the channel's available liquidity.
+        * This penalty is applied when the total amount flowing over a channel exceeds our current
+        * estimate of the channel's available liquidity. The total amount is the amount of the
+        * current HTLC plus any HTLCs which we've sent over the same channel.
         * 
         * Note that in this case all other penalties, including the
         * [`liquidity_penalty_multiplier_msat`] and [`liquidity_penalty_amount_multiplier_msat`]-based
@@ -340,8 +347,9 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
        }
 
        /**
-        * This penalty is applied when the amount we're attempting to send over a channel exceeds our
-        * current estimate of the channel's available liquidity.
+        * This penalty is applied when the total amount flowing over a channel exceeds our current
+        * estimate of the channel's available liquidity. The total amount is the amount of the
+        * current HTLC plus any HTLCs which we've sent over the same channel.
         * 
         * Note that in this case all other penalties, including the
         * [`liquidity_penalty_multiplier_msat`] and [`liquidity_penalty_amount_multiplier_msat`]-based
@@ -364,6 +372,62 @@ public class ProbabilisticScoringFeeParameters extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * In order to calculate most of the scores above, we must first convert a lower and upper
+        * bound on the available liquidity in a channel into the probability that we think a payment
+        * will succeed. That probability is derived from a Probability Density Function for where we
+        * think the liquidity in a channel likely lies, given such bounds.
+        * 
+        * If this flag is set, that PDF is simply a constant - we assume that the actual available
+        * liquidity in a channel is just as likely to be at any point between our lower and upper
+        * bounds.
+        * 
+        * If this flag is *not* set, that PDF is `(x - 0.5*capacity) ^ 2`. That is, we use an
+        * exponential curve which expects the liquidity of a channel to lie \"at the edges\". This
+        * matches experimental results - most routing nodes do not aggressively rebalance their
+        * channels and flows in the network are often unbalanced, leaving liquidity usually
+        * unavailable.
+        * 
+        * Thus, for the \"best\" routes, leave this flag `false`. However, the flag does imply a number
+        * of floating-point multiplications in the hottest routing code, which may lead to routing
+        * performance degradation on some machines.
+        * 
+        * Default value: false
+        */
+       public boolean get_linear_success_probability() {
+               boolean ret = bindings.ProbabilisticScoringFeeParameters_get_linear_success_probability(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * In order to calculate most of the scores above, we must first convert a lower and upper
+        * bound on the available liquidity in a channel into the probability that we think a payment
+        * will succeed. That probability is derived from a Probability Density Function for where we
+        * think the liquidity in a channel likely lies, given such bounds.
+        * 
+        * If this flag is set, that PDF is simply a constant - we assume that the actual available
+        * liquidity in a channel is just as likely to be at any point between our lower and upper
+        * bounds.
+        * 
+        * If this flag is *not* set, that PDF is `(x - 0.5*capacity) ^ 2`. That is, we use an
+        * exponential curve which expects the liquidity of a channel to lie \"at the edges\". This
+        * matches experimental results - most routing nodes do not aggressively rebalance their
+        * channels and flows in the network are often unbalanced, leaving liquidity usually
+        * unavailable.
+        * 
+        * Thus, for the \"best\" routes, leave this flag `false`. However, the flag does imply a number
+        * of floating-point multiplications in the hottest routing code, which may lead to routing
+        * performance degradation on some machines.
+        * 
+        * Default value: false
+        */
+       public void set_linear_success_probability(boolean val) {
+               bindings.ProbabilisticScoringFeeParameters_set_linear_success_probability(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
        long clone_ptr() {
                long ret = bindings.ProbabilisticScoringFeeParameters_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
diff --git a/src/main/java/org/ldk/structs/ProbeSendFailure.java b/src/main/java/org/ldk/structs/ProbeSendFailure.java
new file mode 100644 (file)
index 0000000..927c3f4
--- /dev/null
@@ -0,0 +1,114 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Indicates that we failed to send a payment probe. Further errors may be surfaced later via
+ * [`Event::ProbeFailed`].
+ * 
+ * [`Event::ProbeFailed`]: crate::events::Event::ProbeFailed
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ProbeSendFailure extends CommonBase {
+       private ProbeSendFailure(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.ProbeSendFailure_free(ptr); }
+       }
+       static ProbeSendFailure constr_from_ptr(long ptr) {
+               bindings.LDKProbeSendFailure raw_val = bindings.LDKProbeSendFailure_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKProbeSendFailure.RouteNotFound.class) {
+                       return new RouteNotFound(ptr, (bindings.LDKProbeSendFailure.RouteNotFound)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKProbeSendFailure.SendingFailed.class) {
+                       return new SendingFailed(ptr, (bindings.LDKProbeSendFailure.SendingFailed)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * We were unable to find a route to the destination.
+        */
+       public final static class RouteNotFound extends ProbeSendFailure {
+               private RouteNotFound(long ptr, bindings.LDKProbeSendFailure.RouteNotFound obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * We failed to send the payment probes.
+        */
+       public final static class SendingFailed extends ProbeSendFailure {
+               public final org.ldk.structs.PaymentSendFailure sending_failed;
+               private SendingFailed(long ptr, bindings.LDKProbeSendFailure.SendingFailed obj) {
+                       super(null, ptr);
+                       long sending_failed = obj.sending_failed;
+                       org.ldk.structs.PaymentSendFailure sending_failed_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(sending_failed);
+                       if (sending_failed_hu_conv != null) { sending_failed_hu_conv.ptrs_to.add(this); };
+                       this.sending_failed = sending_failed_hu_conv;
+               }
+       }
+       long clone_ptr() {
+               long ret = bindings.ProbeSendFailure_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ProbeSendFailure
+        */
+       public ProbeSendFailure clone() {
+               long ret = bindings.ProbeSendFailure_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ProbeSendFailure ret_hu_conv = org.ldk.structs.ProbeSendFailure.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new RouteNotFound-variant ProbeSendFailure
+        */
+       public static ProbeSendFailure route_not_found() {
+               long ret = bindings.ProbeSendFailure_route_not_found();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ProbeSendFailure ret_hu_conv = org.ldk.structs.ProbeSendFailure.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new SendingFailed-variant ProbeSendFailure
+        */
+       public static ProbeSendFailure sending_failed(org.ldk.structs.PaymentSendFailure a) {
+               long ret = bindings.ProbeSendFailure_sending_failed(a.ptr);
+               Reference.reachabilityFence(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ProbeSendFailure ret_hu_conv = org.ldk.structs.ProbeSendFailure.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(a); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two ProbeSendFailures contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public boolean eq(org.ldk.structs.ProbeSendFailure b) {
+               boolean ret = bindings.ProbeSendFailure_eq(this.ptr, b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(b);
+               return ret;
+       }
+
+       @Override public boolean equals(Object o) {
+               if (!(o instanceof ProbeSendFailure)) return false;
+               return this.eq((ProbeSendFailure)o);
+       }
+}
diff --git a/src/main/java/org/ldk/structs/ProbingError.java b/src/main/java/org/ldk/structs/ProbingError.java
new file mode 100644 (file)
index 0000000..1d98df5
--- /dev/null
@@ -0,0 +1,114 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An error that may occur when sending a payment probe.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ProbingError extends CommonBase {
+       private ProbingError(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.ProbingError_free(ptr); }
+       }
+       static ProbingError constr_from_ptr(long ptr) {
+               bindings.LDKProbingError raw_val = bindings.LDKProbingError_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKProbingError.Invoice.class) {
+                       return new Invoice(ptr, (bindings.LDKProbingError.Invoice)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKProbingError.Sending.class) {
+                       return new Sending(ptr, (bindings.LDKProbingError.Sending)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * An error resulting from the provided [`Bolt11Invoice`].
+        */
+       public final static class Invoice extends ProbingError {
+               public final java.lang.String invoice;
+               private Invoice(long ptr, bindings.LDKProbingError.Invoice obj) {
+                       super(null, ptr);
+                       this.invoice = obj.invoice;
+               }
+       }
+       /**
+        * An error occurring when sending a payment probe.
+        */
+       public final static class Sending extends ProbingError {
+               public final org.ldk.structs.ProbeSendFailure sending;
+               private Sending(long ptr, bindings.LDKProbingError.Sending obj) {
+                       super(null, ptr);
+                       long sending = obj.sending;
+                       org.ldk.structs.ProbeSendFailure sending_hu_conv = org.ldk.structs.ProbeSendFailure.constr_from_ptr(sending);
+                       if (sending_hu_conv != null) { sending_hu_conv.ptrs_to.add(this); };
+                       this.sending = sending_hu_conv;
+               }
+       }
+       long clone_ptr() {
+               long ret = bindings.ProbingError_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ProbingError
+        */
+       public ProbingError clone() {
+               long ret = bindings.ProbingError_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ProbingError ret_hu_conv = org.ldk.structs.ProbingError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new Invoice-variant ProbingError
+        */
+       public static ProbingError invoice(java.lang.String a) {
+               long ret = bindings.ProbingError_invoice(a);
+               Reference.reachabilityFence(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ProbingError ret_hu_conv = org.ldk.structs.ProbingError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new Sending-variant ProbingError
+        */
+       public static ProbingError sending(org.ldk.structs.ProbeSendFailure a) {
+               long ret = bindings.ProbingError_sending(a.ptr);
+               Reference.reachabilityFence(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ProbingError ret_hu_conv = org.ldk.structs.ProbingError.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(a); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two ProbingErrors contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public boolean eq(org.ldk.structs.ProbingError b) {
+               boolean ret = bindings.ProbingError_eq(this.ptr, b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(b);
+               return ret;
+       }
+
+       @Override public boolean equals(Object o) {
+               if (!(o instanceof ProbingError)) return false;
+               return this.eq((ProbingError)o);
+       }
+}
index da5c42112bb32a248a69f3f161de75087b1b5f22..f40cf8c724de29bcfc1980a438cd87a6efd39802 100644 (file)
@@ -180,11 +180,11 @@ public class RawBolt11Invoice extends CommonBase {
                return ret_hu_conv;
        }
 
-       public Option_PaymentSecretZ payment_secret() {
+       public Option_ThirtyTwoBytesZ payment_secret() {
                long ret = bindings.RawBolt11Invoice_payment_secret(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentSecretZ ret_hu_conv = org.ldk.structs.Option_PaymentSecretZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
index b7e08370559c11282b39f002b9e26d3a1acc5612..81f29a32115ef3fdfa425720a76830bd961421f8 100644 (file)
@@ -82,12 +82,12 @@ public class ReadOnlyNetworkGraph extends CommonBase implements AutoCloseable {
         * Returns None if the requested node is completely unknown,
         * or if node announcement for the node was never received.
         */
-       public Option_CVec_NetAddressZZ get_addresses(byte[] pubkey) {
+       public Option_CVec_SocketAddressZZ get_addresses(byte[] pubkey) {
                long ret = bindings.ReadOnlyNetworkGraph_get_addresses(this.ptr, InternalUtils.check_arr_len(pubkey, 33));
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(pubkey);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_CVec_NetAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_NetAddressZZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_CVec_SocketAddressZZ ret_hu_conv = org.ldk.structs.Option_CVec_SocketAddressZZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
diff --git a/src/main/java/org/ldk/structs/ReceiveTlvs.java b/src/main/java/org/ldk/structs/ReceiveTlvs.java
new file mode 100644 (file)
index 0000000..292fdfe
--- /dev/null
@@ -0,0 +1,116 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * Data to construct a [`BlindedHop`] for receiving a payment. This payload is custom to LDK and
+ * may not be valid if received by another lightning implementation.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ReceiveTlvs extends CommonBase {
+       ReceiveTlvs(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.ReceiveTlvs_free(ptr); }
+       }
+
+       /**
+        * Used to authenticate the sender of a payment to the receiver and tie MPP HTLCs together.
+        */
+       public byte[] get_payment_secret() {
+               byte[] ret = bindings.ReceiveTlvs_get_payment_secret(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Used to authenticate the sender of a payment to the receiver and tie MPP HTLCs together.
+        */
+       public void set_payment_secret(byte[] val) {
+               bindings.ReceiveTlvs_set_payment_secret(this.ptr, InternalUtils.check_arr_len(val, 32));
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constraints for the receiver of this payment.
+        */
+       public PaymentConstraints get_payment_constraints() {
+               long ret = bindings.ReceiveTlvs_get_payment_constraints(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PaymentConstraints ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentConstraints(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constraints for the receiver of this payment.
+        */
+       public void set_payment_constraints(org.ldk.structs.PaymentConstraints val) {
+               bindings.ReceiveTlvs_set_payment_constraints(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       /**
+        * Constructs a new ReceiveTlvs given each field
+        */
+       public static ReceiveTlvs of(byte[] payment_secret_arg, org.ldk.structs.PaymentConstraints payment_constraints_arg) {
+               long ret = bindings.ReceiveTlvs_new(InternalUtils.check_arr_len(payment_secret_arg, 32), payment_constraints_arg == null ? 0 : payment_constraints_arg.ptr);
+               Reference.reachabilityFence(payment_secret_arg);
+               Reference.reachabilityFence(payment_constraints_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReceiveTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReceiveTlvs(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_constraints_arg); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.ReceiveTlvs_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the ReceiveTlvs
+        */
+       public ReceiveTlvs clone() {
+               long ret = bindings.ReceiveTlvs_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ReceiveTlvs ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ReceiveTlvs(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the ReceiveTlvs object into a byte array which can be read by ReceiveTlvs_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.ReceiveTlvs_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a ReceiveTlvs from a byte array, created by ReceiveTlvs_write
+        */
+       public static Result_ReceiveTlvsDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.ReceiveTlvs_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReceiveTlvsDecodeErrorZ ret_hu_conv = Result_ReceiveTlvsDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index c543dd73eb802bcca6faed5c7dac4b01f12119b1..895d56a7fc2e3ed7f279f531bbb8864677a626a4 100644 (file)
@@ -22,6 +22,9 @@ public class RecentPaymentDetails extends CommonBase {
        }
        static RecentPaymentDetails constr_from_ptr(long ptr) {
                bindings.LDKRecentPaymentDetails raw_val = bindings.LDKRecentPaymentDetails_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKRecentPaymentDetails.AwaitingInvoice.class) {
+                       return new AwaitingInvoice(ptr, (bindings.LDKRecentPaymentDetails.AwaitingInvoice)raw_val);
+               }
                if (raw_val.getClass() == bindings.LDKRecentPaymentDetails.Pending.class) {
                        return new Pending(ptr, (bindings.LDKRecentPaymentDetails.Pending)raw_val);
                }
@@ -34,10 +37,29 @@ public class RecentPaymentDetails extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When an invoice was requested and thus a payment has not yet been sent.
+        */
+       public final static class AwaitingInvoice extends RecentPaymentDetails {
+               /**
+                * A user-provided identifier in [`ChannelManager::send_payment`] used to uniquely identify
+                * a payment and ensure idempotency in LDK.
+               */
+               public final byte[] payment_id;
+               private AwaitingInvoice(long ptr, bindings.LDKRecentPaymentDetails.AwaitingInvoice obj) {
+                       super(null, ptr);
+                       this.payment_id = obj.payment_id;
+               }
+       }
        /**
         * When a payment is still being sent and awaiting successful delivery.
         */
        public final static class Pending extends RecentPaymentDetails {
+               /**
+                * A user-provided identifier in [`ChannelManager::send_payment`] used to uniquely identify
+                * a payment and ensure idempotency in LDK.
+               */
+               public final byte[] payment_id;
                /**
                 * Hash of the payment that is currently being sent but has yet to be fulfilled or
                 * abandoned.
@@ -50,6 +72,7 @@ public class RecentPaymentDetails extends CommonBase {
                public final long total_msat;
                private Pending(long ptr, bindings.LDKRecentPaymentDetails.Pending obj) {
                        super(null, ptr);
+                       this.payment_id = obj.payment_id;
                        this.payment_hash = obj.payment_hash;
                        this.total_msat = obj.total_msat;
                }
@@ -60,15 +83,21 @@ public class RecentPaymentDetails extends CommonBase {
         * payment is removed from tracking.
         */
        public final static class Fulfilled extends RecentPaymentDetails {
+               /**
+                * A user-provided identifier in [`ChannelManager::send_payment`] used to uniquely identify
+                * a payment and ensure idempotency in LDK.
+               */
+               public final byte[] payment_id;
                /**
                 * Hash of the payment that was claimed. `None` for serializations of [`ChannelManager`]
                 * made before LDK version 0.0.104.
                */
-               public final org.ldk.structs.Option_PaymentHashZ payment_hash;
+               public final org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash;
                private Fulfilled(long ptr, bindings.LDKRecentPaymentDetails.Fulfilled obj) {
                        super(null, ptr);
+                       this.payment_id = obj.payment_id;
                        long payment_hash = obj.payment_hash;
-                       org.ldk.structs.Option_PaymentHashZ payment_hash_hu_conv = org.ldk.structs.Option_PaymentHashZ.constr_from_ptr(payment_hash);
+                       org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(payment_hash);
                        if (payment_hash_hu_conv != null) { payment_hash_hu_conv.ptrs_to.add(this); };
                        this.payment_hash = payment_hash_hu_conv;
                }
@@ -79,12 +108,18 @@ public class RecentPaymentDetails extends CommonBase {
         * pending HTLCs for this payment resolve and an [`Event::PaymentFailed`] is generated.
         */
        public final static class Abandoned extends RecentPaymentDetails {
+               /**
+                * A user-provided identifier in [`ChannelManager::send_payment`] used to uniquely identify
+                * a payment and ensure idempotency in LDK.
+               */
+               public final byte[] payment_id;
                /**
                 * Hash of the payment that we have given up trying to send.
                */
                public final byte[] payment_hash;
                private Abandoned(long ptr, bindings.LDKRecentPaymentDetails.Abandoned obj) {
                        super(null, ptr);
+                       this.payment_id = obj.payment_id;
                        this.payment_hash = obj.payment_hash;
                }
        }
@@ -106,11 +141,24 @@ public class RecentPaymentDetails extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Utility method to constructs a new AwaitingInvoice-variant RecentPaymentDetails
+        */
+       public static RecentPaymentDetails awaiting_invoice(byte[] payment_id) {
+               long ret = bindings.RecentPaymentDetails_awaiting_invoice(InternalUtils.check_arr_len(payment_id, 32));
+               Reference.reachabilityFence(payment_id);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.RecentPaymentDetails ret_hu_conv = org.ldk.structs.RecentPaymentDetails.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
        /**
         * Utility method to constructs a new Pending-variant RecentPaymentDetails
         */
-       public static RecentPaymentDetails pending(byte[] payment_hash, long total_msat) {
-               long ret = bindings.RecentPaymentDetails_pending(InternalUtils.check_arr_len(payment_hash, 32), total_msat);
+       public static RecentPaymentDetails pending(byte[] payment_id, byte[] payment_hash, long total_msat) {
+               long ret = bindings.RecentPaymentDetails_pending(InternalUtils.check_arr_len(payment_id, 32), InternalUtils.check_arr_len(payment_hash, 32), total_msat);
+               Reference.reachabilityFence(payment_id);
                Reference.reachabilityFence(payment_hash);
                Reference.reachabilityFence(total_msat);
                if (ret >= 0 && ret <= 4096) { return null; }
@@ -122,8 +170,9 @@ public class RecentPaymentDetails extends CommonBase {
        /**
         * Utility method to constructs a new Fulfilled-variant RecentPaymentDetails
         */
-       public static RecentPaymentDetails fulfilled(org.ldk.structs.Option_PaymentHashZ payment_hash) {
-               long ret = bindings.RecentPaymentDetails_fulfilled(payment_hash.ptr);
+       public static RecentPaymentDetails fulfilled(byte[] payment_id, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash) {
+               long ret = bindings.RecentPaymentDetails_fulfilled(InternalUtils.check_arr_len(payment_id, 32), payment_hash.ptr);
+               Reference.reachabilityFence(payment_id);
                Reference.reachabilityFence(payment_hash);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RecentPaymentDetails ret_hu_conv = org.ldk.structs.RecentPaymentDetails.constr_from_ptr(ret);
@@ -135,8 +184,9 @@ public class RecentPaymentDetails extends CommonBase {
        /**
         * Utility method to constructs a new Abandoned-variant RecentPaymentDetails
         */
-       public static RecentPaymentDetails abandoned(byte[] payment_hash) {
-               long ret = bindings.RecentPaymentDetails_abandoned(InternalUtils.check_arr_len(payment_hash, 32));
+       public static RecentPaymentDetails abandoned(byte[] payment_id, byte[] payment_hash) {
+               long ret = bindings.RecentPaymentDetails_abandoned(InternalUtils.check_arr_len(payment_id, 32), InternalUtils.check_arr_len(payment_hash, 32));
+               Reference.reachabilityFence(payment_id);
                Reference.reachabilityFence(payment_hash);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RecentPaymentDetails ret_hu_conv = org.ldk.structs.RecentPaymentDetails.constr_from_ptr(ret);
index e33f89057405a40d1cc66e7e835e1717190d3c40..b9ca6082e037f4e31c06dc6aca40f77be19914b9 100644 (file)
@@ -36,11 +36,11 @@ public class RecipientOnionFields extends CommonBase {
         * want to provide a secret for a spontaneous payment if MPP is needed and you know your
         * recipient will not reject it.
         */
-       public Option_PaymentSecretZ get_payment_secret() {
+       public Option_ThirtyTwoBytesZ get_payment_secret() {
                long ret = bindings.RecipientOnionFields_get_payment_secret(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_PaymentSecretZ ret_hu_conv = org.ldk.structs.Option_PaymentSecretZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -58,7 +58,7 @@ public class RecipientOnionFields extends CommonBase {
         * want to provide a secret for a spontaneous payment if MPP is needed and you know your
         * recipient will not reject it.
         */
-       public void set_payment_secret(org.ldk.structs.Option_PaymentSecretZ val) {
+       public void set_payment_secret(org.ldk.structs.Option_ThirtyTwoBytesZ val) {
                bindings.RecipientOnionFields_set_payment_secret(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -111,21 +111,6 @@ public class RecipientOnionFields extends CommonBase {
                if (this != null) { this.ptrs_to.add(val); };
        }
 
-       /**
-        * Constructs a new RecipientOnionFields given each field
-        */
-       public static RecipientOnionFields of(org.ldk.structs.Option_PaymentSecretZ payment_secret_arg, org.ldk.structs.Option_CVec_u8ZZ payment_metadata_arg) {
-               long ret = bindings.RecipientOnionFields_new(payment_secret_arg.ptr, payment_metadata_arg.ptr);
-               Reference.reachabilityFence(payment_secret_arg);
-               Reference.reachabilityFence(payment_metadata_arg);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.RecipientOnionFields ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RecipientOnionFields(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_secret_arg); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_metadata_arg); };
-               return ret_hu_conv;
-       }
-
        long clone_ptr() {
                long ret = bindings.RecipientOnionFields_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
@@ -213,4 +198,51 @@ public class RecipientOnionFields extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Creates a new [`RecipientOnionFields`] from an existing one, adding custom TLVs. Each
+        * TLV is provided as a `(u64, Vec<u8>)` for the type number and serialized value
+        * respectively. TLV type numbers must be unique and within the range
+        * reserved for custom types, i.e. >= 2^16, otherwise this method will return `Err(())`.
+        * 
+        * This method will also error for types in the experimental range which have been
+        * standardized within the protocol, which only includes 5482373484 (keysend) for now.
+        * 
+        * See [`Self::custom_tlvs`] for more info.
+        */
+       public Result_RecipientOnionFieldsNoneZ with_custom_tlvs(TwoTuple_u64CVec_u8ZZ[] custom_tlvs) {
+               long ret = bindings.RecipientOnionFields_with_custom_tlvs(this.ptr, custom_tlvs != null ? Arrays.stream(custom_tlvs).mapToLong(custom_tlvs_conv_23 -> custom_tlvs_conv_23 != null ? custom_tlvs_conv_23.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(custom_tlvs);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RecipientOnionFieldsNoneZ ret_hu_conv = Result_RecipientOnionFieldsNoneZ.constr_from_ptr(ret);
+               if (this != null) { this.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Gets the custom TLVs that will be sent or have been received.
+        * 
+        * Custom TLVs allow sending extra application-specific data with a payment. They provide
+        * additional flexibility on top of payment metadata, as while other implementations may
+        * require `payment_metadata` to reflect metadata provided in an invoice, custom TLVs
+        * do not have this restriction.
+        * 
+        * Note that if this field is non-empty, it will contain strictly increasing TLVs, each
+        * represented by a `(u64, Vec<u8>)` for its type number and serialized value respectively.
+        * This is validated when setting this field using [`Self::with_custom_tlvs`].
+        */
+       public TwoTuple_u64CVec_u8ZZ[] custom_tlvs() {
+               long[] ret = bindings.RecipientOnionFields_custom_tlvs(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_23_len = ret.length;
+               TwoTuple_u64CVec_u8ZZ[] ret_conv_23_arr = new TwoTuple_u64CVec_u8ZZ[ret_conv_23_len];
+               for (int x = 0; x < ret_conv_23_len; x++) {
+                       long ret_conv_23 = ret[x];
+                       TwoTuple_u64CVec_u8ZZ ret_conv_23_hu_conv = new TwoTuple_u64CVec_u8ZZ(null, ret_conv_23);
+                       if (ret_conv_23_hu_conv != null) { ret_conv_23_hu_conv.ptrs_to.add(this); };
+                       ret_conv_23_arr[x] = ret_conv_23_hu_conv;
+               }
+               return ret_conv_23_arr;
+       }
+
 }
index 57c3a0763da500d83c561a3ac24d18359c830c35..f31b52dff25cd3199aff81107bd2882bffece53e 100644 (file)
@@ -63,11 +63,11 @@ public class Refund extends CommonBase {
         * 
         * If `None`, the refund does not expire.
         */
-       public Option_DurationZ absolute_expiry() {
+       public Option_u64Z absolute_expiry() {
                long ret = bindings.Refund_absolute_expiry(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_DurationZ ret_hu_conv = org.ldk.structs.Option_DurationZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -121,8 +121,8 @@ public class Refund extends CommonBase {
         * 
         * [`payer_id`]: Self::payer_id
         */
-       public byte[] metadata() {
-               byte[] ret = bindings.Refund_metadata(this.ptr);
+       public byte[] payer_metadata() {
+               byte[] ret = bindings.Refund_payer_metadata(this.ptr);
                Reference.reachabilityFence(this);
                return ret;
        }
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.java
new file mode 100644 (file)
index 0000000..9b355c0
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ extends CommonBase {
+       private Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_OK extends Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ {
+               public final TwoTuple_BlindedPayInfoBlindedPathZ res;
+               private Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(ptr);
+                       TwoTuple_BlindedPayInfoBlindedPathZ res_hu_conv = new TwoTuple_BlindedPayInfoBlindedPathZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_Err extends Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ {
+               private Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ in the success state.
+        */
+       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ok(org.ldk.structs.TwoTuple_BlindedPayInfoBlindedPathZ o) {
+               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ in the error state.
+        */
+       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ err() {
+               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ clone() {
+               long ret = bindings.CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java
deleted file mode 100644 (file)
index c45dbb2..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonBase {
-       private Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK extends Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ {
-               public final TwoTuple_BlockHashChannelManagerZ res;
-               private Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(ptr);
-                       TwoTuple_BlockHashChannelManagerZ res_hu_conv = new TwoTuple_BlockHashChannelManagerZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err extends Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ {
-               public final DecodeError err;
-               private Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ in the success state.
-        */
-       public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ok(org.ldk.structs.TwoTuple_BlockHashChannelManagerZ o) {
-               long ret = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ in the error state.
-        */
-       public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java
deleted file mode 100644 (file)
index be8c208..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonBase {
-       private Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK extends Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ {
-               public final TwoTuple_BlockHashChannelMonitorZ res;
-               private Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(ptr);
-                       TwoTuple_BlockHashChannelMonitorZ res_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err extends Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ {
-               public final DecodeError err;
-               private Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ in the success state.
-        */
-       public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ok(org.ldk.structs.TwoTuple_BlockHashChannelMonitorZ o) {
-               long ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ in the error state.
-        */
-       public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ clone() {
-               long ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_CVec_u8ZusizeZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_CVec_u8ZusizeZNoneZ.java
new file mode 100644 (file)
index 0000000..a7a878c
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_CVec_u8ZusizeZNoneZ extends CommonBase {
+       private Result_C2Tuple_CVec_u8ZusizeZNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_CVec_u8ZusizeZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_CVec_u8ZusizeZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_CVec_u8ZusizeZNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_CVec_u8ZusizeZNoneZ_OK extends Result_C2Tuple_CVec_u8ZusizeZNoneZ {
+               public final TwoTuple_CVec_u8ZusizeZ res;
+               private Result_C2Tuple_CVec_u8ZusizeZNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(ptr);
+                       TwoTuple_CVec_u8ZusizeZ res_hu_conv = new TwoTuple_CVec_u8ZusizeZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_CVec_u8ZusizeZNoneZ_Err extends Result_C2Tuple_CVec_u8ZusizeZNoneZ {
+               private Result_C2Tuple_CVec_u8ZusizeZNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_CVec_u8ZusizeZNoneZ in the success state.
+        */
+       public static Result_C2Tuple_CVec_u8ZusizeZNoneZ ok(org.ldk.structs.TwoTuple_CVec_u8ZusizeZ o) {
+               long ret = bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_CVec_u8ZusizeZNoneZ ret_hu_conv = Result_C2Tuple_CVec_u8ZusizeZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_CVec_u8ZusizeZNoneZ in the error state.
+        */
+       public static Result_C2Tuple_CVec_u8ZusizeZNoneZ err() {
+               long ret = bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_CVec_u8ZusizeZNoneZ ret_hu_conv = Result_C2Tuple_CVec_u8ZusizeZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_CVec_u8ZusizeZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_CVec_u8ZusizeZNoneZ clone() {
+               long ret = bindings.CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_CVec_u8ZusizeZNoneZ ret_hu_conv = Result_C2Tuple_CVec_u8ZusizeZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.java
new file mode 100644 (file)
index 0000000..250d9eb
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ extends CommonBase {
+       private Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_OK extends Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ {
+               public final TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ res;
+               private Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(ptr);
+                       TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ res_hu_conv = new TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_Err extends Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ {
+               private Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ in the success state.
+        */
+       public static Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ok(org.ldk.structs.TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ o) {
+               long ret = bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_hu_conv = Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ in the error state.
+        */
+       public static Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ err() {
+               long ret = bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_hu_conv = Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ clone() {
+               long ret = bindings.CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_hu_conv = Result_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.java
deleted file mode 100644 (file)
index 8ef4af0..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ extends CommonBase {
-       private Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ_OK extends Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ {
-               public final TwoTuple_PartiallySignedTransactionusizeZ res;
-               private Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(ptr);
-                       TwoTuple_PartiallySignedTransactionusizeZ res_hu_conv = new TwoTuple_PartiallySignedTransactionusizeZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ_Err extends Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ {
-               private Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ in the success state.
-        */
-       public static Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ ok(org.ldk.structs.TwoTuple_PartiallySignedTransactionusizeZ o) {
-               long ret = bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_ok(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ ret_hu_conv = Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ in the error state.
-        */
-       public static Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ err() {
-               long ret = bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ ret_hu_conv = Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ clone() {
-               long ret = bindings.CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ ret_hu_conv = Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.java
deleted file mode 100644 (file)
index 415766c..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ extends CommonBase {
-       private Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(ptr); } super.finalize();
-       }
-
-       static Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_OK extends Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ {
-               public final TwoTuple_PaymentHashPaymentIdZ res;
-               private Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(ptr);
-                       TwoTuple_PaymentHashPaymentIdZ res_hu_conv = new TwoTuple_PaymentHashPaymentIdZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_Err extends Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ {
-               public final PaymentSendFailure err;
-               private Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(ptr);
-                       org.ldk.structs.PaymentSendFailure err_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ in the success state.
-        */
-       public static Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ok(org.ldk.structs.TwoTuple_PaymentHashPaymentIdZ o) {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ in the error state.
-        */
-       public static Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ err(org.ldk.structs.PaymentSendFailure e) {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ clone() {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.java
deleted file mode 100644 (file)
index 5d79cad..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_C2Tuple_PaymentHashPaymentSecretZNoneZ extends CommonBase {
-       private Result_C2Tuple_PaymentHashPaymentSecretZNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_C2Tuple_PaymentHashPaymentSecretZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_PaymentHashPaymentSecretZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_PaymentHashPaymentSecretZNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_C2Tuple_PaymentHashPaymentSecretZNoneZ_OK extends Result_C2Tuple_PaymentHashPaymentSecretZNoneZ {
-               public final TwoTuple_PaymentHashPaymentSecretZ res;
-               private Result_C2Tuple_PaymentHashPaymentSecretZNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(ptr);
-                       TwoTuple_PaymentHashPaymentSecretZ res_hu_conv = new TwoTuple_PaymentHashPaymentSecretZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_C2Tuple_PaymentHashPaymentSecretZNoneZ_Err extends Result_C2Tuple_PaymentHashPaymentSecretZNoneZ {
-               private Result_C2Tuple_PaymentHashPaymentSecretZNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ in the success state.
-        */
-       public static Result_C2Tuple_PaymentHashPaymentSecretZNoneZ ok(org.ldk.structs.TwoTuple_PaymentHashPaymentSecretZ o) {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_ok(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentSecretZNoneZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ in the error state.
-        */
-       public static Result_C2Tuple_PaymentHashPaymentSecretZNoneZ err() {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentSecretZNoneZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_C2Tuple_PaymentHashPaymentSecretZNoneZ clone() {
-               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentSecretZNoneZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ.java
new file mode 100644 (file)
index 0000000..55f4f8a
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ extends CommonBase {
+       private Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ_OK extends Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ {
+               public final TwoTuple_PublicKeyOnionMessageZ res;
+               private Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(ptr);
+                       TwoTuple_PublicKeyOnionMessageZ res_hu_conv = new TwoTuple_PublicKeyOnionMessageZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ_Err extends Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ {
+               public final SendError err;
+               private Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(ptr);
+                       org.ldk.structs.SendError err_hu_conv = org.ldk.structs.SendError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ in the success state.
+        */
+       public static Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ ok(org.ldk.structs.TwoTuple_PublicKeyOnionMessageZ o) {
+               long ret = bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ ret_hu_conv = Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ in the error state.
+        */
+       public static Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ err(org.ldk.structs.SendError e) {
+               long ret = bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ ret_hu_conv = Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.java
deleted file mode 100644 (file)
index eb71084..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ extends CommonBase {
-       private Result_C2Tuple_SignatureCVec_SignatureZZNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_C2Tuple_SignatureCVec_SignatureZZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(ptr)) {
-                       return new Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_OK extends Result_C2Tuple_SignatureCVec_SignatureZZNoneZ {
-               public final TwoTuple_SignatureCVec_SignatureZZ res;
-               private Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(ptr);
-                       TwoTuple_SignatureCVec_SignatureZZ res_hu_conv = new TwoTuple_SignatureCVec_SignatureZZ(null, res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_Err extends Result_C2Tuple_SignatureCVec_SignatureZZNoneZ {
-               private Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ in the success state.
-        */
-       public static Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ok(org.ldk.structs.TwoTuple_SignatureCVec_SignatureZZ o) {
-               long ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(o != null ? o.ptr : 0);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ in the error state.
-        */
-       public static Result_C2Tuple_SignatureCVec_SignatureZZNoneZ err() {
-               long ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ clone() {
-               long ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..ac6e16d
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ extends CommonBase {
+       private Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_OK extends Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ {
+               public final TwoTuple_ThirtyTwoBytesChannelManagerZ res;
+               private Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(ptr);
+                       TwoTuple_ThirtyTwoBytesChannelManagerZ res_hu_conv = new TwoTuple_ThirtyTwoBytesChannelManagerZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_Err extends Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ in the success state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ ok(org.ldk.structs.TwoTuple_ThirtyTwoBytesChannelManagerZ o) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ in the error state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..7b90888
--- /dev/null
@@ -0,0 +1,95 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ extends CommonBase {
+       private Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_OK extends Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ {
+               public final TwoTuple_ThirtyTwoBytesChannelMonitorZ res;
+               private Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(ptr);
+                       TwoTuple_ThirtyTwoBytesChannelMonitorZ res_hu_conv = new TwoTuple_ThirtyTwoBytesChannelMonitorZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_Err extends Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ in the success state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ ok(org.ldk.structs.TwoTuple_ThirtyTwoBytesChannelMonitorZ o) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ in the error state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ clone() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.java
new file mode 100644 (file)
index 0000000..4b3c597
--- /dev/null
@@ -0,0 +1,91 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ extends CommonBase {
+       private Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_OK extends Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ {
+               public final TwoTuple_ThirtyTwoBytesChannelMonitorZ res;
+               private Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(ptr);
+                       TwoTuple_ThirtyTwoBytesChannelMonitorZ res_hu_conv = new TwoTuple_ThirtyTwoBytesChannelMonitorZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_Err extends Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ {
+               public final IOError err;
+               private Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ in the success state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ ok(org.ldk.structs.TwoTuple_ThirtyTwoBytesChannelMonitorZ o) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ in the error state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ err(org.ldk.enums.IOError e) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ clone() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.java
new file mode 100644 (file)
index 0000000..907955e
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ extends CommonBase {
+       private Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_OK extends Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ {
+               public final TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ res;
+               private Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(ptr);
+                       TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ res_hu_conv = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_Err extends Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ {
+               private Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ in the success state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ok(org.ldk.structs.TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ o) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ in the error state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ err() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ clone() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.java b/src/main/java/org/ldk/structs/Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.java
new file mode 100644 (file)
index 0000000..9ab468b
--- /dev/null
@@ -0,0 +1,95 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ extends CommonBase {
+       private Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_free(ptr); } super.finalize();
+       }
+
+       static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok(ptr)) {
+                       return new Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_OK(null, ptr);
+               } else {
+                       return new Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_OK extends Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ {
+               public final TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ res;
+               private Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(ptr);
+                       TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ res_hu_conv = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(null, res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_Err extends Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ {
+               public final PaymentSendFailure err;
+               private Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(ptr);
+                       org.ldk.structs.PaymentSendFailure err_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ in the success state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ok(org.ldk.structs.TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ o) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_ok(o != null ? o.ptr : 0);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ in the error state.
+        */
+       public static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ err(org.ldk.structs.PaymentSendFailure e) {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ clone() {
+               long ret = bindings.CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_COption_KeyPairZNoneZ.java b/src/main/java/org/ldk/structs/Result_COption_KeyPairZNoneZ.java
deleted file mode 100644 (file)
index f66a78e..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_COption_KeyPairZNoneZ extends CommonBase {
-       private Result_COption_KeyPairZNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_COption_KeyPairZNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_COption_KeyPairZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_COption_KeyPairZNoneZ_is_ok(ptr)) {
-                       return new Result_COption_KeyPairZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_COption_KeyPairZNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_COption_KeyPairZNoneZ_OK extends Result_COption_KeyPairZNoneZ {
-               public final Option_KeyPairZ res;
-               private Result_COption_KeyPairZNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_COption_KeyPairZNoneZ_get_ok(ptr);
-                       org.ldk.structs.Option_KeyPairZ res_hu_conv = org.ldk.structs.Option_KeyPairZ.constr_from_ptr(res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_COption_KeyPairZNoneZ_Err extends Result_COption_KeyPairZNoneZ {
-               private Result_COption_KeyPairZNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_COption_KeyPairZNoneZ in the success state.
-        */
-       public static Result_COption_KeyPairZNoneZ ok(org.ldk.structs.Option_KeyPairZ o) {
-               long ret = bindings.CResult_COption_KeyPairZNoneZ_ok(o.ptr);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_KeyPairZNoneZ ret_hu_conv = Result_COption_KeyPairZNoneZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_COption_KeyPairZNoneZ in the error state.
-        */
-       public static Result_COption_KeyPairZNoneZ err() {
-               long ret = bindings.CResult_COption_KeyPairZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_KeyPairZNoneZ ret_hu_conv = Result_COption_KeyPairZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_COption_KeyPairZNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_COption_KeyPairZNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_COption_KeyPairZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_COption_KeyPairZNoneZ clone() {
-               long ret = bindings.CResult_COption_KeyPairZNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_COption_KeyPairZNoneZ ret_hu_conv = Result_COption_KeyPairZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.java b/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.java
deleted file mode 100644 (file)
index e5c7ba6..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ extends CommonBase {
-       private Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(ptr)) {
-                       return new Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_OK extends Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ {
-               public final TwoTuple_BlockHashChannelMonitorZ[] res;
-               private Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long[] res = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(ptr);
-                       int res_conv_35_len = res.length;
-                       TwoTuple_BlockHashChannelMonitorZ[] res_conv_35_arr = new TwoTuple_BlockHashChannelMonitorZ[res_conv_35_len];
-                       for (int j = 0; j < res_conv_35_len; j++) {
-                               long res_conv_35 = res[j];
-                               TwoTuple_BlockHashChannelMonitorZ res_conv_35_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, res_conv_35);
-                               if (res_conv_35_hu_conv != null) { res_conv_35_hu_conv.ptrs_to.add(this); };
-                               res_conv_35_arr[j] = res_conv_35_hu_conv;
-                       }
-                       this.res = res_conv_35_arr;
-               }
-       }
-
-       public static final class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_Err extends Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ {
-               public final IOError err;
-               private Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.err = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ in the success state.
-        */
-       public static Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ ok(TwoTuple_BlockHashChannelMonitorZ[] o) {
-               long ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok(o != null ? Arrays.stream(o).mapToLong(o_conv_35 -> o_conv_35 != null ? o_conv_35.ptr : 0).toArray() : null);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ ret_hu_conv = Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ in the error state.
-        */
-       public static Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ err(org.ldk.enums.IOError e) {
-               long ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(e);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ ret_hu_conv = Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ clone() {
-               long ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ ret_hu_conv = Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.java b/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.java
new file mode 100644 (file)
index 0000000..8416d01
--- /dev/null
@@ -0,0 +1,97 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ extends CommonBase {
+       private Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok(ptr)) {
+                       return new Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_OK extends Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ {
+               public final TwoTuple_ThirtyTwoBytesChannelMonitorZ[] res;
+               private Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long[] res = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(ptr);
+                       int res_conv_40_len = res.length;
+                       TwoTuple_ThirtyTwoBytesChannelMonitorZ[] res_conv_40_arr = new TwoTuple_ThirtyTwoBytesChannelMonitorZ[res_conv_40_len];
+                       for (int o = 0; o < res_conv_40_len; o++) {
+                               long res_conv_40 = res[o];
+                               TwoTuple_ThirtyTwoBytesChannelMonitorZ res_conv_40_hu_conv = new TwoTuple_ThirtyTwoBytesChannelMonitorZ(null, res_conv_40);
+                               if (res_conv_40_hu_conv != null) { res_conv_40_hu_conv.ptrs_to.add(this); };
+                               res_conv_40_arr[o] = res_conv_40_hu_conv;
+                       }
+                       this.res = res_conv_40_arr;
+               }
+       }
+
+       public static final class Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_Err extends Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ {
+               public final IOError err;
+               private Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ in the success state.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ok(TwoTuple_ThirtyTwoBytesChannelMonitorZ[] o) {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_ok(o != null ? Arrays.stream(o).mapToLong(o_conv_40 -> o_conv_40 != null ? o_conv_40.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ in the error state.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ err(org.ldk.enums.IOError e) {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ clone() {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.java b/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.java
new file mode 100644 (file)
index 0000000..e32bc76
--- /dev/null
@@ -0,0 +1,101 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ extends CommonBase {
+       private Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok(ptr)) {
+                       return new Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_OK extends Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ {
+               public final TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[] res;
+               private Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long[] res = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(ptr);
+                       int res_conv_40_len = res.length;
+                       TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[] res_conv_40_arr = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[res_conv_40_len];
+                       for (int o = 0; o < res_conv_40_len; o++) {
+                               long res_conv_40 = res[o];
+                               TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ res_conv_40_hu_conv = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(null, res_conv_40);
+                               if (res_conv_40_hu_conv != null) { res_conv_40_hu_conv.ptrs_to.add(this); };
+                               res_conv_40_arr[o] = res_conv_40_hu_conv;
+                       }
+                       this.res = res_conv_40_arr;
+               }
+       }
+
+       public static final class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_Err extends Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ {
+               public final ProbeSendFailure err;
+               private Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(ptr);
+                       org.ldk.structs.ProbeSendFailure err_hu_conv = org.ldk.structs.ProbeSendFailure.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ in the success state.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ok(TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[] o) {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_ok(o != null ? Arrays.stream(o).mapToLong(o_conv_40 -> o_conv_40 != null ? o_conv_40.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ in the error state.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ err(org.ldk.structs.ProbeSendFailure e) {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ clone() {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.java b/src/main/java/org/ldk/structs/Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.java
new file mode 100644 (file)
index 0000000..80ec6a3
--- /dev/null
@@ -0,0 +1,101 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ extends CommonBase {
+       private Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok(ptr)) {
+                       return new Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_OK extends Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ {
+               public final TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[] res;
+               private Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long[] res = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(ptr);
+                       int res_conv_40_len = res.length;
+                       TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[] res_conv_40_arr = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[res_conv_40_len];
+                       for (int o = 0; o < res_conv_40_len; o++) {
+                               long res_conv_40 = res[o];
+                               TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ res_conv_40_hu_conv = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(null, res_conv_40);
+                               if (res_conv_40_hu_conv != null) { res_conv_40_hu_conv.ptrs_to.add(this); };
+                               res_conv_40_arr[o] = res_conv_40_hu_conv;
+                       }
+                       this.res = res_conv_40_arr;
+               }
+       }
+
+       public static final class Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_Err extends Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ {
+               public final ProbingError err;
+               private Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(ptr);
+                       org.ldk.structs.ProbingError err_hu_conv = org.ldk.structs.ProbingError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ in the success state.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ ok(TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ[] o) {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_ok(o != null ? Arrays.stream(o).mapToLong(o_conv_40 -> o_conv_40 != null ? o_conv_40.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ in the error state.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ err(org.ldk.structs.ProbingError e) {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ clone() {
+               long ret = bindings.CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_ECDSASignatureZNoneZ.java b/src/main/java/org/ldk/structs/Result_CVec_ECDSASignatureZNoneZ.java
new file mode 100644 (file)
index 0000000..1c6f0d3
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_ECDSASignatureZNoneZ extends CommonBase {
+       private Result_CVec_ECDSASignatureZNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_ECDSASignatureZNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_ECDSASignatureZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_ECDSASignatureZNoneZ_is_ok(ptr)) {
+                       return new Result_CVec_ECDSASignatureZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_ECDSASignatureZNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_ECDSASignatureZNoneZ_OK extends Result_CVec_ECDSASignatureZNoneZ {
+               public final byte[][] res;
+               private Result_CVec_ECDSASignatureZNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_CVec_ECDSASignatureZNoneZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_CVec_ECDSASignatureZNoneZ_Err extends Result_CVec_ECDSASignatureZNoneZ {
+               private Result_CVec_ECDSASignatureZNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_ECDSASignatureZNoneZ in the success state.
+        */
+       public static Result_CVec_ECDSASignatureZNoneZ ok(byte[][] o) {
+               long ret = bindings.CResult_CVec_ECDSASignatureZNoneZ_ok(o != null ? Arrays.stream(o).map(o_conv_8 -> InternalUtils.check_arr_len(o_conv_8, 64)).toArray(byte[][]::new) : null);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_ECDSASignatureZNoneZ ret_hu_conv = Result_CVec_ECDSASignatureZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_ECDSASignatureZNoneZ in the error state.
+        */
+       public static Result_CVec_ECDSASignatureZNoneZ err() {
+               long ret = bindings.CResult_CVec_ECDSASignatureZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_ECDSASignatureZNoneZ ret_hu_conv = Result_CVec_ECDSASignatureZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_ECDSASignatureZNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_ECDSASignatureZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_ECDSASignatureZNoneZ clone() {
+               long ret = bindings.CResult_CVec_ECDSASignatureZNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_ECDSASignatureZNoneZ ret_hu_conv = Result_CVec_ECDSASignatureZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_SignatureZNoneZ.java b/src/main/java/org/ldk/structs/Result_CVec_SignatureZNoneZ.java
deleted file mode 100644 (file)
index dcc227d..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_CVec_SignatureZNoneZ extends CommonBase {
-       private Result_CVec_SignatureZNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_CVec_SignatureZNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_CVec_SignatureZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_CVec_SignatureZNoneZ_is_ok(ptr)) {
-                       return new Result_CVec_SignatureZNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_CVec_SignatureZNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_CVec_SignatureZNoneZ_OK extends Result_CVec_SignatureZNoneZ {
-               public final byte[][] res;
-               private Result_CVec_SignatureZNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_CVec_SignatureZNoneZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_CVec_SignatureZNoneZ_Err extends Result_CVec_SignatureZNoneZ {
-               private Result_CVec_SignatureZNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_CVec_SignatureZNoneZ in the success state.
-        */
-       public static Result_CVec_SignatureZNoneZ ok(byte[][] o) {
-               long ret = bindings.CResult_CVec_SignatureZNoneZ_ok(o != null ? Arrays.stream(o).map(o_conv_8 -> InternalUtils.check_arr_len(o_conv_8, 64)).toArray(byte[][]::new) : null);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_CVec_SignatureZNoneZ in the error state.
-        */
-       public static Result_CVec_SignatureZNoneZ err() {
-               long ret = bindings.CResult_CVec_SignatureZNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_CVec_SignatureZNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_CVec_SignatureZNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_CVec_SignatureZNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_CVec_SignatureZNoneZ clone() {
-               long ret = bindings.CResult_CVec_SignatureZNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_StrZIOErrorZ.java b/src/main/java/org/ldk/structs/Result_CVec_StrZIOErrorZ.java
new file mode 100644 (file)
index 0000000..cc4ac52
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_StrZIOErrorZ extends CommonBase {
+       private Result_CVec_StrZIOErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_StrZIOErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_StrZIOErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_StrZIOErrorZ_is_ok(ptr)) {
+                       return new Result_CVec_StrZIOErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_StrZIOErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_StrZIOErrorZ_OK extends Result_CVec_StrZIOErrorZ {
+               public final String[] res;
+               private Result_CVec_StrZIOErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_CVec_StrZIOErrorZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_CVec_StrZIOErrorZ_Err extends Result_CVec_StrZIOErrorZ {
+               public final IOError err;
+               private Result_CVec_StrZIOErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_CVec_StrZIOErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_StrZIOErrorZ in the success state.
+        */
+       public static Result_CVec_StrZIOErrorZ ok(String[] o) {
+               long ret = bindings.CResult_CVec_StrZIOErrorZ_ok(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_StrZIOErrorZ ret_hu_conv = Result_CVec_StrZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_StrZIOErrorZ in the error state.
+        */
+       public static Result_CVec_StrZIOErrorZ err(org.ldk.enums.IOError e) {
+               long ret = bindings.CResult_CVec_StrZIOErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_StrZIOErrorZ ret_hu_conv = Result_CVec_StrZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_StrZIOErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_StrZIOErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_StrZIOErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_StrZIOErrorZ clone() {
+               long ret = bindings.CResult_CVec_StrZIOErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_StrZIOErrorZ ret_hu_conv = Result_CVec_StrZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_u8ZIOErrorZ.java b/src/main/java/org/ldk/structs/Result_CVec_u8ZIOErrorZ.java
new file mode 100644 (file)
index 0000000..047148d
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_u8ZIOErrorZ extends CommonBase {
+       private Result_CVec_u8ZIOErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_u8ZIOErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_u8ZIOErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_u8ZIOErrorZ_is_ok(ptr)) {
+                       return new Result_CVec_u8ZIOErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_u8ZIOErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_u8ZIOErrorZ_OK extends Result_CVec_u8ZIOErrorZ {
+               public final byte[] res;
+               private Result_CVec_u8ZIOErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_CVec_u8ZIOErrorZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_CVec_u8ZIOErrorZ_Err extends Result_CVec_u8ZIOErrorZ {
+               public final IOError err;
+               private Result_CVec_u8ZIOErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_CVec_u8ZIOErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_u8ZIOErrorZ in the success state.
+        */
+       public static Result_CVec_u8ZIOErrorZ ok(byte[] o) {
+               long ret = bindings.CResult_CVec_u8ZIOErrorZ_ok(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZIOErrorZ ret_hu_conv = Result_CVec_u8ZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_u8ZIOErrorZ in the error state.
+        */
+       public static Result_CVec_u8ZIOErrorZ err(org.ldk.enums.IOError e) {
+               long ret = bindings.CResult_CVec_u8ZIOErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZIOErrorZ ret_hu_conv = Result_CVec_u8ZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_u8ZIOErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_u8ZIOErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_u8ZIOErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_u8ZIOErrorZ clone() {
+               long ret = bindings.CResult_CVec_u8ZIOErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZIOErrorZ ret_hu_conv = Result_CVec_u8ZIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_CVec_u8ZNoneZ.java b/src/main/java/org/ldk/structs/Result_CVec_u8ZNoneZ.java
new file mode 100644 (file)
index 0000000..a0d450f
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_CVec_u8ZNoneZ extends CommonBase {
+       private Result_CVec_u8ZNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_CVec_u8ZNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_CVec_u8ZNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_CVec_u8ZNoneZ_is_ok(ptr)) {
+                       return new Result_CVec_u8ZNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_CVec_u8ZNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_CVec_u8ZNoneZ_OK extends Result_CVec_u8ZNoneZ {
+               public final byte[] res;
+               private Result_CVec_u8ZNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_CVec_u8ZNoneZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_CVec_u8ZNoneZ_Err extends Result_CVec_u8ZNoneZ {
+               private Result_CVec_u8ZNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_CVec_u8ZNoneZ in the success state.
+        */
+       public static Result_CVec_u8ZNoneZ ok(byte[] o) {
+               long ret = bindings.CResult_CVec_u8ZNoneZ_ok(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_CVec_u8ZNoneZ in the error state.
+        */
+       public static Result_CVec_u8ZNoneZ err() {
+               long ret = bindings.CResult_CVec_u8ZNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_u8ZNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_u8ZNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_CVec_u8ZNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_CVec_u8ZNoneZ clone() {
+               long ret = bindings.CResult_CVec_u8ZNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ChannelDerivationParametersDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ChannelDerivationParametersDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..7da2e62
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ChannelDerivationParametersDecodeErrorZ extends CommonBase {
+       private Result_ChannelDerivationParametersDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ChannelDerivationParametersDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ChannelDerivationParametersDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ChannelDerivationParametersDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ChannelDerivationParametersDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ChannelDerivationParametersDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ChannelDerivationParametersDecodeErrorZ_OK extends Result_ChannelDerivationParametersDecodeErrorZ {
+               public final ChannelDerivationParameters res;
+               private Result_ChannelDerivationParametersDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.ChannelDerivationParameters res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.ChannelDerivationParameters(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ChannelDerivationParametersDecodeErrorZ_Err extends Result_ChannelDerivationParametersDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ChannelDerivationParametersDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ChannelDerivationParametersDecodeErrorZ in the success state.
+        */
+       public static Result_ChannelDerivationParametersDecodeErrorZ ok(org.ldk.structs.ChannelDerivationParameters o) {
+               long ret = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelDerivationParametersDecodeErrorZ ret_hu_conv = Result_ChannelDerivationParametersDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ChannelDerivationParametersDecodeErrorZ in the error state.
+        */
+       public static Result_ChannelDerivationParametersDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelDerivationParametersDecodeErrorZ ret_hu_conv = Result_ChannelDerivationParametersDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ChannelDerivationParametersDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ChannelDerivationParametersDecodeErrorZ clone() {
+               long ret = bindings.CResult_ChannelDerivationParametersDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelDerivationParametersDecodeErrorZ ret_hu_conv = Result_ChannelDerivationParametersDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateStatusNoneZ.java b/src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateStatusNoneZ.java
new file mode 100644 (file)
index 0000000..e1f8147
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ChannelMonitorUpdateStatusNoneZ extends CommonBase {
+       private Result_ChannelMonitorUpdateStatusNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ChannelMonitorUpdateStatusNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ChannelMonitorUpdateStatusNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ChannelMonitorUpdateStatusNoneZ_is_ok(ptr)) {
+                       return new Result_ChannelMonitorUpdateStatusNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_ChannelMonitorUpdateStatusNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ChannelMonitorUpdateStatusNoneZ_OK extends Result_ChannelMonitorUpdateStatusNoneZ {
+               public final ChannelMonitorUpdateStatus res;
+               private Result_ChannelMonitorUpdateStatusNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ChannelMonitorUpdateStatusNoneZ_Err extends Result_ChannelMonitorUpdateStatusNoneZ {
+               private Result_ChannelMonitorUpdateStatusNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_ChannelMonitorUpdateStatusNoneZ in the success state.
+        */
+       public static Result_ChannelMonitorUpdateStatusNoneZ ok(org.ldk.enums.ChannelMonitorUpdateStatus o) {
+               long ret = bindings.CResult_ChannelMonitorUpdateStatusNoneZ_ok(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelMonitorUpdateStatusNoneZ ret_hu_conv = Result_ChannelMonitorUpdateStatusNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ChannelMonitorUpdateStatusNoneZ in the error state.
+        */
+       public static Result_ChannelMonitorUpdateStatusNoneZ err() {
+               long ret = bindings.CResult_ChannelMonitorUpdateStatusNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelMonitorUpdateStatusNoneZ ret_hu_conv = Result_ChannelMonitorUpdateStatusNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelMonitorUpdateStatusNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ChannelMonitorUpdateStatusNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ChannelMonitorUpdateStatusNoneZ clone() {
+               long ret = bindings.CResult_ChannelMonitorUpdateStatusNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelMonitorUpdateStatusNoneZ ret_hu_conv = Result_ChannelMonitorUpdateStatusNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ClaimedHTLCDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ClaimedHTLCDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..842ceb7
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ClaimedHTLCDecodeErrorZ extends CommonBase {
+       private Result_ClaimedHTLCDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ClaimedHTLCDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ClaimedHTLCDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ClaimedHTLCDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ClaimedHTLCDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ClaimedHTLCDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ClaimedHTLCDecodeErrorZ_OK extends Result_ClaimedHTLCDecodeErrorZ {
+               public final ClaimedHTLC res;
+               private Result_ClaimedHTLCDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_ClaimedHTLCDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.ClaimedHTLC res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.ClaimedHTLC(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ClaimedHTLCDecodeErrorZ_Err extends Result_ClaimedHTLCDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ClaimedHTLCDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_ClaimedHTLCDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ClaimedHTLCDecodeErrorZ in the success state.
+        */
+       public static Result_ClaimedHTLCDecodeErrorZ ok(org.ldk.structs.ClaimedHTLC o) {
+               long ret = bindings.CResult_ClaimedHTLCDecodeErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ClaimedHTLCDecodeErrorZ ret_hu_conv = Result_ClaimedHTLCDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ClaimedHTLCDecodeErrorZ in the error state.
+        */
+       public static Result_ClaimedHTLCDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_ClaimedHTLCDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ClaimedHTLCDecodeErrorZ ret_hu_conv = Result_ClaimedHTLCDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ClaimedHTLCDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ClaimedHTLCDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ClaimedHTLCDecodeErrorZ clone() {
+               long ret = bindings.CResult_ClaimedHTLCDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ClaimedHTLCDecodeErrorZ ret_hu_conv = Result_ClaimedHTLCDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ECDSASignatureNoneZ.java b/src/main/java/org/ldk/structs/Result_ECDSASignatureNoneZ.java
new file mode 100644 (file)
index 0000000..7e32f8e
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ECDSASignatureNoneZ extends CommonBase {
+       private Result_ECDSASignatureNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ECDSASignatureNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ECDSASignatureNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ECDSASignatureNoneZ_is_ok(ptr)) {
+                       return new Result_ECDSASignatureNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_ECDSASignatureNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ECDSASignatureNoneZ_OK extends Result_ECDSASignatureNoneZ {
+               public final byte[] res;
+               private Result_ECDSASignatureNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ECDSASignatureNoneZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ECDSASignatureNoneZ_Err extends Result_ECDSASignatureNoneZ {
+               private Result_ECDSASignatureNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_ECDSASignatureNoneZ in the success state.
+        */
+       public static Result_ECDSASignatureNoneZ ok(byte[] o) {
+               long ret = bindings.CResult_ECDSASignatureNoneZ_ok(InternalUtils.check_arr_len(o, 64));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ECDSASignatureNoneZ in the error state.
+        */
+       public static Result_ECDSASignatureNoneZ err() {
+               long ret = bindings.CResult_ECDSASignatureNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ECDSASignatureNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ECDSASignatureNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ECDSASignatureNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ECDSASignatureNoneZ clone() {
+               long ret = bindings.CResult_ECDSASignatureNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ECDSASignatureNoneZ ret_hu_conv = Result_ECDSASignatureNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_HTLCDescriptorDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_HTLCDescriptorDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..644bf99
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_HTLCDescriptorDecodeErrorZ extends CommonBase {
+       private Result_HTLCDescriptorDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_HTLCDescriptorDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_HTLCDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_HTLCDescriptorDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_HTLCDescriptorDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_HTLCDescriptorDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_HTLCDescriptorDecodeErrorZ_OK extends Result_HTLCDescriptorDecodeErrorZ {
+               public final HTLCDescriptor res;
+               private Result_HTLCDescriptorDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_HTLCDescriptorDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.HTLCDescriptor res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.HTLCDescriptor(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_HTLCDescriptorDecodeErrorZ_Err extends Result_HTLCDescriptorDecodeErrorZ {
+               public final DecodeError err;
+               private Result_HTLCDescriptorDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_HTLCDescriptorDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_HTLCDescriptorDecodeErrorZ in the success state.
+        */
+       public static Result_HTLCDescriptorDecodeErrorZ ok(org.ldk.structs.HTLCDescriptor o) {
+               long ret = bindings.CResult_HTLCDescriptorDecodeErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HTLCDescriptorDecodeErrorZ ret_hu_conv = Result_HTLCDescriptorDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_HTLCDescriptorDecodeErrorZ in the error state.
+        */
+       public static Result_HTLCDescriptorDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_HTLCDescriptorDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HTLCDescriptorDecodeErrorZ ret_hu_conv = Result_HTLCDescriptorDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HTLCDescriptorDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_HTLCDescriptorDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_HTLCDescriptorDecodeErrorZ clone() {
+               long ret = bindings.CResult_HTLCDescriptorDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_HTLCDescriptorDecodeErrorZ ret_hu_conv = Result_HTLCDescriptorDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_NetAddressDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_NetAddressDecodeErrorZ.java
deleted file mode 100644 (file)
index 312de2c..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_NetAddressDecodeErrorZ extends CommonBase {
-       private Result_NetAddressDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_NetAddressDecodeErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_NetAddressDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_NetAddressDecodeErrorZ_is_ok(ptr)) {
-                       return new Result_NetAddressDecodeErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_NetAddressDecodeErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_NetAddressDecodeErrorZ_OK extends Result_NetAddressDecodeErrorZ {
-               public final NetAddress res;
-               private Result_NetAddressDecodeErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_NetAddressDecodeErrorZ_get_ok(ptr);
-                       org.ldk.structs.NetAddress res_hu_conv = org.ldk.structs.NetAddress.constr_from_ptr(res);
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_NetAddressDecodeErrorZ_Err extends Result_NetAddressDecodeErrorZ {
-               public final DecodeError err;
-               private Result_NetAddressDecodeErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_NetAddressDecodeErrorZ_get_err(ptr);
-                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_NetAddressDecodeErrorZ in the success state.
-        */
-       public static Result_NetAddressDecodeErrorZ ok(org.ldk.structs.NetAddress o) {
-               long ret = bindings.CResult_NetAddressDecodeErrorZ_ok(o.ptr);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NetAddressDecodeErrorZ ret_hu_conv = Result_NetAddressDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_NetAddressDecodeErrorZ in the error state.
-        */
-       public static Result_NetAddressDecodeErrorZ err(org.ldk.structs.DecodeError e) {
-               long ret = bindings.CResult_NetAddressDecodeErrorZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NetAddressDecodeErrorZ ret_hu_conv = Result_NetAddressDecodeErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_NetAddressDecodeErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_NetAddressDecodeErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_NetAddressDecodeErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_NetAddressDecodeErrorZ clone() {
-               long ret = bindings.CResult_NetAddressDecodeErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NetAddressDecodeErrorZ ret_hu_conv = Result_NetAddressDecodeErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_NoneErrorZ.java b/src/main/java/org/ldk/structs/Result_NoneErrorZ.java
deleted file mode 100644 (file)
index fcc1c2a..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_NoneErrorZ extends CommonBase {
-       private Result_NoneErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_NoneErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_NoneErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_NoneErrorZ_is_ok(ptr)) {
-                       return new Result_NoneErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_NoneErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_NoneErrorZ_OK extends Result_NoneErrorZ {
-               private Result_NoneErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       public static final class Result_NoneErrorZ_Err extends Result_NoneErrorZ {
-               public final IOError err;
-               private Result_NoneErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.err = bindings.CResult_NoneErrorZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_NoneErrorZ in the success state.
-        */
-       public static Result_NoneErrorZ ok() {
-               long ret = bindings.CResult_NoneErrorZ_ok();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_NoneErrorZ in the error state.
-        */
-       public static Result_NoneErrorZ err(org.ldk.enums.IOError e) {
-               long ret = bindings.CResult_NoneErrorZ_err(e);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_NoneErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_NoneErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_NoneErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_NoneErrorZ clone() {
-               long ret = bindings.CResult_NoneErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_NoneIOErrorZ.java b/src/main/java/org/ldk/structs/Result_NoneIOErrorZ.java
new file mode 100644 (file)
index 0000000..38c7ae6
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_NoneIOErrorZ extends CommonBase {
+       private Result_NoneIOErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_NoneIOErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_NoneIOErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_NoneIOErrorZ_is_ok(ptr)) {
+                       return new Result_NoneIOErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_NoneIOErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_NoneIOErrorZ_OK extends Result_NoneIOErrorZ {
+               private Result_NoneIOErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       public static final class Result_NoneIOErrorZ_Err extends Result_NoneIOErrorZ {
+               public final IOError err;
+               private Result_NoneIOErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_NoneIOErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_NoneIOErrorZ in the success state.
+        */
+       public static Result_NoneIOErrorZ ok() {
+               long ret = bindings.CResult_NoneIOErrorZ_ok();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_NoneIOErrorZ in the error state.
+        */
+       public static Result_NoneIOErrorZ err(org.ldk.enums.IOError e) {
+               long ret = bindings.CResult_NoneIOErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneIOErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneIOErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_NoneIOErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_NoneIOErrorZ clone() {
+               long ret = bindings.CResult_NoneIOErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_NoneIOErrorZ ret_hu_conv = Result_NoneIOErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_PartiallySignedTransactionNoneZ.java b/src/main/java/org/ldk/structs/Result_PartiallySignedTransactionNoneZ.java
deleted file mode 100644 (file)
index 8b58982..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PartiallySignedTransactionNoneZ extends CommonBase {
-       private Result_PartiallySignedTransactionNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PartiallySignedTransactionNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PartiallySignedTransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PartiallySignedTransactionNoneZ_is_ok(ptr)) {
-                       return new Result_PartiallySignedTransactionNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_PartiallySignedTransactionNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PartiallySignedTransactionNoneZ_OK extends Result_PartiallySignedTransactionNoneZ {
-               public final byte[] res;
-               private Result_PartiallySignedTransactionNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PartiallySignedTransactionNoneZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PartiallySignedTransactionNoneZ_Err extends Result_PartiallySignedTransactionNoneZ {
-               private Result_PartiallySignedTransactionNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_PartiallySignedTransactionNoneZ in the success state.
-        */
-       public static Result_PartiallySignedTransactionNoneZ ok(byte[] o) {
-               long ret = bindings.CResult_PartiallySignedTransactionNoneZ_ok(o);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PartiallySignedTransactionNoneZ ret_hu_conv = Result_PartiallySignedTransactionNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PartiallySignedTransactionNoneZ in the error state.
-        */
-       public static Result_PartiallySignedTransactionNoneZ err() {
-               long ret = bindings.CResult_PartiallySignedTransactionNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PartiallySignedTransactionNoneZ ret_hu_conv = Result_PartiallySignedTransactionNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PartiallySignedTransactionNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PartiallySignedTransactionNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PartiallySignedTransactionNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PartiallySignedTransactionNoneZ clone() {
-               long ret = bindings.CResult_PartiallySignedTransactionNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PartiallySignedTransactionNoneZ ret_hu_conv = Result_PartiallySignedTransactionNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PayeePubKeyErrorZ.java b/src/main/java/org/ldk/structs/Result_PayeePubKeyErrorZ.java
deleted file mode 100644 (file)
index 22b0ab9..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PayeePubKeyErrorZ extends CommonBase {
-       private Result_PayeePubKeyErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PayeePubKeyErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PayeePubKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PayeePubKeyErrorZ_is_ok(ptr)) {
-                       return new Result_PayeePubKeyErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_PayeePubKeyErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PayeePubKeyErrorZ_OK extends Result_PayeePubKeyErrorZ {
-               public final PayeePubKey res;
-               private Result_PayeePubKeyErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long res = bindings.CResult_PayeePubKeyErrorZ_get_ok(ptr);
-                       org.ldk.structs.PayeePubKey res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.PayeePubKey(null, res); }
-                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
-                       this.res = res_hu_conv;
-               }
-       }
-
-       public static final class Result_PayeePubKeyErrorZ_Err extends Result_PayeePubKeyErrorZ {
-               public final Secp256k1Error err;
-               private Result_PayeePubKeyErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.err = bindings.CResult_PayeePubKeyErrorZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_PayeePubKeyErrorZ in the success state.
-        */
-       public static Result_PayeePubKeyErrorZ ok(org.ldk.structs.PayeePubKey o) {
-               long ret = bindings.CResult_PayeePubKeyErrorZ_ok(o == null ? 0 : o.ptr);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PayeePubKeyErrorZ ret_hu_conv = Result_PayeePubKeyErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PayeePubKeyErrorZ in the error state.
-        */
-       public static Result_PayeePubKeyErrorZ err(org.ldk.enums.Secp256k1Error e) {
-               long ret = bindings.CResult_PayeePubKeyErrorZ_err(e);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PayeePubKeyErrorZ ret_hu_conv = Result_PayeePubKeyErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PayeePubKeyErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PayeePubKeyErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PayeePubKeyErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PayeePubKeyErrorZ clone() {
-               long ret = bindings.CResult_PayeePubKeyErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PayeePubKeyErrorZ ret_hu_conv = Result_PayeePubKeyErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PayeePubKeySecp256k1ErrorZ.java b/src/main/java/org/ldk/structs/Result_PayeePubKeySecp256k1ErrorZ.java
new file mode 100644 (file)
index 0000000..298eae9
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_PayeePubKeySecp256k1ErrorZ extends CommonBase {
+       private Result_PayeePubKeySecp256k1ErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_PayeePubKeySecp256k1ErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_PayeePubKeySecp256k1ErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_PayeePubKeySecp256k1ErrorZ_is_ok(ptr)) {
+                       return new Result_PayeePubKeySecp256k1ErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_PayeePubKeySecp256k1ErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_PayeePubKeySecp256k1ErrorZ_OK extends Result_PayeePubKeySecp256k1ErrorZ {
+               public final PayeePubKey res;
+               private Result_PayeePubKeySecp256k1ErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_PayeePubKeySecp256k1ErrorZ_get_ok(ptr);
+                       org.ldk.structs.PayeePubKey res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.PayeePubKey(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_PayeePubKeySecp256k1ErrorZ_Err extends Result_PayeePubKeySecp256k1ErrorZ {
+               public final Secp256k1Error err;
+               private Result_PayeePubKeySecp256k1ErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_PayeePubKeySecp256k1ErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_PayeePubKeySecp256k1ErrorZ in the success state.
+        */
+       public static Result_PayeePubKeySecp256k1ErrorZ ok(org.ldk.structs.PayeePubKey o) {
+               long ret = bindings.CResult_PayeePubKeySecp256k1ErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PayeePubKeySecp256k1ErrorZ ret_hu_conv = Result_PayeePubKeySecp256k1ErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_PayeePubKeySecp256k1ErrorZ in the error state.
+        */
+       public static Result_PayeePubKeySecp256k1ErrorZ err(org.ldk.enums.Secp256k1Error e) {
+               long ret = bindings.CResult_PayeePubKeySecp256k1ErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PayeePubKeySecp256k1ErrorZ ret_hu_conv = Result_PayeePubKeySecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PayeePubKeySecp256k1ErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_PayeePubKeySecp256k1ErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_PayeePubKeySecp256k1ErrorZ clone() {
+               long ret = bindings.CResult_PayeePubKeySecp256k1ErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PayeePubKeySecp256k1ErrorZ ret_hu_conv = Result_PayeePubKeySecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentConstraintsDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_PaymentConstraintsDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..996aa1b
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_PaymentConstraintsDecodeErrorZ extends CommonBase {
+       private Result_PaymentConstraintsDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_PaymentConstraintsDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_PaymentConstraintsDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_PaymentConstraintsDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_PaymentConstraintsDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_PaymentConstraintsDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_PaymentConstraintsDecodeErrorZ_OK extends Result_PaymentConstraintsDecodeErrorZ {
+               public final PaymentConstraints res;
+               private Result_PaymentConstraintsDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_PaymentConstraintsDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.PaymentConstraints res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.PaymentConstraints(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_PaymentConstraintsDecodeErrorZ_Err extends Result_PaymentConstraintsDecodeErrorZ {
+               public final DecodeError err;
+               private Result_PaymentConstraintsDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_PaymentConstraintsDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_PaymentConstraintsDecodeErrorZ in the success state.
+        */
+       public static Result_PaymentConstraintsDecodeErrorZ ok(org.ldk.structs.PaymentConstraints o) {
+               long ret = bindings.CResult_PaymentConstraintsDecodeErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentConstraintsDecodeErrorZ ret_hu_conv = Result_PaymentConstraintsDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_PaymentConstraintsDecodeErrorZ in the error state.
+        */
+       public static Result_PaymentConstraintsDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_PaymentConstraintsDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentConstraintsDecodeErrorZ ret_hu_conv = Result_PaymentConstraintsDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentConstraintsDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_PaymentConstraintsDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_PaymentConstraintsDecodeErrorZ clone() {
+               long ret = bindings.CResult_PaymentConstraintsDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentConstraintsDecodeErrorZ ret_hu_conv = Result_PaymentConstraintsDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentHashPaymentSendFailureZ.java b/src/main/java/org/ldk/structs/Result_PaymentHashPaymentSendFailureZ.java
deleted file mode 100644 (file)
index 5861940..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PaymentHashPaymentSendFailureZ extends CommonBase {
-       private Result_PaymentHashPaymentSendFailureZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PaymentHashPaymentSendFailureZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PaymentHashPaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PaymentHashPaymentSendFailureZ_is_ok(ptr)) {
-                       return new Result_PaymentHashPaymentSendFailureZ_OK(null, ptr);
-               } else {
-                       return new Result_PaymentHashPaymentSendFailureZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PaymentHashPaymentSendFailureZ_OK extends Result_PaymentHashPaymentSendFailureZ {
-               public final byte[] res;
-               private Result_PaymentHashPaymentSendFailureZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PaymentHashPaymentSendFailureZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PaymentHashPaymentSendFailureZ_Err extends Result_PaymentHashPaymentSendFailureZ {
-               public final PaymentSendFailure err;
-               private Result_PaymentHashPaymentSendFailureZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_PaymentHashPaymentSendFailureZ_get_err(ptr);
-                       org.ldk.structs.PaymentSendFailure err_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_PaymentHashPaymentSendFailureZ in the success state.
-        */
-       public static Result_PaymentHashPaymentSendFailureZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentHashPaymentSendFailureZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashPaymentSendFailureZ ret_hu_conv = Result_PaymentHashPaymentSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PaymentHashPaymentSendFailureZ in the error state.
-        */
-       public static Result_PaymentHashPaymentSendFailureZ err(org.ldk.structs.PaymentSendFailure e) {
-               long ret = bindings.CResult_PaymentHashPaymentSendFailureZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashPaymentSendFailureZ ret_hu_conv = Result_PaymentHashPaymentSendFailureZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PaymentHashPaymentSendFailureZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PaymentHashPaymentSendFailureZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PaymentHashPaymentSendFailureZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PaymentHashPaymentSendFailureZ clone() {
-               long ret = bindings.CResult_PaymentHashPaymentSendFailureZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashPaymentSendFailureZ ret_hu_conv = Result_PaymentHashPaymentSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentHashRetryableSendFailureZ.java b/src/main/java/org/ldk/structs/Result_PaymentHashRetryableSendFailureZ.java
deleted file mode 100644 (file)
index bf0967f..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PaymentHashRetryableSendFailureZ extends CommonBase {
-       private Result_PaymentHashRetryableSendFailureZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PaymentHashRetryableSendFailureZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PaymentHashRetryableSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PaymentHashRetryableSendFailureZ_is_ok(ptr)) {
-                       return new Result_PaymentHashRetryableSendFailureZ_OK(null, ptr);
-               } else {
-                       return new Result_PaymentHashRetryableSendFailureZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PaymentHashRetryableSendFailureZ_OK extends Result_PaymentHashRetryableSendFailureZ {
-               public final byte[] res;
-               private Result_PaymentHashRetryableSendFailureZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PaymentHashRetryableSendFailureZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PaymentHashRetryableSendFailureZ_Err extends Result_PaymentHashRetryableSendFailureZ {
-               public final RetryableSendFailure err;
-               private Result_PaymentHashRetryableSendFailureZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.err = bindings.CResult_PaymentHashRetryableSendFailureZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_PaymentHashRetryableSendFailureZ in the success state.
-        */
-       public static Result_PaymentHashRetryableSendFailureZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentHashRetryableSendFailureZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashRetryableSendFailureZ ret_hu_conv = Result_PaymentHashRetryableSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PaymentHashRetryableSendFailureZ in the error state.
-        */
-       public static Result_PaymentHashRetryableSendFailureZ err(org.ldk.enums.RetryableSendFailure e) {
-               long ret = bindings.CResult_PaymentHashRetryableSendFailureZ_err(e);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashRetryableSendFailureZ ret_hu_conv = Result_PaymentHashRetryableSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PaymentHashRetryableSendFailureZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PaymentHashRetryableSendFailureZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PaymentHashRetryableSendFailureZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PaymentHashRetryableSendFailureZ clone() {
-               long ret = bindings.CResult_PaymentHashRetryableSendFailureZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentHashRetryableSendFailureZ ret_hu_conv = Result_PaymentHashRetryableSendFailureZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentIdPaymentErrorZ.java b/src/main/java/org/ldk/structs/Result_PaymentIdPaymentErrorZ.java
deleted file mode 100644 (file)
index c4a75db..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PaymentIdPaymentErrorZ extends CommonBase {
-       private Result_PaymentIdPaymentErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PaymentIdPaymentErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PaymentIdPaymentErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PaymentIdPaymentErrorZ_is_ok(ptr)) {
-                       return new Result_PaymentIdPaymentErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_PaymentIdPaymentErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PaymentIdPaymentErrorZ_OK extends Result_PaymentIdPaymentErrorZ {
-               public final byte[] res;
-               private Result_PaymentIdPaymentErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PaymentIdPaymentErrorZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PaymentIdPaymentErrorZ_Err extends Result_PaymentIdPaymentErrorZ {
-               public final PaymentError err;
-               private Result_PaymentIdPaymentErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_PaymentIdPaymentErrorZ_get_err(ptr);
-                       org.ldk.structs.PaymentError err_hu_conv = org.ldk.structs.PaymentError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_PaymentIdPaymentErrorZ in the success state.
-        */
-       public static Result_PaymentIdPaymentErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentIdPaymentErrorZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PaymentIdPaymentErrorZ in the error state.
-        */
-       public static Result_PaymentIdPaymentErrorZ err(org.ldk.structs.PaymentError e) {
-               long ret = bindings.CResult_PaymentIdPaymentErrorZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PaymentIdPaymentErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PaymentIdPaymentErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PaymentIdPaymentErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PaymentIdPaymentErrorZ clone() {
-               long ret = bindings.CResult_PaymentIdPaymentErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentPreimageAPIErrorZ.java b/src/main/java/org/ldk/structs/Result_PaymentPreimageAPIErrorZ.java
deleted file mode 100644 (file)
index 26186b4..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PaymentPreimageAPIErrorZ extends CommonBase {
-       private Result_PaymentPreimageAPIErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PaymentPreimageAPIErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PaymentPreimageAPIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PaymentPreimageAPIErrorZ_is_ok(ptr)) {
-                       return new Result_PaymentPreimageAPIErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_PaymentPreimageAPIErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PaymentPreimageAPIErrorZ_OK extends Result_PaymentPreimageAPIErrorZ {
-               public final byte[] res;
-               private Result_PaymentPreimageAPIErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PaymentPreimageAPIErrorZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PaymentPreimageAPIErrorZ_Err extends Result_PaymentPreimageAPIErrorZ {
-               public final APIError err;
-               private Result_PaymentPreimageAPIErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult_PaymentPreimageAPIErrorZ_get_err(ptr);
-                       org.ldk.structs.APIError err_hu_conv = org.ldk.structs.APIError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult_PaymentPreimageAPIErrorZ in the success state.
-        */
-       public static Result_PaymentPreimageAPIErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentPreimageAPIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentPreimageAPIErrorZ ret_hu_conv = Result_PaymentPreimageAPIErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PaymentPreimageAPIErrorZ in the error state.
-        */
-       public static Result_PaymentPreimageAPIErrorZ err(org.ldk.structs.APIError e) {
-               long ret = bindings.CResult_PaymentPreimageAPIErrorZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentPreimageAPIErrorZ ret_hu_conv = Result_PaymentPreimageAPIErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PaymentPreimageAPIErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PaymentPreimageAPIErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PaymentPreimageAPIErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PaymentPreimageAPIErrorZ clone() {
-               long ret = bindings.CResult_PaymentPreimageAPIErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentPreimageAPIErrorZ ret_hu_conv = Result_PaymentPreimageAPIErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentRelayDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_PaymentRelayDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..1da104e
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_PaymentRelayDecodeErrorZ extends CommonBase {
+       private Result_PaymentRelayDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_PaymentRelayDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_PaymentRelayDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_PaymentRelayDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_PaymentRelayDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_PaymentRelayDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_PaymentRelayDecodeErrorZ_OK extends Result_PaymentRelayDecodeErrorZ {
+               public final PaymentRelay res;
+               private Result_PaymentRelayDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_PaymentRelayDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.PaymentRelay res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.PaymentRelay(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_PaymentRelayDecodeErrorZ_Err extends Result_PaymentRelayDecodeErrorZ {
+               public final DecodeError err;
+               private Result_PaymentRelayDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_PaymentRelayDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_PaymentRelayDecodeErrorZ in the success state.
+        */
+       public static Result_PaymentRelayDecodeErrorZ ok(org.ldk.structs.PaymentRelay o) {
+               long ret = bindings.CResult_PaymentRelayDecodeErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentRelayDecodeErrorZ ret_hu_conv = Result_PaymentRelayDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_PaymentRelayDecodeErrorZ in the error state.
+        */
+       public static Result_PaymentRelayDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_PaymentRelayDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentRelayDecodeErrorZ ret_hu_conv = Result_PaymentRelayDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentRelayDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PaymentRelayDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_PaymentRelayDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_PaymentRelayDecodeErrorZ clone() {
+               long ret = bindings.CResult_PaymentRelayDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PaymentRelayDecodeErrorZ ret_hu_conv = Result_PaymentRelayDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_PaymentSecretNoneZ.java b/src/main/java/org/ldk/structs/Result_PaymentSecretNoneZ.java
deleted file mode 100644 (file)
index 1d52d91..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PaymentSecretNoneZ extends CommonBase {
-       private Result_PaymentSecretNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PaymentSecretNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PaymentSecretNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PaymentSecretNoneZ_is_ok(ptr)) {
-                       return new Result_PaymentSecretNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_PaymentSecretNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PaymentSecretNoneZ_OK extends Result_PaymentSecretNoneZ {
-               public final byte[] res;
-               private Result_PaymentSecretNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PaymentSecretNoneZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PaymentSecretNoneZ_Err extends Result_PaymentSecretNoneZ {
-               private Result_PaymentSecretNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_PaymentSecretNoneZ in the success state.
-        */
-       public static Result_PaymentSecretNoneZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentSecretNoneZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentSecretNoneZ ret_hu_conv = Result_PaymentSecretNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PaymentSecretNoneZ in the error state.
-        */
-       public static Result_PaymentSecretNoneZ err() {
-               long ret = bindings.CResult_PaymentSecretNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentSecretNoneZ ret_hu_conv = Result_PaymentSecretNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PaymentSecretNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PaymentSecretNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PaymentSecretNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PaymentSecretNoneZ clone() {
-               long ret = bindings.CResult_PaymentSecretNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentSecretNoneZ ret_hu_conv = Result_PaymentSecretNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PublicKeyErrorZ.java b/src/main/java/org/ldk/structs/Result_PublicKeyErrorZ.java
deleted file mode 100644 (file)
index 95cd146..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_PublicKeyErrorZ extends CommonBase {
-       private Result_PublicKeyErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_PublicKeyErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_PublicKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_PublicKeyErrorZ_is_ok(ptr)) {
-                       return new Result_PublicKeyErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_PublicKeyErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_PublicKeyErrorZ_OK extends Result_PublicKeyErrorZ {
-               public final byte[] res;
-               private Result_PublicKeyErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_PublicKeyErrorZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_PublicKeyErrorZ_Err extends Result_PublicKeyErrorZ {
-               public final Secp256k1Error err;
-               private Result_PublicKeyErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.err = bindings.CResult_PublicKeyErrorZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_PublicKeyErrorZ in the success state.
-        */
-       public static Result_PublicKeyErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_PublicKeyErrorZ_ok(InternalUtils.check_arr_len(o, 33));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_PublicKeyErrorZ in the error state.
-        */
-       public static Result_PublicKeyErrorZ err(org.ldk.enums.Secp256k1Error e) {
-               long ret = bindings.CResult_PublicKeyErrorZ_err(e);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_PublicKeyErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_PublicKeyErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_PublicKeyErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_PublicKeyErrorZ clone() {
-               long ret = bindings.CResult_PublicKeyErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_PublicKeySecp256k1ErrorZ.java b/src/main/java/org/ldk/structs/Result_PublicKeySecp256k1ErrorZ.java
new file mode 100644 (file)
index 0000000..a302535
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_PublicKeySecp256k1ErrorZ extends CommonBase {
+       private Result_PublicKeySecp256k1ErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_PublicKeySecp256k1ErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_PublicKeySecp256k1ErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_PublicKeySecp256k1ErrorZ_is_ok(ptr)) {
+                       return new Result_PublicKeySecp256k1ErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_PublicKeySecp256k1ErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_PublicKeySecp256k1ErrorZ_OK extends Result_PublicKeySecp256k1ErrorZ {
+               public final byte[] res;
+               private Result_PublicKeySecp256k1ErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_PublicKeySecp256k1ErrorZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_PublicKeySecp256k1ErrorZ_Err extends Result_PublicKeySecp256k1ErrorZ {
+               public final Secp256k1Error err;
+               private Result_PublicKeySecp256k1ErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_PublicKeySecp256k1ErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_PublicKeySecp256k1ErrorZ in the success state.
+        */
+       public static Result_PublicKeySecp256k1ErrorZ ok(byte[] o) {
+               long ret = bindings.CResult_PublicKeySecp256k1ErrorZ_ok(InternalUtils.check_arr_len(o, 33));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PublicKeySecp256k1ErrorZ ret_hu_conv = Result_PublicKeySecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_PublicKeySecp256k1ErrorZ in the error state.
+        */
+       public static Result_PublicKeySecp256k1ErrorZ err(org.ldk.enums.Secp256k1Error e) {
+               long ret = bindings.CResult_PublicKeySecp256k1ErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PublicKeySecp256k1ErrorZ ret_hu_conv = Result_PublicKeySecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PublicKeySecp256k1ErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PublicKeySecp256k1ErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_PublicKeySecp256k1ErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_PublicKeySecp256k1ErrorZ clone() {
+               long ret = bindings.CResult_PublicKeySecp256k1ErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_PublicKeySecp256k1ErrorZ ret_hu_conv = Result_PublicKeySecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ReceiveTlvsDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ReceiveTlvsDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..fe1f535
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ReceiveTlvsDecodeErrorZ extends CommonBase {
+       private Result_ReceiveTlvsDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ReceiveTlvsDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ReceiveTlvsDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ReceiveTlvsDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ReceiveTlvsDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ReceiveTlvsDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ReceiveTlvsDecodeErrorZ_OK extends Result_ReceiveTlvsDecodeErrorZ {
+               public final ReceiveTlvs res;
+               private Result_ReceiveTlvsDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_ReceiveTlvsDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.ReceiveTlvs res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.ReceiveTlvs(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ReceiveTlvsDecodeErrorZ_Err extends Result_ReceiveTlvsDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ReceiveTlvsDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_ReceiveTlvsDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ReceiveTlvsDecodeErrorZ in the success state.
+        */
+       public static Result_ReceiveTlvsDecodeErrorZ ok(org.ldk.structs.ReceiveTlvs o) {
+               long ret = bindings.CResult_ReceiveTlvsDecodeErrorZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReceiveTlvsDecodeErrorZ ret_hu_conv = Result_ReceiveTlvsDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ReceiveTlvsDecodeErrorZ in the error state.
+        */
+       public static Result_ReceiveTlvsDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_ReceiveTlvsDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReceiveTlvsDecodeErrorZ ret_hu_conv = Result_ReceiveTlvsDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ReceiveTlvsDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ReceiveTlvsDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ReceiveTlvsDecodeErrorZ clone() {
+               long ret = bindings.CResult_ReceiveTlvsDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ReceiveTlvsDecodeErrorZ ret_hu_conv = Result_ReceiveTlvsDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_RecipientOnionFieldsNoneZ.java b/src/main/java/org/ldk/structs/Result_RecipientOnionFieldsNoneZ.java
new file mode 100644 (file)
index 0000000..506e3d7
--- /dev/null
@@ -0,0 +1,89 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_RecipientOnionFieldsNoneZ extends CommonBase {
+       private Result_RecipientOnionFieldsNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_RecipientOnionFieldsNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_RecipientOnionFieldsNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_RecipientOnionFieldsNoneZ_is_ok(ptr)) {
+                       return new Result_RecipientOnionFieldsNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_RecipientOnionFieldsNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_RecipientOnionFieldsNoneZ_OK extends Result_RecipientOnionFieldsNoneZ {
+               public final RecipientOnionFields res;
+               private Result_RecipientOnionFieldsNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_RecipientOnionFieldsNoneZ_get_ok(ptr);
+                       org.ldk.structs.RecipientOnionFields res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.RecipientOnionFields(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_RecipientOnionFieldsNoneZ_Err extends Result_RecipientOnionFieldsNoneZ {
+               private Result_RecipientOnionFieldsNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_RecipientOnionFieldsNoneZ in the success state.
+        */
+       public static Result_RecipientOnionFieldsNoneZ ok(org.ldk.structs.RecipientOnionFields o) {
+               long ret = bindings.CResult_RecipientOnionFieldsNoneZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RecipientOnionFieldsNoneZ ret_hu_conv = Result_RecipientOnionFieldsNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_RecipientOnionFieldsNoneZ in the error state.
+        */
+       public static Result_RecipientOnionFieldsNoneZ err() {
+               long ret = bindings.CResult_RecipientOnionFieldsNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RecipientOnionFieldsNoneZ ret_hu_conv = Result_RecipientOnionFieldsNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RecipientOnionFieldsNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RecipientOnionFieldsNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_RecipientOnionFieldsNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_RecipientOnionFieldsNoneZ clone() {
+               long ret = bindings.CResult_RecipientOnionFieldsNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RecipientOnionFieldsNoneZ ret_hu_conv = Result_RecipientOnionFieldsNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_RetryDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_RetryDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..787890b
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_RetryDecodeErrorZ extends CommonBase {
+       private Result_RetryDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_RetryDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_RetryDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_RetryDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_RetryDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_RetryDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_RetryDecodeErrorZ_OK extends Result_RetryDecodeErrorZ {
+               public final Retry res;
+               private Result_RetryDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_RetryDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.Retry res_hu_conv = org.ldk.structs.Retry.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_RetryDecodeErrorZ_Err extends Result_RetryDecodeErrorZ {
+               public final DecodeError err;
+               private Result_RetryDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_RetryDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_RetryDecodeErrorZ in the success state.
+        */
+       public static Result_RetryDecodeErrorZ ok(org.ldk.structs.Retry o) {
+               long ret = bindings.CResult_RetryDecodeErrorZ_ok(o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RetryDecodeErrorZ ret_hu_conv = Result_RetryDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_RetryDecodeErrorZ in the error state.
+        */
+       public static Result_RetryDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_RetryDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RetryDecodeErrorZ ret_hu_conv = Result_RetryDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RetryDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RetryDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_RetryDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_RetryDecodeErrorZ clone() {
+               long ret = bindings.CResult_RetryDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RetryDecodeErrorZ ret_hu_conv = Result_RetryDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_SchnorrSignatureNoneZ.java b/src/main/java/org/ldk/structs/Result_SchnorrSignatureNoneZ.java
new file mode 100644 (file)
index 0000000..ddb18a0
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_SchnorrSignatureNoneZ extends CommonBase {
+       private Result_SchnorrSignatureNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_SchnorrSignatureNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_SchnorrSignatureNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_SchnorrSignatureNoneZ_is_ok(ptr)) {
+                       return new Result_SchnorrSignatureNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_SchnorrSignatureNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_SchnorrSignatureNoneZ_OK extends Result_SchnorrSignatureNoneZ {
+               public final byte[] res;
+               private Result_SchnorrSignatureNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_SchnorrSignatureNoneZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_SchnorrSignatureNoneZ_Err extends Result_SchnorrSignatureNoneZ {
+               private Result_SchnorrSignatureNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_SchnorrSignatureNoneZ in the success state.
+        */
+       public static Result_SchnorrSignatureNoneZ ok(byte[] o) {
+               long ret = bindings.CResult_SchnorrSignatureNoneZ_ok(InternalUtils.check_arr_len(o, 64));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SchnorrSignatureNoneZ ret_hu_conv = Result_SchnorrSignatureNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_SchnorrSignatureNoneZ in the error state.
+        */
+       public static Result_SchnorrSignatureNoneZ err() {
+               long ret = bindings.CResult_SchnorrSignatureNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SchnorrSignatureNoneZ ret_hu_conv = Result_SchnorrSignatureNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SchnorrSignatureNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SchnorrSignatureNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_SchnorrSignatureNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_SchnorrSignatureNoneZ clone() {
+               long ret = bindings.CResult_SchnorrSignatureNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SchnorrSignatureNoneZ ret_hu_conv = Result_SchnorrSignatureNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ScriptNoneZ.java b/src/main/java/org/ldk/structs/Result_ScriptNoneZ.java
deleted file mode 100644 (file)
index 714ad20..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_ScriptNoneZ extends CommonBase {
-       private Result_ScriptNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_ScriptNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_ScriptNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_ScriptNoneZ_is_ok(ptr)) {
-                       return new Result_ScriptNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_ScriptNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_ScriptNoneZ_OK extends Result_ScriptNoneZ {
-               public final byte[] res;
-               private Result_ScriptNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_ScriptNoneZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_ScriptNoneZ_Err extends Result_ScriptNoneZ {
-               private Result_ScriptNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_ScriptNoneZ in the success state.
-        */
-       public static Result_ScriptNoneZ ok(byte[] o) {
-               long ret = bindings.CResult_ScriptNoneZ_ok(o);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ScriptNoneZ ret_hu_conv = Result_ScriptNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_ScriptNoneZ in the error state.
-        */
-       public static Result_ScriptNoneZ err() {
-               long ret = bindings.CResult_ScriptNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ScriptNoneZ ret_hu_conv = Result_ScriptNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_ScriptNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_ScriptNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_ScriptNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_ScriptNoneZ clone() {
-               long ret = bindings.CResult_ScriptNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ScriptNoneZ ret_hu_conv = Result_ScriptNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_SharedSecretNoneZ.java b/src/main/java/org/ldk/structs/Result_SharedSecretNoneZ.java
deleted file mode 100644 (file)
index f310bb7..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_SharedSecretNoneZ extends CommonBase {
-       private Result_SharedSecretNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_SharedSecretNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_SharedSecretNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_SharedSecretNoneZ_is_ok(ptr)) {
-                       return new Result_SharedSecretNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_SharedSecretNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_SharedSecretNoneZ_OK extends Result_SharedSecretNoneZ {
-               public final byte[] res;
-               private Result_SharedSecretNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_SharedSecretNoneZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_SharedSecretNoneZ_Err extends Result_SharedSecretNoneZ {
-               private Result_SharedSecretNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_SharedSecretNoneZ in the success state.
-        */
-       public static Result_SharedSecretNoneZ ok(byte[] o) {
-               long ret = bindings.CResult_SharedSecretNoneZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SharedSecretNoneZ ret_hu_conv = Result_SharedSecretNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_SharedSecretNoneZ in the error state.
-        */
-       public static Result_SharedSecretNoneZ err() {
-               long ret = bindings.CResult_SharedSecretNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SharedSecretNoneZ ret_hu_conv = Result_SharedSecretNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_SharedSecretNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_SharedSecretNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_SharedSecretNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_SharedSecretNoneZ clone() {
-               long ret = bindings.CResult_SharedSecretNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SharedSecretNoneZ ret_hu_conv = Result_SharedSecretNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_SignatureNoneZ.java b/src/main/java/org/ldk/structs/Result_SignatureNoneZ.java
deleted file mode 100644 (file)
index 135e3c8..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_SignatureNoneZ extends CommonBase {
-       private Result_SignatureNoneZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_SignatureNoneZ_free(ptr); } super.finalize();
-       }
-
-       static Result_SignatureNoneZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_SignatureNoneZ_is_ok(ptr)) {
-                       return new Result_SignatureNoneZ_OK(null, ptr);
-               } else {
-                       return new Result_SignatureNoneZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_SignatureNoneZ_OK extends Result_SignatureNoneZ {
-               public final byte[] res;
-               private Result_SignatureNoneZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_SignatureNoneZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_SignatureNoneZ_Err extends Result_SignatureNoneZ {
-               private Result_SignatureNoneZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_SignatureNoneZ in the success state.
-        */
-       public static Result_SignatureNoneZ ok(byte[] o) {
-               long ret = bindings.CResult_SignatureNoneZ_ok(InternalUtils.check_arr_len(o, 64));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_SignatureNoneZ in the error state.
-        */
-       public static Result_SignatureNoneZ err() {
-               long ret = bindings.CResult_SignatureNoneZ_err();
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_SignatureNoneZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_SignatureNoneZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_SignatureNoneZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_SignatureNoneZ clone() {
-               long ret = bindings.CResult_SignatureNoneZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_SocketAddressDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_SocketAddressDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..c2367c5
--- /dev/null
@@ -0,0 +1,96 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_SocketAddressDecodeErrorZ extends CommonBase {
+       private Result_SocketAddressDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_SocketAddressDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_SocketAddressDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_SocketAddressDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_SocketAddressDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_SocketAddressDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_SocketAddressDecodeErrorZ_OK extends Result_SocketAddressDecodeErrorZ {
+               public final SocketAddress res;
+               private Result_SocketAddressDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_SocketAddressDecodeErrorZ_get_ok(ptr);
+                       org.ldk.structs.SocketAddress res_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_SocketAddressDecodeErrorZ_Err extends Result_SocketAddressDecodeErrorZ {
+               public final DecodeError err;
+               private Result_SocketAddressDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_SocketAddressDecodeErrorZ_get_err(ptr);
+                       org.ldk.structs.DecodeError err_hu_conv = org.ldk.structs.DecodeError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_SocketAddressDecodeErrorZ in the success state.
+        */
+       public static Result_SocketAddressDecodeErrorZ ok(org.ldk.structs.SocketAddress o) {
+               long ret = bindings.CResult_SocketAddressDecodeErrorZ_ok(o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressDecodeErrorZ ret_hu_conv = Result_SocketAddressDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_SocketAddressDecodeErrorZ in the error state.
+        */
+       public static Result_SocketAddressDecodeErrorZ err(org.ldk.structs.DecodeError e) {
+               long ret = bindings.CResult_SocketAddressDecodeErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressDecodeErrorZ ret_hu_conv = Result_SocketAddressDecodeErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SocketAddressDecodeErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SocketAddressDecodeErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_SocketAddressDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_SocketAddressDecodeErrorZ clone() {
+               long ret = bindings.CResult_SocketAddressDecodeErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressDecodeErrorZ ret_hu_conv = Result_SocketAddressDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_SocketAddressSocketAddressParseErrorZ.java b/src/main/java/org/ldk/structs/Result_SocketAddressSocketAddressParseErrorZ.java
new file mode 100644 (file)
index 0000000..d50e39e
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_SocketAddressSocketAddressParseErrorZ extends CommonBase {
+       private Result_SocketAddressSocketAddressParseErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_SocketAddressSocketAddressParseErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_SocketAddressSocketAddressParseErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_SocketAddressSocketAddressParseErrorZ_is_ok(ptr)) {
+                       return new Result_SocketAddressSocketAddressParseErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_SocketAddressSocketAddressParseErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_SocketAddressSocketAddressParseErrorZ_OK extends Result_SocketAddressSocketAddressParseErrorZ {
+               public final SocketAddress res;
+               private Result_SocketAddressSocketAddressParseErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_SocketAddressSocketAddressParseErrorZ_get_ok(ptr);
+                       org.ldk.structs.SocketAddress res_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(res);
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_SocketAddressSocketAddressParseErrorZ_Err extends Result_SocketAddressSocketAddressParseErrorZ {
+               public final SocketAddressParseError err;
+               private Result_SocketAddressSocketAddressParseErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_SocketAddressSocketAddressParseErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_SocketAddressSocketAddressParseErrorZ in the success state.
+        */
+       public static Result_SocketAddressSocketAddressParseErrorZ ok(org.ldk.structs.SocketAddress o) {
+               long ret = bindings.CResult_SocketAddressSocketAddressParseErrorZ_ok(o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressSocketAddressParseErrorZ ret_hu_conv = Result_SocketAddressSocketAddressParseErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_SocketAddressSocketAddressParseErrorZ in the error state.
+        */
+       public static Result_SocketAddressSocketAddressParseErrorZ err(org.ldk.enums.SocketAddressParseError e) {
+               long ret = bindings.CResult_SocketAddressSocketAddressParseErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressSocketAddressParseErrorZ ret_hu_conv = Result_SocketAddressSocketAddressParseErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SocketAddressSocketAddressParseErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_SocketAddressSocketAddressParseErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_SocketAddressSocketAddressParseErrorZ clone() {
+               long ret = bindings.CResult_SocketAddressSocketAddressParseErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressSocketAddressParseErrorZ ret_hu_conv = Result_SocketAddressSocketAddressParseErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_StrSecp256k1ErrorZ.java b/src/main/java/org/ldk/structs/Result_StrSecp256k1ErrorZ.java
new file mode 100644 (file)
index 0000000..69bc0f5
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_StrSecp256k1ErrorZ extends CommonBase {
+       private Result_StrSecp256k1ErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_StrSecp256k1ErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_StrSecp256k1ErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_StrSecp256k1ErrorZ_is_ok(ptr)) {
+                       return new Result_StrSecp256k1ErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_StrSecp256k1ErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_StrSecp256k1ErrorZ_OK extends Result_StrSecp256k1ErrorZ {
+               public final String res;
+               private Result_StrSecp256k1ErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_StrSecp256k1ErrorZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_StrSecp256k1ErrorZ_Err extends Result_StrSecp256k1ErrorZ {
+               public final Secp256k1Error err;
+               private Result_StrSecp256k1ErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_StrSecp256k1ErrorZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_StrSecp256k1ErrorZ in the success state.
+        */
+       public static Result_StrSecp256k1ErrorZ ok(java.lang.String o) {
+               long ret = bindings.CResult_StrSecp256k1ErrorZ_ok(o);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_StrSecp256k1ErrorZ in the error state.
+        */
+       public static Result_StrSecp256k1ErrorZ err(org.ldk.enums.Secp256k1Error e) {
+               long ret = bindings.CResult_StrSecp256k1ErrorZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_StrSecp256k1ErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_StrSecp256k1ErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_StrSecp256k1ErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_StrSecp256k1ErrorZ clone() {
+               long ret = bindings.CResult_StrSecp256k1ErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_StringErrorZ.java b/src/main/java/org/ldk/structs/Result_StringErrorZ.java
deleted file mode 100644 (file)
index 16fe523..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result_StringErrorZ extends CommonBase {
-       private Result_StringErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult_StringErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result_StringErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult_StringErrorZ_is_ok(ptr)) {
-                       return new Result_StringErrorZ_OK(null, ptr);
-               } else {
-                       return new Result_StringErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result_StringErrorZ_OK extends Result_StringErrorZ {
-               public final String res;
-               private Result_StringErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult_StringErrorZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result_StringErrorZ_Err extends Result_StringErrorZ {
-               public final Secp256k1Error err;
-               private Result_StringErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.err = bindings.CResult_StringErrorZ_get_err(ptr);
-               }
-       }
-
-       /**
-        * Creates a new CResult_StringErrorZ in the success state.
-        */
-       public static Result_StringErrorZ ok(java.lang.String o) {
-               long ret = bindings.CResult_StringErrorZ_ok(o);
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StringErrorZ ret_hu_conv = Result_StringErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult_StringErrorZ in the error state.
-        */
-       public static Result_StringErrorZ err(org.ldk.enums.Secp256k1Error e) {
-               long ret = bindings.CResult_StringErrorZ_err(e);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StringErrorZ ret_hu_conv = Result_StringErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult_StringErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult_StringErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult_StringErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result_StringErrorZ clone() {
-               long ret = bindings.CResult_StringErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StringErrorZ ret_hu_conv = Result_StringErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesAPIErrorZ.java b/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesAPIErrorZ.java
new file mode 100644 (file)
index 0000000..04ae4c5
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ThirtyTwoBytesAPIErrorZ extends CommonBase {
+       private Result_ThirtyTwoBytesAPIErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ThirtyTwoBytesAPIErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ThirtyTwoBytesAPIErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ThirtyTwoBytesAPIErrorZ_is_ok(ptr)) {
+                       return new Result_ThirtyTwoBytesAPIErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ThirtyTwoBytesAPIErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ThirtyTwoBytesAPIErrorZ_OK extends Result_ThirtyTwoBytesAPIErrorZ {
+               public final byte[] res;
+               private Result_ThirtyTwoBytesAPIErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ThirtyTwoBytesAPIErrorZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ThirtyTwoBytesAPIErrorZ_Err extends Result_ThirtyTwoBytesAPIErrorZ {
+               public final APIError err;
+               private Result_ThirtyTwoBytesAPIErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_ThirtyTwoBytesAPIErrorZ_get_err(ptr);
+                       org.ldk.structs.APIError err_hu_conv = org.ldk.structs.APIError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesAPIErrorZ in the success state.
+        */
+       public static Result_ThirtyTwoBytesAPIErrorZ ok(byte[] o) {
+               long ret = bindings.CResult_ThirtyTwoBytesAPIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesAPIErrorZ ret_hu_conv = Result_ThirtyTwoBytesAPIErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesAPIErrorZ in the error state.
+        */
+       public static Result_ThirtyTwoBytesAPIErrorZ err(org.ldk.structs.APIError e) {
+               long ret = bindings.CResult_ThirtyTwoBytesAPIErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesAPIErrorZ ret_hu_conv = Result_ThirtyTwoBytesAPIErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ThirtyTwoBytesAPIErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesAPIErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ThirtyTwoBytesAPIErrorZ clone() {
+               long ret = bindings.CResult_ThirtyTwoBytesAPIErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesAPIErrorZ ret_hu_conv = Result_ThirtyTwoBytesAPIErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesNoneZ.java b/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesNoneZ.java
new file mode 100644 (file)
index 0000000..d184261
--- /dev/null
@@ -0,0 +1,85 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ThirtyTwoBytesNoneZ extends CommonBase {
+       private Result_ThirtyTwoBytesNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ThirtyTwoBytesNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ThirtyTwoBytesNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ThirtyTwoBytesNoneZ_is_ok(ptr)) {
+                       return new Result_ThirtyTwoBytesNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_ThirtyTwoBytesNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ThirtyTwoBytesNoneZ_OK extends Result_ThirtyTwoBytesNoneZ {
+               public final byte[] res;
+               private Result_ThirtyTwoBytesNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ThirtyTwoBytesNoneZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ThirtyTwoBytesNoneZ_Err extends Result_ThirtyTwoBytesNoneZ {
+               private Result_ThirtyTwoBytesNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesNoneZ in the success state.
+        */
+       public static Result_ThirtyTwoBytesNoneZ ok(byte[] o) {
+               long ret = bindings.CResult_ThirtyTwoBytesNoneZ_ok(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesNoneZ in the error state.
+        */
+       public static Result_ThirtyTwoBytesNoneZ err() {
+               long ret = bindings.CResult_ThirtyTwoBytesNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ThirtyTwoBytesNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ThirtyTwoBytesNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ThirtyTwoBytesNoneZ clone() {
+               long ret = bindings.CResult_ThirtyTwoBytesNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesPaymentErrorZ.java b/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesPaymentErrorZ.java
new file mode 100644 (file)
index 0000000..7d1a32f
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ThirtyTwoBytesPaymentErrorZ extends CommonBase {
+       private Result_ThirtyTwoBytesPaymentErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ThirtyTwoBytesPaymentErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ThirtyTwoBytesPaymentErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ThirtyTwoBytesPaymentErrorZ_is_ok(ptr)) {
+                       return new Result_ThirtyTwoBytesPaymentErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ThirtyTwoBytesPaymentErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ThirtyTwoBytesPaymentErrorZ_OK extends Result_ThirtyTwoBytesPaymentErrorZ {
+               public final byte[] res;
+               private Result_ThirtyTwoBytesPaymentErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ThirtyTwoBytesPaymentErrorZ_Err extends Result_ThirtyTwoBytesPaymentErrorZ {
+               public final PaymentError err;
+               private Result_ThirtyTwoBytesPaymentErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_get_err(ptr);
+                       org.ldk.structs.PaymentError err_hu_conv = org.ldk.structs.PaymentError.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesPaymentErrorZ in the success state.
+        */
+       public static Result_ThirtyTwoBytesPaymentErrorZ ok(byte[] o) {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_ok(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesPaymentErrorZ ret_hu_conv = Result_ThirtyTwoBytesPaymentErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesPaymentErrorZ in the error state.
+        */
+       public static Result_ThirtyTwoBytesPaymentErrorZ err(org.ldk.structs.PaymentError e) {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesPaymentErrorZ ret_hu_conv = Result_ThirtyTwoBytesPaymentErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesPaymentErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ThirtyTwoBytesPaymentErrorZ clone() {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentErrorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesPaymentErrorZ ret_hu_conv = Result_ThirtyTwoBytesPaymentErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesPaymentSendFailureZ.java b/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesPaymentSendFailureZ.java
new file mode 100644 (file)
index 0000000..71ee269
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ThirtyTwoBytesPaymentSendFailureZ extends CommonBase {
+       private Result_ThirtyTwoBytesPaymentSendFailureZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ThirtyTwoBytesPaymentSendFailureZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok(ptr)) {
+                       return new Result_ThirtyTwoBytesPaymentSendFailureZ_OK(null, ptr);
+               } else {
+                       return new Result_ThirtyTwoBytesPaymentSendFailureZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ThirtyTwoBytesPaymentSendFailureZ_OK extends Result_ThirtyTwoBytesPaymentSendFailureZ {
+               public final byte[] res;
+               private Result_ThirtyTwoBytesPaymentSendFailureZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ThirtyTwoBytesPaymentSendFailureZ_Err extends Result_ThirtyTwoBytesPaymentSendFailureZ {
+               public final PaymentSendFailure err;
+               private Result_ThirtyTwoBytesPaymentSendFailureZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(ptr);
+                       org.ldk.structs.PaymentSendFailure err_hu_conv = org.ldk.structs.PaymentSendFailure.constr_from_ptr(err);
+                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesPaymentSendFailureZ in the success state.
+        */
+       public static Result_ThirtyTwoBytesPaymentSendFailureZ ok(byte[] o) {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_ok(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesPaymentSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesPaymentSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesPaymentSendFailureZ in the error state.
+        */
+       public static Result_ThirtyTwoBytesPaymentSendFailureZ err(org.ldk.structs.PaymentSendFailure e) {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_err(e.ptr);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesPaymentSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesPaymentSendFailureZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesPaymentSendFailureZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ThirtyTwoBytesPaymentSendFailureZ clone() {
+               long ret = bindings.CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesPaymentSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesPaymentSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesRetryableSendFailureZ.java b/src/main/java/org/ldk/structs/Result_ThirtyTwoBytesRetryableSendFailureZ.java
new file mode 100644 (file)
index 0000000..45e73e0
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_ThirtyTwoBytesRetryableSendFailureZ extends CommonBase {
+       private Result_ThirtyTwoBytesRetryableSendFailureZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ThirtyTwoBytesRetryableSendFailureZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok(ptr)) {
+                       return new Result_ThirtyTwoBytesRetryableSendFailureZ_OK(null, ptr);
+               } else {
+                       return new Result_ThirtyTwoBytesRetryableSendFailureZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ThirtyTwoBytesRetryableSendFailureZ_OK extends Result_ThirtyTwoBytesRetryableSendFailureZ {
+               public final byte[] res;
+               private Result_ThirtyTwoBytesRetryableSendFailureZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.res = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(ptr);
+               }
+       }
+
+       public static final class Result_ThirtyTwoBytesRetryableSendFailureZ_Err extends Result_ThirtyTwoBytesRetryableSendFailureZ {
+               public final RetryableSendFailure err;
+               private Result_ThirtyTwoBytesRetryableSendFailureZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       this.err = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesRetryableSendFailureZ in the success state.
+        */
+       public static Result_ThirtyTwoBytesRetryableSendFailureZ ok(byte[] o) {
+               long ret = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_ok(InternalUtils.check_arr_len(o, 32));
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesRetryableSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesRetryableSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesRetryableSendFailureZ in the error state.
+        */
+       public static Result_ThirtyTwoBytesRetryableSendFailureZ err(org.ldk.enums.RetryableSendFailure e) {
+               long ret = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_err(e);
+               Reference.reachabilityFence(e);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesRetryableSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesRetryableSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_ThirtyTwoBytesRetryableSendFailureZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_ThirtyTwoBytesRetryableSendFailureZ clone() {
+               long ret = bindings.CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ThirtyTwoBytesRetryableSendFailureZ ret_hu_conv = Result_ThirtyTwoBytesRetryableSendFailureZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_VerifiedInvoiceRequestNoneZ.java b/src/main/java/org/ldk/structs/Result_VerifiedInvoiceRequestNoneZ.java
new file mode 100644 (file)
index 0000000..d6bd2d1
--- /dev/null
@@ -0,0 +1,89 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+public class Result_VerifiedInvoiceRequestNoneZ extends CommonBase {
+       private Result_VerifiedInvoiceRequestNoneZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_VerifiedInvoiceRequestNoneZ_free(ptr); } super.finalize();
+       }
+
+       static Result_VerifiedInvoiceRequestNoneZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_VerifiedInvoiceRequestNoneZ_is_ok(ptr)) {
+                       return new Result_VerifiedInvoiceRequestNoneZ_OK(null, ptr);
+               } else {
+                       return new Result_VerifiedInvoiceRequestNoneZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_VerifiedInvoiceRequestNoneZ_OK extends Result_VerifiedInvoiceRequestNoneZ {
+               public final VerifiedInvoiceRequest res;
+               private Result_VerifiedInvoiceRequestNoneZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.CResult_VerifiedInvoiceRequestNoneZ_get_ok(ptr);
+                       org.ldk.structs.VerifiedInvoiceRequest res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new org.ldk.structs.VerifiedInvoiceRequest(null, res); }
+                       if (res_hu_conv != null) { res_hu_conv.ptrs_to.add(this); };
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_VerifiedInvoiceRequestNoneZ_Err extends Result_VerifiedInvoiceRequestNoneZ {
+               private Result_VerifiedInvoiceRequestNoneZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+               }
+       }
+
+       /**
+        * Creates a new CResult_VerifiedInvoiceRequestNoneZ in the success state.
+        */
+       public static Result_VerifiedInvoiceRequestNoneZ ok(org.ldk.structs.VerifiedInvoiceRequest o) {
+               long ret = bindings.CResult_VerifiedInvoiceRequestNoneZ_ok(o == null ? 0 : o.ptr);
+               Reference.reachabilityFence(o);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(o); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_VerifiedInvoiceRequestNoneZ in the error state.
+        */
+       public static Result_VerifiedInvoiceRequestNoneZ err() {
+               long ret = bindings.CResult_VerifiedInvoiceRequestNoneZ_err();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_VerifiedInvoiceRequestNoneZ_is_ok(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_VerifiedInvoiceRequestNoneZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_VerifiedInvoiceRequestNoneZ clone() {
+               long ret = bindings.CResult_VerifiedInvoiceRequestNoneZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_VerifiedInvoiceRequestNoneZ ret_hu_conv = Result_VerifiedInvoiceRequestNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result__u832APIErrorZ.java b/src/main/java/org/ldk/structs/Result__u832APIErrorZ.java
deleted file mode 100644 (file)
index 0ea89ec..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-public class Result__u832APIErrorZ extends CommonBase {
-       private Result__u832APIErrorZ(Object _dummy, long ptr) { super(ptr); }
-       protected void finalize() throws Throwable {
-               if (ptr != 0) { bindings.CResult__u832APIErrorZ_free(ptr); } super.finalize();
-       }
-
-       static Result__u832APIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.CResult__u832APIErrorZ_is_ok(ptr)) {
-                       return new Result__u832APIErrorZ_OK(null, ptr);
-               } else {
-                       return new Result__u832APIErrorZ_Err(null, ptr);
-               }
-       }
-       public static final class Result__u832APIErrorZ_OK extends Result__u832APIErrorZ {
-               public final byte[] res;
-               private Result__u832APIErrorZ_OK(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       this.res = bindings.CResult__u832APIErrorZ_get_ok(ptr);
-               }
-       }
-
-       public static final class Result__u832APIErrorZ_Err extends Result__u832APIErrorZ {
-               public final APIError err;
-               private Result__u832APIErrorZ_Err(Object _dummy, long ptr) {
-                       super(_dummy, ptr);
-                       long err = bindings.CResult__u832APIErrorZ_get_err(ptr);
-                       org.ldk.structs.APIError err_hu_conv = org.ldk.structs.APIError.constr_from_ptr(err);
-                       if (err_hu_conv != null) { err_hu_conv.ptrs_to.add(this); };
-                       this.err = err_hu_conv;
-               }
-       }
-
-       /**
-        * Creates a new CResult__u832APIErrorZ in the success state.
-        */
-       public static Result__u832APIErrorZ ok(byte[] o) {
-               long ret = bindings.CResult__u832APIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
-               Reference.reachabilityFence(o);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new CResult__u832APIErrorZ in the error state.
-        */
-       public static Result__u832APIErrorZ err(org.ldk.structs.APIError e) {
-               long ret = bindings.CResult__u832APIErrorZ_err(e.ptr);
-               Reference.reachabilityFence(e);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(e); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Checks if the given object is currently in the success state
-        */
-       public boolean is_ok() {
-               boolean ret = bindings.CResult__u832APIErrorZ_is_ok(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.CResult__u832APIErrorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new CResult__u832APIErrorZ which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public Result__u832APIErrorZ clone() {
-               long ret = bindings.CResult__u832APIErrorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
-               return ret_hu_conv;
-       }
-
-}
index fe0799eeb55409710fdb154b960a05700eb37874..c1bbe96cb88f32cdbf2b5db755379dea186c3abc 100644 (file)
@@ -38,7 +38,7 @@ public class Retry extends CommonBase {
         * were retried along a route from a single call to [`Router::find_route_with_id`].
         */
        public final static class Attempts extends Retry {
-               public final long attempts;
+               public final int attempts;
                private Attempts(long ptr, bindings.LDKRetry.Attempts obj) {
                        super(null, ptr);
                        this.attempts = obj.attempts;
@@ -78,7 +78,7 @@ public class Retry extends CommonBase {
        /**
         * Utility method to constructs a new Attempts-variant Retry
         */
-       public static Retry attempts(long a) {
+       public static Retry attempts(int a) {
                long ret = bindings.Retry_attempts(a);
                Reference.reachabilityFence(a);
                if (ret >= 0 && ret <= 4096) { return null; }
@@ -126,4 +126,24 @@ public class Retry extends CommonBase {
        @Override public int hashCode() {
                return (int)this.hash();
        }
+       /**
+        * Serialize the Retry object into a byte array which can be read by Retry_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.Retry_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a Retry from a byte array, created by Retry_write
+        */
+       public static Result_RetryDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.Retry_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_RetryDecodeErrorZ ret_hu_conv = Result_RetryDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
 }
index fc1b94fb15aaf010225928bb5e046cc8446c016d..03b591178b930589c8217bba237d39e73070798b 100644 (file)
@@ -53,31 +53,35 @@ public class Route extends CommonBase {
        }
 
        /**
-        * The `payment_params` parameter passed via [`RouteParameters`] to [`find_route`].
+        * The `route_params` parameter passed to [`find_route`].
         * 
         * This is used by `ChannelManager` to track information which may be required for retries.
         * 
+        * Will be `None` for objects serialized with LDK versions prior to 0.0.117.
+        * 
         * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        @Nullable
-       public PaymentParameters get_payment_params() {
-               long ret = bindings.Route_get_payment_params(this.ptr);
+       public RouteParameters get_route_params() {
+               long ret = bindings.Route_get_route_params(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.PaymentParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PaymentParameters(null, ret); }
+               org.ldk.structs.RouteParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
 
        /**
-        * The `payment_params` parameter passed via [`RouteParameters`] to [`find_route`].
+        * The `route_params` parameter passed to [`find_route`].
         * 
         * This is used by `ChannelManager` to track information which may be required for retries.
         * 
+        * Will be `None` for objects serialized with LDK versions prior to 0.0.117.
+        * 
         * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public void set_payment_params(@Nullable org.ldk.structs.PaymentParameters val) {
-               bindings.Route_set_payment_params(this.ptr, val == null ? 0 : val.ptr);
+       public void set_route_params(@Nullable org.ldk.structs.RouteParameters val) {
+               bindings.Route_set_route_params(this.ptr, val == null ? 0 : val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
                if (this != null) { this.ptrs_to.add(val); };
@@ -85,16 +89,18 @@ public class Route extends CommonBase {
 
        /**
         * Constructs a new Route given each field
+        * 
+        * Note that route_params_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static Route of(Path[] paths_arg, org.ldk.structs.PaymentParameters payment_params_arg) {
-               long ret = bindings.Route_new(paths_arg != null ? Arrays.stream(paths_arg).mapToLong(paths_arg_conv_6 -> paths_arg_conv_6 == null ? 0 : paths_arg_conv_6.ptr).toArray() : null, payment_params_arg == null ? 0 : payment_params_arg.ptr);
+       public static Route of(Path[] paths_arg, @Nullable org.ldk.structs.RouteParameters route_params_arg) {
+               long ret = bindings.Route_new(paths_arg != null ? Arrays.stream(paths_arg).mapToLong(paths_arg_conv_6 -> paths_arg_conv_6 == null ? 0 : paths_arg_conv_6.ptr).toArray() : null, route_params_arg == null ? 0 : route_params_arg.ptr);
                Reference.reachabilityFence(paths_arg);
-               Reference.reachabilityFence(payment_params_arg);
+               Reference.reachabilityFence(route_params_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.Route ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Route(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                for (Path paths_arg_conv_6: paths_arg) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(paths_arg_conv_6); }; };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_params_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(route_params_arg); };
                return ret_hu_conv;
        }
 
@@ -148,8 +154,11 @@ public class Route extends CommonBase {
        /**
         * Returns the total amount of fees paid on this [`Route`].
         * 
-        * This doesn't include any extra payment made to the recipient, which can happen in excess of
-        * the amount passed to [`find_route`]'s `route_params.final_value_msat`.
+        * For objects serialized with LDK 0.0.117 and after, this includes any extra payment made to
+        * the recipient, which can happen in excess of the amount passed to [`find_route`] via
+        * [`RouteParameters::final_value_msat`], if we had to reach the [`htlc_minimum_msat`] limits.
+        * 
+        * [`htlc_minimum_msat`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_update-message
         */
        public long get_total_fees() {
                long ret = bindings.Route_get_total_fees(this.ptr);
@@ -158,8 +167,12 @@ public class Route extends CommonBase {
        }
 
        /**
-        * Returns the total amount paid on this [`Route`], excluding the fees. Might be more than
-        * requested if we had to reach htlc_minimum_msat.
+        * Returns the total amount paid on this [`Route`], excluding the fees.
+        * 
+        * Might be more than requested as part of the given [`RouteParameters::final_value_msat`] if
+        * we had to reach the [`htlc_minimum_msat`] limits.
+        * 
+        * [`htlc_minimum_msat`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-channel_update-message
         */
        public long get_total_amount() {
                long ret = bindings.Route_get_total_amount(this.ptr);
index f48bc6c8888a02877ecc592d3a30cf6b66e72488..37b97bc91e525fe5f026023cfee53c0664c08436 100644 (file)
@@ -161,17 +161,50 @@ public class RouteHop extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * Indicates whether this hop is possibly announced in the public network graph.
+        * 
+        * Will be `true` if there is a possibility that the channel is publicly known, i.e., if we
+        * either know for sure it's announced in the public graph, or if any public channels exist
+        * for which the given `short_channel_id` could be an alias for. Will be `false` if we believe
+        * the channel to be unannounced.
+        * 
+        * Will be `true` for objects serialized with LDK version 0.0.116 and before.
+        */
+       public boolean get_maybe_announced_channel() {
+               boolean ret = bindings.RouteHop_get_maybe_announced_channel(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Indicates whether this hop is possibly announced in the public network graph.
+        * 
+        * Will be `true` if there is a possibility that the channel is publicly known, i.e., if we
+        * either know for sure it's announced in the public graph, or if any public channels exist
+        * for which the given `short_channel_id` could be an alias for. Will be `false` if we believe
+        * the channel to be unannounced.
+        * 
+        * Will be `true` for objects serialized with LDK version 0.0.116 and before.
+        */
+       public void set_maybe_announced_channel(boolean val) {
+               bindings.RouteHop_set_maybe_announced_channel(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
        /**
         * Constructs a new RouteHop given each field
         */
-       public static RouteHop of(byte[] pubkey_arg, org.ldk.structs.NodeFeatures node_features_arg, long short_channel_id_arg, org.ldk.structs.ChannelFeatures channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg) {
-               long ret = bindings.RouteHop_new(InternalUtils.check_arr_len(pubkey_arg, 33), node_features_arg == null ? 0 : node_features_arg.ptr, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr, fee_msat_arg, cltv_expiry_delta_arg);
+       public static RouteHop of(byte[] pubkey_arg, org.ldk.structs.NodeFeatures node_features_arg, long short_channel_id_arg, org.ldk.structs.ChannelFeatures channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg, boolean maybe_announced_channel_arg) {
+               long ret = bindings.RouteHop_new(InternalUtils.check_arr_len(pubkey_arg, 33), node_features_arg == null ? 0 : node_features_arg.ptr, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
                Reference.reachabilityFence(pubkey_arg);
                Reference.reachabilityFence(node_features_arg);
                Reference.reachabilityFence(short_channel_id_arg);
                Reference.reachabilityFence(channel_features_arg);
                Reference.reachabilityFence(fee_msat_arg);
                Reference.reachabilityFence(cltv_expiry_delta_arg);
+               Reference.reachabilityFence(maybe_announced_channel_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteHop ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteHop(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
index 7b717235fe8310301e43a65150431c2630f8b242..469a5bcb37feee194a107d595a17ecd3d2599c5f 100644 (file)
@@ -62,17 +62,51 @@ public class RouteParameters extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The maximum total fees, in millisatoshi, that may accrue during route finding.
+        * 
+        * This limit also applies to the total fees that may arise while retrying failed payment
+        * paths.
+        * 
+        * Note that values below a few sats may result in some paths being spuriously ignored.
+        */
+       public Option_u64Z get_max_total_routing_fee_msat() {
+               long ret = bindings.RouteParameters_get_max_total_routing_fee_msat(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The maximum total fees, in millisatoshi, that may accrue during route finding.
+        * 
+        * This limit also applies to the total fees that may arise while retrying failed payment
+        * paths.
+        * 
+        * Note that values below a few sats may result in some paths being spuriously ignored.
+        */
+       public void set_max_total_routing_fee_msat(org.ldk.structs.Option_u64Z val) {
+               bindings.RouteParameters_set_max_total_routing_fee_msat(this.ptr, val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
        /**
         * Constructs a new RouteParameters given each field
         */
-       public static RouteParameters of(org.ldk.structs.PaymentParameters payment_params_arg, long final_value_msat_arg) {
-               long ret = bindings.RouteParameters_new(payment_params_arg == null ? 0 : payment_params_arg.ptr, final_value_msat_arg);
+       public static RouteParameters of(org.ldk.structs.PaymentParameters payment_params_arg, long final_value_msat_arg, org.ldk.structs.Option_u64Z max_total_routing_fee_msat_arg) {
+               long ret = bindings.RouteParameters_new(payment_params_arg == null ? 0 : payment_params_arg.ptr, final_value_msat_arg, max_total_routing_fee_msat_arg.ptr);
                Reference.reachabilityFence(payment_params_arg);
                Reference.reachabilityFence(final_value_msat_arg);
+               Reference.reachabilityFence(max_total_routing_fee_msat_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.RouteParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteParameters(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_params_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(max_total_routing_fee_msat_arg); };
                return ret_hu_conv;
        }
 
@@ -94,6 +128,18 @@ public class RouteParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the RouteParameters.
+        */
+       public long hash() {
+               long ret = bindings.RouteParameters_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two RouteParameterss contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -111,6 +157,22 @@ public class RouteParameters extends CommonBase {
                if (!(o instanceof RouteParameters)) return false;
                return this.eq((RouteParameters)o);
        }
+       /**
+        * Constructs [`RouteParameters`] from the given [`PaymentParameters`] and a payment amount.
+        * 
+        * [`Self::max_total_routing_fee_msat`] defaults to 1% of the payment amount + 50 sats
+        */
+       public static RouteParameters from_payment_params_and_value(org.ldk.structs.PaymentParameters payment_params, long final_value_msat) {
+               long ret = bindings.RouteParameters_from_payment_params_and_value(payment_params == null ? 0 : payment_params.ptr, final_value_msat);
+               Reference.reachabilityFence(payment_params);
+               Reference.reachabilityFence(final_value_msat);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.RouteParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.RouteParameters(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payment_params); };
+               return ret_hu_conv;
+       }
+
        /**
         * Serialize the RouteParameters object into a byte array which can be read by RouteParameters_read
         */
index e991a6d75589d4ca7dfc67b7a084e9603ef51bc3..f9855bfa6d4633ff9974590f9bcab0b359a974ac 100644 (file)
@@ -8,17 +8,22 @@ import java.lang.ref.Reference;
 import javax.annotation.Nullable;
 
 /**
- * An interface used to score payment channels for path finding.
+ * A trait which can both lookup and update routing channel penalty scores.
  * 
- * \tScoring is in terms of fees willing to be paid in order to avoid routing through a channel.
+ * This is used in places where both bounds are required and implemented for all types which
+ * implement [`ScoreLookUp`] and [`ScoreUpdate`].
+ * 
+ * Bindings users may need to manually implement this for their custom scoring implementations.
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class Score extends CommonBase {
        final bindings.LDKScore bindings_instance;
        Score(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
-       private Score(bindings.LDKScore arg) {
-               super(bindings.LDKScore_new(arg));
+       private Score(bindings.LDKScore arg, bindings.LDKScoreLookUp ScoreLookUp, bindings.LDKScoreUpdate ScoreUpdate) {
+               super(bindings.LDKScore_new(arg, ScoreLookUp, ScoreUpdate));
                this.ptrs_to.add(arg);
+               this.ptrs_to.add(ScoreLookUp);
+               this.ptrs_to.add(ScoreUpdate);
                this.bindings_instance = arg;
        }
        @Override @SuppressWarnings("deprecation")
@@ -39,145 +44,41 @@ public class Score extends CommonBase {
                ptr = 0;
        }
        public static interface ScoreInterface {
-               /**
-                * Returns the fee in msats willing to be paid to avoid routing `send_amt_msat` through the
-                * given channel in the direction from `source` to `target`.
-                * 
-                * The channel's capacity (less any other MPP parts that are also being considered for use in
-                * the same payment) is given by `capacity_msat`. It may be determined from various sources
-                * such as a chain data, network gossip, or invoice hints. For invoice hints, a capacity near
-                * [`u64::max_value`] is given to indicate sufficient capacity for the invoice's full amount.
-                * Thus, implementations should be overflow-safe.
-                */
-               long channel_penalty_msat(long short_channel_id, NodeId source, NodeId target, ChannelUsage usage, ProbabilisticScoringFeeParameters score_params);
-               /**
-                * Handles updating channel penalties after failing to route through a channel.
-                */
-               void payment_path_failed(Path path, long short_channel_id);
-               /**
-                * Handles updating channel penalties after successfully routing along a path.
-                */
-               void payment_path_successful(Path path);
-               /**
-                * Handles updating channel penalties after a probe over the given path failed.
-                */
-               void probe_failed(Path path, long short_channel_id);
-               /**
-                * Handles updating channel penalties after a probe over the given path succeeded.
-                */
-               void probe_successful(Path path);
                /**
                 * Serialize the object into a byte array
                 */
                byte[] write();
        }
        private static class LDKScoreHolder { Score held; }
-       public static Score new_impl(ScoreInterface arg) {
+       public static Score new_impl(ScoreInterface arg, ScoreLookUp.ScoreLookUpInterface ScoreLookUp_impl, ScoreUpdate.ScoreUpdateInterface ScoreUpdate_impl) {
                final LDKScoreHolder impl_holder = new LDKScoreHolder();
                impl_holder.held = new Score(new bindings.LDKScore() {
-                       @Override public long channel_penalty_msat(long short_channel_id, long source, long target, long usage, long score_params) {
-                               org.ldk.structs.NodeId source_hu_conv = null; if (source < 0 || source > 4096) { source_hu_conv = new org.ldk.structs.NodeId(null, source); }
-                               org.ldk.structs.NodeId target_hu_conv = null; if (target < 0 || target > 4096) { target_hu_conv = new org.ldk.structs.NodeId(null, target); }
-                               org.ldk.structs.ChannelUsage usage_hu_conv = null; if (usage < 0 || usage > 4096) { usage_hu_conv = new org.ldk.structs.ChannelUsage(null, usage); }
-                               if (usage_hu_conv != null) { usage_hu_conv.ptrs_to.add(this); };
-                               org.ldk.structs.ProbabilisticScoringFeeParameters score_params_hu_conv = null; if (score_params < 0 || score_params > 4096) { score_params_hu_conv = new org.ldk.structs.ProbabilisticScoringFeeParameters(null, score_params); }
-                               long ret = arg.channel_penalty_msat(short_channel_id, source_hu_conv, target_hu_conv, usage_hu_conv, score_params_hu_conv);
-                               Reference.reachabilityFence(arg);
-                               return ret;
-                       }
-                       @Override public void payment_path_failed(long path, long short_channel_id) {
-                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
-                               arg.payment_path_failed(path_hu_conv, short_channel_id);
-                               Reference.reachabilityFence(arg);
-                       }
-                       @Override public void payment_path_successful(long path) {
-                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
-                               arg.payment_path_successful(path_hu_conv);
-                               Reference.reachabilityFence(arg);
-                       }
-                       @Override public void probe_failed(long path, long short_channel_id) {
-                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
-                               arg.probe_failed(path_hu_conv, short_channel_id);
-                               Reference.reachabilityFence(arg);
-                       }
-                       @Override public void probe_successful(long path) {
-                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
-                               arg.probe_successful(path_hu_conv);
-                               Reference.reachabilityFence(arg);
-                       }
                        @Override public byte[] write() {
                                byte[] ret = arg.write();
                                Reference.reachabilityFence(arg);
                                return ret;
                        }
-               });
+               }, ScoreLookUp.new_impl(ScoreLookUp_impl).bindings_instance, ScoreUpdate.new_impl(ScoreUpdate_impl).bindings_instance);
                return impl_holder.held;
        }
-       /**
-        * Returns the fee in msats willing to be paid to avoid routing `send_amt_msat` through the
-        * given channel in the direction from `source` to `target`.
-        * 
-        * The channel's capacity (less any other MPP parts that are also being considered for use in
-        * the same payment) is given by `capacity_msat`. It may be determined from various sources
-        * such as a chain data, network gossip, or invoice hints. For invoice hints, a capacity near
-        * [`u64::max_value`] is given to indicate sufficient capacity for the invoice's full amount.
-        * Thus, implementations should be overflow-safe.
-        */
-       public long channel_penalty_msat(long short_channel_id, org.ldk.structs.NodeId source, org.ldk.structs.NodeId target, org.ldk.structs.ChannelUsage usage, org.ldk.structs.ProbabilisticScoringFeeParameters score_params) {
-               long ret = bindings.Score_channel_penalty_msat(this.ptr, short_channel_id, source == null ? 0 : source.ptr, target == null ? 0 : target.ptr, usage == null ? 0 : usage.ptr, score_params == null ? 0 : score_params.ptr);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(short_channel_id);
-               Reference.reachabilityFence(source);
-               Reference.reachabilityFence(target);
-               Reference.reachabilityFence(usage);
-               Reference.reachabilityFence(score_params);
-               if (this != null) { this.ptrs_to.add(source); };
-               if (this != null) { this.ptrs_to.add(target); };
-               if (this != null) { this.ptrs_to.add(usage); };
-               if (this != null) { this.ptrs_to.add(score_params); };
-               return ret;
-       }
 
        /**
-        * Handles updating channel penalties after failing to route through a channel.
+        * Gets the underlying ScoreLookUp.
         */
-       public void payment_path_failed(org.ldk.structs.Path path, long short_channel_id) {
-               bindings.Score_payment_path_failed(this.ptr, path == null ? 0 : path.ptr, short_channel_id);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(path);
-               Reference.reachabilityFence(short_channel_id);
-               if (this != null) { this.ptrs_to.add(path); };
+       public ScoreLookUp get_score_look_up() {
+               ScoreLookUp res = new ScoreLookUp(null, bindings.LDKScore_get_ScoreLookUp(this.ptr));
+               res.ptrs_to.add(this);
+               return res;
        }
 
-       /**
-        * Handles updating channel penalties after successfully routing along a path.
-        */
-       public void payment_path_successful(org.ldk.structs.Path path) {
-               bindings.Score_payment_path_successful(this.ptr, path == null ? 0 : path.ptr);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(path);
-               if (this != null) { this.ptrs_to.add(path); };
-       }
 
        /**
-        * Handles updating channel penalties after a probe over the given path failed.
+        * Gets the underlying ScoreUpdate.
         */
-       public void probe_failed(org.ldk.structs.Path path, long short_channel_id) {
-               bindings.Score_probe_failed(this.ptr, path == null ? 0 : path.ptr, short_channel_id);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(path);
-               Reference.reachabilityFence(short_channel_id);
-               if (this != null) { this.ptrs_to.add(path); };
-       }
-
-       /**
-        * Handles updating channel penalties after a probe over the given path succeeded.
-        */
-       public void probe_successful(org.ldk.structs.Path path) {
-               bindings.Score_probe_successful(this.ptr, path == null ? 0 : path.ptr);
-               Reference.reachabilityFence(this);
-               Reference.reachabilityFence(path);
-               if (this != null) { this.ptrs_to.add(path); };
+       public ScoreUpdate get_score_update() {
+               ScoreUpdate res = new ScoreUpdate(null, bindings.LDKScore_get_ScoreUpdate(this.ptr));
+               res.ptrs_to.add(this);
+               return res;
        }
 
        /**
diff --git a/src/main/java/org/ldk/structs/ScoreLookUp.java b/src/main/java/org/ldk/structs/ScoreLookUp.java
new file mode 100644 (file)
index 0000000..f92f105
--- /dev/null
@@ -0,0 +1,98 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+/**
+ * An interface used to score payment channels for path finding.
+ * 
+ * `ScoreLookUp` is used to determine the penalty for a given channel.
+ * 
+ * Scoring is in terms of fees willing to be paid in order to avoid routing through a channel.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ScoreLookUp extends CommonBase {
+       final bindings.LDKScoreLookUp bindings_instance;
+       ScoreLookUp(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
+       private ScoreLookUp(bindings.LDKScoreLookUp arg) {
+               super(bindings.LDKScoreLookUp_new(arg));
+               this.ptrs_to.add(arg);
+               this.bindings_instance = arg;
+       }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.ScoreLookUp_free(ptr); } super.finalize();
+       }
+       /**
+        * Destroys the object, freeing associated resources. After this call, any access
+        * to this object may result in a SEGFAULT or worse.
+        *
+        * You should generally NEVER call this method. You should let the garbage collector
+        * do this for you when it finalizes objects. However, it may be useful for types
+        * which represent locks and should be closed immediately to avoid holding locks
+        * until the GC runs.
+        */
+       public void destroy() {
+               if (ptr != 0) { bindings.ScoreLookUp_free(ptr); }
+               ptr = 0;
+       }
+       public static interface ScoreLookUpInterface {
+               /**
+                * Returns the fee in msats willing to be paid to avoid routing `send_amt_msat` through the
+                * given channel in the direction from `source` to `target`.
+                * 
+                * The channel's capacity (less any other MPP parts that are also being considered for use in
+                * the same payment) is given by `capacity_msat`. It may be determined from various sources
+                * such as a chain data, network gossip, or invoice hints. For invoice hints, a capacity near
+                * [`u64::max_value`] is given to indicate sufficient capacity for the invoice's full amount.
+                * Thus, implementations should be overflow-safe.
+                */
+               long channel_penalty_msat(long short_channel_id, NodeId source, NodeId target, ChannelUsage usage, ProbabilisticScoringFeeParameters score_params);
+       }
+       private static class LDKScoreLookUpHolder { ScoreLookUp held; }
+       public static ScoreLookUp new_impl(ScoreLookUpInterface arg) {
+               final LDKScoreLookUpHolder impl_holder = new LDKScoreLookUpHolder();
+               impl_holder.held = new ScoreLookUp(new bindings.LDKScoreLookUp() {
+                       @Override public long channel_penalty_msat(long short_channel_id, long source, long target, long usage, long score_params) {
+                               org.ldk.structs.NodeId source_hu_conv = null; if (source < 0 || source > 4096) { source_hu_conv = new org.ldk.structs.NodeId(null, source); }
+                               org.ldk.structs.NodeId target_hu_conv = null; if (target < 0 || target > 4096) { target_hu_conv = new org.ldk.structs.NodeId(null, target); }
+                               org.ldk.structs.ChannelUsage usage_hu_conv = null; if (usage < 0 || usage > 4096) { usage_hu_conv = new org.ldk.structs.ChannelUsage(null, usage); }
+                               if (usage_hu_conv != null) { usage_hu_conv.ptrs_to.add(this); };
+                               org.ldk.structs.ProbabilisticScoringFeeParameters score_params_hu_conv = null; if (score_params < 0 || score_params > 4096) { score_params_hu_conv = new org.ldk.structs.ProbabilisticScoringFeeParameters(null, score_params); }
+                               long ret = arg.channel_penalty_msat(short_channel_id, source_hu_conv, target_hu_conv, usage_hu_conv, score_params_hu_conv);
+                               Reference.reachabilityFence(arg);
+                               return ret;
+                       }
+               });
+               return impl_holder.held;
+       }
+       /**
+        * Returns the fee in msats willing to be paid to avoid routing `send_amt_msat` through the
+        * given channel in the direction from `source` to `target`.
+        * 
+        * The channel's capacity (less any other MPP parts that are also being considered for use in
+        * the same payment) is given by `capacity_msat`. It may be determined from various sources
+        * such as a chain data, network gossip, or invoice hints. For invoice hints, a capacity near
+        * [`u64::max_value`] is given to indicate sufficient capacity for the invoice's full amount.
+        * Thus, implementations should be overflow-safe.
+        */
+       public long channel_penalty_msat(long short_channel_id, org.ldk.structs.NodeId source, org.ldk.structs.NodeId target, org.ldk.structs.ChannelUsage usage, org.ldk.structs.ProbabilisticScoringFeeParameters score_params) {
+               long ret = bindings.ScoreLookUp_channel_penalty_msat(this.ptr, short_channel_id, source == null ? 0 : source.ptr, target == null ? 0 : target.ptr, usage == null ? 0 : usage.ptr, score_params == null ? 0 : score_params.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(short_channel_id);
+               Reference.reachabilityFence(source);
+               Reference.reachabilityFence(target);
+               Reference.reachabilityFence(usage);
+               Reference.reachabilityFence(score_params);
+               if (this != null) { this.ptrs_to.add(source); };
+               if (this != null) { this.ptrs_to.add(target); };
+               if (this != null) { this.ptrs_to.add(usage); };
+               if (this != null) { this.ptrs_to.add(score_params); };
+               return ret;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/ScoreUpdate.java b/src/main/java/org/ldk/structs/ScoreUpdate.java
new file mode 100644 (file)
index 0000000..2622bc5
--- /dev/null
@@ -0,0 +1,126 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+/**
+ * `ScoreUpdate` is used to update the scorer's internal state after a payment attempt.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class ScoreUpdate extends CommonBase {
+       final bindings.LDKScoreUpdate bindings_instance;
+       ScoreUpdate(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
+       private ScoreUpdate(bindings.LDKScoreUpdate arg) {
+               super(bindings.LDKScoreUpdate_new(arg));
+               this.ptrs_to.add(arg);
+               this.bindings_instance = arg;
+       }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.ScoreUpdate_free(ptr); } super.finalize();
+       }
+       /**
+        * Destroys the object, freeing associated resources. After this call, any access
+        * to this object may result in a SEGFAULT or worse.
+        *
+        * You should generally NEVER call this method. You should let the garbage collector
+        * do this for you when it finalizes objects. However, it may be useful for types
+        * which represent locks and should be closed immediately to avoid holding locks
+        * until the GC runs.
+        */
+       public void destroy() {
+               if (ptr != 0) { bindings.ScoreUpdate_free(ptr); }
+               ptr = 0;
+       }
+       public static interface ScoreUpdateInterface {
+               /**
+                * Handles updating channel penalties after failing to route through a channel.
+                */
+               void payment_path_failed(Path path, long short_channel_id);
+               /**
+                * Handles updating channel penalties after successfully routing along a path.
+                */
+               void payment_path_successful(Path path);
+               /**
+                * Handles updating channel penalties after a probe over the given path failed.
+                */
+               void probe_failed(Path path, long short_channel_id);
+               /**
+                * Handles updating channel penalties after a probe over the given path succeeded.
+                */
+               void probe_successful(Path path);
+       }
+       private static class LDKScoreUpdateHolder { ScoreUpdate held; }
+       public static ScoreUpdate new_impl(ScoreUpdateInterface arg) {
+               final LDKScoreUpdateHolder impl_holder = new LDKScoreUpdateHolder();
+               impl_holder.held = new ScoreUpdate(new bindings.LDKScoreUpdate() {
+                       @Override public void payment_path_failed(long path, long short_channel_id) {
+                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
+                               arg.payment_path_failed(path_hu_conv, short_channel_id);
+                               Reference.reachabilityFence(arg);
+                       }
+                       @Override public void payment_path_successful(long path) {
+                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
+                               arg.payment_path_successful(path_hu_conv);
+                               Reference.reachabilityFence(arg);
+                       }
+                       @Override public void probe_failed(long path, long short_channel_id) {
+                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
+                               arg.probe_failed(path_hu_conv, short_channel_id);
+                               Reference.reachabilityFence(arg);
+                       }
+                       @Override public void probe_successful(long path) {
+                               org.ldk.structs.Path path_hu_conv = null; if (path < 0 || path > 4096) { path_hu_conv = new org.ldk.structs.Path(null, path); }
+                               arg.probe_successful(path_hu_conv);
+                               Reference.reachabilityFence(arg);
+                       }
+               });
+               return impl_holder.held;
+       }
+       /**
+        * Handles updating channel penalties after failing to route through a channel.
+        */
+       public void payment_path_failed(org.ldk.structs.Path path, long short_channel_id) {
+               bindings.ScoreUpdate_payment_path_failed(this.ptr, path == null ? 0 : path.ptr, short_channel_id);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(path);
+               Reference.reachabilityFence(short_channel_id);
+               if (this != null) { this.ptrs_to.add(path); };
+       }
+
+       /**
+        * Handles updating channel penalties after successfully routing along a path.
+        */
+       public void payment_path_successful(org.ldk.structs.Path path) {
+               bindings.ScoreUpdate_payment_path_successful(this.ptr, path == null ? 0 : path.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(path);
+               if (this != null) { this.ptrs_to.add(path); };
+       }
+
+       /**
+        * Handles updating channel penalties after a probe over the given path failed.
+        */
+       public void probe_failed(org.ldk.structs.Path path, long short_channel_id) {
+               bindings.ScoreUpdate_probe_failed(this.ptr, path == null ? 0 : path.ptr, short_channel_id);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(path);
+               Reference.reachabilityFence(short_channel_id);
+               if (this != null) { this.ptrs_to.add(path); };
+       }
+
+       /**
+        * Handles updating channel penalties after a probe over the given path succeeded.
+        */
+       public void probe_successful(org.ldk.structs.Path path) {
+               bindings.ScoreUpdate_probe_successful(this.ptr, path == null ? 0 : path.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(path);
+               if (this != null) { this.ptrs_to.add(path); };
+       }
+
+}
index c0dc28c713cab3225f0fdfbc0d8dc2e1e256b34a..b6b8ad2f57a9414d9511fc8039bb26ecf7c21eac 100644 (file)
@@ -9,12 +9,12 @@ import javax.annotation.Nullable;
 
 
 /**
- * [`Score`] implementation that factors in in-flight HTLC liquidity.
+ * [`ScoreLookUp`] implementation that factors in in-flight HTLC liquidity.
  * 
- * Useful for custom [`Router`] implementations to wrap their [`Score`] on-the-fly when calling
+ * Useful for custom [`Router`] implementations to wrap their [`ScoreLookUp`] on-the-fly when calling
  * [`find_route`].
  * 
- * [`Score`]: crate::routing::scoring::Score
+ * [`ScoreLookUp`]: crate::routing::scoring::ScoreLookUp
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class ScorerAccountingForInFlightHtlcs extends CommonBase {
@@ -28,7 +28,7 @@ public class ScorerAccountingForInFlightHtlcs extends CommonBase {
        /**
         * Initialize a new `ScorerAccountingForInFlightHtlcs`.
         */
-       public static ScorerAccountingForInFlightHtlcs of(org.ldk.structs.Score scorer, org.ldk.structs.InFlightHtlcs inflight_htlcs) {
+       public static ScorerAccountingForInFlightHtlcs of(org.ldk.structs.ScoreLookUp scorer, org.ldk.structs.InFlightHtlcs inflight_htlcs) {
                long ret = bindings.ScorerAccountingForInFlightHtlcs_new(scorer.ptr, inflight_htlcs == null ? 0 : inflight_htlcs.ptr);
                Reference.reachabilityFence(scorer);
                Reference.reachabilityFence(inflight_htlcs);
@@ -41,23 +41,14 @@ public class ScorerAccountingForInFlightHtlcs extends CommonBase {
        }
 
        /**
-        * Serialize the ScorerAccountingForInFlightHtlcs object into a byte array which can be read by ScorerAccountingForInFlightHtlcs_read
+        * Constructs a new ScoreLookUp which calls the relevant methods on this_arg.
+        * This copies the `inner` pointer in this_arg and thus the returned ScoreLookUp must be freed before this_arg is
         */
-       public byte[] write() {
-               byte[] ret = bindings.ScorerAccountingForInFlightHtlcs_write(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Constructs a new Score which calls the relevant methods on this_arg.
-        * This copies the `inner` pointer in this_arg and thus the returned Score must be freed before this_arg is
-        */
-       public Score as_Score() {
-               long ret = bindings.ScorerAccountingForInFlightHtlcs_as_Score(this.ptr);
+       public ScoreLookUp as_ScoreLookUp() {
+               long ret = bindings.ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Score ret_hu_conv = new Score(null, ret);
+               ScoreLookUp ret_hu_conv = new ScoreLookUp(null, ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
index 5121258d302b6cb610787b70d94348f6e962ac97..4859f660d4ba479c3041116475e1688c9d77a386 100644 (file)
@@ -123,11 +123,11 @@ public class SignedRawBolt11Invoice extends CommonBase {
        /**
         * Recovers the public key used for signing the invoice from the recoverable signature.
         */
-       public Result_PayeePubKeyErrorZ recover_payee_pub_key() {
+       public Result_PayeePubKeySecp256k1ErrorZ recover_payee_pub_key() {
                long ret = bindings.SignedRawBolt11Invoice_recover_payee_pub_key(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PayeePubKeyErrorZ ret_hu_conv = Result_PayeePubKeyErrorZ.constr_from_ptr(ret);
+               Result_PayeePubKeySecp256k1ErrorZ ret_hu_conv = Result_PayeePubKeySecp256k1ErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index 52a369be5c7688608c9c126bfccd060a96c87b89..df1269aff2dfa05c0c39a006bb2f963755dd6e9a 100644 (file)
@@ -79,7 +79,7 @@ public class SignerProvider extends CommonBase {
                 * This method should return a different value each time it is called, to avoid linking
                 * on-chain funds across channels as controlled to the same user.
                 */
-               Result_ScriptNoneZ get_destination_script();
+               Result_CVec_u8ZNoneZ get_destination_script();
                /**
                 * Get a script pubkey which we will send funds to when closing a channel.
                 * 
@@ -117,7 +117,7 @@ public class SignerProvider extends CommonBase {
                                return result;
                        }
                        @Override public long get_destination_script() {
-                               Result_ScriptNoneZ ret = arg.get_destination_script();
+                               Result_CVec_u8ZNoneZ ret = arg.get_destination_script();
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -199,11 +199,11 @@ public class SignerProvider extends CommonBase {
         * This method should return a different value each time it is called, to avoid linking
         * on-chain funds across channels as controlled to the same user.
         */
-       public Result_ScriptNoneZ get_destination_script() {
+       public Result_CVec_u8ZNoneZ get_destination_script() {
                long ret = bindings.SignerProvider_get_destination_script(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ScriptNoneZ ret_hu_conv = Result_ScriptNoneZ.constr_from_ptr(ret);
+               Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
diff --git a/src/main/java/org/ldk/structs/SocketAddress.java b/src/main/java/org/ldk/structs/SocketAddress.java
new file mode 100644 (file)
index 0000000..e31cf0e
--- /dev/null
@@ -0,0 +1,274 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An address which can be used to connect to a remote peer.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class SocketAddress extends CommonBase {
+       private SocketAddress(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.SocketAddress_free(ptr); }
+       }
+       static SocketAddress constr_from_ptr(long ptr) {
+               bindings.LDKSocketAddress raw_val = bindings.LDKSocketAddress_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKSocketAddress.TcpIpV4.class) {
+                       return new TcpIpV4(ptr, (bindings.LDKSocketAddress.TcpIpV4)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKSocketAddress.TcpIpV6.class) {
+                       return new TcpIpV6(ptr, (bindings.LDKSocketAddress.TcpIpV6)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKSocketAddress.OnionV2.class) {
+                       return new OnionV2(ptr, (bindings.LDKSocketAddress.OnionV2)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKSocketAddress.OnionV3.class) {
+                       return new OnionV3(ptr, (bindings.LDKSocketAddress.OnionV3)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKSocketAddress.Hostname.class) {
+                       return new Hostname(ptr, (bindings.LDKSocketAddress.Hostname)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * An IPv4 address and port on which the peer is listening.
+        */
+       public final static class TcpIpV4 extends SocketAddress {
+               /**
+                * The 4-byte IPv4 address
+               */
+               public final byte[] addr;
+               /**
+                * The port on which the node is listening
+               */
+               public final short port;
+               private TcpIpV4(long ptr, bindings.LDKSocketAddress.TcpIpV4 obj) {
+                       super(null, ptr);
+                       this.addr = obj.addr;
+                       this.port = obj.port;
+               }
+       }
+       /**
+        * An IPv6 address and port on which the peer is listening.
+        */
+       public final static class TcpIpV6 extends SocketAddress {
+               /**
+                * The 16-byte IPv6 address
+               */
+               public final byte[] addr;
+               /**
+                * The port on which the node is listening
+               */
+               public final short port;
+               private TcpIpV6(long ptr, bindings.LDKSocketAddress.TcpIpV6 obj) {
+                       super(null, ptr);
+                       this.addr = obj.addr;
+                       this.port = obj.port;
+               }
+       }
+       /**
+        * An old-style Tor onion address/port on which the peer is listening.
+        * 
+        * This field is deprecated and the Tor network generally no longer supports V2 Onion
+        * addresses. Thus, the details are not parsed here.
+        */
+       public final static class OnionV2 extends SocketAddress {
+               public final byte[] onion_v2;
+               private OnionV2(long ptr, bindings.LDKSocketAddress.OnionV2 obj) {
+                       super(null, ptr);
+                       this.onion_v2 = obj.onion_v2;
+               }
+       }
+       /**
+        * A new-style Tor onion address/port on which the peer is listening.
+        * 
+        * To create the human-readable \"hostname\", concatenate the ED25519 pubkey, checksum, and version,
+        * wrap as base32 and append \".onion\".
+        */
+       public final static class OnionV3 extends SocketAddress {
+               /**
+                * The ed25519 long-term public key of the peer
+               */
+               public final byte[] ed25519_pubkey;
+               /**
+                * The checksum of the pubkey and version, as included in the onion address
+               */
+               public final short checksum;
+               /**
+                * The version byte, as defined by the Tor Onion v3 spec.
+               */
+               public final byte version;
+               /**
+                * The port on which the node is listening
+               */
+               public final short port;
+               private OnionV3(long ptr, bindings.LDKSocketAddress.OnionV3 obj) {
+                       super(null, ptr);
+                       this.ed25519_pubkey = obj.ed25519_pubkey;
+                       this.checksum = obj.checksum;
+                       this.version = obj.version;
+                       this.port = obj.port;
+               }
+       }
+       /**
+        * A hostname/port on which the peer is listening.
+        */
+       public final static class Hostname extends SocketAddress {
+               /**
+                * The hostname on which the node is listening.
+               */
+               public final org.ldk.structs.Hostname hostname;
+               /**
+                * The port on which the node is listening.
+               */
+               public final short port;
+               private Hostname(long ptr, bindings.LDKSocketAddress.Hostname obj) {
+                       super(null, ptr);
+                       long hostname = obj.hostname;
+                       org.ldk.structs.Hostname hostname_hu_conv = null; if (hostname < 0 || hostname > 4096) { hostname_hu_conv = new org.ldk.structs.Hostname(null, hostname); }
+                       if (hostname_hu_conv != null) { hostname_hu_conv.ptrs_to.add(this); };
+                       this.hostname = hostname_hu_conv;
+                       this.port = obj.port;
+               }
+       }
+       long clone_ptr() {
+               long ret = bindings.SocketAddress_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the SocketAddress
+        */
+       public SocketAddress clone() {
+               long ret = bindings.SocketAddress_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new TcpIpV4-variant SocketAddress
+        */
+       public static SocketAddress tcp_ip_v4(byte[] addr, short port) {
+               long ret = bindings.SocketAddress_tcp_ip_v4(InternalUtils.check_arr_len(addr, 4), port);
+               Reference.reachabilityFence(addr);
+               Reference.reachabilityFence(port);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new TcpIpV6-variant SocketAddress
+        */
+       public static SocketAddress tcp_ip_v6(byte[] addr, short port) {
+               long ret = bindings.SocketAddress_tcp_ip_v6(InternalUtils.check_arr_len(addr, 16), port);
+               Reference.reachabilityFence(addr);
+               Reference.reachabilityFence(port);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new OnionV2-variant SocketAddress
+        */
+       public static SocketAddress onion_v2(byte[] a) {
+               long ret = bindings.SocketAddress_onion_v2(InternalUtils.check_arr_len(a, 12));
+               Reference.reachabilityFence(a);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new OnionV3-variant SocketAddress
+        */
+       public static SocketAddress onion_v3(byte[] ed25519_pubkey, short checksum, byte version, short port) {
+               long ret = bindings.SocketAddress_onion_v3(InternalUtils.check_arr_len(ed25519_pubkey, 32), checksum, version, port);
+               Reference.reachabilityFence(ed25519_pubkey);
+               Reference.reachabilityFence(checksum);
+               Reference.reachabilityFence(version);
+               Reference.reachabilityFence(port);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Utility method to constructs a new Hostname-variant SocketAddress
+        */
+       public static SocketAddress hostname(org.ldk.structs.Hostname hostname, short port) {
+               long ret = bindings.SocketAddress_hostname(hostname == null ? 0 : hostname.ptr, port);
+               Reference.reachabilityFence(hostname);
+               Reference.reachabilityFence(port);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.SocketAddress ret_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(hostname); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if two SocketAddresss contain equal inner contents.
+        * This ignores pointers and is_owned flags and looks at the values in fields.
+        */
+       public boolean eq(org.ldk.structs.SocketAddress b) {
+               boolean ret = bindings.SocketAddress_eq(this.ptr, b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(b);
+               return ret;
+       }
+
+       @Override public boolean equals(Object o) {
+               if (!(o instanceof SocketAddress)) return false;
+               return this.eq((SocketAddress)o);
+       }
+       /**
+        * Serialize the SocketAddress object into a byte array which can be read by SocketAddress_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.SocketAddress_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Read a SocketAddress from a byte array, created by SocketAddress_write
+        */
+       public static Result_SocketAddressDecodeErrorZ read(byte[] ser) {
+               long ret = bindings.SocketAddress_read(ser);
+               Reference.reachabilityFence(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressDecodeErrorZ ret_hu_conv = Result_SocketAddressDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a SocketAddress object from a string
+        */
+       public static Result_SocketAddressSocketAddressParseErrorZ from_str(java.lang.String s) {
+               long ret = bindings.SocketAddress_from_str(s);
+               Reference.reachabilityFence(s);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressSocketAddressParseErrorZ ret_hu_conv = Result_SocketAddressSocketAddressParseErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index 9002f8f13c58f2cbc980f52fff7ca40a5262024f..26dd9ec1e687223a81b602c55bf8e706af817c12 100644 (file)
@@ -122,15 +122,23 @@ public class SpendableOutputDescriptor extends CommonBase {
                }
        }
        /**
-        * An output to a P2WPKH, spendable exclusively by our payment key (i.e., the private key
-        * which corresponds to the `payment_point` in [`ChannelSigner::pubkeys`]). The witness
-        * in the spending input is, thus, simply:
+        * An output spendable exclusively by our payment key (i.e., the private key that corresponds
+        * to the `payment_point` in [`ChannelSigner::pubkeys`]). The output type depends on the
+        * channel type negotiated.
+        * 
+        * On an anchor outputs channel, the witness in the spending input is:
+        * ```bitcoin
+        * <BIP 143 signature> <witness script>
+        * ```
+        * 
+        * Otherwise, it is:
         * ```bitcoin
         * <BIP 143 signature> <payment key>
         * ```
         * 
         * These are generally the result of our counterparty having broadcast the current state,
-        * allowing us to claim the non-HTLC-encumbered outputs immediately.
+        * allowing us to claim the non-HTLC-encumbered outputs immediately, or after one confirmation
+        * in the case of anchor outputs channels.
         */
        public final static class StaticPaymentOutput extends SpendableOutputDescriptor {
                public final org.ldk.structs.StaticPaymentOutputDescriptor static_payment_output;
@@ -200,6 +208,18 @@ public class SpendableOutputDescriptor extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the SpendableOutputDescriptor.
+        */
+       public long hash() {
+               long ret = bindings.SpendableOutputDescriptor_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two SpendableOutputDescriptors contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
index 569db6fb74dab319a58ba1b40685bd65345ca92a..356bc04534a1a6febe140026056d6bebf7a4d272 100644 (file)
@@ -102,19 +102,56 @@ public class StaticPaymentOutputDescriptor extends CommonBase {
                Reference.reachabilityFence(val);
        }
 
+       /**
+        * The necessary channel parameters that need to be provided to the re-derived signer through
+        * [`ChannelSigner::provide_channel_parameters`].
+        * 
+        * Added as optional, but always `Some` if the descriptor was produced in v0.0.117 or later.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public ChannelTransactionParameters get_channel_transaction_parameters() {
+               long ret = bindings.StaticPaymentOutputDescriptor_get_channel_transaction_parameters(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelTransactionParameters ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelTransactionParameters(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The necessary channel parameters that need to be provided to the re-derived signer through
+        * [`ChannelSigner::provide_channel_parameters`].
+        * 
+        * Added as optional, but always `Some` if the descriptor was produced in v0.0.117 or later.
+        * 
+        * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public void set_channel_transaction_parameters(@Nullable org.ldk.structs.ChannelTransactionParameters val) {
+               bindings.StaticPaymentOutputDescriptor_set_channel_transaction_parameters(this.ptr, val == null ? 0 : val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
        /**
         * Constructs a new StaticPaymentOutputDescriptor given each field
+        * 
+        * Note that channel_transaction_parameters_arg (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static StaticPaymentOutputDescriptor of(org.ldk.structs.OutPoint outpoint_arg, org.ldk.structs.TxOut output_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg) {
-               long ret = bindings.StaticPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr, output_arg.ptr, InternalUtils.check_arr_len(channel_keys_id_arg, 32), channel_value_satoshis_arg);
+       public static StaticPaymentOutputDescriptor of(org.ldk.structs.OutPoint outpoint_arg, org.ldk.structs.TxOut output_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg, @Nullable org.ldk.structs.ChannelTransactionParameters channel_transaction_parameters_arg) {
+               long ret = bindings.StaticPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr, output_arg.ptr, InternalUtils.check_arr_len(channel_keys_id_arg, 32), channel_value_satoshis_arg, channel_transaction_parameters_arg == null ? 0 : channel_transaction_parameters_arg.ptr);
                Reference.reachabilityFence(outpoint_arg);
                Reference.reachabilityFence(output_arg);
                Reference.reachabilityFence(channel_keys_id_arg);
                Reference.reachabilityFence(channel_value_satoshis_arg);
+               Reference.reachabilityFence(channel_transaction_parameters_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                org.ldk.structs.StaticPaymentOutputDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.StaticPaymentOutputDescriptor(null, ret); }
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(outpoint_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channel_transaction_parameters_arg); };
                return ret_hu_conv;
        }
 
@@ -136,6 +173,18 @@ public class StaticPaymentOutputDescriptor extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Generates a non-cryptographic 64-bit hash of the StaticPaymentOutputDescriptor.
+        */
+       public long hash() {
+               long ret = bindings.StaticPaymentOutputDescriptor_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       @Override public int hashCode() {
+               return (int)this.hash();
+       }
        /**
         * Checks if two StaticPaymentOutputDescriptors contain equal inner contents.
         * This ignores pointers and is_owned flags and looks at the values in fields.
@@ -153,6 +202,32 @@ public class StaticPaymentOutputDescriptor extends CommonBase {
                if (!(o instanceof StaticPaymentOutputDescriptor)) return false;
                return this.eq((StaticPaymentOutputDescriptor)o);
        }
+       /**
+        * Returns the `witness_script` of the spendable output.
+        * 
+        * Note that this will only return `Some` for [`StaticPaymentOutputDescriptor`]s that
+        * originated from an anchor outputs channel, as they take the form of a P2WSH script.
+        */
+       public Option_CVec_u8ZZ witness_script() {
+               long ret = bindings.StaticPaymentOutputDescriptor_witness_script(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The maximum length a well-formed witness spending one of these should have.
+        * Note: If you have the grind_signatures feature enabled, this will be at least 1 byte
+        * shorter.
+        */
+       public long max_witness_length() {
+               long ret = bindings.StaticPaymentOutputDescriptor_max_witness_length(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
        /**
         * Serialize the StaticPaymentOutputDescriptor object into a byte array which can be read by StaticPaymentOutputDescriptor_read
         */
diff --git a/src/main/java/org/ldk/structs/TaggedHash.java b/src/main/java/org/ldk/structs/TaggedHash.java
new file mode 100644 (file)
index 0000000..5a5d07d
--- /dev/null
@@ -0,0 +1,27 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A hash for use in a specific context by tweaking with a context-dependent tag as per [BIP 340]
+ * and computed over the merkle root of a TLV stream to sign as defined in [BOLT 12].
+ * 
+ * [BIP 340]: https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
+ * [BOLT 12]: https://github.com/rustyrussell/lightning-rfc/blob/guilt/offers/12-offer-encoding.md#signature-calculation
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TaggedHash extends CommonBase {
+       TaggedHash(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.TaggedHash_free(ptr); }
+       }
+
+}
index 3a7e0b4a7583e372fa5809da31785431f18c8527..9e7aa762aa85e60bb79c7e0c7093f9feedcd5e0c 100644 (file)
@@ -78,17 +78,60 @@ public class TrustedCommitmentTransaction extends CommonBase {
         * 
         * This function is only valid in the holder commitment context, it always uses EcdsaSighashType::All.
         */
-       public Result_CVec_SignatureZNoneZ get_htlc_sigs(byte[] htlc_base_key, org.ldk.structs.DirectedChannelTransactionParameters channel_parameters, org.ldk.structs.EntropySource entropy_source) {
+       public Result_CVec_ECDSASignatureZNoneZ get_htlc_sigs(byte[] htlc_base_key, org.ldk.structs.DirectedChannelTransactionParameters channel_parameters, org.ldk.structs.EntropySource entropy_source) {
                long ret = bindings.TrustedCommitmentTransaction_get_htlc_sigs(this.ptr, InternalUtils.check_arr_len(htlc_base_key, 32), channel_parameters == null ? 0 : channel_parameters.ptr, entropy_source.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(htlc_base_key);
                Reference.reachabilityFence(channel_parameters);
                Reference.reachabilityFence(entropy_source);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
+               Result_CVec_ECDSASignatureZNoneZ ret_hu_conv = Result_CVec_ECDSASignatureZNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(channel_parameters); };
                if (this != null) { this.ptrs_to.add(entropy_source); };
                return ret_hu_conv;
        }
 
+       /**
+        * Returns the index of the revokeable output, i.e. the `to_local` output sending funds to
+        * the broadcaster, in the built transaction, if any exists.
+        * 
+        * There are two cases where this may return `None`:
+        * - The balance of the revokeable output is below the dust limit (only found on commitments
+        * early in the channel's lifetime, i.e. before the channel reserve is met).
+        * - This commitment was created before LDK 0.0.117. In this case, the
+        * commitment transaction previously didn't contain enough information to locate the
+        * revokeable output.
+        */
+       public Option_usizeZ revokeable_output_index() {
+               long ret = bindings.TrustedCommitmentTransaction_revokeable_output_index(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_usizeZ ret_hu_conv = org.ldk.structs.Option_usizeZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Helper method to build an unsigned justice transaction spending the revokeable
+        * `to_local` output to a destination script. Fee estimation accounts for the expected
+        * revocation witness data that will be added when signed.
+        * 
+        * This method will error if the given fee rate results in a fee greater than the value
+        * of the output being spent, or if there exists no revokeable `to_local` output on this
+        * commitment transaction. See [`Self::revokeable_output_index`] for more details.
+        * 
+        * The built transaction will allow fee bumping with RBF, and this method takes
+        * `feerate_per_kw` as an input such that multiple copies of a justice transaction at different
+        * fee rates may be built.
+        */
+       public Result_TransactionNoneZ build_to_local_justice_tx(long feerate_per_kw, byte[] destination_script) {
+               long ret = bindings.TrustedCommitmentTransaction_build_to_local_justice_tx(this.ptr, feerate_per_kw, destination_script);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(feerate_per_kw);
+               Reference.reachabilityFence(destination_script);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_TransactionNoneZ ret_hu_conv = Result_TransactionNoneZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
 }
diff --git a/src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelManagerZ.java b/src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelManagerZ.java
deleted file mode 100644 (file)
index 27acb80..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_BlockHashChannelManagerZ extends CommonBase {
-       TwoTuple_BlockHashChannelManagerZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_BlockHashChannelManagerZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_BlockHashChannelManagerZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public ChannelManager get_b() {
-               long ret = bindings.C2Tuple_BlockHashChannelManagerZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ChannelManager ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelManager(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_BlockHashChannelManagerZ from the contained elements.
-        */
-       public static TwoTuple_BlockHashChannelManagerZ of(byte[] a, FeeEstimator b_fee_est, Watch b_chain_monitor, BroadcasterInterface b_tx_broadcaster, Router b_router, Logger b_logger, EntropySource b_entropy_source, NodeSigner b_node_signer, SignerProvider b_signer_provider, UserConfig b_config, ChainParameters b_params, int b_current_timestamp) {
-               long ret = bindings.C2Tuple_BlockHashChannelManagerZ_new(InternalUtils.check_arr_len(a, 32), bindings.ChannelManager_new(b_fee_est.ptr, b_chain_monitor.ptr, b_tx_broadcaster.ptr, b_router.ptr, b_logger.ptr, b_entropy_source.ptr, b_node_signer.ptr, b_signer_provider.ptr, b_config == null ? 0 : b_config.ptr, b_params == null ? 0 : b_params.ptr, b_current_timestamp));
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b_fee_est);
-               Reference.reachabilityFence(b_chain_monitor);
-               Reference.reachabilityFence(b_tx_broadcaster);
-               Reference.reachabilityFence(b_router);
-               Reference.reachabilityFence(b_logger);
-               Reference.reachabilityFence(b_entropy_source);
-               Reference.reachabilityFence(b_node_signer);
-               Reference.reachabilityFence(b_signer_provider);
-               Reference.reachabilityFence(b_config);
-               Reference.reachabilityFence(b_params);
-               Reference.reachabilityFence(b_current_timestamp);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_BlockHashChannelManagerZ ret_hu_conv = new TwoTuple_BlockHashChannelManagerZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_fee_est); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_chain_monitor); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_tx_broadcaster); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_router); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_logger); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_entropy_source); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_node_signer); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_signer_provider); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_config); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_params); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelMonitorZ.java b/src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelMonitorZ.java
deleted file mode 100644 (file)
index b81079b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_BlockHashChannelMonitorZ extends CommonBase {
-       TwoTuple_BlockHashChannelMonitorZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_BlockHashChannelMonitorZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_BlockHashChannelMonitorZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public ChannelMonitor get_b() {
-               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.ChannelMonitor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelMonitor(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_BlockHashChannelMonitorZ clone() {
-               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_BlockHashChannelMonitorZ ret_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_BlockHashChannelMonitorZ from the contained elements.
-        */
-       public static TwoTuple_BlockHashChannelMonitorZ of(byte[] a, org.ldk.structs.ChannelMonitor b) {
-               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_new(InternalUtils.check_arr_len(a, 32), b == null ? 0 : b.ptr);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_BlockHashChannelMonitorZ ret_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_CVec_u8ZusizeZ.java b/src/main/java/org/ldk/structs/TwoTuple_CVec_u8ZusizeZ.java
new file mode 100644 (file)
index 0000000..b52c69e
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_CVec_u8ZusizeZ extends CommonBase {
+       TwoTuple_CVec_u8ZusizeZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_CVec_u8ZusizeZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_CVec_u8ZusizeZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public long get_b() {
+               long ret = bindings.C2Tuple_CVec_u8ZusizeZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_CVec_u8ZusizeZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_CVec_u8ZusizeZ clone() {
+               long ret = bindings.C2Tuple_CVec_u8ZusizeZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_CVec_u8ZusizeZ ret_hu_conv = new TwoTuple_CVec_u8ZusizeZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_CVec_u8ZusizeZ from the contained elements.
+        */
+       public static TwoTuple_CVec_u8ZusizeZ of(byte[] a, long b) {
+               long ret = bindings.C2Tuple_CVec_u8ZusizeZ_new(a, b);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_CVec_u8ZusizeZ ret_hu_conv = new TwoTuple_CVec_u8ZusizeZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ.java b/src/main/java/org/ldk/structs/TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ.java
new file mode 100644 (file)
index 0000000..1ce0db7
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ extends CommonBase {
+       TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public byte[][] get_b() {
+               byte[][] ret = bindings.C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ clone() {
+               long ret = bindings.C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ ret_hu_conv = new TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ from the contained elements.
+        */
+       public static TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ of(byte[] a, byte[][] b) {
+               long ret = bindings.C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_new(InternalUtils.check_arr_len(a, 64), b != null ? Arrays.stream(b).map(b_conv_8 -> InternalUtils.check_arr_len(b_conv_8, 64)).toArray(byte[][]::new) : null);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ ret_hu_conv = new TwoTuple_ECDSASignatureCVec_ECDSASignatureZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_OutPointCVec_u8ZZ.java b/src/main/java/org/ldk/structs/TwoTuple_OutPointCVec_u8ZZ.java
new file mode 100644 (file)
index 0000000..e8024d5
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_OutPointCVec_u8ZZ extends CommonBase {
+       TwoTuple_OutPointCVec_u8ZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_OutPointCVec_u8ZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public OutPoint get_a() {
+               long ret = bindings.C2Tuple_OutPointCVec_u8ZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OutPoint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OutPoint(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_b() {
+               byte[] ret = bindings.C2Tuple_OutPointCVec_u8ZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_OutPointCVec_u8ZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_OutPointCVec_u8ZZ clone() {
+               long ret = bindings.C2Tuple_OutPointCVec_u8ZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OutPointCVec_u8ZZ ret_hu_conv = new TwoTuple_OutPointCVec_u8ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_OutPointCVec_u8ZZ from the contained elements.
+        */
+       public static TwoTuple_OutPointCVec_u8ZZ of(org.ldk.structs.OutPoint a, byte[] b) {
+               long ret = bindings.C2Tuple_OutPointCVec_u8ZZ_new(a == null ? 0 : a.ptr, b);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_OutPointCVec_u8ZZ ret_hu_conv = new TwoTuple_OutPointCVec_u8ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(a); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_OutPointScriptZ.java b/src/main/java/org/ldk/structs/TwoTuple_OutPointScriptZ.java
deleted file mode 100644 (file)
index 64df41c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_OutPointScriptZ extends CommonBase {
-       TwoTuple_OutPointScriptZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_OutPointScriptZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public OutPoint get_a() {
-               long ret = bindings.C2Tuple_OutPointScriptZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.OutPoint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OutPoint(null, ret); }
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_b() {
-               byte[] ret = bindings.C2Tuple_OutPointScriptZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_OutPointScriptZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_OutPointScriptZ clone() {
-               long ret = bindings.C2Tuple_OutPointScriptZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_OutPointScriptZ ret_hu_conv = new TwoTuple_OutPointScriptZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_OutPointScriptZ from the contained elements.
-        */
-       public static TwoTuple_OutPointScriptZ of(org.ldk.structs.OutPoint a, byte[] b) {
-               long ret = bindings.C2Tuple_OutPointScriptZ_new(a == null ? 0 : a.ptr, b);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_OutPointScriptZ ret_hu_conv = new TwoTuple_OutPointScriptZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(a); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_PartiallySignedTransactionusizeZ.java b/src/main/java/org/ldk/structs/TwoTuple_PartiallySignedTransactionusizeZ.java
deleted file mode 100644 (file)
index 43a10ae..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_PartiallySignedTransactionusizeZ extends CommonBase {
-       TwoTuple_PartiallySignedTransactionusizeZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_PartiallySignedTransactionusizeZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_PartiallySignedTransactionusizeZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public long get_b() {
-               long ret = bindings.C2Tuple_PartiallySignedTransactionusizeZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_PartiallySignedTransactionusizeZ clone() {
-               long ret = bindings.C2Tuple_PartiallySignedTransactionusizeZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PartiallySignedTransactionusizeZ ret_hu_conv = new TwoTuple_PartiallySignedTransactionusizeZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_PartiallySignedTransactionusizeZ from the contained elements.
-        */
-       public static TwoTuple_PartiallySignedTransactionusizeZ of(byte[] a, long b) {
-               long ret = bindings.C2Tuple_PartiallySignedTransactionusizeZ_new(a, b);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PartiallySignedTransactionusizeZ ret_hu_conv = new TwoTuple_PartiallySignedTransactionusizeZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentIdZ.java b/src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentIdZ.java
deleted file mode 100644 (file)
index 40f8cac..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_PaymentHashPaymentIdZ extends CommonBase {
-       TwoTuple_PaymentHashPaymentIdZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_PaymentHashPaymentIdZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_PaymentHashPaymentIdZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_b() {
-               byte[] ret = bindings.C2Tuple_PaymentHashPaymentIdZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_PaymentHashPaymentIdZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_PaymentHashPaymentIdZ clone() {
-               long ret = bindings.C2Tuple_PaymentHashPaymentIdZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PaymentHashPaymentIdZ ret_hu_conv = new TwoTuple_PaymentHashPaymentIdZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_PaymentHashPaymentIdZ from the contained elements.
-        */
-       public static TwoTuple_PaymentHashPaymentIdZ of(byte[] a, byte[] b) {
-               long ret = bindings.C2Tuple_PaymentHashPaymentIdZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PaymentHashPaymentIdZ ret_hu_conv = new TwoTuple_PaymentHashPaymentIdZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentSecretZ.java b/src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentSecretZ.java
deleted file mode 100644 (file)
index 8becf4c..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_PaymentHashPaymentSecretZ extends CommonBase {
-       TwoTuple_PaymentHashPaymentSecretZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_PaymentHashPaymentSecretZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_b() {
-               byte[] ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_PaymentHashPaymentSecretZ clone() {
-               long ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PaymentHashPaymentSecretZ ret_hu_conv = new TwoTuple_PaymentHashPaymentSecretZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_PaymentHashPaymentSecretZ from the contained elements.
-        */
-       public static TwoTuple_PaymentHashPaymentSecretZ of(byte[] a, byte[] b) {
-               long ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PaymentHashPaymentSecretZ ret_hu_conv = new TwoTuple_PaymentHashPaymentSecretZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_PublicKeyCOption_NetAddressZZ.java b/src/main/java/org/ldk/structs/TwoTuple_PublicKeyCOption_NetAddressZZ.java
deleted file mode 100644 (file)
index ae8993d..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_PublicKeyCOption_NetAddressZZ extends CommonBase {
-       TwoTuple_PublicKeyCOption_NetAddressZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_PublicKeyCOption_NetAddressZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public Option_NetAddressZ get_b() {
-               long ret = bindings.C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_NetAddressZ ret_hu_conv = org.ldk.structs.Option_NetAddressZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_PublicKeyCOption_NetAddressZZ clone() {
-               long ret = bindings.C2Tuple_PublicKeyCOption_NetAddressZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PublicKeyCOption_NetAddressZZ ret_hu_conv = new TwoTuple_PublicKeyCOption_NetAddressZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_PublicKeyCOption_NetAddressZZ from the contained elements.
-        */
-       public static TwoTuple_PublicKeyCOption_NetAddressZZ of(byte[] a, org.ldk.structs.Option_NetAddressZ b) {
-               long ret = bindings.C2Tuple_PublicKeyCOption_NetAddressZZ_new(InternalUtils.check_arr_len(a, 33), b.ptr);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_PublicKeyCOption_NetAddressZZ ret_hu_conv = new TwoTuple_PublicKeyCOption_NetAddressZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_PublicKeyCOption_SocketAddressZZ.java b/src/main/java/org/ldk/structs/TwoTuple_PublicKeyCOption_SocketAddressZZ.java
new file mode 100644 (file)
index 0000000..75f709a
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_PublicKeyCOption_SocketAddressZZ extends CommonBase {
+       TwoTuple_PublicKeyCOption_SocketAddressZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_PublicKeyCOption_SocketAddressZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public Option_SocketAddressZ get_b() {
+               long ret = bindings.C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SocketAddressZ ret_hu_conv = org.ldk.structs.Option_SocketAddressZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_PublicKeyCOption_SocketAddressZZ clone() {
+               long ret = bindings.C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_PublicKeyCOption_SocketAddressZZ ret_hu_conv = new TwoTuple_PublicKeyCOption_SocketAddressZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_PublicKeyCOption_SocketAddressZZ from the contained elements.
+        */
+       public static TwoTuple_PublicKeyCOption_SocketAddressZZ of(byte[] a, org.ldk.structs.Option_SocketAddressZ b) {
+               long ret = bindings.C2Tuple_PublicKeyCOption_SocketAddressZZ_new(InternalUtils.check_arr_len(a, 33), b.ptr);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_PublicKeyCOption_SocketAddressZZ ret_hu_conv = new TwoTuple_PublicKeyCOption_SocketAddressZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_PublicKeyOnionMessageZ.java b/src/main/java/org/ldk/structs/TwoTuple_PublicKeyOnionMessageZ.java
new file mode 100644 (file)
index 0000000..b143f3d
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_PublicKeyOnionMessageZ extends CommonBase {
+       TwoTuple_PublicKeyOnionMessageZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_PublicKeyOnionMessageZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_PublicKeyOnionMessageZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public OnionMessage get_b() {
+               long ret = bindings.C2Tuple_PublicKeyOnionMessageZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OnionMessage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OnionMessage(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_PublicKeyOnionMessageZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_PublicKeyOnionMessageZ clone() {
+               long ret = bindings.C2Tuple_PublicKeyOnionMessageZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_PublicKeyOnionMessageZ ret_hu_conv = new TwoTuple_PublicKeyOnionMessageZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_PublicKeyOnionMessageZ from the contained elements.
+        */
+       public static TwoTuple_PublicKeyOnionMessageZ of(byte[] a, org.ldk.structs.OnionMessage b) {
+               long ret = bindings.C2Tuple_PublicKeyOnionMessageZ_new(InternalUtils.check_arr_len(a, 33), b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_PublicKeyOnionMessageZ ret_hu_conv = new TwoTuple_PublicKeyOnionMessageZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_SignatureCVec_SignatureZZ.java b/src/main/java/org/ldk/structs/TwoTuple_SignatureCVec_SignatureZZ.java
deleted file mode 100644 (file)
index 22d78e0..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_SignatureCVec_SignatureZZ extends CommonBase {
-       TwoTuple_SignatureCVec_SignatureZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_SignatureCVec_SignatureZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public byte[][] get_b() {
-               byte[][] ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_SignatureCVec_SignatureZZ clone() {
-               long ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_SignatureCVec_SignatureZZ ret_hu_conv = new TwoTuple_SignatureCVec_SignatureZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_SignatureCVec_SignatureZZ from the contained elements.
-        */
-       public static TwoTuple_SignatureCVec_SignatureZZ of(byte[] a, byte[][] b) {
-               long ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_new(InternalUtils.check_arr_len(a, 64), b != null ? Arrays.stream(b).map(b_conv_8 -> InternalUtils.check_arr_len(b_conv_8, 64)).toArray(byte[][]::new) : null);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_SignatureCVec_SignatureZZ ret_hu_conv = new TwoTuple_SignatureCVec_SignatureZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ.java
new file mode 100644 (file)
index 0000000..7a20395
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public Option_ThirtyTwoBytesZ get_b() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ clone() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ of(byte[] a, org.ldk.structs.Option_ThirtyTwoBytesZ b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_new(InternalUtils.check_arr_len(a, 32), b.ptr);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ.java
new file mode 100644 (file)
index 0000000..6d3dcc7
--- /dev/null
@@ -0,0 +1,81 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public TwoTuple_u32CVec_u8ZZ[] get_b() {
+               long[] ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_23_len = ret.length;
+               TwoTuple_u32CVec_u8ZZ[] ret_conv_23_arr = new TwoTuple_u32CVec_u8ZZ[ret_conv_23_len];
+               for (int x = 0; x < ret_conv_23_len; x++) {
+                       long ret_conv_23 = ret[x];
+                       TwoTuple_u32CVec_u8ZZ ret_conv_23_hu_conv = new TwoTuple_u32CVec_u8ZZ(null, ret_conv_23);
+                       if (ret_conv_23_hu_conv != null) { ret_conv_23_hu_conv.ptrs_to.add(this); };
+                       ret_conv_23_arr[x] = ret_conv_23_hu_conv;
+               }
+               return ret_conv_23_arr;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ clone() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ of(byte[] a, TwoTuple_u32CVec_u8ZZ[] b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).mapToLong(b_conv_23 -> b_conv_23 != null ? b_conv_23.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ.java
new file mode 100644 (file)
index 0000000..e2e9d49
--- /dev/null
@@ -0,0 +1,81 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public TwoTuple_u32TxOutZ[] get_b() {
+               long[] ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_20_len = ret.length;
+               TwoTuple_u32TxOutZ[] ret_conv_20_arr = new TwoTuple_u32TxOutZ[ret_conv_20_len];
+               for (int u = 0; u < ret_conv_20_len; u++) {
+                       long ret_conv_20 = ret[u];
+                       TwoTuple_u32TxOutZ ret_conv_20_hu_conv = new TwoTuple_u32TxOutZ(null, ret_conv_20);
+                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.add(this); };
+                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
+               }
+               return ret_conv_20_arr;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ clone() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ of(byte[] a, TwoTuple_u32TxOutZ[] b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).mapToLong(b_conv_20 -> b_conv_20 != null ? b_conv_20.ptr : 0).toArray() : null);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelManagerZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelManagerZ.java
new file mode 100644 (file)
index 0000000..c13a92f
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesChannelManagerZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesChannelManagerZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesChannelManagerZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public ChannelManager get_b() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelManager ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelManager(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesChannelManagerZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesChannelManagerZ of(byte[] a, FeeEstimator b_fee_est, Watch b_chain_monitor, BroadcasterInterface b_tx_broadcaster, Router b_router, Logger b_logger, EntropySource b_entropy_source, NodeSigner b_node_signer, SignerProvider b_signer_provider, UserConfig b_config, ChainParameters b_params, int b_current_timestamp) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelManagerZ_new(InternalUtils.check_arr_len(a, 32), bindings.ChannelManager_new(b_fee_est.ptr, b_chain_monitor.ptr, b_tx_broadcaster.ptr, b_router.ptr, b_logger.ptr, b_entropy_source.ptr, b_node_signer.ptr, b_signer_provider.ptr, b_config == null ? 0 : b_config.ptr, b_params == null ? 0 : b_params.ptr, b_current_timestamp));
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b_fee_est);
+               Reference.reachabilityFence(b_chain_monitor);
+               Reference.reachabilityFence(b_tx_broadcaster);
+               Reference.reachabilityFence(b_router);
+               Reference.reachabilityFence(b_logger);
+               Reference.reachabilityFence(b_entropy_source);
+               Reference.reachabilityFence(b_node_signer);
+               Reference.reachabilityFence(b_signer_provider);
+               Reference.reachabilityFence(b_config);
+               Reference.reachabilityFence(b_params);
+               Reference.reachabilityFence(b_current_timestamp);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesChannelManagerZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesChannelManagerZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_fee_est); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_chain_monitor); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_tx_broadcaster); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_router); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_logger); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_node_signer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_signer_provider); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_config); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b_params); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelMonitorZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesChannelMonitorZ.java
new file mode 100644 (file)
index 0000000..87f5d6c
--- /dev/null
@@ -0,0 +1,77 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesChannelMonitorZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesChannelMonitorZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public ChannelMonitor get_b() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.ChannelMonitor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.ChannelMonitor(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ThirtyTwoBytesChannelMonitorZ clone() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesChannelMonitorZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesChannelMonitorZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesChannelMonitorZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesChannelMonitorZ of(byte[] a, org.ldk.structs.ChannelMonitor b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_new(InternalUtils.check_arr_len(a, 32), b == null ? 0 : b.ptr);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesChannelMonitorZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesChannelMonitorZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesPublicKeyZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesPublicKeyZ.java
new file mode 100644 (file)
index 0000000..991d88b
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesPublicKeyZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesPublicKeyZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesPublicKeyZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_b() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ThirtyTwoBytesPublicKeyZ clone() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesPublicKeyZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesPublicKeyZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesPublicKeyZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesPublicKeyZ of(byte[] a, byte[] b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesPublicKeyZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 33));
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesPublicKeyZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesPublicKeyZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ.java b/src/main/java/org/ldk/structs/TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ.java
new file mode 100644 (file)
index 0000000..df9ac19
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ extends CommonBase {
+       TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_a() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_b() {
+               byte[] ret = bindings.C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ clone() {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ from the contained elements.
+        */
+       public static TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ of(byte[] a, byte[] b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ ret_hu_conv = new TwoTuple_ThirtyTwoBytesThirtyTwoBytesZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_TxidCOption_BlockHashZZ.java b/src/main/java/org/ldk/structs/TwoTuple_TxidCOption_BlockHashZZ.java
deleted file mode 100644 (file)
index c027989..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_TxidCOption_BlockHashZZ extends CommonBase {
-       TwoTuple_TxidCOption_BlockHashZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_TxidCOption_BlockHashZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_TxidCOption_BlockHashZZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public Option_BlockHashZ get_b() {
-               long ret = bindings.C2Tuple_TxidCOption_BlockHashZZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_BlockHashZ ret_hu_conv = org.ldk.structs.Option_BlockHashZ.constr_from_ptr(ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_TxidCOption_BlockHashZZ clone() {
-               long ret = bindings.C2Tuple_TxidCOption_BlockHashZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_TxidCOption_BlockHashZZ ret_hu_conv = new TwoTuple_TxidCOption_BlockHashZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_TxidCOption_BlockHashZZ from the contained elements.
-        */
-       public static TwoTuple_TxidCOption_BlockHashZZ of(byte[] a, org.ldk.structs.Option_BlockHashZ b) {
-               long ret = bindings.C2Tuple_TxidCOption_BlockHashZZ_new(InternalUtils.check_arr_len(a, 32), b.ptr);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_TxidCOption_BlockHashZZ ret_hu_conv = new TwoTuple_TxidCOption_BlockHashZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(b); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ.java b/src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ.java
deleted file mode 100644 (file)
index c114d45..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ extends CommonBase {
-       TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public TwoTuple_u32ScriptZ[] get_b() {
-               long[] ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               int ret_conv_21_len = ret.length;
-               TwoTuple_u32ScriptZ[] ret_conv_21_arr = new TwoTuple_u32ScriptZ[ret_conv_21_len];
-               for (int v = 0; v < ret_conv_21_len; v++) {
-                       long ret_conv_21 = ret[v];
-                       TwoTuple_u32ScriptZ ret_conv_21_hu_conv = new TwoTuple_u32ScriptZ(null, ret_conv_21);
-                       if (ret_conv_21_hu_conv != null) { ret_conv_21_hu_conv.ptrs_to.add(this); };
-                       ret_conv_21_arr[v] = ret_conv_21_hu_conv;
-               }
-               return ret_conv_21_arr;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ clone() {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ from the contained elements.
-        */
-       public static TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ of(byte[] a, TwoTuple_u32ScriptZ[] b) {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).mapToLong(b_conv_21 -> b_conv_21 != null ? b_conv_21.ptr : 0).toArray() : null);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ.java b/src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ.java
deleted file mode 100644 (file)
index 13dc97d..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ extends CommonBase {
-       TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_a() {
-               byte[] ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public TwoTuple_u32TxOutZ[] get_b() {
-               long[] ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               int ret_conv_20_len = ret.length;
-               TwoTuple_u32TxOutZ[] ret_conv_20_arr = new TwoTuple_u32TxOutZ[ret_conv_20_len];
-               for (int u = 0; u < ret_conv_20_len; u++) {
-                       long ret_conv_20 = ret[u];
-                       TwoTuple_u32TxOutZ ret_conv_20_hu_conv = new TwoTuple_u32TxOutZ(null, ret_conv_20);
-                       if (ret_conv_20_hu_conv != null) { ret_conv_20_hu_conv.ptrs_to.add(this); };
-                       ret_conv_20_arr[u] = ret_conv_20_hu_conv;
-               }
-               return ret_conv_20_arr;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ clone() {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ from the contained elements.
-        */
-       public static TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ of(byte[] a, TwoTuple_u32TxOutZ[] b) {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).mapToLong(b_conv_20 -> b_conv_20 != null ? b_conv_20.ptr : 0).toArray() : null);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
index 46c52f2f8bd433636df5048ad426ec0a8a495e81..9e2ddc40a18893b577ca9b765556984498167052 100644 (file)
@@ -38,30 +38,11 @@ public class TwoTuple_Z extends CommonBase {
                return ret;
        }
 
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_Z_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_Z clone() {
-               long ret = bindings.C2Tuple_Z_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_Z ret_hu_conv = new TwoTuple_Z(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
        /**
         * Creates a new C2Tuple_Z from the contained elements.
         */
        public static TwoTuple_Z of(short[] a, short[] b) {
-               long ret = bindings.C2Tuple_Z_new(InternalUtils.check_arr_16_len(a, 8), InternalUtils.check_arr_16_len(b, 8));
+               long ret = bindings.C2Tuple_Z_new(InternalUtils.check_arr_16_len(a, 32), InternalUtils.check_arr_16_len(b, 32));
                Reference.reachabilityFence(a);
                Reference.reachabilityFence(b);
                if (ret >= 0 && ret <= 4096) { return null; }
diff --git a/src/main/java/org/ldk/structs/TwoTuple__u1632_u1632Z.java b/src/main/java/org/ldk/structs/TwoTuple__u1632_u1632Z.java
new file mode 100644 (file)
index 0000000..0be9162
--- /dev/null
@@ -0,0 +1,54 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple__u1632_u1632Z extends CommonBase {
+       TwoTuple__u1632_u1632Z(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple__u1632_u1632Z_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public short[] get_a() {
+               short[] ret = bindings.C2Tuple__u1632_u1632Z_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public short[] get_b() {
+               short[] ret = bindings.C2Tuple__u1632_u1632Z_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new C2Tuple__u1632_u1632Z from the contained elements.
+        */
+       public static TwoTuple__u1632_u1632Z of(short[] a, short[] b) {
+               long ret = bindings.C2Tuple__u1632_u1632Z_new(InternalUtils.check_arr_16_len(a, 32), InternalUtils.check_arr_16_len(b, 32));
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple__u1632_u1632Z ret_hu_conv = new TwoTuple__u1632_u1632Z(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple__u168_u168Z.java b/src/main/java/org/ldk/structs/TwoTuple__u168_u168Z.java
deleted file mode 100644 (file)
index 1aa7458..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple__u168_u168Z extends CommonBase {
-       TwoTuple__u168_u168Z(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple__u168_u168Z_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public short[] get_a() {
-               short[] ret = bindings.C2Tuple__u168_u168Z_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public short[] get_b() {
-               short[] ret = bindings.C2Tuple__u168_u168Z_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple__u168_u168Z_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple__u168_u168Z clone() {
-               long ret = bindings.C2Tuple__u168_u168Z_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple__u168_u168Z ret_hu_conv = new TwoTuple__u168_u168Z(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple__u168_u168Z from the contained elements.
-        */
-       public static TwoTuple__u168_u168Z of(short[] a, short[] b) {
-               long ret = bindings.C2Tuple__u168_u168Z_new(InternalUtils.check_arr_16_len(a, 8), InternalUtils.check_arr_16_len(b, 8));
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple__u168_u168Z ret_hu_conv = new TwoTuple__u168_u168Z(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_u32CVec_u8ZZ.java b/src/main/java/org/ldk/structs/TwoTuple_u32CVec_u8ZZ.java
new file mode 100644 (file)
index 0000000..8f15b45
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_u32CVec_u8ZZ extends CommonBase {
+       TwoTuple_u32CVec_u8ZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_u32CVec_u8ZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public int get_a() {
+               int ret = bindings.C2Tuple_u32CVec_u8ZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_b() {
+               byte[] ret = bindings.C2Tuple_u32CVec_u8ZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_u32CVec_u8ZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_u32CVec_u8ZZ clone() {
+               long ret = bindings.C2Tuple_u32CVec_u8ZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_u32CVec_u8ZZ ret_hu_conv = new TwoTuple_u32CVec_u8ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_u32CVec_u8ZZ from the contained elements.
+        */
+       public static TwoTuple_u32CVec_u8ZZ of(int a, byte[] b) {
+               long ret = bindings.C2Tuple_u32CVec_u8ZZ_new(a, b);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_u32CVec_u8ZZ ret_hu_conv = new TwoTuple_u32CVec_u8ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_u32ScriptZ.java b/src/main/java/org/ldk/structs/TwoTuple_u32ScriptZ.java
deleted file mode 100644 (file)
index 3d6c4ec..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.ldk.structs;
-
-import org.ldk.impl.bindings;
-import org.ldk.enums.*;
-import org.ldk.util.*;
-import java.util.Arrays;
-import java.lang.ref.Reference;
-import javax.annotation.Nullable;
-
-
-/**
- * A Tuple
- */
-@SuppressWarnings("unchecked") // We correctly assign various generic arrays
-public class TwoTuple_u32ScriptZ extends CommonBase {
-       TwoTuple_u32ScriptZ(Object _dummy, long ptr) { super(ptr); }
-       @Override @SuppressWarnings("deprecation")
-       protected void finalize() throws Throwable {
-               super.finalize();
-               if (ptr != 0) { bindings.C2Tuple_u32ScriptZ_free(ptr); }
-       }
-
-       /**
-        * 
-        */
-       public int get_a() {
-               int ret = bindings.C2Tuple_u32ScriptZ_get_a(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * 
-        */
-       public byte[] get_b() {
-               byte[] ret = bindings.C2Tuple_u32ScriptZ_get_b(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       long clone_ptr() {
-               long ret = bindings.C2Tuple_u32ScriptZ_clone_ptr(this.ptr);
-               Reference.reachabilityFence(this);
-               return ret;
-       }
-
-       /**
-        * Creates a new tuple which has the same data as `orig`
-        * but with all dynamically-allocated buffers duplicated in new buffers.
-        */
-       public TwoTuple_u32ScriptZ clone() {
-               long ret = bindings.C2Tuple_u32ScriptZ_clone(this.ptr);
-               Reference.reachabilityFence(this);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_u32ScriptZ ret_hu_conv = new TwoTuple_u32ScriptZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
-               return ret_hu_conv;
-       }
-
-       /**
-        * Creates a new C2Tuple_u32ScriptZ from the contained elements.
-        */
-       public static TwoTuple_u32ScriptZ of(int a, byte[] b) {
-               long ret = bindings.C2Tuple_u32ScriptZ_new(a, b);
-               Reference.reachabilityFence(a);
-               Reference.reachabilityFence(b);
-               if (ret >= 0 && ret <= 4096) { return null; }
-               TwoTuple_u32ScriptZ ret_hu_conv = new TwoTuple_u32ScriptZ(null, ret);
-               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
-               return ret_hu_conv;
-       }
-
-}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_u64CVec_u8ZZ.java b/src/main/java/org/ldk/structs/TwoTuple_u64CVec_u8ZZ.java
new file mode 100644 (file)
index 0000000..a2db978
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_u64CVec_u8ZZ extends CommonBase {
+       TwoTuple_u64CVec_u8ZZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_u64CVec_u8ZZ_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public long get_a() {
+               long ret = bindings.C2Tuple_u64CVec_u8ZZ_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_b() {
+               byte[] ret = bindings.C2Tuple_u64CVec_u8ZZ_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_u64CVec_u8ZZ_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_u64CVec_u8ZZ clone() {
+               long ret = bindings.C2Tuple_u64CVec_u8ZZ_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_u64CVec_u8ZZ ret_hu_conv = new TwoTuple_u64CVec_u8ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_u64CVec_u8ZZ from the contained elements.
+        */
+       public static TwoTuple_u64CVec_u8ZZ of(long a, byte[] b) {
+               long ret = bindings.C2Tuple_u64CVec_u8ZZ_new(a, b);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_u64CVec_u8ZZ ret_hu_conv = new TwoTuple_u64CVec_u8ZZ(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/TwoTuple_u64u16Z.java b/src/main/java/org/ldk/structs/TwoTuple_u64u16Z.java
new file mode 100644 (file)
index 0000000..14f7e28
--- /dev/null
@@ -0,0 +1,73 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Tuple
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class TwoTuple_u64u16Z extends CommonBase {
+       TwoTuple_u64u16Z(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.C2Tuple_u64u16Z_free(ptr); }
+       }
+
+       /**
+        * 
+        */
+       public long get_a() {
+               long ret = bindings.C2Tuple_u64u16Z_get_a(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public short get_b() {
+               short ret = bindings.C2Tuple_u64u16Z_get_b(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_u64u16Z_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public TwoTuple_u64u16Z clone() {
+               long ret = bindings.C2Tuple_u64u16Z_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_u64u16Z ret_hu_conv = new TwoTuple_u64u16Z(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C2Tuple_u64u16Z from the contained elements.
+        */
+       public static TwoTuple_u64u16Z of(long a, short b) {
+               long ret = bindings.C2Tuple_u64u16Z_new(a, b);
+               Reference.reachabilityFence(a);
+               Reference.reachabilityFence(b);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               TwoTuple_u64u16Z ret_hu_conv = new TwoTuple_u64u16Z(null, ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               return ret_hu_conv;
+       }
+
+}
index a808a8a32bd1454219ecdd2294d94426f9077f98..c9e476580434e026f6433f3b9284036f73a7b5e1 100644 (file)
@@ -10,6 +10,11 @@ import javax.annotation.Nullable;
 
 /**
  * A semantically valid [`Bolt12Invoice`] that hasn't been signed.
+ * 
+ * # Serialization
+ * 
+ * This is serialized as a TLV stream, which includes TLV records from the originating message. As
+ * such, it may include unknown, odd TLV records.
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class UnsignedBolt12Invoice extends CommonBase {
@@ -21,7 +26,328 @@ public class UnsignedBolt12Invoice extends CommonBase {
        }
 
        /**
-        * The public key corresponding to the key needed to sign the invoice.
+        * Returns the [`TaggedHash`] of the invoice to sign.
+        */
+       public TaggedHash tagged_hash() {
+               long ret = bindings.UnsignedBolt12Invoice_tagged_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.TaggedHash ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TaggedHash(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The chains that may be used when paying a requested invoice.
+        * 
+        * From [`Offer::chains`]; `None` if the invoice was created in response to a [`Refund`].
+        * 
+        * [`Offer::chains`]: crate::offers::offer::Offer::chains
+        */
+       public Option_CVec_ThirtyTwoBytesZZ offer_chains() {
+               long ret = bindings.UnsignedBolt12Invoice_offer_chains(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ ret_hu_conv = org.ldk.structs.Option_CVec_ThirtyTwoBytesZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The chain that must be used when paying the invoice; selected from [`offer_chains`] if the
+        * invoice originated from an offer.
+        * 
+        * From [`InvoiceRequest::chain`] or [`Refund::chain`].
+        * 
+        * [`offer_chains`]: Self::offer_chains
+        * [`InvoiceRequest::chain`]: crate::offers::invoice_request::InvoiceRequest::chain
+        */
+       public byte[] chain() {
+               byte[] ret = bindings.UnsignedBolt12Invoice_chain(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Opaque bytes set by the originating [`Offer`].
+        * 
+        * From [`Offer::metadata`]; `None` if the invoice was created in response to a [`Refund`] or
+        * if the [`Offer`] did not set it.
+        * 
+        * [`Offer`]: crate::offers::offer::Offer
+        * [`Offer::metadata`]: crate::offers::offer::Offer::metadata
+        */
+       public Option_CVec_u8ZZ metadata() {
+               long ret = bindings.UnsignedBolt12Invoice_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The minimum amount required for a successful payment of a single item.
+        * 
+        * From [`Offer::amount`]; `None` if the invoice was created in response to a [`Refund`] or if
+        * the [`Offer`] did not set it.
+        * 
+        * [`Offer`]: crate::offers::offer::Offer
+        * [`Offer::amount`]: crate::offers::offer::Offer::amount
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Amount amount() {
+               long ret = bindings.UnsignedBolt12Invoice_amount(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Amount ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Amount(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to the originating [`Offer`].
+        * 
+        * From [`Offer::offer_features`]; `None` if the invoice was created in response to a
+        * [`Refund`].
+        * 
+        * [`Offer`]: crate::offers::offer::Offer
+        * [`Offer::offer_features`]: crate::offers::offer::Offer::offer_features
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public OfferFeatures offer_features() {
+               long ret = bindings.UnsignedBolt12Invoice_offer_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OfferFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A complete description of the purpose of the originating offer or refund.
+        * 
+        * From [`Offer::description`] or [`Refund::description`].
+        * 
+        * [`Offer::description`]: crate::offers::offer::Offer::description
+        */
+       public PrintableString description() {
+               long ret = bindings.UnsignedBolt12Invoice_description(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Duration since the Unix epoch when an invoice should no longer be requested.
+        * 
+        * From [`Offer::absolute_expiry`] or [`Refund::absolute_expiry`].
+        * 
+        * [`Offer::absolute_expiry`]: crate::offers::offer::Offer::absolute_expiry
+        */
+       public Option_u64Z absolute_expiry() {
+               long ret = bindings.UnsignedBolt12Invoice_absolute_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The issuer of the offer or refund.
+        * 
+        * From [`Offer::issuer`] or [`Refund::issuer`].
+        * 
+        * [`Offer::issuer`]: crate::offers::offer::Offer::issuer
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString issuer() {
+               long ret = bindings.UnsignedBolt12Invoice_issuer(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Paths to the recipient originating from publicly reachable nodes.
+        * 
+        * From [`Offer::paths`] or [`Refund::paths`].
+        * 
+        * [`Offer::paths`]: crate::offers::offer::Offer::paths
+        */
+       public BlindedPath[] message_paths() {
+               long[] ret = bindings.UnsignedBolt12Invoice_message_paths(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_13_len = ret.length;
+               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
+               for (int n = 0; n < ret_conv_13_len; n++) {
+                       long ret_conv_13 = ret[n];
+                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
+                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.add(this); };
+                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               }
+               return ret_conv_13_arr;
+       }
+
+       /**
+        * The quantity of items supported.
+        * 
+        * From [`Offer::supported_quantity`]; `None` if the invoice was created in response to a
+        * [`Refund`].
+        * 
+        * [`Offer::supported_quantity`]: crate::offers::offer::Offer::supported_quantity
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Quantity supported_quantity() {
+               long ret = bindings.UnsignedBolt12Invoice_supported_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Quantity ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Quantity(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * An unpredictable series of bytes from the payer.
+        * 
+        * From [`InvoiceRequest::payer_metadata`] or [`Refund::payer_metadata`].
+        */
+       public byte[] payer_metadata() {
+               byte[] ret = bindings.UnsignedBolt12Invoice_payer_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Features pertaining to requesting an invoice.
+        * 
+        * From [`InvoiceRequest::invoice_request_features`] or [`Refund::features`].
+        */
+       public InvoiceRequestFeatures invoice_request_features() {
+               long ret = bindings.UnsignedBolt12Invoice_invoice_request_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.InvoiceRequestFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceRequestFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The quantity of items requested or refunded for.
+        * 
+        * From [`InvoiceRequest::quantity`] or [`Refund::quantity`].
+        */
+       public Option_u64Z quantity() {
+               long ret = bindings.UnsignedBolt12Invoice_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A possibly transient pubkey used to sign the invoice request or to send an invoice for a
+        * refund in case there are no [`message_paths`].
+        * 
+        * [`message_paths`]: Self::message_paths
+        */
+       public byte[] payer_id() {
+               byte[] ret = bindings.UnsignedBolt12Invoice_payer_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A payer-provided note reflected back in the invoice.
+        * 
+        * From [`InvoiceRequest::payer_note`] or [`Refund::payer_note`].
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString payer_note() {
+               long ret = bindings.UnsignedBolt12Invoice_payer_note(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Duration since the Unix epoch when the invoice was created.
+        */
+       public long created_at() {
+               long ret = bindings.UnsignedBolt12Invoice_created_at(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Duration since [`Bolt12Invoice::created_at`] when the invoice has expired and therefore
+        * should no longer be paid.
+        */
+       public long relative_expiry() {
+               long ret = bindings.UnsignedBolt12Invoice_relative_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Whether the invoice has expired.
+        */
+       public boolean is_expired() {
+               boolean ret = bindings.UnsignedBolt12Invoice_is_expired(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * SHA256 hash of the payment preimage that will be given in return for paying the invoice.
+        */
+       public byte[] payment_hash() {
+               byte[] ret = bindings.UnsignedBolt12Invoice_payment_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The minimum amount required for a successful payment of the invoice.
+        */
+       public long amount_msats() {
+               long ret = bindings.UnsignedBolt12Invoice_amount_msats(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Features pertaining to paying an invoice.
+        */
+       public Bolt12InvoiceFeatures invoice_features() {
+               long ret = bindings.UnsignedBolt12Invoice_invoice_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Bolt12InvoiceFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Bolt12InvoiceFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The public key corresponding to the key used to sign the invoice.
         */
        public byte[] signing_pubkey() {
                byte[] ret = bindings.UnsignedBolt12Invoice_signing_pubkey(this.ptr);
@@ -29,4 +355,13 @@ public class UnsignedBolt12Invoice extends CommonBase {
                return ret;
        }
 
+       /**
+        * Serialize the UnsignedBolt12Invoice object into a byte array which can be read by UnsignedBolt12Invoice_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.UnsignedBolt12Invoice_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
 }
index d93703ca19a7971fa9e5873fad60d134c211c42e..5685619359ef515c5cffe22129718447eeb866e6 100644 (file)
@@ -168,6 +168,56 @@ public class UnsignedChannelAnnouncement extends CommonBase {
                if (this != null) { this.ptrs_to.add(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 protocol.
+        * 
+        * Returns a copy of the field.
+        */
+       public byte[] get_excess_data() {
+               byte[] ret = bindings.UnsignedChannelAnnouncement_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 lightning gossip protocol.
+        */
+       public void set_excess_data(byte[] val) {
+               bindings.UnsignedChannelAnnouncement_set_excess_data(this.ptr, val);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+       }
+
+       /**
+        * Constructs a new UnsignedChannelAnnouncement given each field
+        */
+       public static UnsignedChannelAnnouncement of(org.ldk.structs.ChannelFeatures features_arg, byte[] chain_hash_arg, long short_channel_id_arg, org.ldk.structs.NodeId node_id_1_arg, org.ldk.structs.NodeId node_id_2_arg, org.ldk.structs.NodeId bitcoin_key_1_arg, org.ldk.structs.NodeId bitcoin_key_2_arg, byte[] excess_data_arg) {
+               long ret = bindings.UnsignedChannelAnnouncement_new(features_arg == null ? 0 : features_arg.ptr, InternalUtils.check_arr_len(chain_hash_arg, 32), short_channel_id_arg, node_id_1_arg == null ? 0 : node_id_1_arg.ptr, node_id_2_arg == null ? 0 : node_id_2_arg.ptr, bitcoin_key_1_arg == null ? 0 : bitcoin_key_1_arg.ptr, bitcoin_key_2_arg == null ? 0 : bitcoin_key_2_arg.ptr, excess_data_arg);
+               Reference.reachabilityFence(features_arg);
+               Reference.reachabilityFence(chain_hash_arg);
+               Reference.reachabilityFence(short_channel_id_arg);
+               Reference.reachabilityFence(node_id_1_arg);
+               Reference.reachabilityFence(node_id_2_arg);
+               Reference.reachabilityFence(bitcoin_key_1_arg);
+               Reference.reachabilityFence(bitcoin_key_2_arg);
+               Reference.reachabilityFence(excess_data_arg);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.UnsignedChannelAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.UnsignedChannelAnnouncement(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(features_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(node_id_1_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(node_id_2_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(bitcoin_key_1_arg); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(bitcoin_key_2_arg); };
+               return ret_hu_conv;
+       }
+
        long clone_ptr() {
                long ret = bindings.UnsignedChannelAnnouncement_clone_ptr(this.ptr);
                Reference.reachabilityFence(this);
index 4a772806f2b6c2f92f641009e0388b590498bd81..b8b19b9c96ef46fdbc49ea786a4cda91e7f76065 100644 (file)
@@ -10,6 +10,11 @@ import javax.annotation.Nullable;
 
 /**
  * A semantically valid [`InvoiceRequest`] that hasn't been signed.
+ * 
+ * # Serialization
+ * 
+ * This is serialized as a TLV stream, which includes TLV records from the originating message. As
+ * such, it may include unknown, odd TLV records.
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class UnsignedInvoiceRequest extends CommonBase {
@@ -20,4 +25,243 @@ public class UnsignedInvoiceRequest extends CommonBase {
                if (ptr != 0) { bindings.UnsignedInvoiceRequest_free(ptr); }
        }
 
+       /**
+        * Returns the [`TaggedHash`] of the invoice to sign.
+        */
+       public TaggedHash tagged_hash() {
+               long ret = bindings.UnsignedInvoiceRequest_tagged_hash(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.TaggedHash ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.TaggedHash(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The chains that may be used when paying a requested invoice (e.g., bitcoin mainnet).
+        * Payments must be denominated in units of the minimal lightning-payable unit (e.g., msats)
+        * for the selected chain.
+        */
+       public byte[][] chains() {
+               byte[][] ret = bindings.UnsignedInvoiceRequest_chains(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Opaque bytes set by the originator. Useful for authentication and validating fields since it
+        * is reflected in `invoice_request` messages along with all the other fields from the `offer`.
+        */
+       public Option_CVec_u8ZZ metadata() {
+               long ret = bindings.UnsignedInvoiceRequest_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The minimum amount required for a successful payment of a single item.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Amount amount() {
+               long ret = bindings.UnsignedInvoiceRequest_amount(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Amount ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Amount(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A complete description of the purpose of the payment. Intended to be displayed to the user
+        * but with the caveat that it has not been verified in any way.
+        */
+       public PrintableString description() {
+               long ret = bindings.UnsignedInvoiceRequest_description(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to the offer.
+        */
+       public OfferFeatures offer_features() {
+               long ret = bindings.UnsignedInvoiceRequest_offer_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OfferFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Duration since the Unix epoch when an invoice should no longer be requested.
+        * 
+        * If `None`, the offer does not expire.
+        */
+       public Option_u64Z absolute_expiry() {
+               long ret = bindings.UnsignedInvoiceRequest_absolute_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The issuer of the offer, possibly beginning with `user@domain` or `domain`. Intended to be
+        * displayed to the user but with the caveat that it has not been verified in any way.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString issuer() {
+               long ret = bindings.UnsignedInvoiceRequest_issuer(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
+        * recipient privacy by obfuscating its node id.
+        */
+       public BlindedPath[] paths() {
+               long[] ret = bindings.UnsignedInvoiceRequest_paths(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_13_len = ret.length;
+               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
+               for (int n = 0; n < ret_conv_13_len; n++) {
+                       long ret_conv_13 = ret[n];
+                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
+                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.add(this); };
+                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               }
+               return ret_conv_13_arr;
+       }
+
+       /**
+        * The quantity of items supported.
+        */
+       public Quantity supported_quantity() {
+               long ret = bindings.UnsignedInvoiceRequest_supported_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Quantity ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Quantity(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The public key used by the recipient to sign invoices.
+        */
+       public byte[] signing_pubkey() {
+               byte[] ret = bindings.UnsignedInvoiceRequest_signing_pubkey(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * An unpredictable series of bytes, typically containing information about the derivation of
+        * [`payer_id`].
+        * 
+        * [`payer_id`]: Self::payer_id
+        */
+       public byte[] payer_metadata() {
+               byte[] ret = bindings.UnsignedInvoiceRequest_payer_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A chain from [`Offer::chains`] that the offer is valid for.
+        */
+       public byte[] chain() {
+               byte[] ret = bindings.UnsignedInvoiceRequest_chain(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The amount to pay in msats (i.e., the minimum lightning-payable unit for [`chain`]), which
+        * must be greater than or equal to [`Offer::amount`], converted if necessary.
+        * 
+        * [`chain`]: Self::chain
+        */
+       public Option_u64Z amount_msats() {
+               long ret = bindings.UnsignedInvoiceRequest_amount_msats(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to requesting an invoice.
+        */
+       public InvoiceRequestFeatures invoice_request_features() {
+               long ret = bindings.UnsignedInvoiceRequest_invoice_request_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.InvoiceRequestFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceRequestFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The quantity of the offer's item conforming to [`Offer::is_valid_quantity`].
+        */
+       public Option_u64Z quantity() {
+               long ret = bindings.UnsignedInvoiceRequest_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A possibly transient pubkey used to sign the invoice request.
+        */
+       public byte[] payer_id() {
+               byte[] ret = bindings.UnsignedInvoiceRequest_payer_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A payer-provided note which will be seen by the recipient and reflected back in the invoice
+        * response.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString payer_note() {
+               long ret = bindings.UnsignedInvoiceRequest_payer_note(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Serialize the UnsignedInvoiceRequest object into a byte array which can be read by UnsignedInvoiceRequest_read
+        */
+       public byte[] write() {
+               byte[] ret = bindings.UnsignedInvoiceRequest_write(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
 }
index 80f508fbe462d7d01d57896e1a259e6e9002ebdc..022534511c38fe29aaf51d4da2cb738bb03beb19 100644 (file)
@@ -135,28 +135,28 @@ public class UnsignedNodeAnnouncement extends CommonBase {
         * 
         * Returns a copy of the field.
         */
-       public NetAddress[] get_addresses() {
+       public SocketAddress[] 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);
-                       if (ret_conv_12_hu_conv != null) { ret_conv_12_hu_conv.ptrs_to.add(this); };
-                       ret_conv_12_arr[m] = ret_conv_12_hu_conv;
+               int ret_conv_15_len = ret.length;
+               SocketAddress[] ret_conv_15_arr = new SocketAddress[ret_conv_15_len];
+               for (int p = 0; p < ret_conv_15_len; p++) {
+                       long ret_conv_15 = ret[p];
+                       org.ldk.structs.SocketAddress ret_conv_15_hu_conv = org.ldk.structs.SocketAddress.constr_from_ptr(ret_conv_15);
+                       if (ret_conv_15_hu_conv != null) { ret_conv_15_hu_conv.ptrs_to.add(this); };
+                       ret_conv_15_arr[p] = ret_conv_15_hu_conv;
                }
-               return ret_conv_12_arr;
+               return ret_conv_15_arr;
        }
 
        /**
         * List of addresses on which this node is reachable
         */
-       public void set_addresses(NetAddress[] val) {
-               bindings.UnsignedNodeAnnouncement_set_addresses(this.ptr, val != null ? Arrays.stream(val).mapToLong(val_conv_12 -> val_conv_12.ptr).toArray() : null);
+       public void set_addresses(SocketAddress[] val) {
+               bindings.UnsignedNodeAnnouncement_set_addresses(this.ptr, val != null ? Arrays.stream(val).mapToLong(val_conv_15 -> val_conv_15.ptr).toArray() : null);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
-               for (NetAddress val_conv_12: val) { if (this != null) { this.ptrs_to.add(val_conv_12); }; };
+               for (SocketAddress val_conv_15: val) { if (this != null) { this.ptrs_to.add(val_conv_15); }; };
        }
 
        long clone_ptr() {
index 192d004a038ae94c1200e915e020491ee9592e18..aa0110f17f5354f449c1aa5af41719e3cfa5c899 100644 (file)
@@ -58,24 +58,24 @@ public class UtilMethods {
         * A receiver knowing the PublicKey (e.g. the node's id) and the message can be sure that the signature was generated by the caller.
         * Signatures are EC recoverable, meaning that given the message and the signature the PublicKey of the signer can be extracted.
         */
-       public static Result_StringErrorZ sign(byte[] msg, byte[] sk) {
+       public static Result_StrSecp256k1ErrorZ sign(byte[] msg, byte[] sk) {
                long ret = bindings.sign(msg, InternalUtils.check_arr_len(sk, 32));
                Reference.reachabilityFence(msg);
                Reference.reachabilityFence(sk);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_StringErrorZ ret_hu_conv = Result_StringErrorZ.constr_from_ptr(ret);
+               Result_StrSecp256k1ErrorZ ret_hu_conv = Result_StrSecp256k1ErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        /**
         * Recovers the PublicKey of the signer of the message given the message and the signature.
         */
-       public static Result_PublicKeyErrorZ recover_pk(byte[] msg, java.lang.String sig) {
+       public static Result_PublicKeySecp256k1ErrorZ recover_pk(byte[] msg, java.lang.String sig) {
                long ret = bindings.recover_pk(msg, sig);
                Reference.reachabilityFence(msg);
                Reference.reachabilityFence(sig);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
+               Result_PublicKeySecp256k1ErrorZ ret_hu_conv = Result_PublicKeySecp256k1ErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
@@ -101,6 +101,22 @@ public class UtilMethods {
                return ret;
        }
 
+       /**
+        * Read previously persisted [`ChannelMonitor`]s from the store.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ read_channel_monitors(org.ldk.structs.KVStore kv_store, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.SignerProvider signer_provider) {
+               long ret = bindings.read_channel_monitors(kv_store.ptr, entropy_source.ptr, signer_provider.ptr);
+               Reference.reachabilityFence(kv_store);
+               Reference.reachabilityFence(entropy_source);
+               Reference.reachabilityFence(signer_provider);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(kv_store); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(signer_provider); };
+               return ret_hu_conv;
+       }
+
        /**
         * Read a MonitorEvent from a byte array, created by MonitorEvent_write
         */
@@ -113,15 +129,15 @@ public class UtilMethods {
        }
 
        /**
-        * Read a C2Tuple_BlockHashChannelMonitorZ from a byte array, created by C2Tuple_BlockHashChannelMonitorZ_write
+        * Read a C2Tuple_ThirtyTwoBytesChannelMonitorZ from a byte array, created by C2Tuple_ThirtyTwoBytesChannelMonitorZ_write
         */
-       public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ C2Tuple_BlockHashChannelMonitorZ_read(byte[] ser, org.ldk.structs.EntropySource arg_a, org.ldk.structs.SignerProvider arg_b) {
-               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_read(ser, arg_a.ptr, arg_b.ptr);
+       public static Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ C2Tuple_ThirtyTwoBytesChannelMonitorZ_read(byte[] ser, org.ldk.structs.EntropySource arg_a, org.ldk.structs.SignerProvider arg_b) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelMonitorZ_read(ser, arg_a.ptr, arg_b.ptr);
                Reference.reachabilityFence(ser);
                Reference.reachabilityFence(arg_a);
                Reference.reachabilityFence(arg_b);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
+               Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(arg_a); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(arg_b); };
                return ret_hu_conv;
@@ -142,10 +158,10 @@ public class UtilMethods {
        }
 
        /**
-        * Read a C2Tuple_BlockHashChannelManagerZ from a byte array, created by C2Tuple_BlockHashChannelManagerZ_write
+        * Read a C2Tuple_ThirtyTwoBytesChannelManagerZ from a byte array, created by C2Tuple_ThirtyTwoBytesChannelManagerZ_write
         */
-       public static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ C2Tuple_BlockHashChannelManagerZ_read(byte[] ser, EntropySource arg_entropy_source, NodeSigner arg_node_signer, SignerProvider arg_signer_provider, FeeEstimator arg_fee_estimator, Watch arg_chain_monitor, BroadcasterInterface arg_tx_broadcaster, Router arg_router, Logger arg_logger, UserConfig arg_default_config, ChannelMonitor[] arg_channel_monitors) {
-               long ret = bindings.C2Tuple_BlockHashChannelManagerZ_read(ser, bindings.ChannelManagerReadArgs_new(arg_entropy_source.ptr, arg_node_signer.ptr, arg_signer_provider.ptr, arg_fee_estimator.ptr, arg_chain_monitor.ptr, arg_tx_broadcaster.ptr, arg_router.ptr, arg_logger.ptr, arg_default_config == null ? 0 : arg_default_config.ptr, arg_channel_monitors != null ? Arrays.stream(arg_channel_monitors).mapToLong(arg_channel_monitors_conv_16 -> arg_channel_monitors_conv_16 == null ? 0 : arg_channel_monitors_conv_16.ptr).toArray() : null));
+       public static Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ C2Tuple_ThirtyTwoBytesChannelManagerZ_read(byte[] ser, EntropySource arg_entropy_source, NodeSigner arg_node_signer, SignerProvider arg_signer_provider, FeeEstimator arg_fee_estimator, Watch arg_chain_monitor, BroadcasterInterface arg_tx_broadcaster, Router arg_router, Logger arg_logger, UserConfig arg_default_config, ChannelMonitor[] arg_channel_monitors) {
+               long ret = bindings.C2Tuple_ThirtyTwoBytesChannelManagerZ_read(ser, bindings.ChannelManagerReadArgs_new(arg_entropy_source.ptr, arg_node_signer.ptr, arg_signer_provider.ptr, arg_fee_estimator.ptr, arg_chain_monitor.ptr, arg_tx_broadcaster.ptr, arg_router.ptr, arg_logger.ptr, arg_default_config == null ? 0 : arg_default_config.ptr, arg_channel_monitors != null ? Arrays.stream(arg_channel_monitors).mapToLong(arg_channel_monitors_conv_16 -> arg_channel_monitors_conv_16 == null ? 0 : arg_channel_monitors_conv_16.ptr).toArray() : null));
                Reference.reachabilityFence(ser);
                Reference.reachabilityFence(arg_entropy_source);
                Reference.reachabilityFence(arg_node_signer);
@@ -158,7 +174,7 @@ public class UtilMethods {
                Reference.reachabilityFence(arg_default_config);
                Reference.reachabilityFence(arg_channel_monitors);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
+               Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(arg_entropy_source); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(arg_node_signer); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(arg_signer_provider); };
@@ -189,7 +205,7 @@ public class UtilMethods {
         * [phantom node payments]: crate::sign::PhantomKeysManager
         * [`NodeSigner::get_inbound_payment_key_material`]: crate::sign::NodeSigner::get_inbound_payment_key_material
         */
-       public static Result_C2Tuple_PaymentHashPaymentSecretZNoneZ create(org.ldk.structs.ExpandedKey keys, org.ldk.structs.Option_u64Z min_value_msat, int invoice_expiry_delta_secs, org.ldk.structs.EntropySource entropy_source, long current_time, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+       public static Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ create(org.ldk.structs.ExpandedKey keys, org.ldk.structs.Option_u64Z min_value_msat, int invoice_expiry_delta_secs, org.ldk.structs.EntropySource entropy_source, long current_time, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
                long ret = bindings.create(keys == null ? 0 : keys.ptr, min_value_msat.ptr, invoice_expiry_delta_secs, entropy_source.ptr, current_time, min_final_cltv_expiry_delta.ptr);
                Reference.reachabilityFence(keys);
                Reference.reachabilityFence(min_value_msat);
@@ -198,7 +214,7 @@ public class UtilMethods {
                Reference.reachabilityFence(current_time);
                Reference.reachabilityFence(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PaymentHashPaymentSecretZNoneZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentSecretZNoneZ.constr_from_ptr(ret);
+               Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ ret_hu_conv = Result_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(keys); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(min_value_msat); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(entropy_source); };
@@ -218,7 +234,7 @@ public class UtilMethods {
         * 
         * [phantom node payments]: crate::sign::PhantomKeysManager
         */
-       public static Result_PaymentSecretNoneZ create_from_hash(org.ldk.structs.ExpandedKey keys, org.ldk.structs.Option_u64Z min_value_msat, byte[] payment_hash, int invoice_expiry_delta_secs, long current_time, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
+       public static Result_ThirtyTwoBytesNoneZ create_from_hash(org.ldk.structs.ExpandedKey keys, org.ldk.structs.Option_u64Z min_value_msat, byte[] payment_hash, int invoice_expiry_delta_secs, long current_time, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta) {
                long ret = bindings.create_from_hash(keys == null ? 0 : keys.ptr, min_value_msat.ptr, InternalUtils.check_arr_len(payment_hash, 32), invoice_expiry_delta_secs, current_time, min_final_cltv_expiry_delta.ptr);
                Reference.reachabilityFence(keys);
                Reference.reachabilityFence(min_value_msat);
@@ -227,13 +243,27 @@ public class UtilMethods {
                Reference.reachabilityFence(current_time);
                Reference.reachabilityFence(min_final_cltv_expiry_delta);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentSecretNoneZ ret_hu_conv = Result_PaymentSecretNoneZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesNoneZ ret_hu_conv = Result_ThirtyTwoBytesNoneZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(keys); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(min_value_msat); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(min_final_cltv_expiry_delta); };
                return ret_hu_conv;
        }
 
+       /**
+        * Parses an OnionV3 host and port into a [`SocketAddress::OnionV3`].
+        * 
+        * The host part must end with \".onion\".
+        */
+       public static Result_SocketAddressSocketAddressParseErrorZ parse_onion_address(java.lang.String host, short port) {
+               long ret = bindings.parse_onion_address(host, port);
+               Reference.reachabilityFence(host);
+               Reference.reachabilityFence(port);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_SocketAddressSocketAddressParseErrorZ ret_hu_conv = Result_SocketAddressSocketAddressParseErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Gets the weight for an HTLC-Success transaction.
         */
@@ -358,6 +388,17 @@ public class UtilMethods {
                return ret;
        }
 
+       /**
+        * Returns the script for the counterparty's output on a holder's commitment transaction based on
+        * the channel type.
+        */
+       public static byte[] get_counterparty_payment_script(org.ldk.structs.ChannelTypeFeatures channel_type_features, byte[] payment_key) {
+               byte[] ret = bindings.get_counterparty_payment_script(channel_type_features == null ? 0 : channel_type_features.ptr, InternalUtils.check_arr_len(payment_key, 33));
+               Reference.reachabilityFence(channel_type_features);
+               Reference.reachabilityFence(payment_key);
+               return ret;
+       }
+
        /**
         * Gets the witness redeemscript for an HTLC output in a commitment transaction. Note that htlc
         * does not need to have its previous_output_index filled.
@@ -405,7 +446,7 @@ public class UtilMethods {
        /**
         * Returns the witness required to satisfy and spend a HTLC input.
         */
-       public static byte[] build_htlc_input_witness(byte[] local_sig, byte[] remote_sig, org.ldk.structs.Option_PaymentPreimageZ preimage, byte[] redeem_script, org.ldk.structs.ChannelTypeFeatures channel_type_features) {
+       public static byte[] build_htlc_input_witness(byte[] local_sig, byte[] remote_sig, org.ldk.structs.Option_ThirtyTwoBytesZ preimage, byte[] redeem_script, org.ldk.structs.ChannelTypeFeatures channel_type_features) {
                byte[] ret = bindings.build_htlc_input_witness(InternalUtils.check_arr_len(local_sig, 64), InternalUtils.check_arr_len(remote_sig, 64), preimage.ptr, redeem_script, channel_type_features == null ? 0 : channel_type_features.ptr);
                Reference.reachabilityFence(local_sig);
                Reference.reachabilityFence(remote_sig);
@@ -532,7 +573,7 @@ public class UtilMethods {
         * 
         * Note that first_hops (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
-       public static Result_RouteLightningErrorZ find_route(byte[] our_node_pubkey, org.ldk.structs.RouteParameters route_params, org.ldk.structs.NetworkGraph network_graph, @Nullable ChannelDetails[] first_hops, org.ldk.structs.Logger logger, org.ldk.structs.Score scorer, org.ldk.structs.ProbabilisticScoringFeeParameters score_params, byte[] random_seed_bytes) {
+       public static Result_RouteLightningErrorZ find_route(byte[] our_node_pubkey, org.ldk.structs.RouteParameters route_params, org.ldk.structs.NetworkGraph network_graph, @Nullable ChannelDetails[] first_hops, org.ldk.structs.Logger logger, org.ldk.structs.ScoreLookUp scorer, org.ldk.structs.ProbabilisticScoringFeeParameters score_params, byte[] random_seed_bytes) {
                long ret = bindings.find_route(InternalUtils.check_arr_len(our_node_pubkey, 33), route_params == null ? 0 : route_params.ptr, network_graph == null ? 0 : network_graph.ptr, first_hops != null ? Arrays.stream(first_hops).mapToLong(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr).toArray() : null, logger.ptr, scorer.ptr, score_params == null ? 0 : score_params.ptr, InternalUtils.check_arr_len(random_seed_bytes, 32));
                Reference.reachabilityFence(our_node_pubkey);
                Reference.reachabilityFence(route_params);
@@ -593,7 +634,7 @@ public class UtilMethods {
         * 
         * We do not enforce that outputs meet the dust limit or that any output scripts are standard.
         */
-       public static Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ SpendableOutputDescriptor_create_spendable_outputs_psbt(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_PackedLockTimeZ locktime) {
+       public static Result_C2Tuple_CVec_u8ZusizeZNoneZ SpendableOutputDescriptor_create_spendable_outputs_psbt(SpendableOutputDescriptor[] descriptors, TxOut[] outputs, byte[] change_destination_script, int feerate_sat_per_1000_weight, org.ldk.structs.Option_u32Z locktime) {
                long ret = bindings.SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors != null ? Arrays.stream(descriptors).mapToLong(descriptors_conv_27 -> descriptors_conv_27.ptr).toArray() : null, outputs != null ? Arrays.stream(outputs).mapToLong(outputs_conv_7 -> outputs_conv_7.ptr).toArray() : null, change_destination_script, feerate_sat_per_1000_weight, locktime.ptr);
                Reference.reachabilityFence(descriptors);
                Reference.reachabilityFence(outputs);
@@ -601,12 +642,35 @@ public class UtilMethods {
                Reference.reachabilityFence(feerate_sat_per_1000_weight);
                Reference.reachabilityFence(locktime);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ ret_hu_conv = Result_C2Tuple_PartiallySignedTransactionusizeZNoneZ.constr_from_ptr(ret);
+               Result_C2Tuple_CVec_u8ZusizeZNoneZ ret_hu_conv = Result_C2Tuple_CVec_u8ZusizeZNoneZ.constr_from_ptr(ret);
                for (SpendableOutputDescriptor descriptors_conv_27: descriptors) { if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(descriptors_conv_27); }; };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(locktime); };
                return ret_hu_conv;
        }
 
+       /**
+        * Create an onion message with contents `message` to the destination of `path`.
+        * Returns (introduction_node_id, onion_msg)
+        * 
+        * Note that reply_path (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       public static Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ create_onion_message(org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.OnionMessagePath path, org.ldk.structs.OnionMessageContents message, @Nullable org.ldk.structs.BlindedPath reply_path) {
+               long ret = bindings.create_onion_message(entropy_source.ptr, node_signer.ptr, path == null ? 0 : path.ptr, message.ptr, reply_path == null ? 0 : reply_path.ptr);
+               Reference.reachabilityFence(entropy_source);
+               Reference.reachabilityFence(node_signer);
+               Reference.reachabilityFence(path);
+               Reference.reachabilityFence(message);
+               Reference.reachabilityFence(reply_path);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ ret_hu_conv = Result_C2Tuple_PublicKeyOnionMessageZSendErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(entropy_source); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(node_signer); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(path); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(message); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(reply_path); };
+               return ret_hu_conv;
+       }
+
        /**
         * Returns whether `tlv_type` corresponds to a TLV record for Offers.
         */
@@ -616,6 +680,21 @@ public class UtilMethods {
                return ret;
        }
 
+       /**
+        * Create a one-hop blinded path for a payment.
+        */
+       public static Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ BlindedPath_one_hop_for_payment(byte[] payee_node_id, org.ldk.structs.ReceiveTlvs payee_tlvs, org.ldk.structs.EntropySource entropy_source) {
+               long ret = bindings.BlindedPath_one_hop_for_payment(InternalUtils.check_arr_len(payee_node_id, 33), payee_tlvs == null ? 0 : payee_tlvs.ptr, entropy_source.ptr);
+               Reference.reachabilityFence(payee_node_id);
+               Reference.reachabilityFence(payee_tlvs);
+               Reference.reachabilityFence(entropy_source);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ ret_hu_conv = Result_C2Tuple_BlindedPayInfoBlindedPathZNoneZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(payee_tlvs); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(entropy_source); };
+               return ret_hu_conv;
+       }
+
        /**
         * Read a PathFailure from a byte array, created by PathFailure_write
         */
@@ -669,13 +748,13 @@ public class UtilMethods {
         * 
         * If you wish to use a different payment idempotency token, see [`pay_invoice_with_id`].
         */
-       public static Result_PaymentIdPaymentErrorZ pay_invoice(org.ldk.structs.Bolt11Invoice invoice, org.ldk.structs.Retry retry_strategy, org.ldk.structs.ChannelManager channelmanager) {
+       public static Result_ThirtyTwoBytesPaymentErrorZ pay_invoice(org.ldk.structs.Bolt11Invoice invoice, org.ldk.structs.Retry retry_strategy, org.ldk.structs.ChannelManager channelmanager) {
                long ret = bindings.pay_invoice(invoice == null ? 0 : invoice.ptr, retry_strategy.ptr, channelmanager == null ? 0 : channelmanager.ptr);
                Reference.reachabilityFence(invoice);
                Reference.reachabilityFence(retry_strategy);
                Reference.reachabilityFence(channelmanager);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesPaymentErrorZ ret_hu_conv = Result_ThirtyTwoBytesPaymentErrorZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(invoice); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(retry_strategy); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channelmanager); };
@@ -719,14 +798,14 @@ public class UtilMethods {
         * If you wish to use a different payment idempotency token, see
         * [`pay_zero_value_invoice_with_id`].
         */
-       public static Result_PaymentIdPaymentErrorZ pay_zero_value_invoice(org.ldk.structs.Bolt11Invoice invoice, long amount_msats, org.ldk.structs.Retry retry_strategy, org.ldk.structs.ChannelManager channelmanager) {
+       public static Result_ThirtyTwoBytesPaymentErrorZ pay_zero_value_invoice(org.ldk.structs.Bolt11Invoice invoice, long amount_msats, org.ldk.structs.Retry retry_strategy, org.ldk.structs.ChannelManager channelmanager) {
                long ret = bindings.pay_zero_value_invoice(invoice == null ? 0 : invoice.ptr, amount_msats, retry_strategy.ptr, channelmanager == null ? 0 : channelmanager.ptr);
                Reference.reachabilityFence(invoice);
                Reference.reachabilityFence(amount_msats);
                Reference.reachabilityFence(retry_strategy);
                Reference.reachabilityFence(channelmanager);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
+               Result_ThirtyTwoBytesPaymentErrorZ ret_hu_conv = Result_ThirtyTwoBytesPaymentErrorZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(invoice); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(retry_strategy); };
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channelmanager); };
@@ -761,6 +840,44 @@ public class UtilMethods {
                return ret_hu_conv;
        }
 
+       /**
+        * Sends payment probes over all paths of a route that would be used to pay the given invoice.
+        * 
+        * See [`ChannelManager::send_preflight_probes`] for more information.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ preflight_probe_invoice(org.ldk.structs.Bolt11Invoice invoice, org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.Option_u64Z liquidity_limit_multiplier) {
+               long ret = bindings.preflight_probe_invoice(invoice == null ? 0 : invoice.ptr, channelmanager == null ? 0 : channelmanager.ptr, liquidity_limit_multiplier.ptr);
+               Reference.reachabilityFence(invoice);
+               Reference.reachabilityFence(channelmanager);
+               Reference.reachabilityFence(liquidity_limit_multiplier);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(invoice); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channelmanager); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(liquidity_limit_multiplier); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Sends payment probes over all paths of a route that would be used to pay the given zero-value
+        * invoice using the given amount.
+        * 
+        * See [`ChannelManager::send_preflight_probes`] for more information.
+        */
+       public static Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ preflight_probe_zero_value_invoice(org.ldk.structs.Bolt11Invoice invoice, long amount_msat, org.ldk.structs.ChannelManager channelmanager, org.ldk.structs.Option_u64Z liquidity_limit_multiplier) {
+               long ret = bindings.preflight_probe_zero_value_invoice(invoice == null ? 0 : invoice.ptr, amount_msat, channelmanager == null ? 0 : channelmanager.ptr, liquidity_limit_multiplier.ptr);
+               Reference.reachabilityFence(invoice);
+               Reference.reachabilityFence(amount_msat);
+               Reference.reachabilityFence(channelmanager);
+               Reference.reachabilityFence(liquidity_limit_multiplier);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ ret_hu_conv = Result_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(invoice); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(channelmanager); };
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(liquidity_limit_multiplier); };
+               return ret_hu_conv;
+       }
+
        /**
         * Utility to create an invoice that can be paid to one of multiple nodes, or a \"phantom invoice.\"
         * See [`PhantomKeysManager`] for more information on phantom node payments.
@@ -803,7 +920,7 @@ public class UtilMethods {
         * This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
         * available and the current time is supplied by the caller.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_PaymentHashZ payment_hash, java.lang.String description, int invoice_expiry_delta_secs, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.enums.Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, java.lang.String description, int invoice_expiry_delta_secs, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.enums.Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
                long ret = bindings.create_phantom_invoice(amt_msat.ptr, payment_hash.ptr, description, invoice_expiry_delta_secs, phantom_route_hints != null ? Arrays.stream(phantom_route_hints).mapToLong(phantom_route_hints_conv_19 -> phantom_route_hints_conv_19 == null ? 0 : phantom_route_hints_conv_19.ptr).toArray() : null, entropy_source.ptr, node_signer.ptr, logger.ptr, network, min_final_cltv_expiry_delta.ptr, duration_since_epoch);
                Reference.reachabilityFence(amt_msat);
                Reference.reachabilityFence(payment_hash);
@@ -868,7 +985,7 @@ public class UtilMethods {
         * This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not
         * available and the current time is supplied by the caller.
         */
-       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_PaymentHashZ payment_hash, int invoice_expiry_delta_secs, org.ldk.structs.Sha256 description_hash, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.enums.Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
+       public static Result_Bolt11InvoiceSignOrCreationErrorZ create_phantom_invoice_with_description_hash(org.ldk.structs.Option_u64Z amt_msat, org.ldk.structs.Option_ThirtyTwoBytesZ payment_hash, int invoice_expiry_delta_secs, org.ldk.structs.Sha256 description_hash, PhantomRouteHints[] phantom_route_hints, org.ldk.structs.EntropySource entropy_source, org.ldk.structs.NodeSigner node_signer, org.ldk.structs.Logger logger, org.ldk.enums.Currency network, org.ldk.structs.Option_u16Z min_final_cltv_expiry_delta, long duration_since_epoch) {
                long ret = bindings.create_phantom_invoice_with_description_hash(amt_msat.ptr, payment_hash.ptr, invoice_expiry_delta_secs, description_hash == null ? 0 : description_hash.ptr, phantom_route_hints != null ? Arrays.stream(phantom_route_hints).mapToLong(phantom_route_hints_conv_19 -> phantom_route_hints_conv_19 == null ? 0 : phantom_route_hints_conv_19.ptr).toArray() : null, entropy_source.ptr, node_signer.ptr, logger.ptr, network, min_final_cltv_expiry_delta.ptr, duration_since_epoch);
                Reference.reachabilityFence(amt_msat);
                Reference.reachabilityFence(payment_hash);
diff --git a/src/main/java/org/ldk/structs/VerifiedInvoiceRequest.java b/src/main/java/org/ldk/structs/VerifiedInvoiceRequest.java
new file mode 100644 (file)
index 0000000..38b0d8f
--- /dev/null
@@ -0,0 +1,296 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import java.lang.ref.Reference;
+import javax.annotation.Nullable;
+
+
+/**
+ * An [`InvoiceRequest`] that has been verified by [`InvoiceRequest::verify`] and exposes different
+ * ways to respond depending on whether the signing keys were derived.
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class VerifiedInvoiceRequest extends CommonBase {
+       VerifiedInvoiceRequest(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.VerifiedInvoiceRequest_free(ptr); }
+       }
+
+       /**
+        * Keys used for signing a [`Bolt12Invoice`] if they can be derived.
+        * 
+        * If `Some`, must call [`respond_using_derived_keys`] when responding. Otherwise, call
+        * [`respond_with`].
+        * 
+        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
+        * [`respond_using_derived_keys`]: Self::respond_using_derived_keys
+        * [`respond_with`]: Self::respond_with
+        */
+       public Option_SecretKeyZ get_keys() {
+               long ret = bindings.VerifiedInvoiceRequest_get_keys(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_SecretKeyZ ret_hu_conv = org.ldk.structs.Option_SecretKeyZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Keys used for signing a [`Bolt12Invoice`] if they can be derived.
+        * 
+        * If `Some`, must call [`respond_using_derived_keys`] when responding. Otherwise, call
+        * [`respond_with`].
+        * 
+        * [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
+        * [`respond_using_derived_keys`]: Self::respond_using_derived_keys
+        * [`respond_with`]: Self::respond_with
+        */
+       public void set_keys(org.ldk.structs.Option_SecretKeyZ val) {
+               bindings.VerifiedInvoiceRequest_set_keys(this.ptr, val.ptr);
+               Reference.reachabilityFence(this);
+               Reference.reachabilityFence(val);
+               if (this != null) { this.ptrs_to.add(val); };
+       }
+
+       long clone_ptr() {
+               long ret = bindings.VerifiedInvoiceRequest_clone_ptr(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the VerifiedInvoiceRequest
+        */
+       public VerifiedInvoiceRequest clone() {
+               long ret = bindings.VerifiedInvoiceRequest_clone(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.VerifiedInvoiceRequest ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.VerifiedInvoiceRequest(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The chains that may be used when paying a requested invoice (e.g., bitcoin mainnet).
+        * Payments must be denominated in units of the minimal lightning-payable unit (e.g., msats)
+        * for the selected chain.
+        */
+       public byte[][] chains() {
+               byte[][] ret = bindings.VerifiedInvoiceRequest_chains(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * Opaque bytes set by the originator. Useful for authentication and validating fields since it
+        * is reflected in `invoice_request` messages along with all the other fields from the `offer`.
+        */
+       public Option_CVec_u8ZZ metadata() {
+               long ret = bindings.VerifiedInvoiceRequest_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_CVec_u8ZZ ret_hu_conv = org.ldk.structs.Option_CVec_u8ZZ.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The minimum amount required for a successful payment of a single item.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public Amount amount() {
+               long ret = bindings.VerifiedInvoiceRequest_amount(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Amount ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Amount(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A complete description of the purpose of the payment. Intended to be displayed to the user
+        * but with the caveat that it has not been verified in any way.
+        */
+       public PrintableString description() {
+               long ret = bindings.VerifiedInvoiceRequest_description(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to the offer.
+        */
+       public OfferFeatures offer_features() {
+               long ret = bindings.VerifiedInvoiceRequest_offer_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.OfferFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.OfferFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Duration since the Unix epoch when an invoice should no longer be requested.
+        * 
+        * If `None`, the offer does not expire.
+        */
+       public Option_u64Z absolute_expiry() {
+               long ret = bindings.VerifiedInvoiceRequest_absolute_expiry(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The issuer of the offer, possibly beginning with `user@domain` or `domain`. Intended to be
+        * displayed to the user but with the caveat that it has not been verified in any way.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString issuer() {
+               long ret = bindings.VerifiedInvoiceRequest_issuer(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Paths to the recipient originating from publicly reachable nodes. Blinded paths provide
+        * recipient privacy by obfuscating its node id.
+        */
+       public BlindedPath[] paths() {
+               long[] ret = bindings.VerifiedInvoiceRequest_paths(this.ptr);
+               Reference.reachabilityFence(this);
+               int ret_conv_13_len = ret.length;
+               BlindedPath[] ret_conv_13_arr = new BlindedPath[ret_conv_13_len];
+               for (int n = 0; n < ret_conv_13_len; n++) {
+                       long ret_conv_13 = ret[n];
+                       org.ldk.structs.BlindedPath ret_conv_13_hu_conv = null; if (ret_conv_13 < 0 || ret_conv_13 > 4096) { ret_conv_13_hu_conv = new org.ldk.structs.BlindedPath(null, ret_conv_13); }
+                       if (ret_conv_13_hu_conv != null) { ret_conv_13_hu_conv.ptrs_to.add(this); };
+                       ret_conv_13_arr[n] = ret_conv_13_hu_conv;
+               }
+               return ret_conv_13_arr;
+       }
+
+       /**
+        * The quantity of items supported.
+        */
+       public Quantity supported_quantity() {
+               long ret = bindings.VerifiedInvoiceRequest_supported_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Quantity ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.Quantity(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The public key used by the recipient to sign invoices.
+        */
+       public byte[] signing_pubkey() {
+               byte[] ret = bindings.VerifiedInvoiceRequest_signing_pubkey(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * An unpredictable series of bytes, typically containing information about the derivation of
+        * [`payer_id`].
+        * 
+        * [`payer_id`]: Self::payer_id
+        */
+       public byte[] payer_metadata() {
+               byte[] ret = bindings.VerifiedInvoiceRequest_payer_metadata(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A chain from [`Offer::chains`] that the offer is valid for.
+        */
+       public byte[] chain() {
+               byte[] ret = bindings.VerifiedInvoiceRequest_chain(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * The amount to pay in msats (i.e., the minimum lightning-payable unit for [`chain`]), which
+        * must be greater than or equal to [`Offer::amount`], converted if necessary.
+        * 
+        * [`chain`]: Self::chain
+        */
+       public Option_u64Z amount_msats() {
+               long ret = bindings.VerifiedInvoiceRequest_amount_msats(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * Features pertaining to requesting an invoice.
+        */
+       public InvoiceRequestFeatures invoice_request_features() {
+               long ret = bindings.VerifiedInvoiceRequest_invoice_request_features(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.InvoiceRequestFeatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.InvoiceRequestFeatures(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * The quantity of the offer's item conforming to [`Offer::is_valid_quantity`].
+        */
+       public Option_u64Z quantity() {
+               long ret = bindings.VerifiedInvoiceRequest_quantity(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.Option_u64Z ret_hu_conv = org.ldk.structs.Option_u64Z.constr_from_ptr(ret);
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+       /**
+        * A possibly transient pubkey used to sign the invoice request.
+        */
+       public byte[] payer_id() {
+               byte[] ret = bindings.VerifiedInvoiceRequest_payer_id(this.ptr);
+               Reference.reachabilityFence(this);
+               return ret;
+       }
+
+       /**
+        * A payer-provided note which will be seen by the recipient and reflected back in the invoice
+        * response.
+        * 
+        * Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
+        */
+       @Nullable
+       public PrintableString payer_note() {
+               long ret = bindings.VerifiedInvoiceRequest_payer_note(this.ptr);
+               Reference.reachabilityFence(this);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               org.ldk.structs.PrintableString ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new org.ldk.structs.PrintableString(null, ret); }
+               if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
+               return ret_hu_conv;
+       }
+
+}
index d7ac44e68e05e66d3e90c31dbb6766a79df0c710..eace4d06f586547f4e408e64e3d14b4a4d0f274c 100644 (file)
@@ -46,7 +46,7 @@ public class WalletSource extends CommonBase {
                 * Returns a script to use for change above dust resulting from a successful coin selection
                 * attempt.
                 */
-               Result_ScriptNoneZ get_change_script();
+               Result_CVec_u8ZNoneZ get_change_script();
                /**
                 * Signs and provides the full [`TxIn::script_sig`] and [`TxIn::witness`] for all inputs within
                 * the transaction known to the wallet (i.e., any provided via
@@ -65,7 +65,7 @@ public class WalletSource extends CommonBase {
                                return result;
                        }
                        @Override public long get_change_script() {
-                               Result_ScriptNoneZ ret = arg.get_change_script();
+                               Result_CVec_u8ZNoneZ ret = arg.get_change_script();
                                Reference.reachabilityFence(arg);
                                long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
@@ -94,11 +94,11 @@ public class WalletSource extends CommonBase {
         * Returns a script to use for change above dust resulting from a successful coin selection
         * attempt.
         */
-       public Result_ScriptNoneZ get_change_script() {
+       public Result_CVec_u8ZNoneZ get_change_script() {
                long ret = bindings.WalletSource_get_change_script(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               Result_ScriptNoneZ ret_hu_conv = Result_ScriptNoneZ.constr_from_ptr(ret);
+               Result_CVec_u8ZNoneZ ret_hu_conv = Result_CVec_u8ZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
index 87ae3274ca67b5679e44c88d60704cea10a3d93b..5f6ee5480642252e245fff76bc06b85bcd34b758 100644 (file)
@@ -12,21 +12,12 @@ import javax.annotation.Nullable;
  * blocks are connected and disconnected.
  * 
  * Each channel is associated with a [`ChannelMonitor`]. Implementations of this trait are
- * responsible for maintaining a set of monitors such that they can be updated accordingly as
- * channel state changes and HTLCs are resolved. See method documentation for specific
- * requirements.
+ * responsible for maintaining a set of monitors such that they can be updated as channel state
+ * changes. On each update, *all copies* of a [`ChannelMonitor`] must be updated and the update
+ * persisted to disk to ensure that the latest [`ChannelMonitor`] state can be reloaded if the
+ * application crashes.
  * 
- * Implementations **must** ensure that updates are successfully applied and persisted upon method
- * completion. If an update fails with a [`PermanentFailure`], then it must immediately shut down
- * without taking any further action such as persisting the current state.
- * 
- * If an implementation maintains multiple instances of a channel's monitor (e.g., by storing
- * backup copies), then it must ensure that updates are applied across all instances. Otherwise, it
- * could result in a revoked transaction being broadcast, allowing the counterparty to claim all
- * funds in the channel. See [`ChannelMonitorUpdateStatus`] for more details about how to handle
- * multiple instances.
- * 
- * [`PermanentFailure`]: ChannelMonitorUpdateStatus::PermanentFailure
+ * See method documentation and [`ChannelMonitorUpdateStatus`] for specific requirements.
  */
 @SuppressWarnings("unchecked") // We correctly assign various generic arrays
 public class Watch extends CommonBase {
@@ -62,21 +53,33 @@ public class Watch extends CommonBase {
                 * with any spends of outputs returned by [`get_outputs_to_watch`]. In practice, this means
                 * calling [`block_connected`] and [`block_disconnected`] on the monitor.
                 * 
-                * Note: this interface MUST error with [`ChannelMonitorUpdateStatus::PermanentFailure`] if
-                * the given `funding_txo` has previously been registered via `watch_channel`.
+                * A return of `Err(())` indicates that the channel should immediately be force-closed without
+                * broadcasting the funding transaction.
+                * 
+                * If the given `funding_txo` has previously been registered via `watch_channel`, `Err(())`
+                * must be returned.
                 * 
                 * [`get_outputs_to_watch`]: channelmonitor::ChannelMonitor::get_outputs_to_watch
                 * [`block_connected`]: channelmonitor::ChannelMonitor::block_connected
                 * [`block_disconnected`]: channelmonitor::ChannelMonitor::block_disconnected
                 */
-               ChannelMonitorUpdateStatus watch_channel(OutPoint funding_txo, ChannelMonitor monitor);
+               Result_ChannelMonitorUpdateStatusNoneZ watch_channel(OutPoint funding_txo, ChannelMonitor monitor);
                /**
                 * Updates a channel identified by `funding_txo` by applying `update` to its monitor.
                 * 
-                * Implementations must call [`update_monitor`] with the given update. See
-                * [`ChannelMonitorUpdateStatus`] for invariants around returning an error.
+                * Implementations must call [`ChannelMonitor::update_monitor`] with the given update. This
+                * may fail (returning an `Err(())`), in which case this should return
+                * [`ChannelMonitorUpdateStatus::InProgress`] (and the update should never complete). This
+                * generally implies the channel has been closed (either by the funding outpoint being spent
+                * on-chain or the [`ChannelMonitor`] having decided to do so and broadcasted a transaction),
+                * and the [`ChannelManager`] state will be updated once it sees the funding spend on-chain.
                 * 
-                * [`update_monitor`]: channelmonitor::ChannelMonitor::update_monitor
+                * In general, persistence failures should be retried after returning
+                * [`ChannelMonitorUpdateStatus::InProgress`] and eventually complete. If a failure truly
+                * cannot be retried, the node should shut down immediately after returning
+                * [`ChannelMonitorUpdateStatus::UnrecoverableError`], see its documentation for more info.
+                * 
+                * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
                 */
                ChannelMonitorUpdateStatus update_channel(OutPoint funding_txo, ChannelMonitorUpdate update);
                /**
@@ -96,14 +99,15 @@ public class Watch extends CommonBase {
        public static Watch new_impl(WatchInterface arg) {
                final LDKWatchHolder impl_holder = new LDKWatchHolder();
                impl_holder.held = new Watch(new bindings.LDKWatch() {
-                       @Override public ChannelMonitorUpdateStatus watch_channel(long funding_txo, long monitor) {
+                       @Override public long watch_channel(long funding_txo, long monitor) {
                                org.ldk.structs.OutPoint funding_txo_hu_conv = null; if (funding_txo < 0 || funding_txo > 4096) { funding_txo_hu_conv = new org.ldk.structs.OutPoint(null, funding_txo); }
                                if (funding_txo_hu_conv != null) { funding_txo_hu_conv.ptrs_to.add(this); };
                                org.ldk.structs.ChannelMonitor monitor_hu_conv = null; if (monitor < 0 || monitor > 4096) { monitor_hu_conv = new org.ldk.structs.ChannelMonitor(null, monitor); }
                                if (monitor_hu_conv != null) { monitor_hu_conv.ptrs_to.add(this); };
-                               ChannelMonitorUpdateStatus ret = arg.watch_channel(funding_txo_hu_conv, monitor_hu_conv);
+                               Result_ChannelMonitorUpdateStatusNoneZ ret = arg.watch_channel(funding_txo_hu_conv, monitor_hu_conv);
                                Reference.reachabilityFence(arg);
-                               return ret;
+                               long result = ret == null ? 0 : ret.clone_ptr();
+                               return result;
                        }
                        @Override public ChannelMonitorUpdateStatus update_channel(long funding_txo, long update) {
                                org.ldk.structs.OutPoint funding_txo_hu_conv = null; if (funding_txo < 0 || funding_txo > 4096) { funding_txo_hu_conv = new org.ldk.structs.OutPoint(null, funding_txo); }
@@ -129,30 +133,44 @@ public class Watch extends CommonBase {
         * with any spends of outputs returned by [`get_outputs_to_watch`]. In practice, this means
         * calling [`block_connected`] and [`block_disconnected`] on the monitor.
         * 
-        * Note: this interface MUST error with [`ChannelMonitorUpdateStatus::PermanentFailure`] if
-        * the given `funding_txo` has previously been registered via `watch_channel`.
+        * A return of `Err(())` indicates that the channel should immediately be force-closed without
+        * broadcasting the funding transaction.
+        * 
+        * If the given `funding_txo` has previously been registered via `watch_channel`, `Err(())`
+        * must be returned.
         * 
         * [`get_outputs_to_watch`]: channelmonitor::ChannelMonitor::get_outputs_to_watch
         * [`block_connected`]: channelmonitor::ChannelMonitor::block_connected
         * [`block_disconnected`]: channelmonitor::ChannelMonitor::block_disconnected
         */
-       public ChannelMonitorUpdateStatus watch_channel(org.ldk.structs.OutPoint funding_txo, org.ldk.structs.ChannelMonitor monitor) {
-               ChannelMonitorUpdateStatus ret = bindings.Watch_watch_channel(this.ptr, funding_txo == null ? 0 : funding_txo.ptr, monitor == null ? 0 : monitor.ptr);
+       public Result_ChannelMonitorUpdateStatusNoneZ watch_channel(org.ldk.structs.OutPoint funding_txo, org.ldk.structs.ChannelMonitor monitor) {
+               long ret = bindings.Watch_watch_channel(this.ptr, funding_txo == null ? 0 : funding_txo.ptr, monitor == null ? 0 : monitor.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(funding_txo);
                Reference.reachabilityFence(monitor);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ChannelMonitorUpdateStatusNoneZ ret_hu_conv = Result_ChannelMonitorUpdateStatusNoneZ.constr_from_ptr(ret);
                if (this != null) { this.ptrs_to.add(funding_txo); };
                if (this != null) { this.ptrs_to.add(monitor); };
-               return ret;
+               return ret_hu_conv;
        }
 
        /**
         * Updates a channel identified by `funding_txo` by applying `update` to its monitor.
         * 
-        * Implementations must call [`update_monitor`] with the given update. See
-        * [`ChannelMonitorUpdateStatus`] for invariants around returning an error.
+        * Implementations must call [`ChannelMonitor::update_monitor`] with the given update. This
+        * may fail (returning an `Err(())`), in which case this should return
+        * [`ChannelMonitorUpdateStatus::InProgress`] (and the update should never complete). This
+        * generally implies the channel has been closed (either by the funding outpoint being spent
+        * on-chain or the [`ChannelMonitor`] having decided to do so and broadcasted a transaction),
+        * and the [`ChannelManager`] state will be updated once it sees the funding spend on-chain.
+        * 
+        * In general, persistence failures should be retried after returning
+        * [`ChannelMonitorUpdateStatus::InProgress`] and eventually complete. If a failure truly
+        * cannot be retried, the node should shut down immediately after returning
+        * [`ChannelMonitorUpdateStatus::UnrecoverableError`], see its documentation for more info.
         * 
-        * [`update_monitor`]: channelmonitor::ChannelMonitor::update_monitor
+        * [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
         */
        public ChannelMonitorUpdateStatus update_channel(org.ldk.structs.OutPoint funding_txo, org.ldk.structs.ChannelMonitorUpdate update) {
                ChannelMonitorUpdateStatus ret = bindings.Watch_update_channel(this.ptr, funding_txo == null ? 0 : funding_txo.ptr, update == null ? 0 : update.ptr);
index 214da3b08b9081676ef2534847b0ea610bb97568..4319efec8d5906f22cc0dab6fbbbf01ad29a400e 100644 (file)
@@ -33,11 +33,11 @@ public class WatchedOutput extends CommonBase {
        /**
         * First block where the transaction output may have been spent.
         */
-       public Option_BlockHashZ get_block_hash() {
+       public Option_ThirtyTwoBytesZ get_block_hash() {
                long ret = bindings.WatchedOutput_get_block_hash(this.ptr);
                Reference.reachabilityFence(this);
                if (ret >= 0 && ret <= 4096) { return null; }
-               org.ldk.structs.Option_BlockHashZ ret_hu_conv = org.ldk.structs.Option_BlockHashZ.constr_from_ptr(ret);
+               org.ldk.structs.Option_ThirtyTwoBytesZ ret_hu_conv = org.ldk.structs.Option_ThirtyTwoBytesZ.constr_from_ptr(ret);
                if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
                return ret_hu_conv;
        }
@@ -45,7 +45,7 @@ public class WatchedOutput extends CommonBase {
        /**
         * First block where the transaction output may have been spent.
         */
-       public void set_block_hash(org.ldk.structs.Option_BlockHashZ val) {
+       public void set_block_hash(org.ldk.structs.Option_ThirtyTwoBytesZ val) {
                bindings.WatchedOutput_set_block_hash(this.ptr, val.ptr);
                Reference.reachabilityFence(this);
                Reference.reachabilityFence(val);
@@ -95,7 +95,7 @@ public class WatchedOutput extends CommonBase {
        /**
         * Constructs a new WatchedOutput given each field
         */
-       public static WatchedOutput of(org.ldk.structs.Option_BlockHashZ block_hash_arg, org.ldk.structs.OutPoint outpoint_arg, byte[] script_pubkey_arg) {
+       public static WatchedOutput of(org.ldk.structs.Option_ThirtyTwoBytesZ block_hash_arg, org.ldk.structs.OutPoint outpoint_arg, byte[] script_pubkey_arg) {
                long ret = bindings.WatchedOutput_new(block_hash_arg.ptr, outpoint_arg == null ? 0 : outpoint_arg.ptr, script_pubkey_arg);
                Reference.reachabilityFence(block_hash_arg);
                Reference.reachabilityFence(outpoint_arg);
index 7a50673e3497b0063eae11e4250e1e2bcfdd6230..053b6bcdb9c93e06e674f0c4f1804084495dcf40 100644 (file)
@@ -1,5 +1,7 @@
-#define LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ LDKCVec_TransactionOutputsZ
-#define CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free CVec_TransactionOutputsZ_free
+#define LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ LDKCVec_TransactionOutputsZ
+#define CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free CVec_TransactionOutputsZ_free
+#define LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ LDKCVec_TransactionOutputsZ
+#define CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free CVec_TransactionOutputsZ_free
 #include <jni.h>
 // On OSX jlong (ie long long) is not equivalent to int64_t, so we override here
 #define int64_t jlong
@@ -39,25 +41,133 @@ typedef jlongArray int64_tArray;
 typedef jbyteArray int8_tArray;
 typedef jshortArray int16_tArray;
 
-static inline jstring str_ref_to_java(JNIEnv *env, const char* chars, size_t len) {
-       // Sadly we need to create a temporary because Java can't accept a char* without a 0-terminator
-       char* conv_buf = MALLOC(len + 1, "str conv buf");
-       memcpy(conv_buf, chars, len);
-       conv_buf[len] = 0;
-       jstring ret = (*env)->NewStringUTF(env, conv_buf);
-       FREE(conv_buf);
+static inline jstring str_ref_to_java(JNIEnv *env, const unsigned char* chars, size_t len) {
+       // Java uses "Modified UTF-8" rather than UTF-8. This requires special
+       // handling for codepoints above 0xFFFF, which get converted from four
+       // bytes to six. We don't know upfront how many codepoints in the string
+       // are above 0xFFFF, so we just allocate an extra 33% up front and waste a
+       // bit of space.
+       unsigned char* java_chars = MALLOC(len * 3 / 2 + 1, "str conv buf");
+       unsigned char* next_java_char = java_chars;
+       const unsigned char* next_in_char = chars;
+       const unsigned char* end = chars + len;
+       #define COPY_CHAR_TO_JAVA do { *next_java_char = *next_in_char; next_java_char++; next_in_char++; } while (0)
+
+       while (next_in_char < end) {
+               if (!*next_in_char) break;
+               if (!(*next_in_char & 0b10000000)) {
+                       COPY_CHAR_TO_JAVA;
+               } else if ((*next_in_char & 0b11100000) == 0b11000000) {
+                       if (next_in_char + 2 > end) { CHECK(false); break; } // bad string
+                       COPY_CHAR_TO_JAVA;
+                       COPY_CHAR_TO_JAVA;
+               } else if ((*next_in_char & 0b11110000) == 0b11100000) {
+                       if (next_in_char + 3 > end) { CHECK(false); break; } // bad string
+                       COPY_CHAR_TO_JAVA;
+                       COPY_CHAR_TO_JAVA;
+                       COPY_CHAR_TO_JAVA;
+               } else if ((*next_in_char & 0b11111000) == 0b11110000) {
+                       if (next_in_char + 4 > end) { CHECK(false); break; } // bad string
+                       uint32_t codepoint = 0;
+                       codepoint |= (((uint32_t)*(next_in_char    )) & 0b00000111) << 18;
+                       codepoint |= (((uint32_t)*(next_in_char + 1)) & 0b00111111) << 12;
+                       codepoint |= (((uint32_t)*(next_in_char + 2)) & 0b00111111) << 6;
+                       codepoint |= (((uint32_t)*(next_in_char + 3)) & 0b00111111) << 0;
+                       codepoint -= 0x10000;
+                       *next_java_char = 0b11101101;
+                       next_java_char++;
+                       *next_java_char = 0b10100000 | ((codepoint >> 16) & 0b00001111);
+                       next_java_char++;
+                       *next_java_char = 0b10000000 | ((codepoint >> 10) & 0b00111111);
+                       next_java_char++;
+                       *next_java_char = 0b11101101;
+                       next_java_char++;
+                       *next_java_char = 0b10110000 | ((codepoint >>  6) & 0b00001111);
+                       next_java_char++;
+                       *next_java_char = 0b10000000 | ((codepoint >>  0) & 0b00111111);
+                       next_java_char++;
+                       next_in_char += 4;
+               } else {
+                       // Bad string
+                       CHECK(false);
+                       break;
+               }
+       }
+       *next_java_char = 0;
+       jstring ret = (*env)->NewStringUTF(env, java_chars);
+       FREE(java_chars);
        return ret;
 }
 static inline LDKStr java_to_owned_str(JNIEnv *env, jstring str) {
        uint64_t str_len = (*env)->GetStringUTFLength(env, str);
-       char* newchars = MALLOC(str_len + 1, "String chars");
-       const char* jchars = (*env)->GetStringUTFChars(env, str, NULL);
-       memcpy(newchars, jchars, str_len);
-       newchars[str_len] = 0;
+       // Java uses "Modified UTF-8" rather than UTF-8. This requires special
+       // handling for codepoints above 0xFFFF, which we implement below.
+       unsigned char* newchars = MALLOC(str_len, "String chars");
+       unsigned char* next_newchar = newchars;
+       uint64_t utf8_len = 0;
+
+       const unsigned char* jchars = (*env)->GetStringUTFChars(env, str, NULL);
+       const unsigned char* next_char = jchars;
+       const unsigned char* end = jchars + str_len;
+
+       #define COPY_CHAR_FROM_JAVA do { *next_newchar = *next_char; next_newchar++; next_char++; utf8_len++; } while (0)
+
+       while (next_char < end) {
+               if (!(*next_char & 0b10000000)) {
+                       CHECK(*next_char != 0); // Bad Modified UTF-8 string, but we'll just cut here
+                       COPY_CHAR_FROM_JAVA;
+               } else if ((*next_char & 0b11100000) == 0b11000000) {
+                       if (next_char + 2 > end) { CHECK(false); break; } // bad string
+                       uint16_t codepoint = 0;
+                       codepoint |= (((uint16_t)(*next_char & 0x1f)) << 6);
+                       codepoint |= *(next_char + 1) & 0x3f;
+                       if (codepoint == 0) {
+                               // We should really never get null codepoints, but java allows them.
+                               // Just skip it.
+                               next_char += 2;
+                       } else {
+                               COPY_CHAR_FROM_JAVA;
+                               COPY_CHAR_FROM_JAVA;
+                       }
+               } else if ((*next_char & 0b11110000) == 0b11100000) {
+                       if (next_char + 3 > end) { CHECK(false); break; } // bad string
+                       if (*next_char == 0b11101101 && (*(next_char + 1) & 0b11110000) == 0b10100000) {
+                               // Surrogate code unit shoul indicate we have a codepoint above
+                               // 0xFFFF, which is where Modified UTF-8 and UTF-8 diverge.
+                               if (next_char + 6 > end) { CHECK(false); break; } // bad string
+                               CHECK(*(next_char + 3) == 0b11101101);
+                               CHECK((*(next_char + 4) & 0b11110000) == 0b10110000);
+                               // Calculate the codepoint per https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html#wp16542
+                               uint32_t codepoint = 0x10000;
+                               codepoint += ((((uint32_t)*(next_char + 1)) & 0x0f) << 16);
+                               codepoint += ((((uint32_t)*(next_char + 2)) & 0x3f) << 10);
+                               codepoint += ((((uint32_t)*(next_char + 4)) & 0x0f) <<  6);
+                               codepoint +=  (((uint32_t)*(next_char + 5)) & 0x3f);
+                               *next_newchar = 0b11110000 | ((codepoint >> 18) &    0b111);
+                               next_newchar++;
+                               *next_newchar = 0b10000000 | ((codepoint >> 12) & 0b111111);
+                               next_newchar++;
+                               *next_newchar = 0b10000000 | ((codepoint >>  6) & 0b111111);
+                               next_newchar++;
+                               *next_newchar = 0b10000000 | ( codepoint        & 0b111111);
+                               next_newchar++;
+                               next_char += 6;
+                               utf8_len += 4;
+                       } else {
+                               COPY_CHAR_FROM_JAVA;
+                               COPY_CHAR_FROM_JAVA;
+                               COPY_CHAR_FROM_JAVA;
+                       }
+               } else {
+                       // Bad string
+                       CHECK(false);
+                       break;
+               }
+       }
        (*env)->ReleaseStringUTFChars(env, str, jchars);
        LDKStr res = {
                .chars = newchars,
-               .len = str_len,
+               .len = utf8_len,
                .chars_is_owned = true
        };
        return res;
@@ -440,7 +550,7 @@ static inline LDKChannelMonitorUpdateStatus LDKChannelMonitorUpdateStatus_from_j
        switch (ord) {
                case 0: return LDKChannelMonitorUpdateStatus_Completed;
                case 1: return LDKChannelMonitorUpdateStatus_InProgress;
-               case 2: return LDKChannelMonitorUpdateStatus_PermanentFailure;
+               case 2: return LDKChannelMonitorUpdateStatus_UnrecoverableError;
        }
        (*env)->FatalError(env, "A call to ChannelMonitorUpdateStatus.ordinal() from rust returned an invalid value.");
        abort(); // Unreachable, but will let the compiler know we don't return here
@@ -448,7 +558,7 @@ static inline LDKChannelMonitorUpdateStatus LDKChannelMonitorUpdateStatus_from_j
 static jclass ChannelMonitorUpdateStatus_class = NULL;
 static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_Completed = NULL;
 static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress = NULL;
-static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure = NULL;
+static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_enums_ChannelMonitorUpdateStatus_init (JNIEnv *env, jclass clz) {
        ChannelMonitorUpdateStatus_class = (*env)->NewGlobalRef(env, clz);
        CHECK(ChannelMonitorUpdateStatus_class != NULL);
@@ -456,8 +566,8 @@ JNIEXPORT void JNICALL Java_org_ldk_enums_ChannelMonitorUpdateStatus_init (JNIEn
        CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_Completed != NULL);
        ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress = (*env)->GetStaticFieldID(env, ChannelMonitorUpdateStatus_class, "LDKChannelMonitorUpdateStatus_InProgress", "Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
        CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress != NULL);
-       ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure = (*env)->GetStaticFieldID(env, ChannelMonitorUpdateStatus_class, "LDKChannelMonitorUpdateStatus_PermanentFailure", "Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
-       CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure != NULL);
+       ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError = (*env)->GetStaticFieldID(env, ChannelMonitorUpdateStatus_class, "LDKChannelMonitorUpdateStatus_UnrecoverableError", "Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError != NULL);
 }
 static inline jclass LDKChannelMonitorUpdateStatus_to_java(JNIEnv *env, LDKChannelMonitorUpdateStatus val) {
        switch (val) {
@@ -465,8 +575,8 @@ static inline jclass LDKChannelMonitorUpdateStatus_to_java(JNIEnv *env, LDKChann
                        return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_Completed);
                case LDKChannelMonitorUpdateStatus_InProgress:
                        return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress);
-               case LDKChannelMonitorUpdateStatus_PermanentFailure:
-                       return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure);
+               case LDKChannelMonitorUpdateStatus_UnrecoverableError:
+                       return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError);
                default: abort();
        }
 }
@@ -679,46 +789,6 @@ static inline jclass LDKCurrency_to_java(JNIEnv *env, LDKCurrency val) {
        }
 }
 
-static inline LDKFailureCode LDKFailureCode_from_java(JNIEnv *env, jclass clz) {
-       jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to FailureCode.ordinal() from rust threw an exception.");
-       }
-       switch (ord) {
-               case 0: return LDKFailureCode_TemporaryNodeFailure;
-               case 1: return LDKFailureCode_RequiredNodeFeatureMissing;
-               case 2: return LDKFailureCode_IncorrectOrUnknownPaymentDetails;
-       }
-       (*env)->FatalError(env, "A call to FailureCode.ordinal() from rust returned an invalid value.");
-       abort(); // Unreachable, but will let the compiler know we don't return here
-}
-static jclass FailureCode_class = NULL;
-static jfieldID FailureCode_LDKFailureCode_TemporaryNodeFailure = NULL;
-static jfieldID FailureCode_LDKFailureCode_RequiredNodeFeatureMissing = NULL;
-static jfieldID FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_enums_FailureCode_init (JNIEnv *env, jclass clz) {
-       FailureCode_class = (*env)->NewGlobalRef(env, clz);
-       CHECK(FailureCode_class != NULL);
-       FailureCode_LDKFailureCode_TemporaryNodeFailure = (*env)->GetStaticFieldID(env, FailureCode_class, "LDKFailureCode_TemporaryNodeFailure", "Lorg/ldk/enums/FailureCode;");
-       CHECK(FailureCode_LDKFailureCode_TemporaryNodeFailure != NULL);
-       FailureCode_LDKFailureCode_RequiredNodeFeatureMissing = (*env)->GetStaticFieldID(env, FailureCode_class, "LDKFailureCode_RequiredNodeFeatureMissing", "Lorg/ldk/enums/FailureCode;");
-       CHECK(FailureCode_LDKFailureCode_RequiredNodeFeatureMissing != NULL);
-       FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails = (*env)->GetStaticFieldID(env, FailureCode_class, "LDKFailureCode_IncorrectOrUnknownPaymentDetails", "Lorg/ldk/enums/FailureCode;");
-       CHECK(FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails != NULL);
-}
-static inline jclass LDKFailureCode_to_java(JNIEnv *env, LDKFailureCode val) {
-       switch (val) {
-               case LDKFailureCode_TemporaryNodeFailure:
-                       return (*env)->GetStaticObjectField(env, FailureCode_class, FailureCode_LDKFailureCode_TemporaryNodeFailure);
-               case LDKFailureCode_RequiredNodeFeatureMissing:
-                       return (*env)->GetStaticObjectField(env, FailureCode_class, FailureCode_LDKFailureCode_RequiredNodeFeatureMissing);
-               case LDKFailureCode_IncorrectOrUnknownPaymentDetails:
-                       return (*env)->GetStaticObjectField(env, FailureCode_class, FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails);
-               default: abort();
-       }
-}
-
 static inline LDKHTLCClaim LDKHTLCClaim_from_java(JNIEnv *env, jclass clz) {
        jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
@@ -1271,6 +1341,52 @@ static inline jclass LDKSiPrefix_to_java(JNIEnv *env, LDKSiPrefix val) {
        }
 }
 
+static inline LDKSocketAddressParseError LDKSocketAddressParseError_from_java(JNIEnv *env, jclass clz) {
+       jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to SocketAddressParseError.ordinal() from rust threw an exception.");
+       }
+       switch (ord) {
+               case 0: return LDKSocketAddressParseError_SocketAddrParse;
+               case 1: return LDKSocketAddressParseError_InvalidInput;
+               case 2: return LDKSocketAddressParseError_InvalidPort;
+               case 3: return LDKSocketAddressParseError_InvalidOnionV3;
+       }
+       (*env)->FatalError(env, "A call to SocketAddressParseError.ordinal() from rust returned an invalid value.");
+       abort(); // Unreachable, but will let the compiler know we don't return here
+}
+static jclass SocketAddressParseError_class = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_InvalidInput = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_InvalidPort = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3 = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_enums_SocketAddressParseError_init (JNIEnv *env, jclass clz) {
+       SocketAddressParseError_class = (*env)->NewGlobalRef(env, clz);
+       CHECK(SocketAddressParseError_class != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_SocketAddrParse", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_InvalidInput = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_InvalidInput", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_InvalidInput != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_InvalidPort = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_InvalidPort", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_InvalidPort != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3 = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_InvalidOnionV3", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3 != NULL);
+}
+static inline jclass LDKSocketAddressParseError_to_java(JNIEnv *env, LDKSocketAddressParseError val) {
+       switch (val) {
+               case LDKSocketAddressParseError_SocketAddrParse:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse);
+               case LDKSocketAddressParseError_InvalidInput:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_InvalidInput);
+               case LDKSocketAddressParseError_InvalidPort:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_InvalidPort);
+               case LDKSocketAddressParseError_InvalidOnionV3:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3);
+               default: abort();
+       }
+}
+
 static inline LDKUtxoLookupError LDKUtxoLookupError_from_java(JNIEnv *env, jclass clz) {
        jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
@@ -1463,42 +1579,6 @@ uint64_t TxOut_get_value (struct LDKTxOut* thing) {      return thing->value;}JNIEXPO
        return ret_conv;
 }
 
-static jclass LDKCOption_DurationZ_Some_class = NULL;
-static jmethodID LDKCOption_DurationZ_Some_meth = NULL;
-static jclass LDKCOption_DurationZ_None_class = NULL;
-static jmethodID LDKCOption_DurationZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1DurationZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_DurationZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_DurationZ$Some"));
-       CHECK(LDKCOption_DurationZ_Some_class != NULL);
-       LDKCOption_DurationZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_DurationZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_DurationZ_Some_meth != NULL);
-       LDKCOption_DurationZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_DurationZ$None"));
-       CHECK(LDKCOption_DurationZ_None_class != NULL);
-       LDKCOption_DurationZ_None_meth = (*env)->GetMethodID(env, LDKCOption_DurationZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_DurationZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1DurationZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_DurationZ *obj = (LDKCOption_DurationZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_DurationZ_Some: {
-                       int64_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_DurationZ_Some_class, LDKCOption_DurationZ_Some_meth, some_conv);
-               }
-               case LDKCOption_DurationZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_DurationZ_None_class, LDKCOption_DurationZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline LDKCVec_BlindedPathZ CVec_BlindedPathZ_clone(const LDKCVec_BlindedPathZ *orig) {
-       LDKCVec_BlindedPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPath) * orig->datalen, "LDKCVec_BlindedPathZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = BlindedPath_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static jclass LDKCOption_u64Z_Some_class = NULL;
 static jmethodID LDKCOption_u64Z_Some_meth = NULL;
 static jclass LDKCOption_u64Z_None_class = NULL;
@@ -1528,6 +1608,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u64Z_1ref_1from
                default: abort();
        }
 }
+static inline LDKCVec_BlindedPathZ CVec_BlindedPathZ_clone(const LDKCVec_BlindedPathZ *orig) {
+       LDKCVec_BlindedPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPath) * orig->datalen, "LDKCVec_BlindedPathZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = BlindedPath_clone(&orig->data[i]);
+       }
+       return ret;
+}
 static inline struct LDKRefund CResult_RefundBolt12ParseErrorZ_get_ok(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKRefund ret = *owner->contents.result;
        ret.is_owned = false;
@@ -1556,6 +1643,139 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseE
        return ret_ref;
 }
 
+static jclass LDKRetry_Attempts_class = NULL;
+static jmethodID LDKRetry_Attempts_meth = NULL;
+static jclass LDKRetry_Timeout_class = NULL;
+static jmethodID LDKRetry_Timeout_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKRetry_init (JNIEnv *env, jclass clz) {
+       LDKRetry_Attempts_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Attempts"));
+       CHECK(LDKRetry_Attempts_class != NULL);
+       LDKRetry_Attempts_meth = (*env)->GetMethodID(env, LDKRetry_Attempts_class, "<init>", "(I)V");
+       CHECK(LDKRetry_Attempts_meth != NULL);
+       LDKRetry_Timeout_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Timeout"));
+       CHECK(LDKRetry_Timeout_class != NULL);
+       LDKRetry_Timeout_meth = (*env)->GetMethodID(env, LDKRetry_Timeout_class, "<init>", "(J)V");
+       CHECK(LDKRetry_Timeout_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRetry_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKRetry *obj = (LDKRetry*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKRetry_Attempts: {
+                       int32_t attempts_conv = obj->attempts;
+                       return (*env)->NewObject(env, LDKRetry_Attempts_class, LDKRetry_Attempts_meth, attempts_conv);
+               }
+               case LDKRetry_Timeout: {
+                       int64_t timeout_conv = obj->timeout;
+                       return (*env)->NewObject(env, LDKRetry_Timeout_class, LDKRetry_Timeout_meth, timeout_conv);
+               }
+               default: abort();
+       }
+}
+static jclass LDKDecodeError_UnknownVersion_class = NULL;
+static jmethodID LDKDecodeError_UnknownVersion_meth = NULL;
+static jclass LDKDecodeError_UnknownRequiredFeature_class = NULL;
+static jmethodID LDKDecodeError_UnknownRequiredFeature_meth = NULL;
+static jclass LDKDecodeError_InvalidValue_class = NULL;
+static jmethodID LDKDecodeError_InvalidValue_meth = NULL;
+static jclass LDKDecodeError_ShortRead_class = NULL;
+static jmethodID LDKDecodeError_ShortRead_meth = NULL;
+static jclass LDKDecodeError_BadLengthDescriptor_class = NULL;
+static jmethodID LDKDecodeError_BadLengthDescriptor_meth = NULL;
+static jclass LDKDecodeError_Io_class = NULL;
+static jmethodID LDKDecodeError_Io_meth = NULL;
+static jclass LDKDecodeError_UnsupportedCompression_class = NULL;
+static jmethodID LDKDecodeError_UnsupportedCompression_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKDecodeError_init (JNIEnv *env, jclass clz) {
+       LDKDecodeError_UnknownVersion_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownVersion"));
+       CHECK(LDKDecodeError_UnknownVersion_class != NULL);
+       LDKDecodeError_UnknownVersion_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownVersion_class, "<init>", "()V");
+       CHECK(LDKDecodeError_UnknownVersion_meth != NULL);
+       LDKDecodeError_UnknownRequiredFeature_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownRequiredFeature"));
+       CHECK(LDKDecodeError_UnknownRequiredFeature_class != NULL);
+       LDKDecodeError_UnknownRequiredFeature_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownRequiredFeature_class, "<init>", "()V");
+       CHECK(LDKDecodeError_UnknownRequiredFeature_meth != NULL);
+       LDKDecodeError_InvalidValue_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$InvalidValue"));
+       CHECK(LDKDecodeError_InvalidValue_class != NULL);
+       LDKDecodeError_InvalidValue_meth = (*env)->GetMethodID(env, LDKDecodeError_InvalidValue_class, "<init>", "()V");
+       CHECK(LDKDecodeError_InvalidValue_meth != NULL);
+       LDKDecodeError_ShortRead_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$ShortRead"));
+       CHECK(LDKDecodeError_ShortRead_class != NULL);
+       LDKDecodeError_ShortRead_meth = (*env)->GetMethodID(env, LDKDecodeError_ShortRead_class, "<init>", "()V");
+       CHECK(LDKDecodeError_ShortRead_meth != NULL);
+       LDKDecodeError_BadLengthDescriptor_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$BadLengthDescriptor"));
+       CHECK(LDKDecodeError_BadLengthDescriptor_class != NULL);
+       LDKDecodeError_BadLengthDescriptor_meth = (*env)->GetMethodID(env, LDKDecodeError_BadLengthDescriptor_class, "<init>", "()V");
+       CHECK(LDKDecodeError_BadLengthDescriptor_meth != NULL);
+       LDKDecodeError_Io_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$Io"));
+       CHECK(LDKDecodeError_Io_class != NULL);
+       LDKDecodeError_Io_meth = (*env)->GetMethodID(env, LDKDecodeError_Io_class, "<init>", "(Lorg/ldk/enums/IOError;)V");
+       CHECK(LDKDecodeError_Io_meth != NULL);
+       LDKDecodeError_UnsupportedCompression_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnsupportedCompression"));
+       CHECK(LDKDecodeError_UnsupportedCompression_class != NULL);
+       LDKDecodeError_UnsupportedCompression_meth = (*env)->GetMethodID(env, LDKDecodeError_UnsupportedCompression_class, "<init>", "()V");
+       CHECK(LDKDecodeError_UnsupportedCompression_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKDecodeError_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKDecodeError_UnknownVersion: {
+                       return (*env)->NewObject(env, LDKDecodeError_UnknownVersion_class, LDKDecodeError_UnknownVersion_meth);
+               }
+               case LDKDecodeError_UnknownRequiredFeature: {
+                       return (*env)->NewObject(env, LDKDecodeError_UnknownRequiredFeature_class, LDKDecodeError_UnknownRequiredFeature_meth);
+               }
+               case LDKDecodeError_InvalidValue: {
+                       return (*env)->NewObject(env, LDKDecodeError_InvalidValue_class, LDKDecodeError_InvalidValue_meth);
+               }
+               case LDKDecodeError_ShortRead: {
+                       return (*env)->NewObject(env, LDKDecodeError_ShortRead_class, LDKDecodeError_ShortRead_meth);
+               }
+               case LDKDecodeError_BadLengthDescriptor: {
+                       return (*env)->NewObject(env, LDKDecodeError_BadLengthDescriptor_class, LDKDecodeError_BadLengthDescriptor_meth);
+               }
+               case LDKDecodeError_Io: {
+                       jclass io_conv = LDKIOError_to_java(env, obj->io);
+                       return (*env)->NewObject(env, LDKDecodeError_Io_class, LDKDecodeError_Io_meth, io_conv);
+               }
+               case LDKDecodeError_UnsupportedCompression: {
+                       return (*env)->NewObject(env, LDKDecodeError_UnsupportedCompression_class, LDKDecodeError_UnsupportedCompression_meth);
+               }
+               default: abort();
+       }
+}
+static inline struct LDKRetry CResult_RetryDecodeErrorZ_get_ok(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return Retry_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RetryDecodeErrorZ* owner_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(owner);
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = CResult_RetryDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_RetryDecodeErrorZ_get_err(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RetryDecodeErrorZ* owner_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_RetryDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static jclass LDKAPIError_APIMisuseError_class = NULL;
 static jmethodID LDKAPIError_APIMisuseError_meth = NULL;
 static jclass LDKAPIError_FeeRateTooHigh_class = NULL;
@@ -1672,32 +1892,32 @@ static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *or
        }
        return ret;
 }
-static jclass LDKCOption_PaymentSecretZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentSecretZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentSecretZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentSecretZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentSecretZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentSecretZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentSecretZ$Some"));
-       CHECK(LDKCOption_PaymentSecretZ_Some_class != NULL);
-       LDKCOption_PaymentSecretZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentSecretZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentSecretZ_Some_meth != NULL);
-       LDKCOption_PaymentSecretZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentSecretZ$None"));
-       CHECK(LDKCOption_PaymentSecretZ_None_class != NULL);
-       LDKCOption_PaymentSecretZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentSecretZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentSecretZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentSecretZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentSecretZ *obj = (LDKCOption_PaymentSecretZ*)untag_ptr(ptr);
+static jclass LDKCOption_ThirtyTwoBytesZ_Some_class = NULL;
+static jmethodID LDKCOption_ThirtyTwoBytesZ_Some_meth = NULL;
+static jclass LDKCOption_ThirtyTwoBytesZ_None_class = NULL;
+static jmethodID LDKCOption_ThirtyTwoBytesZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ThirtyTwoBytesZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_ThirtyTwoBytesZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ThirtyTwoBytesZ$Some"));
+       CHECK(LDKCOption_ThirtyTwoBytesZ_Some_class != NULL);
+       LDKCOption_ThirtyTwoBytesZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ThirtyTwoBytesZ_Some_class, "<init>", "([B)V");
+       CHECK(LDKCOption_ThirtyTwoBytesZ_Some_meth != NULL);
+       LDKCOption_ThirtyTwoBytesZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ThirtyTwoBytesZ$None"));
+       CHECK(LDKCOption_ThirtyTwoBytesZ_None_class != NULL);
+       LDKCOption_ThirtyTwoBytesZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ThirtyTwoBytesZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_ThirtyTwoBytesZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ThirtyTwoBytesZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_ThirtyTwoBytesZ *obj = (LDKCOption_ThirtyTwoBytesZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_PaymentSecretZ_Some: {
+               case LDKCOption_ThirtyTwoBytesZ_Some: {
                        int8_tArray some_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentSecretZ_Some_class, LDKCOption_PaymentSecretZ_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_ThirtyTwoBytesZ_Some_class, LDKCOption_ThirtyTwoBytesZ_Some_meth, some_arr);
                }
-               case LDKCOption_PaymentSecretZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentSecretZ_None_class, LDKCOption_PaymentSecretZ_None_meth);
+               case LDKCOption_ThirtyTwoBytesZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_ThirtyTwoBytesZ_None_class, LDKCOption_ThirtyTwoBytesZ_None_meth);
                }
                default: abort();
        }
@@ -1733,85 +1953,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1u8ZZ_1ref
                default: abort();
        }
 }
-static jclass LDKDecodeError_UnknownVersion_class = NULL;
-static jmethodID LDKDecodeError_UnknownVersion_meth = NULL;
-static jclass LDKDecodeError_UnknownRequiredFeature_class = NULL;
-static jmethodID LDKDecodeError_UnknownRequiredFeature_meth = NULL;
-static jclass LDKDecodeError_InvalidValue_class = NULL;
-static jmethodID LDKDecodeError_InvalidValue_meth = NULL;
-static jclass LDKDecodeError_ShortRead_class = NULL;
-static jmethodID LDKDecodeError_ShortRead_meth = NULL;
-static jclass LDKDecodeError_BadLengthDescriptor_class = NULL;
-static jmethodID LDKDecodeError_BadLengthDescriptor_meth = NULL;
-static jclass LDKDecodeError_Io_class = NULL;
-static jmethodID LDKDecodeError_Io_meth = NULL;
-static jclass LDKDecodeError_UnsupportedCompression_class = NULL;
-static jmethodID LDKDecodeError_UnsupportedCompression_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKDecodeError_init (JNIEnv *env, jclass clz) {
-       LDKDecodeError_UnknownVersion_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownVersion"));
-       CHECK(LDKDecodeError_UnknownVersion_class != NULL);
-       LDKDecodeError_UnknownVersion_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownVersion_class, "<init>", "()V");
-       CHECK(LDKDecodeError_UnknownVersion_meth != NULL);
-       LDKDecodeError_UnknownRequiredFeature_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownRequiredFeature"));
-       CHECK(LDKDecodeError_UnknownRequiredFeature_class != NULL);
-       LDKDecodeError_UnknownRequiredFeature_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownRequiredFeature_class, "<init>", "()V");
-       CHECK(LDKDecodeError_UnknownRequiredFeature_meth != NULL);
-       LDKDecodeError_InvalidValue_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$InvalidValue"));
-       CHECK(LDKDecodeError_InvalidValue_class != NULL);
-       LDKDecodeError_InvalidValue_meth = (*env)->GetMethodID(env, LDKDecodeError_InvalidValue_class, "<init>", "()V");
-       CHECK(LDKDecodeError_InvalidValue_meth != NULL);
-       LDKDecodeError_ShortRead_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$ShortRead"));
-       CHECK(LDKDecodeError_ShortRead_class != NULL);
-       LDKDecodeError_ShortRead_meth = (*env)->GetMethodID(env, LDKDecodeError_ShortRead_class, "<init>", "()V");
-       CHECK(LDKDecodeError_ShortRead_meth != NULL);
-       LDKDecodeError_BadLengthDescriptor_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$BadLengthDescriptor"));
-       CHECK(LDKDecodeError_BadLengthDescriptor_class != NULL);
-       LDKDecodeError_BadLengthDescriptor_meth = (*env)->GetMethodID(env, LDKDecodeError_BadLengthDescriptor_class, "<init>", "()V");
-       CHECK(LDKDecodeError_BadLengthDescriptor_meth != NULL);
-       LDKDecodeError_Io_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$Io"));
-       CHECK(LDKDecodeError_Io_class != NULL);
-       LDKDecodeError_Io_meth = (*env)->GetMethodID(env, LDKDecodeError_Io_class, "<init>", "(Lorg/ldk/enums/IOError;)V");
-       CHECK(LDKDecodeError_Io_meth != NULL);
-       LDKDecodeError_UnsupportedCompression_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnsupportedCompression"));
-       CHECK(LDKDecodeError_UnsupportedCompression_class != NULL);
-       LDKDecodeError_UnsupportedCompression_meth = (*env)->GetMethodID(env, LDKDecodeError_UnsupportedCompression_class, "<init>", "()V");
-       CHECK(LDKDecodeError_UnsupportedCompression_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKDecodeError_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKDecodeError_UnknownVersion: {
-                       return (*env)->NewObject(env, LDKDecodeError_UnknownVersion_class, LDKDecodeError_UnknownVersion_meth);
-               }
-               case LDKDecodeError_UnknownRequiredFeature: {
-                       return (*env)->NewObject(env, LDKDecodeError_UnknownRequiredFeature_class, LDKDecodeError_UnknownRequiredFeature_meth);
-               }
-               case LDKDecodeError_InvalidValue: {
-                       return (*env)->NewObject(env, LDKDecodeError_InvalidValue_class, LDKDecodeError_InvalidValue_meth);
-               }
-               case LDKDecodeError_ShortRead: {
-                       return (*env)->NewObject(env, LDKDecodeError_ShortRead_class, LDKDecodeError_ShortRead_meth);
-               }
-               case LDKDecodeError_BadLengthDescriptor: {
-                       return (*env)->NewObject(env, LDKDecodeError_BadLengthDescriptor_class, LDKDecodeError_BadLengthDescriptor_meth);
-               }
-               case LDKDecodeError_Io: {
-                       jclass io_conv = LDKIOError_to_java(env, obj->io);
-                       return (*env)->NewObject(env, LDKDecodeError_Io_class, LDKDecodeError_Io_meth, io_conv);
-               }
-               case LDKDecodeError_UnsupportedCompression: {
-                       return (*env)->NewObject(env, LDKDecodeError_UnsupportedCompression_class, LDKDecodeError_UnsupportedCompression_meth);
-               }
-               default: abort();
-       }
-}
 static inline struct LDKRecipientOnionFields CResult_RecipientOnionFieldsDecodeErrorZ_get_ok(LDKCResult_RecipientOnionFieldsDecodeErrorZ *NONNULL_PTR owner){
        LDKRecipientOnionFields ret = *owner->contents.result;
        ret.is_owned = false;
@@ -1838,6 +1979,122 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFiel
        return ret_ref;
 }
 
+static inline uint64_t C2Tuple_u64CVec_u8ZZ_get_a(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR owner){
+       return owner->a;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64CVec_u8ZZ* owner_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(owner);
+       int64_t ret_conv = C2Tuple_u64CVec_u8ZZ_get_a(owner_conv);
+       return ret_conv;
+}
+
+static inline struct LDKCVec_u8Z C2Tuple_u64CVec_u8ZZ_get_b(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR owner){
+       return CVec_u8Z_clone(&owner->b);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64CVec_u8ZZ* owner_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_u64CVec_u8ZZ_get_b(owner_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;
+}
+
+static inline LDKCVec_C2Tuple_u64CVec_u8ZZZ CVec_C2Tuple_u64CVec_u8ZZZ_clone(const LDKCVec_C2Tuple_u64CVec_u8ZZZ *orig) {
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ) * orig->datalen, "LDKCVec_C2Tuple_u64CVec_u8ZZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_u64CVec_u8ZZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKRecipientOnionFields CResult_RecipientOnionFieldsNoneZ_get_ok(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR owner){
+       LDKRecipientOnionFields ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecipientOnionFieldsNoneZ* owner_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(owner);
+       LDKRecipientOnionFields ret_var = CResult_RecipientOnionFieldsNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline void CResult_RecipientOnionFieldsNoneZ_get_err(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecipientOnionFieldsNoneZ* owner_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(owner);
+       CResult_RecipientOnionFieldsNoneZ_get_err(owner_conv);
+}
+
+static inline LDKCVec_ThirtyTwoBytesZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_ThirtyTwoBytesZ *orig) {
+       LDKCVec_ThirtyTwoBytesZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_ThirtyTwoBytesZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static jclass LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class = NULL;
+static jmethodID LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth = NULL;
+static jclass LDKCOption_CVec_ThirtyTwoBytesZZ_None_class = NULL;
+static jmethodID LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1ThirtyTwoBytesZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ThirtyTwoBytesZZ$Some"));
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class != NULL);
+       LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class, "<init>", "([[B)V");
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth != NULL);
+       LDKCOption_CVec_ThirtyTwoBytesZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ThirtyTwoBytesZZ$None"));
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_None_class != NULL);
+       LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ThirtyTwoBytesZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1ThirtyTwoBytesZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ *obj = (LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_CVec_ThirtyTwoBytesZZ_Some: {
+                       LDKCVec_ThirtyTwoBytesZ some_var = obj->some;
+                       jobjectArray some_arr = NULL;
+                       some_arr = (*env)->NewObjectArray(env, some_var.datalen, arr_of_B_clz, NULL);
+                       ;
+                       for (size_t i = 0; i < some_var.datalen; i++) {
+                               int8_tArray some_conv_8_arr = (*env)->NewByteArray(env, 32);
+                               (*env)->SetByteArrayRegion(env, some_conv_8_arr, 0, 32, some_var.data[i].data);
+                               (*env)->SetObjectArrayElement(env, some_arr, i, some_conv_8_arr);
+                       }
+                       
+                       return (*env)->NewObject(env, LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class, LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth, some_arr);
+               }
+               case LDKCOption_CVec_ThirtyTwoBytesZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_CVec_ThirtyTwoBytesZZ_None_class, LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth);
+               }
+               default: abort();
+       }
+}
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesNoneZ_get_ok(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return ThirtyTwoBytes_clone(&*owner->contents.result);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesNoneZ* owner_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesNoneZ_get_ok(owner_conv).data);
+       return ret_arr;
+}
+
+static inline void CResult_ThirtyTwoBytesNoneZ_get_err(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesNoneZ* owner_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(owner);
+       CResult_ThirtyTwoBytesNoneZ_get_err(owner_conv);
+}
+
 static inline struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
        LDKBlindedPayInfo ret = *owner->contents.result;
        ret.is_owned = false;
@@ -2005,83 +2262,76 @@ static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        }
        return ret;
 }
-static jclass LDKCOption_PackedLockTimeZ_Some_class = NULL;
-static jmethodID LDKCOption_PackedLockTimeZ_Some_meth = NULL;
-static jclass LDKCOption_PackedLockTimeZ_None_class = NULL;
-static jmethodID LDKCOption_PackedLockTimeZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PackedLockTimeZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PackedLockTimeZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PackedLockTimeZ$Some"));
-       CHECK(LDKCOption_PackedLockTimeZ_Some_class != NULL);
-       LDKCOption_PackedLockTimeZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PackedLockTimeZ_Some_class, "<init>", "(I)V");
-       CHECK(LDKCOption_PackedLockTimeZ_Some_meth != NULL);
-       LDKCOption_PackedLockTimeZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PackedLockTimeZ$None"));
-       CHECK(LDKCOption_PackedLockTimeZ_None_class != NULL);
-       LDKCOption_PackedLockTimeZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PackedLockTimeZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PackedLockTimeZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PackedLockTimeZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PackedLockTimeZ *obj = (LDKCOption_PackedLockTimeZ*)untag_ptr(ptr);
+static jclass LDKCOption_u32Z_Some_class = NULL;
+static jmethodID LDKCOption_u32Z_Some_meth = NULL;
+static jclass LDKCOption_u32Z_None_class = NULL;
+static jmethodID LDKCOption_u32Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u32Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_u32Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$Some"));
+       CHECK(LDKCOption_u32Z_Some_class != NULL);
+       LDKCOption_u32Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_Some_class, "<init>", "(I)V");
+       CHECK(LDKCOption_u32Z_Some_meth != NULL);
+       LDKCOption_u32Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$None"));
+       CHECK(LDKCOption_u32Z_None_class != NULL);
+       LDKCOption_u32Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_u32Z_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_u32Z *obj = (LDKCOption_u32Z*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_PackedLockTimeZ_Some: {
+               case LDKCOption_u32Z_Some: {
                        int32_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_PackedLockTimeZ_Some_class, LDKCOption_PackedLockTimeZ_Some_meth, some_conv);
+                       return (*env)->NewObject(env, LDKCOption_u32Z_Some_class, LDKCOption_u32Z_Some_meth, some_conv);
                }
-               case LDKCOption_PackedLockTimeZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PackedLockTimeZ_None_class, LDKCOption_PackedLockTimeZ_None_meth);
+               case LDKCOption_u32Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_u32Z_None_class, LDKCOption_u32Z_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKCVec_u8Z C2Tuple_PartiallySignedTransactionusizeZ_get_a(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z C2Tuple_CVec_u8ZusizeZ_get_a(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR owner){
        return CVec_u8Z_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* owner_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = C2Tuple_PartiallySignedTransactionusizeZ_get_a(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_CVec_u8ZusizeZ* owner_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_CVec_u8ZusizeZ_get_a(owner_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;
 }
 
-static inline uintptr_t C2Tuple_PartiallySignedTransactionusizeZ_get_b(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR owner){
+static inline uintptr_t C2Tuple_CVec_u8ZusizeZ_get_b(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR owner){
        return owner->b;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* owner_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(owner);
-       int64_t ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_CVec_u8ZusizeZ* owner_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(owner);
+       int64_t ret_conv = C2Tuple_CVec_u8ZusizeZ_get_b(owner_conv);
        return ret_conv;
 }
 
-static inline struct LDKC2Tuple_PartiallySignedTransactionusizeZ CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_CVec_u8ZusizeZ CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_PartiallySignedTransactionusizeZ_clone(&*owner->contents.result);
+       return C2Tuple_CVec_u8ZusizeZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline void CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR owner){
+static inline void CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err(owner_conv);
 }
 
-static inline LDKCVec_PaymentPreimageZ CVec_PaymentPreimageZ_clone(const LDKCVec_PaymentPreimageZ *orig) {
-       LDKCVec_PaymentPreimageZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_PaymentPreimageZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static inline void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -2100,22 +2350,22 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1get_1err(J
        CResult_NoneNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKSignature C2Tuple_SignatureCVec_SignatureZZ_get_a(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR owner){
+static inline struct LDKECDSASignature C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* owner_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* owner_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, C2Tuple_SignatureCVec_SignatureZZ_get_a(owner_conv).compact_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(owner_conv).compact_form);
        return ret_arr;
 }
 
-static inline struct LDKCVec_SignatureZ C2Tuple_SignatureCVec_SignatureZZ_get_b(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR owner){
+static inline struct LDKCVec_ECDSASignatureZ C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR owner){
        return owner->b;
 }
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* owner_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(owner);
-       LDKCVec_SignatureZ ret_var = C2Tuple_SignatureCVec_SignatureZZ_get_b(owner_conv);
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* owner_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(owner);
+       LDKCVec_ECDSASignatureZ ret_var = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(owner_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -2128,44 +2378,44 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec
        return ret_arr;
 }
 
-static inline struct LDKC2Tuple_SignatureCVec_SignatureZZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_SignatureCVec_SignatureZZ_clone(&*owner->contents.result);
+       return C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR owner){
+static inline void CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKSignature CResult_SignatureNoneZ_get_ok(LDKCResult_SignatureNoneZ *NONNULL_PTR owner){
+static inline struct LDKECDSASignature CResult_ECDSASignatureNoneZ_get_ok(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SignatureNoneZ* owner_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ECDSASignatureNoneZ* owner_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CResult_SignatureNoneZ_get_ok(owner_conv).compact_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CResult_ECDSASignatureNoneZ_get_ok(owner_conv).compact_form);
        return ret_arr;
 }
 
-static inline void CResult_SignatureNoneZ_get_err(LDKCResult_SignatureNoneZ *NONNULL_PTR owner){
+static inline void CResult_ECDSASignatureNoneZ_get_err(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SignatureNoneZ* owner_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(owner);
-       CResult_SignatureNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ECDSASignatureNoneZ* owner_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(owner);
+       CResult_ECDSASignatureNoneZ_get_err(owner_conv);
 }
 
 static inline struct LDKPublicKey CResult_PublicKeyNoneZ_get_ok(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner){
@@ -2188,73 +2438,73 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1get_1
        CResult_PublicKeyNoneZ_get_err(owner_conv);
 }
 
-static jclass LDKCOption_ScalarZ_Some_class = NULL;
-static jmethodID LDKCOption_ScalarZ_Some_meth = NULL;
-static jclass LDKCOption_ScalarZ_None_class = NULL;
-static jmethodID LDKCOption_ScalarZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ScalarZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_ScalarZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScalarZ$Some"));
-       CHECK(LDKCOption_ScalarZ_Some_class != NULL);
-       LDKCOption_ScalarZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ScalarZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_ScalarZ_Some_meth != NULL);
-       LDKCOption_ScalarZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScalarZ$None"));
-       CHECK(LDKCOption_ScalarZ_None_class != NULL);
-       LDKCOption_ScalarZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ScalarZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_ScalarZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ScalarZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_ScalarZ *obj = (LDKCOption_ScalarZ*)untag_ptr(ptr);
+static jclass LDKCOption_BigEndianScalarZ_Some_class = NULL;
+static jmethodID LDKCOption_BigEndianScalarZ_Some_meth = NULL;
+static jclass LDKCOption_BigEndianScalarZ_None_class = NULL;
+static jmethodID LDKCOption_BigEndianScalarZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1BigEndianScalarZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_BigEndianScalarZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BigEndianScalarZ$Some"));
+       CHECK(LDKCOption_BigEndianScalarZ_Some_class != NULL);
+       LDKCOption_BigEndianScalarZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_BigEndianScalarZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_BigEndianScalarZ_Some_meth != NULL);
+       LDKCOption_BigEndianScalarZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BigEndianScalarZ$None"));
+       CHECK(LDKCOption_BigEndianScalarZ_None_class != NULL);
+       LDKCOption_BigEndianScalarZ_None_meth = (*env)->GetMethodID(env, LDKCOption_BigEndianScalarZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_BigEndianScalarZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1BigEndianScalarZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_BigEndianScalarZ *obj = (LDKCOption_BigEndianScalarZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_ScalarZ_Some: {
+               case LDKCOption_BigEndianScalarZ_Some: {
                        LDKBigEndianScalar* some_ref = &obj->some;
-                       return (*env)->NewObject(env, LDKCOption_ScalarZ_Some_class, LDKCOption_ScalarZ_Some_meth, tag_ptr(some_ref, false));
+                       return (*env)->NewObject(env, LDKCOption_BigEndianScalarZ_Some_class, LDKCOption_BigEndianScalarZ_Some_meth, tag_ptr(some_ref, false));
                }
-               case LDKCOption_ScalarZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_ScalarZ_None_class, LDKCOption_ScalarZ_None_meth);
+               case LDKCOption_BigEndianScalarZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_BigEndianScalarZ_None_class, LDKCOption_BigEndianScalarZ_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKThirtyTwoBytes CResult_SharedSecretNoneZ_get_ok(LDKCResult_SharedSecretNoneZ *NONNULL_PTR owner){
+static inline struct LDKRecoverableSignature CResult_RecoverableSignatureNoneZ_get_ok(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return ThirtyTwoBytes_clone(&*owner->contents.result);
+       return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SharedSecretNoneZ* owner_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_SharedSecretNoneZ_get_ok(owner_conv).data);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 68);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 68, CResult_RecoverableSignatureNoneZ_get_ok(owner_conv).serialized_form);
        return ret_arr;
 }
 
-static inline void CResult_SharedSecretNoneZ_get_err(LDKCResult_SharedSecretNoneZ *NONNULL_PTR owner){
+static inline void CResult_RecoverableSignatureNoneZ_get_err(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SharedSecretNoneZ* owner_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(owner);
-       CResult_SharedSecretNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
+       CResult_RecoverableSignatureNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKRecoverableSignature CResult_RecoverableSignatureNoneZ_get_ok(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
+static inline struct LDKSchnorrSignature CResult_SchnorrSignatureNoneZ_get_ok(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 68);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 68, CResult_RecoverableSignatureNoneZ_get_ok(owner_conv).serialized_form);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SchnorrSignatureNoneZ* owner_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CResult_SchnorrSignatureNoneZ_get_ok(owner_conv).compact_form);
        return ret_arr;
 }
 
-static inline void CResult_RecoverableSignatureNoneZ_get_err(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
+static inline void CResult_SchnorrSignatureNoneZ_get_err(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
-       CResult_RecoverableSignatureNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SchnorrSignatureNoneZ* owner_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(owner);
+       CResult_SchnorrSignatureNoneZ_get_err(owner_conv);
 }
 
 typedef struct LDKChannelSigner_JCalls {
@@ -2334,7 +2584,7 @@ LDKThirtyTwoBytes release_commitment_secret_LDKChannelSigner_jcall(const void* t
        }
        return ret_ref;
 }
-LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * holder_tx, LDKCVec_PaymentPreimageZ preimages) {
+LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * holder_tx, LDKCVec_ThirtyTwoBytesZ preimages) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2348,7 +2598,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const voi
        holder_tx_var = HolderCommitmentTransaction_clone(&holder_tx_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_var);
        holder_tx_ref = tag_ptr(holder_tx_var.inner, holder_tx_var.is_owned);
-       LDKCVec_PaymentPreimageZ preimages_var = preimages;
+       LDKCVec_ThirtyTwoBytesZ preimages_var = preimages;
        jobjectArray preimages_arr = NULL;
        preimages_arr = (*env)->NewObjectArray(env, preimages_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -2492,10 +2742,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelSigner_1validate_1ho
        holder_tx_conv.is_owned = ptr_is_owned(holder_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_conv);
        holder_tx_conv.is_owned = false;
-       LDKCVec_PaymentPreimageZ preimages_constr;
+       LDKCVec_ThirtyTwoBytesZ preimages_constr;
        preimages_constr.datalen = (*env)->GetArrayLength(env, preimages);
        if (preimages_constr.datalen > 0)
-               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_PaymentPreimageZ Elements");
+               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
        else
                preimages_constr.data = NULL;
        for (size_t i = 0; i < preimages_constr.datalen; i++) {
@@ -2580,7 +2830,7 @@ static void LDKEcdsaChannelSigner_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKCommitmentTransaction * commitment_tx, LDKCVec_PaymentPreimageZ preimages) {
+LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_counterparty_commitment_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKCommitmentTransaction * commitment_tx, LDKCVec_ThirtyTwoBytesZ preimages) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2594,7 +2844,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        commitment_tx_var = CommitmentTransaction_clone(&commitment_tx_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = tag_ptr(commitment_tx_var.inner, commitment_tx_var.is_owned);
-       LDKCVec_PaymentPreimageZ preimages_var = preimages;
+       LDKCVec_ThirtyTwoBytesZ preimages_var = preimages;
        jobjectArray preimages_arr = NULL;
        preimages_arr = (*env)->NewObjectArray(env, preimages_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -2614,7 +2864,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -2649,7 +2899,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKEcdsaChannelSigner_jcal
        }
        return ret_conv;
 }
-LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) {
+LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_holder_commitment_and_htlcs_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2672,14 +2922,14 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32]) {
+LDKCResult_ECDSASignatureNoneZ sign_justice_revoked_output_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32]) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2705,14 +2955,14 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKEcdsaChannelSigner_jcal
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) {
+LDKCResult_ECDSASignatureNoneZ sign_justice_revoked_htlc_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2743,14 +2993,14 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKEcdsaChannelSigner_jcall(
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_holder_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, const LDKHTLCDescriptor * htlc_descriptor) {
+LDKCResult_ECDSASignatureNoneZ sign_holder_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, const LDKHTLCDescriptor * htlc_descriptor) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2778,14 +3028,14 @@ LDKCResult_SignatureNoneZ sign_holder_htlc_transaction_LDKEcdsaChannelSigner_jca
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, LDKPublicKey per_commitment_point, const LDKHTLCOutputInCommitment * htlc) {
+LDKCResult_ECDSASignatureNoneZ sign_counterparty_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, LDKPublicKey per_commitment_point, const LDKHTLCOutputInCommitment * htlc) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2816,14 +3066,14 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKEcdsaChannelSign
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_closing_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKClosingTransaction * closing_tx) {
+LDKCResult_ECDSASignatureNoneZ sign_closing_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKClosingTransaction * closing_tx) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2846,14 +3096,14 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKEcdsaChannelSigner_jcall(c
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction anchor_tx, uintptr_t input) {
+LDKCResult_ECDSASignatureNoneZ sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction anchor_tx, uintptr_t input) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2876,14 +3126,14 @@ LDKCResult_SignatureNoneZ sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall(c
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_channel_announcement_with_funding_key_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) {
+LDKCResult_ECDSASignatureNoneZ sign_channel_announcement_with_funding_key_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2906,7 +3156,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_with_funding_key_LDKEcdsaCha
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -2987,10 +3237,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        commitment_tx_conv.is_owned = ptr_is_owned(commitment_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv.is_owned = false;
-       LDKCVec_PaymentPreimageZ preimages_constr;
+       LDKCVec_ThirtyTwoBytesZ preimages_constr;
        preimages_constr.datalen = (*env)->GetArrayLength(env, preimages);
        if (preimages_constr.datalen > 0)
-               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_PaymentPreimageZ Elements");
+               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
        else
                preimages_constr.data = NULL;
        for (size_t i = 0; i < preimages_constr.datalen; i++) {
@@ -3000,7 +3250,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
                (*env)->GetByteArrayRegion(env, preimages_conv_8, 0, 32, preimages_conv_8_ref.data);
                preimages_constr.data[i] = preimages_conv_8_ref;
        }
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_commitment)(this_arg_conv->this_arg, &commitment_tx_conv, preimages_constr);
        return tag_ptr(ret_conv, true);
 }
@@ -3027,7 +3277,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1h
        commitment_tx_conv.is_owned = ptr_is_owned(commitment_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv.is_owned = false;
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3045,7 +3295,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1j
        CHECK((*env)->GetArrayLength(env, per_commitment_key) == 32);
        (*env)->GetByteArrayRegion(env, per_commitment_key, 0, 32, per_commitment_key_arr);
        uint8_t (*per_commitment_key_ref)[32] = &per_commitment_key_arr;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_output)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref);
        return tag_ptr(ret_conv, true);
 }
@@ -3068,7 +3318,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1j
        htlc_conv.is_owned = ptr_is_owned(htlc);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        htlc_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_htlc)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref, &htlc_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3087,7 +3337,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1h
        htlc_descriptor_conv.is_owned = ptr_is_owned(htlc_descriptor);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_descriptor_conv);
        htlc_descriptor_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, &htlc_descriptor_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3109,7 +3359,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        htlc_conv.is_owned = ptr_is_owned(htlc);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        htlc_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, amount, per_commitment_point_ref, &htlc_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3123,7 +3373,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        closing_tx_conv.is_owned = ptr_is_owned(closing_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_conv);
        closing_tx_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, &closing_tx_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3137,7 +3387,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1h
        anchor_tx_ref.data = MALLOC(anchor_tx_ref.datalen, "LDKTransaction Bytes");
        (*env)->GetByteArrayRegion(env, anchor_tx, 0, anchor_tx_ref.datalen, anchor_tx_ref.data);
        anchor_tx_ref.data_is_owned = true;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_anchor_input)(this_arg_conv->this_arg, anchor_tx_ref, input);
        return tag_ptr(ret_conv, true);
 }
@@ -3151,7 +3401,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        msg_conv.is_owned = ptr_is_owned(msg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_channel_announcement_with_funding_key)(this_arg_conv->this_arg, &msg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3285,26 +3535,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChan
        return ret_ref;
 }
 
-static inline struct LDKCVec_u8Z CResult_ScriptNoneZ_get_ok(LDKCResult_ScriptNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z CResult_CVec_u8ZNoneZ_get_ok(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return CVec_u8Z_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_ScriptNoneZ* owner_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = CResult_ScriptNoneZ_get_ok(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZNoneZ* owner_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = CResult_CVec_u8ZNoneZ_get_ok(owner_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;
 }
 
-static inline void CResult_ScriptNoneZ_get_err(LDKCResult_ScriptNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_u8ZNoneZ_get_err(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_ScriptNoneZ* owner_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(owner);
-       CResult_ScriptNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZNoneZ* owner_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(owner);
+       CResult_CVec_u8ZNoneZ_get_err(owner_conv);
 }
 
 static inline struct LDKShutdownScript CResult_ShutdownScriptNoneZ_get_ok(LDKCResult_ShutdownScriptNoneZ *NONNULL_PTR owner){
@@ -3330,6 +3580,64 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNoneZ_1
        CResult_ShutdownScriptNoneZ_get_err(owner_conv);
 }
 
+static jclass LDKCOption_u16Z_Some_class = NULL;
+static jmethodID LDKCOption_u16Z_Some_meth = NULL;
+static jclass LDKCOption_u16Z_None_class = NULL;
+static jmethodID LDKCOption_u16Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u16Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_u16Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$Some"));
+       CHECK(LDKCOption_u16Z_Some_class != NULL);
+       LDKCOption_u16Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_Some_class, "<init>", "(S)V");
+       CHECK(LDKCOption_u16Z_Some_meth != NULL);
+       LDKCOption_u16Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$None"));
+       CHECK(LDKCOption_u16Z_None_class != NULL);
+       LDKCOption_u16Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_u16Z_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_u16Z *obj = (LDKCOption_u16Z*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_u16Z_Some: {
+                       int16_t some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_u16Z_Some_class, LDKCOption_u16Z_Some_meth, some_conv);
+               }
+               case LDKCOption_u16Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_u16Z_None_class, LDKCOption_u16Z_None_meth);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_boolZ_Some_class = NULL;
+static jmethodID LDKCOption_boolZ_Some_meth = NULL;
+static jclass LDKCOption_boolZ_None_class = NULL;
+static jmethodID LDKCOption_boolZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1boolZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_boolZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_boolZ$Some"));
+       CHECK(LDKCOption_boolZ_Some_class != NULL);
+       LDKCOption_boolZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_boolZ_Some_class, "<init>", "(Z)V");
+       CHECK(LDKCOption_boolZ_Some_meth != NULL);
+       LDKCOption_boolZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_boolZ$None"));
+       CHECK(LDKCOption_boolZ_None_class != NULL);
+       LDKCOption_boolZ_None_meth = (*env)->GetMethodID(env, LDKCOption_boolZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_boolZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1boolZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_boolZ *obj = (LDKCOption_boolZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_boolZ_Some: {
+                       jboolean some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_boolZ_Some_class, LDKCOption_boolZ_Some_meth, some_conv);
+               }
+               case LDKCOption_boolZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_boolZ_None_class, LDKCOption_boolZ_None_meth);
+               }
+               default: abort();
+       }
+}
 static inline LDKCVec_CVec_u8ZZ CVec_CVec_u8ZZ_clone(const LDKCVec_CVec_u8ZZ *orig) {
        LDKCVec_CVec_u8ZZ ret = { .data = MALLOC(sizeof(LDKCVec_u8Z) * orig->datalen, "LDKCVec_CVec_u8ZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3394,28 +3702,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        return ret_ref;
 }
 
-static inline struct LDKCVec_u8Z CResult_PartiallySignedTransactionNoneZ_get_ok(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return CVec_u8Z_clone(&*owner->contents.result);
-}
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PartiallySignedTransactionNoneZ* owner_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = CResult_PartiallySignedTransactionNoneZ_get_ok(owner_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;
-}
-
-static inline void CResult_PartiallySignedTransactionNoneZ_get_err(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PartiallySignedTransactionNoneZ* owner_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(owner);
-       CResult_PartiallySignedTransactionNoneZ_get_err(owner_conv);
-}
-
 static inline struct LDKTransaction CResult_TransactionNoneZ_get_ok(LDKCResult_TransactionNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -3437,19 +3723,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1get
        CResult_TransactionNoneZ_get_err(owner_conv);
 }
 
-typedef struct LDKScore_JCalls {
+typedef struct LDKScoreLookUp_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
        jweak o;
        jmethodID channel_penalty_msat_meth;
-       jmethodID payment_path_failed_meth;
-       jmethodID payment_path_successful_meth;
-       jmethodID probe_failed_meth;
-       jmethodID probe_successful_meth;
-       jmethodID write_meth;
-} LDKScore_JCalls;
-static void LDKScore_JCalls_free(void* this_arg) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+} LDKScoreLookUp_JCalls;
+static void LDKScoreLookUp_JCalls_free(void* this_arg) {
+       LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) this_arg;
        if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
                JNIEnv *env;
                jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -3465,8 +3746,8 @@ static void LDKScore_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t short_channel_id, const LDKNodeId * source, const LDKNodeId * target, LDKChannelUsage usage, const LDKProbabilisticScoringFeeParameters * score_params) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+uint64_t channel_penalty_msat_LDKScoreLookUp_jcall(const void* this_arg, uint64_t short_channel_id, const LDKNodeId * source, const LDKNodeId * target, LDKChannelUsage usage, const LDKProbabilisticScoringFeeParameters * score_params) {
+       LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3499,15 +3780,95 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        int64_t ret = (*env)->CallLongMethod(env, obj, j_calls->channel_penalty_msat_meth, short_channel_id_conv, source_ref, target_ref, usage_ref, score_params_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to channel_penalty_msat in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to channel_penalty_msat in LDKScoreLookUp from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret;
 }
-void payment_path_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+static void LDKScoreLookUp_JCalls_cloned(LDKScoreLookUp* new_obj) {
+       LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKScoreLookUp LDKScoreLookUp_init (JNIEnv *env, jclass clz, jobject o) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKScoreLookUp_JCalls *calls = MALLOC(sizeof(LDKScoreLookUp_JCalls), "LDKScoreLookUp_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->channel_penalty_msat_meth = (*env)->GetMethodID(env, c, "channel_penalty_msat", "(JJJJJ)J");
+       CHECK(calls->channel_penalty_msat_meth != NULL);
+
+       LDKScoreLookUp ret = {
+               .this_arg = (void*) calls,
+               .channel_penalty_msat = channel_penalty_msat_LDKScoreLookUp_jcall,
+               .free = LDKScoreLookUp_JCalls_free,
+       };
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScoreLookUp_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKScoreLookUp *res_ptr = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *res_ptr = LDKScoreLookUp_init(env, clz, o);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoreLookUp_1channel_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t source, int64_t target, int64_t usage, int64_t score_params) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKScoreLookUp* this_arg_conv = (LDKScoreLookUp*)this_arg_ptr;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKChannelUsage usage_conv;
+       usage_conv.inner = untag_ptr(usage);
+       usage_conv.is_owned = ptr_is_owned(usage);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(usage_conv);
+       usage_conv = ChannelUsage_clone(&usage_conv);
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv.is_owned = false;
+       int64_t ret_conv = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv, usage_conv, &score_params_conv);
+       return ret_conv;
+}
+
+typedef struct LDKScoreUpdate_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       jmethodID payment_path_failed_meth;
+       jmethodID payment_path_successful_meth;
+       jmethodID probe_failed_meth;
+       jmethodID probe_successful_meth;
+} LDKScoreUpdate_JCalls;
+static void LDKScoreUpdate_JCalls_free(void* this_arg) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+void payment_path_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3526,14 +3887,14 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, ui
        (*env)->CallVoidMethod(env, obj, j_calls->payment_path_failed_meth, path_ref, short_channel_id_conv);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to payment_path_failed in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to payment_path_failed in LDKScoreUpdate from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-void payment_path_successful_LDKScore_jcall(void* this_arg, const LDKPath * path) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+void payment_path_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3551,14 +3912,14 @@ void payment_path_successful_LDKScore_jcall(void* this_arg, const LDKPath * path
        (*env)->CallVoidMethod(env, obj, j_calls->payment_path_successful_meth, path_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to payment_path_successful in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to payment_path_successful in LDKScoreUpdate from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-void probe_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+void probe_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3577,14 +3938,14 @@ void probe_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, uint64_t
        (*env)->CallVoidMethod(env, obj, j_calls->probe_failed_meth, path_ref, short_channel_id_conv);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to probe_failed in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to probe_failed in LDKScoreUpdate from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-void probe_successful_LDKScore_jcall(void* this_arg, const LDKPath * path) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+void probe_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3602,50 +3963,23 @@ void probe_successful_LDKScore_jcall(void* this_arg, const LDKPath * path) {
        (*env)->CallVoidMethod(env, obj, j_calls->probe_successful_meth, path_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to probe_successful in LDKScore from rust threw an exception.");
-       }
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-       }
-}
-LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
-       JNIEnv *env;
-       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-       } else {
-               DO_ASSERT(get_jenv_res == JNI_OK);
-       }
-       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
-       CHECK(obj != NULL);
-       int8_tArray ret = (*env)->CallObjectMethod(env, obj, j_calls->write_meth);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to write in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to probe_successful in LDKScoreUpdate from rust threw an exception.");
        }
-       LDKCVec_u8Z ret_ref;
-       ret_ref.datalen = (*env)->GetArrayLength(env, ret);
-       ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, ret, 0, ret_ref.datalen, ret_ref.data);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
-       return ret_ref;
 }
-static void LDKScore_JCalls_cloned(LDKScore* new_obj) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) new_obj->this_arg;
+static void LDKScoreUpdate_JCalls_cloned(LDKScoreUpdate* new_obj) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) new_obj->this_arg;
        atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
 }
-static inline LDKScore LDKScore_init (JNIEnv *env, jclass clz, jobject o) {
+static inline LDKScoreUpdate LDKScoreUpdate_init (JNIEnv *env, jclass clz, jobject o) {
        jclass c = (*env)->GetObjectClass(env, o);
        CHECK(c != NULL);
-       LDKScore_JCalls *calls = MALLOC(sizeof(LDKScore_JCalls), "LDKScore_JCalls");
+       LDKScoreUpdate_JCalls *calls = MALLOC(sizeof(LDKScoreUpdate_JCalls), "LDKScoreUpdate_JCalls");
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->channel_penalty_msat_meth = (*env)->GetMethodID(env, c, "channel_penalty_msat", "(JJJJJ)J");
-       CHECK(calls->channel_penalty_msat_meth != NULL);
        calls->payment_path_failed_meth = (*env)->GetMethodID(env, c, "payment_path_failed", "(JJ)V");
        CHECK(calls->payment_path_failed_meth != NULL);
        calls->payment_path_successful_meth = (*env)->GetMethodID(env, c, "payment_path_successful", "(J)V");
@@ -3654,58 +3988,26 @@ static inline LDKScore LDKScore_init (JNIEnv *env, jclass clz, jobject o) {
        CHECK(calls->probe_failed_meth != NULL);
        calls->probe_successful_meth = (*env)->GetMethodID(env, c, "probe_successful", "(J)V");
        CHECK(calls->probe_successful_meth != NULL);
-       calls->write_meth = (*env)->GetMethodID(env, c, "write", "()[B");
-       CHECK(calls->write_meth != NULL);
 
-       LDKScore ret = {
+       LDKScoreUpdate ret = {
                .this_arg = (void*) calls,
-               .channel_penalty_msat = channel_penalty_msat_LDKScore_jcall,
-               .payment_path_failed = payment_path_failed_LDKScore_jcall,
-               .payment_path_successful = payment_path_successful_LDKScore_jcall,
-               .probe_failed = probe_failed_LDKScore_jcall,
-               .probe_successful = probe_successful_LDKScore_jcall,
-               .write = write_LDKScore_jcall,
-               .free = LDKScore_JCalls_free,
+               .payment_path_failed = payment_path_failed_LDKScoreUpdate_jcall,
+               .payment_path_successful = payment_path_successful_LDKScoreUpdate_jcall,
+               .probe_failed = probe_failed_LDKScoreUpdate_jcall,
+               .probe_successful = probe_successful_LDKScoreUpdate_jcall,
+               .free = LDKScoreUpdate_JCalls_free,
        };
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1new(JNIEnv *env, jclass clz, jobject o) {
-       LDKScore *res_ptr = MALLOC(sizeof(LDKScore), "LDKScore");
-       *res_ptr = LDKScore_init(env, clz, o);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScoreUpdate_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKScoreUpdate *res_ptr = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *res_ptr = LDKScoreUpdate_init(env, clz, o);
        return tag_ptr(res_ptr, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Score_1channel_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t source, int64_t target, int64_t usage, int64_t score_params) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1payment_1path_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKChannelUsage usage_conv;
-       usage_conv.inner = untag_ptr(usage);
-       usage_conv.is_owned = ptr_is_owned(usage);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(usage_conv);
-       usage_conv = ChannelUsage_clone(&usage_conv);
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv.is_owned = false;
-       int64_t ret_conv = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv, usage_conv, &score_params_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3714,10 +4016,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed(J
        (this_arg_conv->payment_path_failed)(this_arg_conv->this_arg, &path_conv, short_channel_id);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1payment_1path_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3726,10 +4028,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1successf
        (this_arg_conv->payment_path_successful)(this_arg_conv->this_arg, &path_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1probe_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3738,10 +4040,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1failed(JNIEnv *e
        (this_arg_conv->probe_failed)(this_arg_conv->this_arg, &path_conv, short_channel_id);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1probe_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3750,22 +4052,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1successful(JNIEn
        (this_arg_conv->probe_successful)(this_arg_conv->this_arg, &path_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Score_1write(JNIEnv *env, jclass clz, int64_t this_arg) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
-       LDKCVec_u8Z ret_var = (this_arg_conv->write)(this_arg_conv->this_arg);
-       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;
-}
-
 typedef struct LDKLockableScore_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
        jweak o;
-       jmethodID lock_meth;
+       jmethodID read_lock_meth;
+       jmethodID write_lock_meth;
 } LDKLockableScore_JCalls;
 static void LDKLockableScore_JCalls_free(void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
@@ -3784,7 +4076,36 @@ static void LDKLockableScore_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKScore lock_LDKLockableScore_jcall(const void* this_arg) {
+LDKScoreLookUp read_lock_LDKLockableScore_jcall(const void* this_arg) {
+       LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->read_lock_meth);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to read_lock in LDKLockableScore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKScoreLookUp ret_conv = *(LDKScoreLookUp*)(ret_ptr);
+       if (ret_conv.free == LDKScoreLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScoreLookUp_JCalls_cloned(&ret_conv);
+       }// WARNING: we may need a move here but no clone is available for LDKScoreLookUp
+       
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKScoreUpdate write_lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -3795,18 +4116,18 @@ LDKScore lock_LDKLockableScore_jcall(const void* this_arg) {
        }
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
        CHECK(obj != NULL);
-       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->lock_meth);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->write_lock_meth);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to lock in LDKLockableScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to write_lock in LDKLockableScore from rust threw an exception.");
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKScore ret_conv = *(LDKScore*)(ret_ptr);
-       if (ret_conv.free == LDKScore_JCalls_free) {
+       LDKScoreUpdate ret_conv = *(LDKScoreUpdate*)(ret_ptr);
+       if (ret_conv.free == LDKScoreUpdate_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&ret_conv);
-       }// WARNING: we may need a move here but no clone is available for LDKScore
+               LDKScoreUpdate_JCalls_cloned(&ret_conv);
+       }// WARNING: we may need a move here but no clone is available for LDKScoreUpdate
        
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -3824,12 +4145,15 @@ static inline LDKLockableScore LDKLockableScore_init (JNIEnv *env, jclass clz, j
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->lock_meth = (*env)->GetMethodID(env, c, "lock", "()J");
-       CHECK(calls->lock_meth != NULL);
+       calls->read_lock_meth = (*env)->GetMethodID(env, c, "read_lock", "()J");
+       CHECK(calls->read_lock_meth != NULL);
+       calls->write_lock_meth = (*env)->GetMethodID(env, c, "write_lock", "()J");
+       CHECK(calls->write_lock_meth != NULL);
 
        LDKLockableScore ret = {
                .this_arg = (void*) calls,
-               .lock = lock_LDKLockableScore_jcall,
+               .read_lock = read_lock_LDKLockableScore_jcall,
+               .write_lock = write_lock_LDKLockableScore_jcall,
                .free = LDKLockableScore_JCalls_free,
        };
        return ret;
@@ -3839,12 +4163,21 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKLockableScore_1new(JNIEn
        *res_ptr = LDKLockableScore_init(env, clz, o);
        return tag_ptr(res_ptr, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1lock(JNIEnv *env, jclass clz, int64_t this_arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1read_1lock(JNIEnv *env, jclass clz, int64_t this_arg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKLockableScore* this_arg_conv = (LDKLockableScore*)this_arg_ptr;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = (this_arg_conv->lock)(this_arg_conv->this_arg);
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = (this_arg_conv->read_lock)(this_arg_conv->this_arg);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1write_1lock(JNIEnv *env, jclass clz, int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKLockableScore* this_arg_conv = (LDKLockableScore*)this_arg_ptr;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = (this_arg_conv->write_lock)(this_arg_conv->this_arg);
        return tag_ptr(ret_ret, true);
 }
 
@@ -3976,22 +4309,22 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1WriteableScoreZ
                default: abort();
        }
 }
-static inline void CResult_NoneErrorZ_get_ok(LDKCResult_NoneErrorZ *NONNULL_PTR owner){
+static inline void CResult_NoneIOErrorZ_get_ok(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NoneErrorZ* owner_conv = (LDKCResult_NoneErrorZ*)untag_ptr(owner);
-       CResult_NoneErrorZ_get_ok(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_NoneIOErrorZ* owner_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(owner);
+       CResult_NoneIOErrorZ_get_ok(owner_conv);
 }
 
-static inline enum LDKIOError CResult_NoneErrorZ_get_err(LDKCResult_NoneErrorZ *NONNULL_PTR owner){
+static inline enum LDKIOError CResult_NoneIOErrorZ_get_err(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NoneErrorZ* owner_conv = (LDKCResult_NoneErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKIOError_to_java(env, CResult_NoneErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_NoneIOErrorZ* owner_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_NoneIOErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -4122,35 +4455,6 @@ static inline LDKCVec_RouteHopZ CVec_RouteHopZ_clone(const LDKCVec_RouteHopZ *or
        }
        return ret;
 }
-static jclass LDKCOption_u32Z_Some_class = NULL;
-static jmethodID LDKCOption_u32Z_Some_meth = NULL;
-static jclass LDKCOption_u32Z_None_class = NULL;
-static jmethodID LDKCOption_u32Z_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u32Z_init (JNIEnv *env, jclass clz) {
-       LDKCOption_u32Z_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$Some"));
-       CHECK(LDKCOption_u32Z_Some_class != NULL);
-       LDKCOption_u32Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_Some_class, "<init>", "(I)V");
-       CHECK(LDKCOption_u32Z_Some_meth != NULL);
-       LDKCOption_u32Z_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$None"));
-       CHECK(LDKCOption_u32Z_None_class != NULL);
-       LDKCOption_u32Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_None_class, "<init>", "()V");
-       CHECK(LDKCOption_u32Z_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_u32Z *obj = (LDKCOption_u32Z*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_u32Z_Some: {
-                       int32_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_u32Z_Some_class, LDKCOption_u32Z_Some_meth, some_conv);
-               }
-               case LDKCOption_u32Z_None: {
-                       return (*env)->NewObject(env, LDKCOption_u32Z_None_class, LDKCOption_u32Z_None_meth);
-               }
-               default: abort();
-       }
-}
 static inline LDKCVec_PathZ CVec_PathZ_clone(const LDKCVec_PathZ *orig) {
        LDKCVec_PathZ ret = { .data = MALLOC(sizeof(LDKPath) * orig->datalen, "LDKCVec_PathZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4424,73 +4728,101 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1u64u64
                default: abort();
        }
 }
-static inline struct LDKEightU16s C2Tuple_Z_get_a(LDKC2Tuple_Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple_Z_get_a(LDKC2Tuple_Z *NONNULL_PTR owner){
        return owner->a;
 }
 JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
        LDKC2Tuple_Z* owner_conv = (LDKC2Tuple_Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple_Z_get_a(owner_conv).data);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple_Z_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKEightU16s C2Tuple_Z_get_b(LDKC2Tuple_Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple_Z_get_b(LDKC2Tuple_Z *NONNULL_PTR owner){
        return owner->b;
 }
 JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
        LDKC2Tuple_Z* owner_conv = (LDKC2Tuple_Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple_Z_get_b(owner_conv).data);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple_Z_get_b(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKEightU16s C2Tuple__u168_u168Z_get_a(LDKC2Tuple__u168_u168Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple__u1632_u1632Z_get_a(LDKC2Tuple__u1632_u1632Z *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple__u168_u168Z* owner_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple__u168_u168Z_get_a(owner_conv).data);
+JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple__u1632_u1632Z* owner_conv = (LDKC2Tuple__u1632_u1632Z*)untag_ptr(owner);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple__u1632_u1632Z_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKEightU16s C2Tuple__u168_u168Z_get_b(LDKC2Tuple__u168_u168Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple__u1632_u1632Z_get_b(LDKC2Tuple__u1632_u1632Z *NONNULL_PTR owner){
        return owner->b;
 }
-JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple__u168_u168Z* owner_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple__u168_u168Z_get_b(owner_conv).data);
+JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple__u1632_u1632Z* owner_conv = (LDKC2Tuple__u1632_u1632Z*)untag_ptr(owner);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple__u1632_u1632Z_get_b(owner_conv).data);
        return ret_arr;
 }
 
-static jclass LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class = NULL;
-static jmethodID LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth = NULL;
-static jclass LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class = NULL;
-static jmethodID LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1EightU16sEightU16sZZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_EightU16sEightU16sZZ$Some"));
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class != NULL);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth != NULL);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_EightU16sEightU16sZZ$None"));
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class != NULL);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1EightU16sEightU16sZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *obj = (LDKCOption_C2Tuple_EightU16sEightU16sZZ*)untag_ptr(ptr);
+static jclass LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class = NULL;
+static jmethodID LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth = NULL;
+static jclass LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class = NULL;
+static jmethodID LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ$Some"));
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class != NULL);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth != NULL);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ$None"));
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class != NULL);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *obj = (LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some: {
-                       LDKC2Tuple__u168_u168Z* some_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-                       *some_conv = obj->some;
-                       *some_conv = C2Tuple__u168_u168Z_clone(some_conv);
-                       return (*env)->NewObject(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class, LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth, tag_ptr(some_conv, true));
+               case LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some: {
+                       LDKC2Tuple__u1632_u1632Z* some_conv = &obj->some;
+                       // WARNING: we really need to clone here, but no clone is available for LDKC2Tuple__u1632_u1632Z
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth, tag_ptr(some_conv, false));
+               }
+               case LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_f64Z_Some_class = NULL;
+static jmethodID LDKCOption_f64Z_Some_meth = NULL;
+static jclass LDKCOption_f64Z_None_class = NULL;
+static jmethodID LDKCOption_f64Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1f64Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_f64Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_f64Z$Some"));
+       CHECK(LDKCOption_f64Z_Some_class != NULL);
+       LDKCOption_f64Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_f64Z_Some_class, "<init>", "(D)V");
+       CHECK(LDKCOption_f64Z_Some_meth != NULL);
+       LDKCOption_f64Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_f64Z$None"));
+       CHECK(LDKCOption_f64Z_None_class != NULL);
+       LDKCOption_f64Z_None_meth = (*env)->GetMethodID(env, LDKCOption_f64Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_f64Z_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1f64Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_f64Z *obj = (LDKCOption_f64Z*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_f64Z_Some: {
+                       double some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_f64Z_Some_class, LDKCOption_f64Z_Some_meth, some_conv);
                }
-               case LDKCOption_C2Tuple_EightU16sEightU16sZZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class, LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth);
+               case LDKCOption_f64Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_f64Z_None_class, LDKCOption_f64Z_None_meth);
                }
                default: abort();
        }
@@ -4622,93 +4954,75 @@ static inline LDKCVec_C2Tuple_usizeTransactionZZ CVec_C2Tuple_usizeTransactionZZ
        }
        return ret;
 }
-static jclass LDKCOption_BlockHashZ_Some_class = NULL;
-static jmethodID LDKCOption_BlockHashZ_Some_meth = NULL;
-static jclass LDKCOption_BlockHashZ_None_class = NULL;
-static jmethodID LDKCOption_BlockHashZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1BlockHashZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_BlockHashZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BlockHashZ$Some"));
-       CHECK(LDKCOption_BlockHashZ_Some_class != NULL);
-       LDKCOption_BlockHashZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_BlockHashZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_BlockHashZ_Some_meth != NULL);
-       LDKCOption_BlockHashZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BlockHashZ$None"));
-       CHECK(LDKCOption_BlockHashZ_None_class != NULL);
-       LDKCOption_BlockHashZ_None_meth = (*env)->GetMethodID(env, LDKCOption_BlockHashZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_BlockHashZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1BlockHashZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_BlockHashZ *obj = (LDKCOption_BlockHashZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_BlockHashZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_BlockHashZ_Some_class, LDKCOption_BlockHashZ_Some_meth, some_arr);
-               }
-               case LDKCOption_BlockHashZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_BlockHashZ_None_class, LDKCOption_BlockHashZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline struct LDKThirtyTwoBytes C2Tuple_TxidCOption_BlockHashZZ_get_a(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* owner_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_TxidCOption_BlockHashZZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKCOption_BlockHashZ C2Tuple_TxidCOption_BlockHashZZ_get_b(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR owner){
-       return COption_BlockHashZ_clone(&owner->b);
+static inline struct LDKCOption_ThirtyTwoBytesZ C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR owner){
+       return COption_ThirtyTwoBytesZ_clone(&owner->b);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* owner_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(owner);
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = C2Tuple_TxidCOption_BlockHashZZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(owner);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ CVec_C2Tuple_TxidCOption_BlockHashZZZ_clone(const LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ *orig) {
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_TxidCOption_BlockHashZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(&orig->data[i]);
        }
        return ret;
 }
+static inline enum LDKChannelMonitorUpdateStatus CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return ChannelMonitorUpdateStatus_clone(&*owner->contents.result);
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* owner_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(owner);
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(owner_conv));
+       return ret_conv;
+}
+
+static inline void CResult_ChannelMonitorUpdateStatusNoneZ_get_err(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* owner_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(owner);
+       CResult_ChannelMonitorUpdateStatusNoneZ_get_err(owner_conv);
+}
+
 static jclass LDKMonitorEvent_HTLCEvent_class = NULL;
 static jmethodID LDKMonitorEvent_HTLCEvent_meth = NULL;
-static jclass LDKMonitorEvent_CommitmentTxConfirmed_class = NULL;
-static jmethodID LDKMonitorEvent_CommitmentTxConfirmed_meth = NULL;
+static jclass LDKMonitorEvent_HolderForceClosed_class = NULL;
+static jmethodID LDKMonitorEvent_HolderForceClosed_meth = NULL;
 static jclass LDKMonitorEvent_Completed_class = NULL;
 static jmethodID LDKMonitorEvent_Completed_meth = NULL;
-static jclass LDKMonitorEvent_UpdateFailed_class = NULL;
-static jmethodID LDKMonitorEvent_UpdateFailed_meth = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKMonitorEvent_init (JNIEnv *env, jclass clz) {
        LDKMonitorEvent_HTLCEvent_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$HTLCEvent"));
        CHECK(LDKMonitorEvent_HTLCEvent_class != NULL);
        LDKMonitorEvent_HTLCEvent_meth = (*env)->GetMethodID(env, LDKMonitorEvent_HTLCEvent_class, "<init>", "(J)V");
        CHECK(LDKMonitorEvent_HTLCEvent_meth != NULL);
-       LDKMonitorEvent_CommitmentTxConfirmed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$CommitmentTxConfirmed"));
-       CHECK(LDKMonitorEvent_CommitmentTxConfirmed_class != NULL);
-       LDKMonitorEvent_CommitmentTxConfirmed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_CommitmentTxConfirmed_class, "<init>", "(J)V");
-       CHECK(LDKMonitorEvent_CommitmentTxConfirmed_meth != NULL);
+       LDKMonitorEvent_HolderForceClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$HolderForceClosed"));
+       CHECK(LDKMonitorEvent_HolderForceClosed_class != NULL);
+       LDKMonitorEvent_HolderForceClosed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_HolderForceClosed_class, "<init>", "(J)V");
+       CHECK(LDKMonitorEvent_HolderForceClosed_meth != NULL);
        LDKMonitorEvent_Completed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$Completed"));
        CHECK(LDKMonitorEvent_Completed_class != NULL);
        LDKMonitorEvent_Completed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_Completed_class, "<init>", "(JJ)V");
        CHECK(LDKMonitorEvent_Completed_meth != NULL);
-       LDKMonitorEvent_UpdateFailed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$UpdateFailed"));
-       CHECK(LDKMonitorEvent_UpdateFailed_class != NULL);
-       LDKMonitorEvent_UpdateFailed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_UpdateFailed_class, "<init>", "(J)V");
-       CHECK(LDKMonitorEvent_UpdateFailed_meth != NULL);
 }
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
        LDKMonitorEvent *obj = (LDKMonitorEvent*)untag_ptr(ptr);
@@ -4720,12 +5034,12 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        htlc_event_ref = tag_ptr(htlc_event_var.inner, false);
                        return (*env)->NewObject(env, LDKMonitorEvent_HTLCEvent_class, LDKMonitorEvent_HTLCEvent_meth, htlc_event_ref);
                }
-               case LDKMonitorEvent_CommitmentTxConfirmed: {
-                       LDKOutPoint commitment_tx_confirmed_var = obj->commitment_tx_confirmed;
-                       int64_t commitment_tx_confirmed_ref = 0;
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_confirmed_var);
-                       commitment_tx_confirmed_ref = tag_ptr(commitment_tx_confirmed_var.inner, false);
-                       return (*env)->NewObject(env, LDKMonitorEvent_CommitmentTxConfirmed_class, LDKMonitorEvent_CommitmentTxConfirmed_meth, commitment_tx_confirmed_ref);
+               case LDKMonitorEvent_HolderForceClosed: {
+                       LDKOutPoint holder_force_closed_var = obj->holder_force_closed;
+                       int64_t holder_force_closed_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_force_closed_var);
+                       holder_force_closed_ref = tag_ptr(holder_force_closed_var.inner, false);
+                       return (*env)->NewObject(env, LDKMonitorEvent_HolderForceClosed_class, LDKMonitorEvent_HolderForceClosed_meth, holder_force_closed_ref);
                }
                case LDKMonitorEvent_Completed: {
                        LDKOutPoint funding_txo_var = obj->completed.funding_txo;
@@ -4735,13 +5049,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        int64_t monitor_update_id_conv = obj->completed.monitor_update_id;
                        return (*env)->NewObject(env, LDKMonitorEvent_Completed_class, LDKMonitorEvent_Completed_meth, funding_txo_ref, monitor_update_id_conv);
                }
-               case LDKMonitorEvent_UpdateFailed: {
-                       LDKOutPoint update_failed_var = obj->update_failed;
-                       int64_t update_failed_ref = 0;
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_failed_var);
-                       update_failed_ref = tag_ptr(update_failed_var.inner, false);
-                       return (*env)->NewObject(env, LDKMonitorEvent_UpdateFailed_class, LDKMonitorEvent_UpdateFailed_meth, update_failed_ref);
-               }
                default: abort();
        }
 }
@@ -4985,13 +5292,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTypeFeature
        return ret_ref;
 }
 
-static inline LDKCVec_ChainHashZ CVec_ChainHashZ_clone(const LDKCVec_ChainHashZ *orig) {
-       LDKCVec_ChainHashZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_ChainHashZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static inline struct LDKOffer CResult_OfferBolt12ParseErrorZ_get_ok(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKOffer ret = *owner->contents.result;
        ret.is_owned = false;
@@ -5020,24 +5320,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseEr
        return ret_ref;
 }
 
-static inline struct LDKPublicKey CResult_PublicKeyErrorZ_get_ok(LDKCResult_PublicKeyErrorZ *NONNULL_PTR owner){
+static inline struct LDKPublicKey CResult_PublicKeySecp256k1ErrorZ_get_ok(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PublicKeyErrorZ* owner_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, CResult_PublicKeyErrorZ_get_ok(owner_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, CResult_PublicKeySecp256k1ErrorZ_get_ok(owner_conv).compressed_form);
        return ret_arr;
 }
 
-static inline enum LDKSecp256k1Error CResult_PublicKeyErrorZ_get_err(LDKCResult_PublicKeyErrorZ *NONNULL_PTR owner){
+static inline enum LDKSecp256k1Error CResult_PublicKeySecp256k1ErrorZ_get_err(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PublicKeyErrorZ* owner_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PublicKeyErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PublicKeySecp256k1ErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -5923,7 +6223,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                case LDKMessageSendEvent_SendTxAbort: {
                        int8_tArray node_id_arr = (*env)->NewByteArray(env, 33);
                        (*env)->SetByteArrayRegion(env, node_id_arr, 0, 33, obj->send_tx_abort.node_id.compressed_form);
-                       LDKTxAddInput msg_var = obj->send_tx_abort.msg;
+                       LDKTxAbort msg_var = obj->send_tx_abort.msg;
                        int64_t msg_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = tag_ptr(msg_var.inner, false);
@@ -6169,86 +6469,86 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        return ret_ref;
 }
 
-static jclass LDKNetAddress_IPv4_class = NULL;
-static jmethodID LDKNetAddress_IPv4_meth = NULL;
-static jclass LDKNetAddress_IPv6_class = NULL;
-static jmethodID LDKNetAddress_IPv6_meth = NULL;
-static jclass LDKNetAddress_OnionV2_class = NULL;
-static jmethodID LDKNetAddress_OnionV2_meth = NULL;
-static jclass LDKNetAddress_OnionV3_class = NULL;
-static jmethodID LDKNetAddress_OnionV3_meth = NULL;
-static jclass LDKNetAddress_Hostname_class = NULL;
-static jmethodID LDKNetAddress_Hostname_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKNetAddress_init (JNIEnv *env, jclass clz) {
-       LDKNetAddress_IPv4_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$IPv4"));
-       CHECK(LDKNetAddress_IPv4_class != NULL);
-       LDKNetAddress_IPv4_meth = (*env)->GetMethodID(env, LDKNetAddress_IPv4_class, "<init>", "([BS)V");
-       CHECK(LDKNetAddress_IPv4_meth != NULL);
-       LDKNetAddress_IPv6_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$IPv6"));
-       CHECK(LDKNetAddress_IPv6_class != NULL);
-       LDKNetAddress_IPv6_meth = (*env)->GetMethodID(env, LDKNetAddress_IPv6_class, "<init>", "([BS)V");
-       CHECK(LDKNetAddress_IPv6_meth != NULL);
-       LDKNetAddress_OnionV2_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$OnionV2"));
-       CHECK(LDKNetAddress_OnionV2_class != NULL);
-       LDKNetAddress_OnionV2_meth = (*env)->GetMethodID(env, LDKNetAddress_OnionV2_class, "<init>", "([B)V");
-       CHECK(LDKNetAddress_OnionV2_meth != NULL);
-       LDKNetAddress_OnionV3_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$OnionV3"));
-       CHECK(LDKNetAddress_OnionV3_class != NULL);
-       LDKNetAddress_OnionV3_meth = (*env)->GetMethodID(env, LDKNetAddress_OnionV3_class, "<init>", "([BSBS)V");
-       CHECK(LDKNetAddress_OnionV3_meth != NULL);
-       LDKNetAddress_Hostname_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$Hostname"));
-       CHECK(LDKNetAddress_Hostname_class != NULL);
-       LDKNetAddress_Hostname_meth = (*env)->GetMethodID(env, LDKNetAddress_Hostname_class, "<init>", "(JS)V");
-       CHECK(LDKNetAddress_Hostname_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetAddress_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKNetAddress *obj = (LDKNetAddress*)untag_ptr(ptr);
+static jclass LDKSocketAddress_TcpIpV4_class = NULL;
+static jmethodID LDKSocketAddress_TcpIpV4_meth = NULL;
+static jclass LDKSocketAddress_TcpIpV6_class = NULL;
+static jmethodID LDKSocketAddress_TcpIpV6_meth = NULL;
+static jclass LDKSocketAddress_OnionV2_class = NULL;
+static jmethodID LDKSocketAddress_OnionV2_meth = NULL;
+static jclass LDKSocketAddress_OnionV3_class = NULL;
+static jmethodID LDKSocketAddress_OnionV3_meth = NULL;
+static jclass LDKSocketAddress_Hostname_class = NULL;
+static jmethodID LDKSocketAddress_Hostname_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKSocketAddress_init (JNIEnv *env, jclass clz) {
+       LDKSocketAddress_TcpIpV4_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$TcpIpV4"));
+       CHECK(LDKSocketAddress_TcpIpV4_class != NULL);
+       LDKSocketAddress_TcpIpV4_meth = (*env)->GetMethodID(env, LDKSocketAddress_TcpIpV4_class, "<init>", "([BS)V");
+       CHECK(LDKSocketAddress_TcpIpV4_meth != NULL);
+       LDKSocketAddress_TcpIpV6_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$TcpIpV6"));
+       CHECK(LDKSocketAddress_TcpIpV6_class != NULL);
+       LDKSocketAddress_TcpIpV6_meth = (*env)->GetMethodID(env, LDKSocketAddress_TcpIpV6_class, "<init>", "([BS)V");
+       CHECK(LDKSocketAddress_TcpIpV6_meth != NULL);
+       LDKSocketAddress_OnionV2_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$OnionV2"));
+       CHECK(LDKSocketAddress_OnionV2_class != NULL);
+       LDKSocketAddress_OnionV2_meth = (*env)->GetMethodID(env, LDKSocketAddress_OnionV2_class, "<init>", "([B)V");
+       CHECK(LDKSocketAddress_OnionV2_meth != NULL);
+       LDKSocketAddress_OnionV3_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$OnionV3"));
+       CHECK(LDKSocketAddress_OnionV3_class != NULL);
+       LDKSocketAddress_OnionV3_meth = (*env)->GetMethodID(env, LDKSocketAddress_OnionV3_class, "<init>", "([BSBS)V");
+       CHECK(LDKSocketAddress_OnionV3_meth != NULL);
+       LDKSocketAddress_Hostname_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$Hostname"));
+       CHECK(LDKSocketAddress_Hostname_class != NULL);
+       LDKSocketAddress_Hostname_meth = (*env)->GetMethodID(env, LDKSocketAddress_Hostname_class, "<init>", "(JS)V");
+       CHECK(LDKSocketAddress_Hostname_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSocketAddress_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKSocketAddress *obj = (LDKSocketAddress*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKNetAddress_IPv4: {
+               case LDKSocketAddress_TcpIpV4: {
                        int8_tArray addr_arr = (*env)->NewByteArray(env, 4);
-                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 4, obj->i_pv4.addr.data);
-                       int16_t port_conv = obj->i_pv4.port;
-                       return (*env)->NewObject(env, LDKNetAddress_IPv4_class, LDKNetAddress_IPv4_meth, addr_arr, port_conv);
+                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 4, obj->tcp_ip_v4.addr.data);
+                       int16_t port_conv = obj->tcp_ip_v4.port;
+                       return (*env)->NewObject(env, LDKSocketAddress_TcpIpV4_class, LDKSocketAddress_TcpIpV4_meth, addr_arr, port_conv);
                }
-               case LDKNetAddress_IPv6: {
+               case LDKSocketAddress_TcpIpV6: {
                        int8_tArray addr_arr = (*env)->NewByteArray(env, 16);
-                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 16, obj->i_pv6.addr.data);
-                       int16_t port_conv = obj->i_pv6.port;
-                       return (*env)->NewObject(env, LDKNetAddress_IPv6_class, LDKNetAddress_IPv6_meth, addr_arr, port_conv);
+                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 16, obj->tcp_ip_v6.addr.data);
+                       int16_t port_conv = obj->tcp_ip_v6.port;
+                       return (*env)->NewObject(env, LDKSocketAddress_TcpIpV6_class, LDKSocketAddress_TcpIpV6_meth, addr_arr, port_conv);
                }
-               case LDKNetAddress_OnionV2: {
+               case LDKSocketAddress_OnionV2: {
                        int8_tArray onion_v2_arr = (*env)->NewByteArray(env, 12);
                        (*env)->SetByteArrayRegion(env, onion_v2_arr, 0, 12, obj->onion_v2.data);
-                       return (*env)->NewObject(env, LDKNetAddress_OnionV2_class, LDKNetAddress_OnionV2_meth, onion_v2_arr);
+                       return (*env)->NewObject(env, LDKSocketAddress_OnionV2_class, LDKSocketAddress_OnionV2_meth, onion_v2_arr);
                }
-               case LDKNetAddress_OnionV3: {
+               case LDKSocketAddress_OnionV3: {
                        int8_tArray ed25519_pubkey_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, ed25519_pubkey_arr, 0, 32, obj->onion_v3.ed25519_pubkey.data);
                        int16_t checksum_conv = obj->onion_v3.checksum;
                        int8_t version_conv = obj->onion_v3.version;
                        int16_t port_conv = obj->onion_v3.port;
-                       return (*env)->NewObject(env, LDKNetAddress_OnionV3_class, LDKNetAddress_OnionV3_meth, ed25519_pubkey_arr, checksum_conv, version_conv, port_conv);
+                       return (*env)->NewObject(env, LDKSocketAddress_OnionV3_class, LDKSocketAddress_OnionV3_meth, ed25519_pubkey_arr, checksum_conv, version_conv, port_conv);
                }
-               case LDKNetAddress_Hostname: {
+               case LDKSocketAddress_Hostname: {
                        LDKHostname hostname_var = obj->hostname.hostname;
                        int64_t hostname_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(hostname_var);
                        hostname_ref = tag_ptr(hostname_var.inner, false);
                        int16_t port_conv = obj->hostname.port;
-                       return (*env)->NewObject(env, LDKNetAddress_Hostname_class, LDKNetAddress_Hostname_meth, hostname_ref, port_conv);
+                       return (*env)->NewObject(env, LDKSocketAddress_Hostname_class, LDKSocketAddress_Hostname_meth, hostname_ref, port_conv);
                }
                default: abort();
        }
 }
-static inline LDKCVec_NetAddressZ CVec_NetAddressZ_clone(const LDKCVec_NetAddressZ *orig) {
-       LDKCVec_NetAddressZ ret = { .data = MALLOC(sizeof(LDKNetAddress) * orig->datalen, "LDKCVec_NetAddressZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_SocketAddressZ CVec_SocketAddressZ_clone(const LDKCVec_SocketAddressZ *orig) {
+       LDKCVec_SocketAddressZ ret = { .data = MALLOC(sizeof(LDKSocketAddress) * orig->datalen, "LDKCVec_SocketAddressZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = NetAddress_clone(&orig->data[i]);
+               ret.data[i] = SocketAddress_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -6356,73 +6656,95 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode
        return ret_ref;
 }
 
-static jclass LDKCOption_CVec_NetAddressZZ_Some_class = NULL;
-static jmethodID LDKCOption_CVec_NetAddressZZ_Some_meth = NULL;
-static jclass LDKCOption_CVec_NetAddressZZ_None_class = NULL;
-static jmethodID LDKCOption_CVec_NetAddressZZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1NetAddressZZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_NetAddressZZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_NetAddressZZ$Some"));
-       CHECK(LDKCOption_CVec_NetAddressZZ_Some_class != NULL);
-       LDKCOption_CVec_NetAddressZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_NetAddressZZ_Some_class, "<init>", "([J)V");
-       CHECK(LDKCOption_CVec_NetAddressZZ_Some_meth != NULL);
-       LDKCOption_CVec_NetAddressZZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_NetAddressZZ$None"));
-       CHECK(LDKCOption_CVec_NetAddressZZ_None_class != NULL);
-       LDKCOption_CVec_NetAddressZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_NetAddressZZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_CVec_NetAddressZZ_None_meth != NULL);
+static jclass LDKCOption_CVec_SocketAddressZZ_Some_class = NULL;
+static jmethodID LDKCOption_CVec_SocketAddressZZ_Some_meth = NULL;
+static jclass LDKCOption_CVec_SocketAddressZZ_None_class = NULL;
+static jmethodID LDKCOption_CVec_SocketAddressZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1SocketAddressZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_SocketAddressZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_SocketAddressZZ$Some"));
+       CHECK(LDKCOption_CVec_SocketAddressZZ_Some_class != NULL);
+       LDKCOption_CVec_SocketAddressZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_SocketAddressZZ_Some_class, "<init>", "([J)V");
+       CHECK(LDKCOption_CVec_SocketAddressZZ_Some_meth != NULL);
+       LDKCOption_CVec_SocketAddressZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_SocketAddressZZ$None"));
+       CHECK(LDKCOption_CVec_SocketAddressZZ_None_class != NULL);
+       LDKCOption_CVec_SocketAddressZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_SocketAddressZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_CVec_SocketAddressZZ_None_meth != NULL);
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1NetAddressZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_CVec_NetAddressZZ *obj = (LDKCOption_CVec_NetAddressZZ*)untag_ptr(ptr);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1SocketAddressZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_CVec_SocketAddressZZ *obj = (LDKCOption_CVec_SocketAddressZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_CVec_NetAddressZZ_Some: {
-                       LDKCVec_NetAddressZ some_var = obj->some;
+               case LDKCOption_CVec_SocketAddressZZ_Some: {
+                       LDKCVec_SocketAddressZ some_var = obj->some;
                        int64_tArray some_arr = NULL;
                        some_arr = (*env)->NewLongArray(env, some_var.datalen);
                        int64_t *some_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, some_arr, NULL);
-                       for (size_t m = 0; m < some_var.datalen; m++) {
-                               int64_t some_conv_12_ref = tag_ptr(&some_var.data[m], false);
-                               some_arr_ptr[m] = some_conv_12_ref;
+                       for (size_t p = 0; p < some_var.datalen; p++) {
+                               int64_t some_conv_15_ref = tag_ptr(&some_var.data[p], false);
+                               some_arr_ptr[p] = some_conv_15_ref;
                        }
                        (*env)->ReleasePrimitiveArrayCritical(env, some_arr, some_arr_ptr, 0);
-                       return (*env)->NewObject(env, LDKCOption_CVec_NetAddressZZ_Some_class, LDKCOption_CVec_NetAddressZZ_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_CVec_SocketAddressZZ_Some_class, LDKCOption_CVec_SocketAddressZZ_Some_meth, some_arr);
                }
-               case LDKCOption_CVec_NetAddressZZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_CVec_NetAddressZZ_None_class, LDKCOption_CVec_NetAddressZZ_None_meth);
+               case LDKCOption_CVec_SocketAddressZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_CVec_SocketAddressZZ_None_class, LDKCOption_CVec_SocketAddressZZ_None_meth);
                }
                default: abort();
        }
 }
-static jclass LDKCOption_PaymentPreimageZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentPreimageZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentPreimageZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentPreimageZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentPreimageZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentPreimageZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentPreimageZ$Some"));
-       CHECK(LDKCOption_PaymentPreimageZ_Some_class != NULL);
-       LDKCOption_PaymentPreimageZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentPreimageZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentPreimageZ_Some_meth != NULL);
-       LDKCOption_PaymentPreimageZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentPreimageZ$None"));
-       CHECK(LDKCOption_PaymentPreimageZ_None_class != NULL);
-       LDKCOption_PaymentPreimageZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentPreimageZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentPreimageZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentPreimageZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentPreimageZ *obj = (LDKCOption_PaymentPreimageZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentPreimageZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentPreimageZ_Some_class, LDKCOption_PaymentPreimageZ_Some_meth, some_arr);
-               }
-               case LDKCOption_PaymentPreimageZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentPreimageZ_None_class, LDKCOption_PaymentPreimageZ_None_meth);
-               }
-               default: abort();
-       }
+static inline struct LDKChannelDerivationParameters CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR owner){
+       LDKChannelDerivationParameters ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* owner_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(owner);
+       LDKChannelDerivationParameters ret_var = CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ChannelDerivationParametersDecodeErrorZ_get_err(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* owner_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ChannelDerivationParametersDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKHTLCDescriptor CResult_HTLCDescriptorDecodeErrorZ_get_ok(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner){
+       LDKHTLCDescriptor ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* owner_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(owner);
+       LDKHTLCDescriptor ret_var = CResult_HTLCDescriptorDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_HTLCDescriptorDecodeErrorZ_get_err(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* owner_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_HTLCDescriptorDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline LDKCVec_HTLCOutputInCommitmentZ CVec_HTLCOutputInCommitmentZ_clone(const LDKCVec_HTLCOutputInCommitmentZ *orig) {
        LDKCVec_HTLCOutputInCommitmentZ ret = { .data = MALLOC(sizeof(LDKHTLCOutputInCommitment) * orig->datalen, "LDKCVec_HTLCOutputInCommitmentZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6534,31 +6856,51 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1UtxoZNoneZ_1get
        CResult_CVec_UtxoZNoneZ_get_err(owner_conv);
 }
 
-static jclass LDKCOption_u16Z_Some_class = NULL;
-static jmethodID LDKCOption_u16Z_Some_meth = NULL;
-static jclass LDKCOption_u16Z_None_class = NULL;
-static jmethodID LDKCOption_u16Z_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u16Z_init (JNIEnv *env, jclass clz) {
-       LDKCOption_u16Z_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$Some"));
-       CHECK(LDKCOption_u16Z_Some_class != NULL);
-       LDKCOption_u16Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_Some_class, "<init>", "(S)V");
-       CHECK(LDKCOption_u16Z_Some_meth != NULL);
-       LDKCOption_u16Z_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$None"));
-       CHECK(LDKCOption_u16Z_None_class != NULL);
-       LDKCOption_u16Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_None_class, "<init>", "()V");
-       CHECK(LDKCOption_u16Z_None_meth != NULL);
+static inline uint64_t C2Tuple_u64u16Z_get_a(LDKC2Tuple_u64u16Z *NONNULL_PTR owner){
+       return owner->a;
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_u16Z *obj = (LDKCOption_u16Z*)untag_ptr(ptr);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64u16Z* owner_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(owner);
+       int64_t ret_conv = C2Tuple_u64u16Z_get_a(owner_conv);
+       return ret_conv;
+}
+
+static inline uint16_t C2Tuple_u64u16Z_get_b(LDKC2Tuple_u64u16Z *NONNULL_PTR owner){
+       return owner->b;
+}
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64u16Z* owner_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(owner);
+       int16_t ret_conv = C2Tuple_u64u16Z_get_b(owner_conv);
+       return ret_conv;
+}
+
+static jclass LDKCOption_C2Tuple_u64u16ZZ_Some_class = NULL;
+static jmethodID LDKCOption_C2Tuple_u64u16ZZ_Some_meth = NULL;
+static jclass LDKCOption_C2Tuple_u64u16ZZ_None_class = NULL;
+static jmethodID LDKCOption_C2Tuple_u64u16ZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1u64u16ZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_u64u16ZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_u64u16ZZ$Some"));
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_Some_class != NULL);
+       LDKCOption_C2Tuple_u64u16ZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_u64u16ZZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_Some_meth != NULL);
+       LDKCOption_C2Tuple_u64u16ZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_u64u16ZZ$None"));
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_None_class != NULL);
+       LDKCOption_C2Tuple_u64u16ZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_u64u16ZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1u64u16ZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_C2Tuple_u64u16ZZ *obj = (LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_u16Z_Some: {
-                       int16_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_u16Z_Some_class, LDKCOption_u16Z_Some_meth, some_conv);
+               case LDKCOption_C2Tuple_u64u16ZZ_Some: {
+                       LDKC2Tuple_u64u16Z* some_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+                       *some_conv = obj->some;
+                       *some_conv = C2Tuple_u64u16Z_clone(some_conv);
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_u64u16ZZ_Some_class, LDKCOption_C2Tuple_u64u16ZZ_Some_meth, tag_ptr(some_conv, true));
                }
-               case LDKCOption_u16Z_None: {
-                       return (*env)->NewObject(env, LDKCOption_u16Z_None_class, LDKCOption_u16Z_None_meth);
+               case LDKCOption_C2Tuple_u64u16ZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_u64u16ZZ_None_class, LDKCOption_C2Tuple_u64u16ZZ_None_meth);
                }
                default: abort();
        }
@@ -6592,59 +6934,31 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ChannelShutdown
                default: abort();
        }
 }
-static jclass LDKCOption_PaymentHashZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentHashZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentHashZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentHashZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentHashZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentHashZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentHashZ$Some"));
-       CHECK(LDKCOption_PaymentHashZ_Some_class != NULL);
-       LDKCOption_PaymentHashZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentHashZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentHashZ_Some_meth != NULL);
-       LDKCOption_PaymentHashZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentHashZ$None"));
-       CHECK(LDKCOption_PaymentHashZ_None_class != NULL);
-       LDKCOption_PaymentHashZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentHashZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentHashZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentHashZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentHashZ *obj = (LDKCOption_PaymentHashZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentHashZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentHashZ_Some_class, LDKCOption_PaymentHashZ_Some_meth, some_arr);
-               }
-               case LDKCOption_PaymentHashZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentHashZ_None_class, LDKCOption_PaymentHashZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline struct LDKThirtyTwoBytes CResult__u832APIErrorZ_get_ok(LDKCResult__u832APIErrorZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesAPIErrorZ_get_ok(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult__u832APIErrorZ* owner_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult__u832APIErrorZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesAPIErrorZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKAPIError CResult__u832APIErrorZ_get_err(LDKCResult__u832APIErrorZ *NONNULL_PTR owner){
+static inline struct LDKAPIError CResult_ThirtyTwoBytesAPIErrorZ_get_err(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return APIError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult__u832APIErrorZ* owner_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(owner);
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
-       *ret_copy = CResult__u832APIErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_ThirtyTwoBytesAPIErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
+static jclass LDKRecentPaymentDetails_AwaitingInvoice_class = NULL;
+static jmethodID LDKRecentPaymentDetails_AwaitingInvoice_meth = NULL;
 static jclass LDKRecentPaymentDetails_Pending_class = NULL;
 static jmethodID LDKRecentPaymentDetails_Pending_meth = NULL;
 static jclass LDKRecentPaymentDetails_Fulfilled_class = NULL;
@@ -6652,39 +6966,55 @@ static jmethodID LDKRecentPaymentDetails_Fulfilled_meth = NULL;
 static jclass LDKRecentPaymentDetails_Abandoned_class = NULL;
 static jmethodID LDKRecentPaymentDetails_Abandoned_meth = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKRecentPaymentDetails_init (JNIEnv *env, jclass clz) {
+       LDKRecentPaymentDetails_AwaitingInvoice_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$AwaitingInvoice"));
+       CHECK(LDKRecentPaymentDetails_AwaitingInvoice_class != NULL);
+       LDKRecentPaymentDetails_AwaitingInvoice_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_AwaitingInvoice_class, "<init>", "([B)V");
+       CHECK(LDKRecentPaymentDetails_AwaitingInvoice_meth != NULL);
        LDKRecentPaymentDetails_Pending_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$Pending"));
        CHECK(LDKRecentPaymentDetails_Pending_class != NULL);
-       LDKRecentPaymentDetails_Pending_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Pending_class, "<init>", "([BJ)V");
+       LDKRecentPaymentDetails_Pending_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Pending_class, "<init>", "([B[BJ)V");
        CHECK(LDKRecentPaymentDetails_Pending_meth != NULL);
        LDKRecentPaymentDetails_Fulfilled_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$Fulfilled"));
        CHECK(LDKRecentPaymentDetails_Fulfilled_class != NULL);
-       LDKRecentPaymentDetails_Fulfilled_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Fulfilled_class, "<init>", "(J)V");
+       LDKRecentPaymentDetails_Fulfilled_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Fulfilled_class, "<init>", "([BJ)V");
        CHECK(LDKRecentPaymentDetails_Fulfilled_meth != NULL);
        LDKRecentPaymentDetails_Abandoned_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$Abandoned"));
        CHECK(LDKRecentPaymentDetails_Abandoned_class != NULL);
-       LDKRecentPaymentDetails_Abandoned_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Abandoned_class, "<init>", "([B)V");
+       LDKRecentPaymentDetails_Abandoned_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Abandoned_class, "<init>", "([B[B)V");
        CHECK(LDKRecentPaymentDetails_Abandoned_meth != NULL);
 }
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRecentPaymentDetails_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
        LDKRecentPaymentDetails *obj = (LDKRecentPaymentDetails*)untag_ptr(ptr);
        switch(obj->tag) {
+               case LDKRecentPaymentDetails_AwaitingInvoice: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->awaiting_invoice.payment_id.data);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_AwaitingInvoice_class, LDKRecentPaymentDetails_AwaitingInvoice_meth, payment_id_arr);
+               }
                case LDKRecentPaymentDetails_Pending: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->pending.payment_id.data);
                        int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->pending.payment_hash.data);
                        int64_t total_msat_conv = obj->pending.total_msat;
-                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Pending_class, LDKRecentPaymentDetails_Pending_meth, payment_hash_arr, total_msat_conv);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Pending_class, LDKRecentPaymentDetails_Pending_meth, payment_id_arr, payment_hash_arr, total_msat_conv);
                }
                case LDKRecentPaymentDetails_Fulfilled: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->fulfilled.payment_id.data);
                        int64_t payment_hash_ref = tag_ptr(&obj->fulfilled.payment_hash, false);
-                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Fulfilled_class, LDKRecentPaymentDetails_Fulfilled_meth, payment_hash_ref);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Fulfilled_class, LDKRecentPaymentDetails_Fulfilled_meth, payment_id_arr, payment_hash_ref);
                }
                case LDKRecentPaymentDetails_Abandoned: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->abandoned.payment_id.data);
                        int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->abandoned.payment_hash.data);
-                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Abandoned_class, LDKRecentPaymentDetails_Abandoned_meth, payment_hash_arr);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Abandoned_class, LDKRecentPaymentDetails_Abandoned_meth, payment_id_arr, payment_hash_arr);
                }
                default: abort();
        }
@@ -6832,221 +7162,208 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1NoneRetryableSendFa
        return ret_conv;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentHashPaymentSendFailureZ_get_ok(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* owner_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentHashPaymentSendFailureZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKPaymentSendFailure CResult_PaymentHashPaymentSendFailureZ_get_err(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKPaymentSendFailure CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return PaymentSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* owner_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(owner);
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = CResult_PaymentHashPaymentSendFailureZ_get_err(owner_conv);
+       *ret_copy = CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentHashRetryableSendFailureZ_get_ok(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* owner_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentHashRetryableSendFailureZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline enum LDKRetryableSendFailure CResult_PaymentHashRetryableSendFailureZ_get_err(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR owner){
+static inline enum LDKRetryableSendFailure CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return RetryableSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* owner_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(owner);
-       jclass ret_conv = LDKRetryableSendFailure_to_java(env, CResult_PaymentHashRetryableSendFailureZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(owner);
+       jclass ret_conv = LDKRetryableSendFailure_to_java(env, CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(owner_conv));
        return ret_conv;
 }
 
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_a(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentIdZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_b(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->b);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentIdZ_get_b(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKC2Tuple_PaymentHashPaymentIdZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_PaymentHashPaymentIdZ_clone(&*owner->contents.result);
+       return C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(owner);
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKPaymentSendFailure CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKPaymentSendFailure CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return PaymentSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(owner);
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(owner_conv);
+       *ret_copy = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline LDKCVec_ThirtyTwoBytesZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_ThirtyTwoBytesZ *orig) {
-       LDKCVec_ThirtyTwoBytesZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_ThirtyTwoBytesZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(&orig->data[i]);
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_a(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR owner){
-       return ThirtyTwoBytes_clone(&owner->a);
-}
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentSecretZ_get_a(owner_conv).data);
-       return ret_arr;
-}
-
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_b(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR owner){
-       return ThirtyTwoBytes_clone(&owner->b);
-}
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentSecretZ_get_b(owner_conv).data);
-       return ret_arr;
+static jclass LDKProbeSendFailure_RouteNotFound_class = NULL;
+static jmethodID LDKProbeSendFailure_RouteNotFound_meth = NULL;
+static jclass LDKProbeSendFailure_SendingFailed_class = NULL;
+static jmethodID LDKProbeSendFailure_SendingFailed_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKProbeSendFailure_init (JNIEnv *env, jclass clz) {
+       LDKProbeSendFailure_RouteNotFound_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbeSendFailure$RouteNotFound"));
+       CHECK(LDKProbeSendFailure_RouteNotFound_class != NULL);
+       LDKProbeSendFailure_RouteNotFound_meth = (*env)->GetMethodID(env, LDKProbeSendFailure_RouteNotFound_class, "<init>", "()V");
+       CHECK(LDKProbeSendFailure_RouteNotFound_meth != NULL);
+       LDKProbeSendFailure_SendingFailed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbeSendFailure$SendingFailed"));
+       CHECK(LDKProbeSendFailure_SendingFailed_class != NULL);
+       LDKProbeSendFailure_SendingFailed_meth = (*env)->GetMethodID(env, LDKProbeSendFailure_SendingFailed_class, "<init>", "(J)V");
+       CHECK(LDKProbeSendFailure_SendingFailed_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKProbeSendFailure_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKProbeSendFailure *obj = (LDKProbeSendFailure*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKProbeSendFailure_RouteNotFound: {
+                       return (*env)->NewObject(env, LDKProbeSendFailure_RouteNotFound_class, LDKProbeSendFailure_RouteNotFound_meth);
+               }
+               case LDKProbeSendFailure_SendingFailed: {
+                       int64_t sending_failed_ref = tag_ptr(&obj->sending_failed, false);
+                       return (*env)->NewObject(env, LDKProbeSendFailure_SendingFailed_class, LDKProbeSendFailure_SendingFailed_meth, sending_failed_ref);
+               }
+               default: abort();
+       }
 }
-
-static inline struct LDKC2Tuple_PaymentHashPaymentSecretZ CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_PaymentHashPaymentSecretZ_clone(&*owner->contents.result);
+       return CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(owner_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ ret_var = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(owner_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 o = 0; o < ret_var.datalen; o++) {
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+               *ret_conv_40_conv = ret_var.data[o];
+               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-static inline void CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR owner){
+static inline struct LDKProbeSendFailure CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return *owner->contents.err;
+       return ProbeSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(owner);
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentSecretNoneZ_get_ok(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return ThirtyTwoBytes_clone(&*owner->contents.result);
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR owner){
+       return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentSecretNoneZ* owner_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentSecretNoneZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline void CResult_PaymentSecretNoneZ_get_err(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
+static inline struct LDKPublicKey C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR owner){
+       return owner->b;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentSecretNoneZ* owner_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(owner);
-       CResult_PaymentSecretNoneZ_get_err(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(owner_conv).compressed_form);
+       return ret_arr;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentPreimageAPIErrorZ_get_ok(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR owner){
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return ThirtyTwoBytes_clone(&*owner->contents.result);
+       return C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentPreimageAPIErrorZ* owner_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentPreimageAPIErrorZ_get_ok(owner_conv).data);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKAPIError CResult_PaymentPreimageAPIErrorZ_get_err(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR owner){
+static inline void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return APIError_clone(&*owner->contents.err);
+       return *owner->contents.err;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentPreimageAPIErrorZ* owner_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(owner);
-       LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
-       *ret_copy = CResult_PaymentPreimageAPIErrorZ_get_err(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err(owner_conv);
 }
 
-static jclass LDKCOption_CVec_ChainHashZZ_Some_class = NULL;
-static jmethodID LDKCOption_CVec_ChainHashZZ_Some_meth = NULL;
-static jclass LDKCOption_CVec_ChainHashZZ_None_class = NULL;
-static jmethodID LDKCOption_CVec_ChainHashZZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1ChainHashZZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_ChainHashZZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ChainHashZZ$Some"));
-       CHECK(LDKCOption_CVec_ChainHashZZ_Some_class != NULL);
-       LDKCOption_CVec_ChainHashZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ChainHashZZ_Some_class, "<init>", "([[B)V");
-       CHECK(LDKCOption_CVec_ChainHashZZ_Some_meth != NULL);
-       LDKCOption_CVec_ChainHashZZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ChainHashZZ$None"));
-       CHECK(LDKCOption_CVec_ChainHashZZ_None_class != NULL);
-       LDKCOption_CVec_ChainHashZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ChainHashZZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_CVec_ChainHashZZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1ChainHashZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_CVec_ChainHashZZ *obj = (LDKCOption_CVec_ChainHashZZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_CVec_ChainHashZZ_Some: {
-                       LDKCVec_ChainHashZ some_var = obj->some;
-                       jobjectArray some_arr = NULL;
-                       some_arr = (*env)->NewObjectArray(env, some_var.datalen, arr_of_B_clz, NULL);
-                       ;
-                       for (size_t i = 0; i < some_var.datalen; i++) {
-                               int8_tArray some_conv_8_arr = (*env)->NewByteArray(env, 32);
-                               (*env)->SetByteArrayRegion(env, some_conv_8_arr, 0, 32, some_var.data[i].data);
-                               (*env)->SetObjectArrayElement(env, some_arr, i, some_conv_8_arr);
-                       }
-                       
-                       return (*env)->NewObject(env, LDKCOption_CVec_ChainHashZZ_Some_class, LDKCOption_CVec_ChainHashZZ_Some_meth, some_arr);
-               }
-               case LDKCOption_CVec_ChainHashZZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_CVec_ChainHashZZ_None_class, LDKCOption_CVec_ChainHashZZ_None_meth);
-               }
-               default: abort();
-       }
-}
 static inline struct LDKCounterpartyForwardingInfo CResult_CounterpartyForwardingInfoDecodeErrorZ_get_ok(LDKCResult_CounterpartyForwardingInfoDecodeErrorZ *NONNULL_PTR owner){
        LDKCounterpartyForwardingInfo ret = *owner->contents.result;
        ret.is_owned = false;
@@ -7205,7 +7522,7 @@ static void LDKWatch_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKChannelMonitorUpdateStatus watch_channel_LDKWatch_jcall(const void* this_arg, LDKOutPoint funding_txo, LDKChannelMonitor monitor) {
+LDKCResult_ChannelMonitorUpdateStatusNoneZ watch_channel_LDKWatch_jcall(const void* this_arg, LDKOutPoint funding_txo, LDKChannelMonitor monitor) {
        LDKWatch_JCalls *j_calls = (LDKWatch_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -7224,12 +7541,15 @@ LDKChannelMonitorUpdateStatus watch_channel_LDKWatch_jcall(const void* this_arg,
        monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
        CHECK(obj != NULL);
-       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->watch_channel_meth, funding_txo_ref, monitor_ref);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->watch_channel_meth, funding_txo_ref, monitor_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
                (*env)->FatalError(env, "A call to watch_channel in LDKWatch from rust threw an exception.");
        }
-       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ ret_conv = *(LDKCResult_ChannelMonitorUpdateStatusNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -7314,7 +7634,7 @@ static inline LDKWatch LDKWatch_init (JNIEnv *env, jclass clz, jobject o) {
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->watch_channel_meth = (*env)->GetMethodID(env, c, "watch_channel", "(JJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       calls->watch_channel_meth = (*env)->GetMethodID(env, c, "watch_channel", "(JJ)J");
        CHECK(calls->watch_channel_meth != NULL);
        calls->update_channel_meth = (*env)->GetMethodID(env, c, "update_channel", "(JJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
        CHECK(calls->update_channel_meth != NULL);
@@ -7335,7 +7655,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKWatch_1new(JNIEnv *env,
        *res_ptr = LDKWatch_init(env, clz, o);
        return tag_ptr(res_ptr, true);
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t funding_txo, int64_t monitor) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t funding_txo, int64_t monitor) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKWatch* this_arg_conv = (LDKWatch*)this_arg_ptr;
@@ -7349,8 +7669,9 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEnv
        monitor_conv.is_owned = ptr_is_owned(monitor);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
        monitor_conv = ChannelMonitor_clone(&monitor_conv);
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv));
-       return ret_conv;
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Watch_1update_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t funding_txo, int64_t update) {
@@ -7633,6 +7954,8 @@ typedef struct LDKNodeSigner_JCalls {
        jmethodID get_node_id_meth;
        jmethodID ecdh_meth;
        jmethodID sign_invoice_meth;
+       jmethodID sign_bolt12_invoice_request_meth;
+       jmethodID sign_bolt12_invoice_meth;
        jmethodID sign_gossip_message_meth;
 } LDKNodeSigner_JCalls;
 static void LDKNodeSigner_JCalls_free(void* this_arg) {
@@ -7702,7 +8025,7 @@ LDKCResult_PublicKeyNoneZ get_node_id_LDKNodeSigner_jcall(const void* this_arg,
        }
        return ret_conv;
 }
-LDKCResult_SharedSecretNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKRecipient recipient, LDKPublicKey other_key, LDKCOption_ScalarZ tweak) {
+LDKCResult_ThirtyTwoBytesNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKRecipient recipient, LDKPublicKey other_key, LDKCOption_BigEndianScalarZ tweak) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -7714,7 +8037,7 @@ LDKCResult_SharedSecretNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKR
        jclass recipient_conv = LDKRecipient_to_java(env, recipient);
        int8_tArray other_key_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, other_key_arr, 0, 33, other_key.compressed_form);
-       LDKCOption_ScalarZ *tweak_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
+       LDKCOption_BigEndianScalarZ *tweak_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
        *tweak_copy = tweak;
        int64_t tweak_ref = tag_ptr(tweak_copy, true);
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
@@ -7726,7 +8049,7 @@ LDKCResult_SharedSecretNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKR
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SharedSecretNoneZ ret_conv = *(LDKCResult_SharedSecretNoneZ*)(ret_ptr);
+       LDKCResult_ThirtyTwoBytesNoneZ ret_conv = *(LDKCResult_ThirtyTwoBytesNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -7772,7 +8095,67 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKNodeSigner_jcall(const void
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const void* this_arg, LDKUnsignedGossipMessage msg) {
+LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_request_LDKNodeSigner_jcall(const void* this_arg, const LDKUnsignedInvoiceRequest * invoice_request) {
+       LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKUnsignedInvoiceRequest invoice_request_var = *invoice_request;
+       int64_t invoice_request_ref = 0;
+       // WARNING: we may need a move here but no clone is available for LDKUnsignedInvoiceRequest
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_var);
+       invoice_request_ref = tag_ptr(invoice_request_var.inner, invoice_request_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->sign_bolt12_invoice_request_meth, invoice_request_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to sign_bolt12_invoice_request in LDKNodeSigner from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_LDKNodeSigner_jcall(const void* this_arg, const LDKUnsignedBolt12Invoice * invoice) {
+       LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKUnsignedBolt12Invoice invoice_var = *invoice;
+       int64_t invoice_ref = 0;
+       // WARNING: we may need a move here but no clone is available for LDKUnsignedBolt12Invoice
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
+       invoice_ref = tag_ptr(invoice_var.inner, invoice_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->sign_bolt12_invoice_meth, invoice_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to sign_bolt12_invoice in LDKNodeSigner from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_ECDSASignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const void* this_arg, LDKUnsignedGossipMessage msg) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -7793,7 +8176,7 @@ LDKCResult_SignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const void* th
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -7819,6 +8202,10 @@ static inline LDKNodeSigner LDKNodeSigner_init (JNIEnv *env, jclass clz, jobject
        CHECK(calls->ecdh_meth != NULL);
        calls->sign_invoice_meth = (*env)->GetMethodID(env, c, "sign_invoice", "([B[BLorg/ldk/enums/Recipient;)J");
        CHECK(calls->sign_invoice_meth != NULL);
+       calls->sign_bolt12_invoice_request_meth = (*env)->GetMethodID(env, c, "sign_bolt12_invoice_request", "(J)J");
+       CHECK(calls->sign_bolt12_invoice_request_meth != NULL);
+       calls->sign_bolt12_invoice_meth = (*env)->GetMethodID(env, c, "sign_bolt12_invoice", "(J)J");
+       CHECK(calls->sign_bolt12_invoice_meth != NULL);
        calls->sign_gossip_message_meth = (*env)->GetMethodID(env, c, "sign_gossip_message", "(J)J");
        CHECK(calls->sign_gossip_message_meth != NULL);
 
@@ -7828,6 +8215,8 @@ static inline LDKNodeSigner LDKNodeSigner_init (JNIEnv *env, jclass clz, jobject
                .get_node_id = get_node_id_LDKNodeSigner_jcall,
                .ecdh = ecdh_LDKNodeSigner_jcall,
                .sign_invoice = sign_invoice_LDKNodeSigner_jcall,
+               .sign_bolt12_invoice_request = sign_bolt12_invoice_request_LDKNodeSigner_jcall,
+               .sign_bolt12_invoice = sign_bolt12_invoice_LDKNodeSigner_jcall,
                .sign_gossip_message = sign_gossip_message_LDKNodeSigner_jcall,
                .free = LDKNodeSigner_JCalls_free,
        };
@@ -7867,9 +8256,9 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1ecdh(JNIEnv *en
        (*env)->GetByteArrayRegion(env, other_key, 0, 33, other_key_ref.compressed_form);
        void* tweak_ptr = untag_ptr(tweak);
        CHECK_ACCESS(tweak_ptr);
-       LDKCOption_ScalarZ tweak_conv = *(LDKCOption_ScalarZ*)(tweak_ptr);
-       tweak_conv = COption_ScalarZ_clone((LDKCOption_ScalarZ*)untag_ptr(tweak));
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
+       LDKCOption_BigEndianScalarZ tweak_conv = *(LDKCOption_BigEndianScalarZ*)(tweak_ptr);
+       tweak_conv = COption_BigEndianScalarZ_clone((LDKCOption_BigEndianScalarZ*)untag_ptr(tweak));
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
        *ret_conv = (this_arg_conv->ecdh)(this_arg_conv->this_arg, recipient_conv, other_key_ref, tweak_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -7901,6 +8290,34 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1invoice(J
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1bolt12_1invoice_1request(JNIEnv *env, jclass clz, int64_t this_arg, int64_t invoice_request) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKNodeSigner* this_arg_conv = (LDKNodeSigner*)this_arg_ptr;
+       LDKUnsignedInvoiceRequest invoice_request_conv;
+       invoice_request_conv.inner = untag_ptr(invoice_request);
+       invoice_request_conv.is_owned = ptr_is_owned(invoice_request);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_conv);
+       invoice_request_conv.is_owned = false;
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = (this_arg_conv->sign_bolt12_invoice_request)(this_arg_conv->this_arg, &invoice_request_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1bolt12_1invoice(JNIEnv *env, jclass clz, int64_t this_arg, int64_t invoice) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKNodeSigner* this_arg_conv = (LDKNodeSigner*)this_arg_ptr;
+       LDKUnsignedBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = (this_arg_conv->sign_bolt12_invoice)(this_arg_conv->this_arg, &invoice_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1gossip_1message(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -7909,7 +8326,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1gossip_1m
        CHECK_ACCESS(msg_ptr);
        LDKUnsignedGossipMessage msg_conv = *(LDKUnsignedGossipMessage*)(msg_ptr);
        msg_conv = UnsignedGossipMessage_clone((LDKUnsignedGossipMessage*)untag_ptr(msg));
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_gossip_message)(this_arg_conv->this_arg, msg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -8025,7 +8442,7 @@ LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ read_chan_signer_LDKSignerPro
        }
        return ret_conv;
 }
-LDKCResult_ScriptNoneZ get_destination_script_LDKSignerProvider_jcall(const void* this_arg) {
+LDKCResult_CVec_u8ZNoneZ get_destination_script_LDKSignerProvider_jcall(const void* this_arg) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -8043,7 +8460,7 @@ LDKCResult_ScriptNoneZ get_destination_script_LDKSignerProvider_jcall(const void
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_ScriptNoneZ ret_conv = *(LDKCResult_ScriptNoneZ*)(ret_ptr);
+       LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -8154,7 +8571,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignerProvider_1get_1destin
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKSignerProvider* this_arg_conv = (LDKSignerProvider*)this_arg_ptr;
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
        *ret_conv = (this_arg_conv->get_destination_script)(this_arg_conv->this_arg);
        return tag_ptr(ret_conv, true);
 }
@@ -8501,48 +8918,48 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Router_1find_1route_1with_1
        return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelManagerZ_get_a(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelManagerZ* owner_conv = (LDKC2Tuple_BlockHashChannelManagerZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_BlockHashChannelManagerZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKChannelManager C2Tuple_BlockHashChannelManagerZ_get_b(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR owner){
+static inline struct LDKChannelManager C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner){
        LDKChannelManager ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelManagerZ* owner_conv = (LDKC2Tuple_BlockHashChannelManagerZ*)untag_ptr(owner);
-       LDKChannelManager ret_var = C2Tuple_BlockHashChannelManagerZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)untag_ptr(owner);
+       LDKChannelManager ret_var = C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKC2Tuple_BlockHashChannelManagerZ *CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return &*owner->contents.result;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)untag_ptr(owner);
-       int64_t ret_ret = tag_ptr(CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(owner_conv), false);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)untag_ptr(owner);
+       int64_t ret_ret = tag_ptr(CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(owner_conv), false);
        return ret_ret;
 }
 
-static inline struct LDKDecodeError CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -8814,93 +9231,100 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeEr
        return ret_ref;
 }
 
-static inline struct LDKOutPoint C2Tuple_OutPointScriptZ_get_a(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR owner){
+static inline struct LDKOutPoint C2Tuple_OutPointCVec_u8ZZ_get_a(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR owner){
        LDKOutPoint ret = owner->a;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_OutPointScriptZ* owner_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(owner);
-       LDKOutPoint ret_var = C2Tuple_OutPointScriptZ_get_a(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(owner);
+       LDKOutPoint ret_var = C2Tuple_OutPointCVec_u8ZZ_get_a(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKCVec_u8Z C2Tuple_OutPointScriptZ_get_b(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z C2Tuple_OutPointCVec_u8ZZ_get_b(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR owner){
        return CVec_u8Z_clone(&owner->b);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_OutPointScriptZ* owner_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = C2Tuple_OutPointScriptZ_get_b(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_OutPointCVec_u8ZZ_get_b(owner_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;
 }
 
-static inline uint32_t C2Tuple_u32ScriptZ_get_a(LDKC2Tuple_u32ScriptZ *NONNULL_PTR owner){
+static inline uint32_t C2Tuple_u32CVec_u8ZZ_get_a(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_u32ScriptZ* owner_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(owner);
-       int32_t ret_conv = C2Tuple_u32ScriptZ_get_a(owner_conv);
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u32CVec_u8ZZ* owner_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(owner);
+       int32_t ret_conv = C2Tuple_u32CVec_u8ZZ_get_a(owner_conv);
        return ret_conv;
 }
 
-static inline struct LDKCVec_u8Z C2Tuple_u32ScriptZ_get_b(LDKC2Tuple_u32ScriptZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z C2Tuple_u32CVec_u8ZZ_get_b(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR owner){
        return CVec_u8Z_clone(&owner->b);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_u32ScriptZ* owner_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = C2Tuple_u32ScriptZ_get_b(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u32CVec_u8ZZ* owner_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_u32CVec_u8ZZ_get_b(owner_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;
 }
 
-static inline LDKCVec_C2Tuple_u32ScriptZZ CVec_C2Tuple_u32ScriptZZ_clone(const LDKCVec_C2Tuple_u32ScriptZZ *orig) {
-       LDKCVec_C2Tuple_u32ScriptZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * orig->datalen, "LDKCVec_C2Tuple_u32ScriptZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_u32CVec_u8ZZZ CVec_C2Tuple_u32CVec_u8ZZZ_clone(const LDKCVec_C2Tuple_u32CVec_u8ZZZ *orig) {
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ) * orig->datalen, "LDKCVec_C2Tuple_u32CVec_u8ZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_u32ScriptZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_u32CVec_u8ZZ_clone(&orig->data[i]);
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKCVec_C2Tuple_u32ScriptZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR owner){
-       return CVec_C2Tuple_u32ScriptZZ_clone(&owner->b);
+static inline struct LDKCVec_C2Tuple_u32CVec_u8ZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner){
+       return CVec_C2Tuple_u32CVec_u8ZZZ_clone(&owner->b);
 }
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_u32ScriptZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(owner_conv);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ ret_var = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(owner_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 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];
-               ret_arr_ptr[v] = tag_ptr(ret_conv_21_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_u32CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+               *ret_conv_23_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *orig) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline LDKCVec_CommitmentTransactionZ CVec_CommitmentTransactionZ_clone(const LDKCVec_CommitmentTransactionZ *orig) {
+       LDKCVec_CommitmentTransactionZ ret = { .data = MALLOC(sizeof(LDKCommitmentTransaction) * orig->datalen, "LDKCVec_CommitmentTransactionZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = CommitmentTransaction_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -8930,22 +9354,22 @@ static inline LDKCVec_C2Tuple_u32TxOutZZ CVec_C2Tuple_u32TxOutZZ_clone(const LDK
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
+static inline struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
        return CVec_C2Tuple_u32TxOutZZ_clone(&owner->b);
 }
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_u32TxOutZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(owner_conv);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_u32TxOutZZ ret_var = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(owner_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);
@@ -8959,10 +9383,10 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2T
        return ret_arr;
 }
 
-static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -9059,49 +9483,49 @@ static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig)
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelMonitorZ_get_a(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* owner_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_BlockHashChannelMonitorZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKChannelMonitor C2Tuple_BlockHashChannelMonitorZ_get_b(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR owner){
+static inline struct LDKChannelMonitor C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR owner){
        LDKChannelMonitor ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* owner_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(owner);
-       LDKChannelMonitor ret_var = C2Tuple_BlockHashChannelMonitorZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(owner);
+       LDKChannelMonitor ret_var = C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKC2Tuple_BlockHashChannelMonitorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_BlockHashChannelMonitorZ_clone(&*owner->contents.result);
+       return C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKDecodeError CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -9594,60 +10018,60 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDeco
        return ret_ref;
 }
 
-static jclass LDKCOption_NetAddressZ_Some_class = NULL;
-static jmethodID LDKCOption_NetAddressZ_Some_meth = NULL;
-static jclass LDKCOption_NetAddressZ_None_class = NULL;
-static jmethodID LDKCOption_NetAddressZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1NetAddressZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_NetAddressZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_NetAddressZ$Some"));
-       CHECK(LDKCOption_NetAddressZ_Some_class != NULL);
-       LDKCOption_NetAddressZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_NetAddressZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_NetAddressZ_Some_meth != NULL);
-       LDKCOption_NetAddressZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_NetAddressZ$None"));
-       CHECK(LDKCOption_NetAddressZ_None_class != NULL);
-       LDKCOption_NetAddressZ_None_meth = (*env)->GetMethodID(env, LDKCOption_NetAddressZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_NetAddressZ_None_meth != NULL);
+static jclass LDKCOption_SocketAddressZ_Some_class = NULL;
+static jmethodID LDKCOption_SocketAddressZ_Some_meth = NULL;
+static jclass LDKCOption_SocketAddressZ_None_class = NULL;
+static jmethodID LDKCOption_SocketAddressZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1SocketAddressZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_SocketAddressZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SocketAddressZ$Some"));
+       CHECK(LDKCOption_SocketAddressZ_Some_class != NULL);
+       LDKCOption_SocketAddressZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_SocketAddressZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_SocketAddressZ_Some_meth != NULL);
+       LDKCOption_SocketAddressZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SocketAddressZ$None"));
+       CHECK(LDKCOption_SocketAddressZ_None_class != NULL);
+       LDKCOption_SocketAddressZ_None_meth = (*env)->GetMethodID(env, LDKCOption_SocketAddressZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_SocketAddressZ_None_meth != NULL);
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1NetAddressZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_NetAddressZ *obj = (LDKCOption_NetAddressZ*)untag_ptr(ptr);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1SocketAddressZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_SocketAddressZ *obj = (LDKCOption_SocketAddressZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_NetAddressZ_Some: {
+               case LDKCOption_SocketAddressZ_Some: {
                        int64_t some_ref = tag_ptr(&obj->some, false);
-                       return (*env)->NewObject(env, LDKCOption_NetAddressZ_Some_class, LDKCOption_NetAddressZ_Some_meth, some_ref);
+                       return (*env)->NewObject(env, LDKCOption_SocketAddressZ_Some_class, LDKCOption_SocketAddressZ_Some_meth, some_ref);
                }
-               case LDKCOption_NetAddressZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_NetAddressZ_None_class, LDKCOption_NetAddressZ_None_meth);
+               case LDKCOption_SocketAddressZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_SocketAddressZ_None_class, LDKCOption_SocketAddressZ_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKPublicKey C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR owner){
+static inline struct LDKPublicKey C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(owner_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(owner_conv).compressed_form);
        return ret_arr;
 }
 
-static inline struct LDKCOption_NetAddressZ C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR owner){
-       return COption_NetAddressZ_clone(&owner->b);
+static inline struct LDKCOption_SocketAddressZ C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR owner){
+       return COption_SocketAddressZ_clone(&owner->b);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(owner);
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(owner);
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_clone(const LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ *orig) {
-       LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_clone(const LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ *orig) {
+       LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_PublicKeyCOption_NetAddressZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -9780,88 +10204,170 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1u32GraphSyncErrorZ
        return ret_ref;
 }
 
-static jclass LDKCOption_KeyPairZ_Some_class = NULL;
-static jmethodID LDKCOption_KeyPairZ_Some_meth = NULL;
-static jclass LDKCOption_KeyPairZ_None_class = NULL;
-static jmethodID LDKCOption_KeyPairZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1KeyPairZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_KeyPairZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_KeyPairZ$Some"));
-       CHECK(LDKCOption_KeyPairZ_Some_class != NULL);
-       LDKCOption_KeyPairZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_KeyPairZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_KeyPairZ_Some_meth != NULL);
-       LDKCOption_KeyPairZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_KeyPairZ$None"));
-       CHECK(LDKCOption_KeyPairZ_None_class != NULL);
-       LDKCOption_KeyPairZ_None_meth = (*env)->GetMethodID(env, LDKCOption_KeyPairZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_KeyPairZ_None_meth != NULL);
+static inline struct LDKCVec_u8Z CResult_CVec_u8ZIOErrorZ_get_ok(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return CVec_u8Z_clone(&*owner->contents.result);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZIOErrorZ* owner_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = CResult_CVec_u8ZIOErrorZ_get_ok(owner_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;
+}
+
+static inline enum LDKIOError CResult_CVec_u8ZIOErrorZ_get_err(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZIOErrorZ* owner_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_u8ZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static inline struct LDKCVec_StrZ CResult_CVec_StrZIOErrorZ_get_ok(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return *owner->contents.result;
+}
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_StrZIOErrorZ* owner_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(owner);
+       LDKCVec_StrZ ret_var = CResult_CVec_StrZIOErrorZ_get_ok(owner_conv);
+       jobjectArray ret_arr = NULL;
+       ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, String_clz, NULL);
+       ;
+       jstring *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKStr ret_conv_8_str = ret_var.data[i];
+               jstring ret_conv_8_conv = str_ref_to_java(env, ret_conv_8_str.chars, ret_conv_8_str.len);
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       return ret_arr;
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1KeyPairZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_KeyPairZ *obj = (LDKCOption_KeyPairZ*)untag_ptr(ptr);
+
+static inline enum LDKIOError CResult_CVec_StrZIOErrorZ_get_err(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_StrZIOErrorZ* owner_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_StrZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ ret_var = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(owner_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 o = 0; o < ret_var.datalen; o++) {
+               LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+               *ret_conv_40_conv = ret_var.data[o];
+               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+static inline enum LDKIOError CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static inline struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline enum LDKIOError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static jclass LDKCOption_SecretKeyZ_Some_class = NULL;
+static jmethodID LDKCOption_SecretKeyZ_Some_meth = NULL;
+static jclass LDKCOption_SecretKeyZ_None_class = NULL;
+static jmethodID LDKCOption_SecretKeyZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1SecretKeyZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_SecretKeyZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SecretKeyZ$Some"));
+       CHECK(LDKCOption_SecretKeyZ_Some_class != NULL);
+       LDKCOption_SecretKeyZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_SecretKeyZ_Some_class, "<init>", "([B)V");
+       CHECK(LDKCOption_SecretKeyZ_Some_meth != NULL);
+       LDKCOption_SecretKeyZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SecretKeyZ$None"));
+       CHECK(LDKCOption_SecretKeyZ_None_class != NULL);
+       LDKCOption_SecretKeyZ_None_meth = (*env)->GetMethodID(env, LDKCOption_SecretKeyZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_SecretKeyZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1SecretKeyZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_SecretKeyZ *obj = (LDKCOption_SecretKeyZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_KeyPairZ_Some: {
+               case LDKCOption_SecretKeyZ_Some: {
                        int8_tArray some_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.bytes);
-                       return (*env)->NewObject(env, LDKCOption_KeyPairZ_Some_class, LDKCOption_KeyPairZ_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_SecretKeyZ_Some_class, LDKCOption_SecretKeyZ_Some_meth, some_arr);
                }
-               case LDKCOption_KeyPairZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_KeyPairZ_None_class, LDKCOption_KeyPairZ_None_meth);
+               case LDKCOption_SecretKeyZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_SecretKeyZ_None_class, LDKCOption_SecretKeyZ_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKCOption_KeyPairZ CResult_COption_KeyPairZNoneZ_get_ok(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return COption_KeyPairZ_clone(&*owner->contents.result);
+static inline struct LDKVerifiedInvoiceRequest CResult_VerifiedInvoiceRequestNoneZ_get_ok(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR owner){
+       LDKVerifiedInvoiceRequest ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_COption_KeyPairZNoneZ* owner_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(owner);
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = CResult_COption_KeyPairZNoneZ_get_ok(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* owner_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(owner);
+       LDKVerifiedInvoiceRequest ret_var = CResult_VerifiedInvoiceRequestNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline void CResult_COption_KeyPairZNoneZ_get_err(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR owner){
+static inline void CResult_VerifiedInvoiceRequestNoneZ_get_err(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_COption_KeyPairZNoneZ* owner_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(owner);
-       CResult_COption_KeyPairZNoneZ_get_err(owner_conv);
-}
-
-static jclass LDKCOption_ScriptZ_Some_class = NULL;
-static jmethodID LDKCOption_ScriptZ_Some_meth = NULL;
-static jclass LDKCOption_ScriptZ_None_class = NULL;
-static jmethodID LDKCOption_ScriptZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ScriptZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_ScriptZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScriptZ$Some"));
-       CHECK(LDKCOption_ScriptZ_Some_class != NULL);
-       LDKCOption_ScriptZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ScriptZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_ScriptZ_Some_meth != NULL);
-       LDKCOption_ScriptZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScriptZ$None"));
-       CHECK(LDKCOption_ScriptZ_None_class != NULL);
-       LDKCOption_ScriptZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ScriptZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_ScriptZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ScriptZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_ScriptZ *obj = (LDKCOption_ScriptZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_ScriptZ_Some: {
-                       LDKCVec_u8Z some_var = obj->some;
-                       int8_tArray some_arr = (*env)->NewByteArray(env, some_var.datalen);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, some_var.datalen, some_var.data);
-                       return (*env)->NewObject(env, LDKCOption_ScriptZ_Some_class, LDKCOption_ScriptZ_Some_meth, some_arr);
-               }
-               case LDKCOption_ScriptZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_ScriptZ_None_class, LDKCOption_ScriptZ_None_meth);
-               }
-               default: abort();
-       }
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* owner_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(owner);
+       CResult_VerifiedInvoiceRequestNoneZ_get_err(owner_conv);
 }
+
 static inline LDKCVec_WitnessZ CVec_WitnessZ_clone(const LDKCVec_WitnessZ *orig) {
        LDKCVec_WitnessZ ret = { .data = MALLOC(sizeof(LDKWitness) * orig->datalen, "LDKCVec_WitnessZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -9898,60 +10404,52 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1i64Z_1ref_1from
                default: abort();
        }
 }
-static jclass LDKCOption_TxidZ_Some_class = NULL;
-static jmethodID LDKCOption_TxidZ_Some_meth = NULL;
-static jclass LDKCOption_TxidZ_None_class = NULL;
-static jmethodID LDKCOption_TxidZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1TxidZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_TxidZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_TxidZ$Some"));
-       CHECK(LDKCOption_TxidZ_Some_class != NULL);
-       LDKCOption_TxidZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_TxidZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_TxidZ_Some_meth != NULL);
-       LDKCOption_TxidZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_TxidZ$None"));
-       CHECK(LDKCOption_TxidZ_None_class != NULL);
-       LDKCOption_TxidZ_None_meth = (*env)->GetMethodID(env, LDKCOption_TxidZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_TxidZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1TxidZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_TxidZ *obj = (LDKCOption_TxidZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_TxidZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_TxidZ_Some_class, LDKCOption_TxidZ_Some_meth, some_arr);
-               }
-               case LDKCOption_TxidZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_TxidZ_None_class, LDKCOption_TxidZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline struct LDKNetAddress CResult_NetAddressDecodeErrorZ_get_ok(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKSocketAddress CResult_SocketAddressDecodeErrorZ_get_ok(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return NetAddress_clone(&*owner->contents.result);
+       return SocketAddress_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NetAddressDecodeErrorZ* owner_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(owner);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = CResult_NetAddressDecodeErrorZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressDecodeErrorZ* owner_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(owner);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = CResult_SocketAddressDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_NetAddressDecodeErrorZ_get_err(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_SocketAddressDecodeErrorZ_get_err(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NetAddressDecodeErrorZ* owner_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressDecodeErrorZ* owner_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_NetAddressDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_SocketAddressDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKSocketAddress CResult_SocketAddressSocketAddressParseErrorZ_get_ok(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return SocketAddress_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* owner_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(owner);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = CResult_SocketAddressSocketAddressParseErrorZ_get_ok(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
+static inline enum LDKSocketAddressParseError CResult_SocketAddressSocketAddressParseErrorZ_get_err(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return SocketAddressParseError_clone(&*owner->contents.err);
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* owner_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, CResult_SocketAddressSocketAddressParseErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
 static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_UpdateAddHTLCZ *orig) {
        LDKCVec_UpdateAddHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateAddHTLC) * orig->datalen, "LDKCVec_UpdateAddHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -11552,13 +12050,13 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTran
        CResult_TrustedCommitmentTransactionNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKCVec_SignatureZ CResult_CVec_SignatureZNoneZ_get_ok(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_ECDSASignatureZ CResult_CVec_ECDSASignatureZNoneZ_get_ok(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_SignatureZNoneZ* owner_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(owner);
-       LDKCVec_SignatureZ ret_var = CResult_CVec_SignatureZNoneZ_get_ok(owner_conv);
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* owner_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(owner);
+       LDKCVec_ECDSASignatureZ ret_var = CResult_CVec_ECDSASignatureZNoneZ_get_ok(owner_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -11571,15 +12069,44 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1Signatu
        return ret_arr;
 }
 
-static inline void CResult_CVec_SignatureZNoneZ_get_err(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_ECDSASignatureZNoneZ_get_err(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_SignatureZNoneZ* owner_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(owner);
-       CResult_CVec_SignatureZNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* owner_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(owner);
+       CResult_CVec_ECDSASignatureZNoneZ_get_err(owner_conv);
+}
+
+static jclass LDKCOption_usizeZ_Some_class = NULL;
+static jmethodID LDKCOption_usizeZ_Some_meth = NULL;
+static jclass LDKCOption_usizeZ_None_class = NULL;
+static jmethodID LDKCOption_usizeZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1usizeZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_usizeZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_usizeZ$Some"));
+       CHECK(LDKCOption_usizeZ_Some_class != NULL);
+       LDKCOption_usizeZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_usizeZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_usizeZ_Some_meth != NULL);
+       LDKCOption_usizeZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_usizeZ$None"));
+       CHECK(LDKCOption_usizeZ_None_class != NULL);
+       LDKCOption_usizeZ_None_meth = (*env)->GetMethodID(env, LDKCOption_usizeZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_usizeZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1usizeZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_usizeZ *obj = (LDKCOption_usizeZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_usizeZ_Some: {
+                       int64_t some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_usizeZ_Some_class, LDKCOption_usizeZ_Some_meth, some_conv);
+               }
+               case LDKCOption_usizeZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_usizeZ_None_class, LDKCOption_usizeZ_None_meth);
+               }
+               default: abort();
+       }
 }
-
 static inline struct LDKShutdownScript CResult_ShutdownScriptDecodeErrorZ_get_ok(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR owner){
        LDKShutdownScript ret = *owner->contents.result;
        ret.is_owned = false;
@@ -11691,6 +12218,32 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDeco
        return ret_ref;
 }
 
+static inline struct LDKClaimedHTLC CResult_ClaimedHTLCDecodeErrorZ_get_ok(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR owner){
+       LDKClaimedHTLC ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* owner_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(owner);
+       LDKClaimedHTLC ret_var = CResult_ClaimedHTLCDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ClaimedHTLCDecodeErrorZ_get_err(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* owner_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ClaimedHTLCDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static jclass LDKPathFailure_InitialSend_class = NULL;
 static jmethodID LDKPathFailure_InitialSend_meth = NULL;
 static jclass LDKPathFailure_OnPath_class = NULL;
@@ -11792,6 +12345,8 @@ static jclass LDKClosureReason_OutdatedChannelManager_class = NULL;
 static jmethodID LDKClosureReason_OutdatedChannelManager_meth = NULL;
 static jclass LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class = NULL;
 static jmethodID LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth = NULL;
+static jclass LDKClosureReason_FundingBatchClosure_class = NULL;
+static jmethodID LDKClosureReason_FundingBatchClosure_meth = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JNIEnv *env, jclass clz) {
        LDKClosureReason_CounterpartyForceClosed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKClosureReason$CounterpartyForceClosed"));
@@ -11838,6 +12393,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JN
        CHECK(LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class != NULL);
        LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth = (*env)->GetMethodID(env, LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class, "<init>", "()V");
        CHECK(LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth != NULL);
+       LDKClosureReason_FundingBatchClosure_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKClosureReason$FundingBatchClosure"));
+       CHECK(LDKClosureReason_FundingBatchClosure_class != NULL);
+       LDKClosureReason_FundingBatchClosure_meth = (*env)->GetMethodID(env, LDKClosureReason_FundingBatchClosure_class, "<init>", "()V");
+       CHECK(LDKClosureReason_FundingBatchClosure_meth != NULL);
 }
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
        LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
@@ -11875,6 +12435,9 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from
                case LDKClosureReason_CounterpartyCoopClosedUnfundedChannel: {
                        return (*env)->NewObject(env, LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class, LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth);
                }
+               case LDKClosureReason_FundingBatchClosure: {
+                       return (*env)->NewObject(env, LDKClosureReason_FundingBatchClosure_class, LDKClosureReason_FundingBatchClosure_meth);
+               }
                default: abort();
        }
 }
@@ -12062,65 +12625,42 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentFailureReas
        return ret_ref;
 }
 
-static jclass LDKCOption_u128Z_Some_class = NULL;
-static jmethodID LDKCOption_u128Z_Some_meth = NULL;
-static jclass LDKCOption_u128Z_None_class = NULL;
-static jmethodID LDKCOption_u128Z_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u128Z_init (JNIEnv *env, jclass clz) {
-       LDKCOption_u128Z_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u128Z$Some"));
-       CHECK(LDKCOption_u128Z_Some_class != NULL);
-       LDKCOption_u128Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u128Z_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_u128Z_Some_meth != NULL);
-       LDKCOption_u128Z_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u128Z$None"));
-       CHECK(LDKCOption_u128Z_None_class != NULL);
-       LDKCOption_u128Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u128Z_None_class, "<init>", "()V");
-       CHECK(LDKCOption_u128Z_None_meth != NULL);
+static jclass LDKCOption_U128Z_Some_class = NULL;
+static jmethodID LDKCOption_U128Z_Some_meth = NULL;
+static jclass LDKCOption_U128Z_None_class = NULL;
+static jmethodID LDKCOption_U128Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1U128Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_U128Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_U128Z$Some"));
+       CHECK(LDKCOption_U128Z_Some_class != NULL);
+       LDKCOption_U128Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_U128Z_Some_class, "<init>", "([B)V");
+       CHECK(LDKCOption_U128Z_Some_meth != NULL);
+       LDKCOption_U128Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_U128Z$None"));
+       CHECK(LDKCOption_U128Z_None_class != NULL);
+       LDKCOption_U128Z_None_meth = (*env)->GetMethodID(env, LDKCOption_U128Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_U128Z_None_meth != NULL);
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u128Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_u128Z *obj = (LDKCOption_u128Z*)untag_ptr(ptr);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1U128Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_U128Z *obj = (LDKCOption_U128Z*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_u128Z_Some: {
+               case LDKCOption_U128Z_Some: {
                        int8_tArray some_arr = (*env)->NewByteArray(env, 16);
                        (*env)->SetByteArrayRegion(env, some_arr, 0, 16, obj->some.le_bytes);
-                       return (*env)->NewObject(env, LDKCOption_u128Z_Some_class, LDKCOption_u128Z_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_U128Z_Some_class, LDKCOption_U128Z_Some_meth, some_arr);
                }
-               case LDKCOption_u128Z_None: {
-                       return (*env)->NewObject(env, LDKCOption_u128Z_None_class, LDKCOption_u128Z_None_meth);
+               case LDKCOption_U128Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_U128Z_None_class, LDKCOption_U128Z_None_meth);
                }
                default: abort();
        }
 }
-static jclass LDKCOption_PaymentIdZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentIdZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentIdZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentIdZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentIdZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentIdZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentIdZ$Some"));
-       CHECK(LDKCOption_PaymentIdZ_Some_class != NULL);
-       LDKCOption_PaymentIdZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentIdZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentIdZ_Some_meth != NULL);
-       LDKCOption_PaymentIdZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentIdZ$None"));
-       CHECK(LDKCOption_PaymentIdZ_None_class != NULL);
-       LDKCOption_PaymentIdZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentIdZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentIdZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentIdZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentIdZ *obj = (LDKCOption_PaymentIdZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentIdZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentIdZ_Some_class, LDKCOption_PaymentIdZ_Some_meth, some_arr);
-               }
-               case LDKCOption_PaymentIdZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentIdZ_None_class, LDKCOption_PaymentIdZ_None_meth);
-               }
-               default: abort();
+static inline LDKCVec_ClaimedHTLCZ CVec_ClaimedHTLCZ_clone(const LDKCVec_ClaimedHTLCZ *orig) {
+       LDKCVec_ClaimedHTLCZ ret = { .data = MALLOC(sizeof(LDKClaimedHTLC) * orig->datalen, "LDKCVec_ClaimedHTLCZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = ClaimedHTLC_clone(&orig->data[i]);
        }
+       return ret;
 }
 static jclass LDKCOption_PaymentFailureReasonZ_Some_class = NULL;
 static jmethodID LDKCOption_PaymentFailureReasonZ_Some_meth = NULL;
@@ -12267,12 +12807,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *en
        LDKEvent_PaymentClaimable_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentClaimable"));
        CHECK(LDKEvent_PaymentClaimable_class != NULL);
-       LDKEvent_PaymentClaimable_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimable_class, "<init>", "([B[BJJJJ[BJJ)V");
+       LDKEvent_PaymentClaimable_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimable_class, "<init>", "([B[BJJJJJJJ)V");
        CHECK(LDKEvent_PaymentClaimable_meth != NULL);
        LDKEvent_PaymentClaimed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentClaimed"));
        CHECK(LDKEvent_PaymentClaimed_class != NULL);
-       LDKEvent_PaymentClaimed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimed_class, "<init>", "([B[BJJ)V");
+       LDKEvent_PaymentClaimed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimed_class, "<init>", "([B[BJJ[JJ)V");
        CHECK(LDKEvent_PaymentClaimed_meth != NULL);
        LDKEvent_PaymentSent_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentSent"));
@@ -12317,17 +12857,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *en
        LDKEvent_SpendableOutputs_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$SpendableOutputs"));
        CHECK(LDKEvent_SpendableOutputs_class != NULL);
-       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([J)V");
+       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([JJ)V");
        CHECK(LDKEvent_SpendableOutputs_meth != NULL);
        LDKEvent_PaymentForwarded_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentForwarded"));
        CHECK(LDKEvent_PaymentForwarded_class != NULL);
-       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "([B[BJZJ)V");
+       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "(JJJZJ)V");
        CHECK(LDKEvent_PaymentForwarded_meth != NULL);
        LDKEvent_ChannelPending_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$ChannelPending"));
        CHECK(LDKEvent_ChannelPending_class != NULL);
-       LDKEvent_ChannelPending_meth = (*env)->GetMethodID(env, LDKEvent_ChannelPending_class, "<init>", "([B[B[B[BJ)V");
+       LDKEvent_ChannelPending_meth = (*env)->GetMethodID(env, LDKEvent_ChannelPending_class, "<init>", "([B[BJ[BJ)V");
        CHECK(LDKEvent_ChannelPending_meth != NULL);
        LDKEvent_ChannelReady_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$ChannelReady"));
@@ -12337,7 +12877,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *en
        LDKEvent_ChannelClosed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$ChannelClosed"));
        CHECK(LDKEvent_ChannelClosed_class != NULL);
-       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([B[BJ)V");
+       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([B[BJ[BJ)V");
        CHECK(LDKEvent_ChannelClosed_meth != NULL);
        LDKEvent_DiscardFunding_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$DiscardFunding"));
@@ -12388,11 +12928,10 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                        int64_t amount_msat_conv = obj->payment_claimable.amount_msat;
                        int64_t counterparty_skimmed_fee_msat_conv = obj->payment_claimable.counterparty_skimmed_fee_msat;
                        int64_t purpose_ref = tag_ptr(&obj->payment_claimable.purpose, false);
-                       int8_tArray via_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, via_channel_id_arr, 0, 32, obj->payment_claimable.via_channel_id.data);
+                       int64_t via_channel_id_ref = tag_ptr(&obj->payment_claimable.via_channel_id, false);
                        int64_t via_user_channel_id_ref = tag_ptr(&obj->payment_claimable.via_user_channel_id, false);
                        int64_t claim_deadline_ref = tag_ptr(&obj->payment_claimable.claim_deadline, false);
-                       return (*env)->NewObject(env, LDKEvent_PaymentClaimable_class, LDKEvent_PaymentClaimable_meth, receiver_node_id_arr, payment_hash_arr, onion_fields_ref, amount_msat_conv, counterparty_skimmed_fee_msat_conv, purpose_ref, via_channel_id_arr, via_user_channel_id_ref, claim_deadline_ref);
+                       return (*env)->NewObject(env, LDKEvent_PaymentClaimable_class, LDKEvent_PaymentClaimable_meth, receiver_node_id_arr, payment_hash_arr, onion_fields_ref, amount_msat_conv, counterparty_skimmed_fee_msat_conv, purpose_ref, via_channel_id_ref, via_user_channel_id_ref, claim_deadline_ref);
                }
                case LDKEvent_PaymentClaimed: {
                        int8_tArray receiver_node_id_arr = (*env)->NewByteArray(env, 33);
@@ -12401,7 +12940,20 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                        (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_claimed.payment_hash.data);
                        int64_t amount_msat_conv = obj->payment_claimed.amount_msat;
                        int64_t purpose_ref = tag_ptr(&obj->payment_claimed.purpose, false);
-                       return (*env)->NewObject(env, LDKEvent_PaymentClaimed_class, LDKEvent_PaymentClaimed_meth, receiver_node_id_arr, payment_hash_arr, amount_msat_conv, purpose_ref);
+                       LDKCVec_ClaimedHTLCZ htlcs_var = obj->payment_claimed.htlcs;
+                       int64_tArray htlcs_arr = NULL;
+                       htlcs_arr = (*env)->NewLongArray(env, htlcs_var.datalen);
+                       int64_t *htlcs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, htlcs_arr, NULL);
+                       for (size_t n = 0; n < htlcs_var.datalen; n++) {
+                               LDKClaimedHTLC htlcs_conv_13_var = htlcs_var.data[n];
+                               int64_t htlcs_conv_13_ref = 0;
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_var);
+                               htlcs_conv_13_ref = tag_ptr(htlcs_conv_13_var.inner, false);
+                               htlcs_arr_ptr[n] = htlcs_conv_13_ref;
+                       }
+                       (*env)->ReleasePrimitiveArrayCritical(env, htlcs_arr, htlcs_arr_ptr, 0);
+                       int64_t sender_intended_total_msat_ref = tag_ptr(&obj->payment_claimed.sender_intended_total_msat, false);
+                       return (*env)->NewObject(env, LDKEvent_PaymentClaimed_class, LDKEvent_PaymentClaimed_meth, receiver_node_id_arr, payment_hash_arr, amount_msat_conv, purpose_ref, htlcs_arr, sender_intended_total_msat_ref);
                }
                case LDKEvent_PaymentSent: {
                        int64_t payment_id_ref = tag_ptr(&obj->payment_sent.payment_id, false);
@@ -12490,32 +13042,30 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                                outputs_arr_ptr[b] = outputs_conv_27_ref;
                        }
                        (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0);
-                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr);
+                       int64_t channel_id_ref = tag_ptr(&obj->spendable_outputs.channel_id, false);
+                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr, channel_id_ref);
                }
                case LDKEvent_PaymentForwarded: {
-                       int8_tArray prev_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, prev_channel_id_arr, 0, 32, obj->payment_forwarded.prev_channel_id.data);
-                       int8_tArray next_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, next_channel_id_arr, 0, 32, obj->payment_forwarded.next_channel_id.data);
+                       int64_t prev_channel_id_ref = tag_ptr(&obj->payment_forwarded.prev_channel_id, false);
+                       int64_t next_channel_id_ref = tag_ptr(&obj->payment_forwarded.next_channel_id, false);
                        int64_t fee_earned_msat_ref = tag_ptr(&obj->payment_forwarded.fee_earned_msat, false);
                        jboolean claim_from_onchain_tx_conv = obj->payment_forwarded.claim_from_onchain_tx;
                        int64_t outbound_amount_forwarded_msat_ref = tag_ptr(&obj->payment_forwarded.outbound_amount_forwarded_msat, false);
-                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, prev_channel_id_arr, next_channel_id_arr, fee_earned_msat_ref, claim_from_onchain_tx_conv, outbound_amount_forwarded_msat_ref);
+                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, prev_channel_id_ref, next_channel_id_ref, fee_earned_msat_ref, claim_from_onchain_tx_conv, outbound_amount_forwarded_msat_ref);
                }
                case LDKEvent_ChannelPending: {
                        int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->channel_pending.channel_id.data);
                        int8_tArray user_channel_id_arr = (*env)->NewByteArray(env, 16);
                        (*env)->SetByteArrayRegion(env, user_channel_id_arr, 0, 16, obj->channel_pending.user_channel_id.le_bytes);
-                       int8_tArray former_temporary_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, former_temporary_channel_id_arr, 0, 32, obj->channel_pending.former_temporary_channel_id.data);
+                       int64_t former_temporary_channel_id_ref = tag_ptr(&obj->channel_pending.former_temporary_channel_id, false);
                        int8_tArray counterparty_node_id_arr = (*env)->NewByteArray(env, 33);
                        (*env)->SetByteArrayRegion(env, counterparty_node_id_arr, 0, 33, obj->channel_pending.counterparty_node_id.compressed_form);
                        LDKOutPoint funding_txo_var = obj->channel_pending.funding_txo;
                        int64_t funding_txo_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
                        funding_txo_ref = tag_ptr(funding_txo_var.inner, false);
-                       return (*env)->NewObject(env, LDKEvent_ChannelPending_class, LDKEvent_ChannelPending_meth, channel_id_arr, user_channel_id_arr, former_temporary_channel_id_arr, counterparty_node_id_arr, funding_txo_ref);
+                       return (*env)->NewObject(env, LDKEvent_ChannelPending_class, LDKEvent_ChannelPending_meth, channel_id_arr, user_channel_id_arr, former_temporary_channel_id_ref, counterparty_node_id_arr, funding_txo_ref);
                }
                case LDKEvent_ChannelReady: {
                        int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
@@ -12536,7 +13086,10 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                        int8_tArray user_channel_id_arr = (*env)->NewByteArray(env, 16);
                        (*env)->SetByteArrayRegion(env, user_channel_id_arr, 0, 16, obj->channel_closed.user_channel_id.le_bytes);
                        int64_t reason_ref = tag_ptr(&obj->channel_closed.reason, false);
-                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, user_channel_id_arr, reason_ref);
+                       int8_tArray counterparty_node_id_arr = (*env)->NewByteArray(env, 33);
+                       (*env)->SetByteArrayRegion(env, counterparty_node_id_arr, 0, 33, obj->channel_closed.counterparty_node_id.compressed_form);
+                       int64_t channel_capacity_sats_ref = tag_ptr(&obj->channel_closed.channel_capacity_sats, false);
+                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, user_channel_id_arr, reason_ref, counterparty_node_id_arr, channel_capacity_sats_ref);
                }
                case LDKEvent_DiscardFunding: {
                        int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
@@ -12625,43 +13178,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDec
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(const LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *orig) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_BlockHashChannelMonitorZ_clone(&orig->data[i]);
-       }
-       return ret;
-}
-static inline struct LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(&*owner->contents.result);
-}
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret_var = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(owner_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 j = 0; j < ret_var.datalen; j++) {
-               LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv_35_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-               *ret_conv_35_conv = ret_var.data[j];
-               ret_arr_ptr[j] = tag_ptr(ret_conv_35_conv, true);
-       }
-       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-static inline enum LDKIOError CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(owner_conv));
-       return ret_conv;
-}
-
 static jclass LDKBolt11ParseError_Bech32Error_class = NULL;
 static jmethodID LDKBolt11ParseError_Bech32Error_meth = NULL;
 static jclass LDKBolt11ParseError_ParseAmountError_class = NULL;
@@ -12998,27 +13514,27 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawBolt11Invoice_1
        return ret_ref;
 }
 
-static inline struct LDKPayeePubKey CResult_PayeePubKeyErrorZ_get_ok(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR owner){
+static inline struct LDKPayeePubKey CResult_PayeePubKeySecp256k1ErrorZ_get_ok(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR owner){
        LDKPayeePubKey ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PayeePubKeyErrorZ* owner_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(owner);
-       LDKPayeePubKey ret_var = CResult_PayeePubKeyErrorZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(owner);
+       LDKPayeePubKey ret_var = CResult_PayeePubKeySecp256k1ErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline enum LDKSecp256k1Error CResult_PayeePubKeyErrorZ_get_err(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR owner){
+static inline enum LDKSecp256k1Error CResult_PayeePubKeySecp256k1ErrorZ_get_err(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PayeePubKeyErrorZ* owner_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PayeePubKeyErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PayeePubKeySecp256k1ErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -13297,6 +13813,84 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDec
        return ret_ref;
 }
 
+static inline struct LDKReceiveTlvs CResult_ReceiveTlvsDecodeErrorZ_get_ok(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR owner){
+       LDKReceiveTlvs ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* owner_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(owner);
+       LDKReceiveTlvs ret_var = CResult_ReceiveTlvsDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ReceiveTlvsDecodeErrorZ_get_err(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* owner_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ReceiveTlvsDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKPaymentRelay CResult_PaymentRelayDecodeErrorZ_get_ok(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner){
+       LDKPaymentRelay ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentRelayDecodeErrorZ* owner_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(owner);
+       LDKPaymentRelay ret_var = CResult_PaymentRelayDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_PaymentRelayDecodeErrorZ_get_err(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentRelayDecodeErrorZ* owner_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_PaymentRelayDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKPaymentConstraints CResult_PaymentConstraintsDecodeErrorZ_get_ok(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR owner){
+       LDKPaymentConstraints ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* owner_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(owner);
+       LDKPaymentConstraints ret_var = CResult_PaymentConstraintsDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_PaymentConstraintsDecodeErrorZ_get_err(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* owner_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_PaymentConstraintsDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static jclass LDKPaymentError_Invoice_class = NULL;
 static jmethodID LDKPaymentError_Invoice_meth = NULL;
 static jclass LDKPaymentError_Sending_class = NULL;
@@ -13328,25 +13922,25 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
                default: abort();
        }
 }
-static inline struct LDKThirtyTwoBytes CResult_PaymentIdPaymentErrorZ_get_ok(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentIdPaymentErrorZ* owner_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentIdPaymentErrorZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKPaymentError CResult_PaymentIdPaymentErrorZ_get_err(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR owner){
+static inline struct LDKPaymentError CResult_ThirtyTwoBytesPaymentErrorZ_get_err(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return PaymentError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentIdPaymentErrorZ* owner_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(owner);
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
-       *ret_copy = CResult_PaymentIdPaymentErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_ThirtyTwoBytesPaymentErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -13372,24 +13966,87 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentErrorZ_
        return ret_ref;
 }
 
-static inline struct LDKStr CResult_StringErrorZ_get_ok(LDKCResult_StringErrorZ *NONNULL_PTR owner){
+static jclass LDKProbingError_Invoice_class = NULL;
+static jmethodID LDKProbingError_Invoice_meth = NULL;
+static jclass LDKProbingError_Sending_class = NULL;
+static jmethodID LDKProbingError_Sending_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKProbingError_init (JNIEnv *env, jclass clz) {
+       LDKProbingError_Invoice_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbingError$Invoice"));
+       CHECK(LDKProbingError_Invoice_class != NULL);
+       LDKProbingError_Invoice_meth = (*env)->GetMethodID(env, LDKProbingError_Invoice_class, "<init>", "(Ljava/lang/String;)V");
+       CHECK(LDKProbingError_Invoice_meth != NULL);
+       LDKProbingError_Sending_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbingError$Sending"));
+       CHECK(LDKProbingError_Sending_class != NULL);
+       LDKProbingError_Sending_meth = (*env)->GetMethodID(env, LDKProbingError_Sending_class, "<init>", "(J)V");
+       CHECK(LDKProbingError_Sending_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKProbingError_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKProbingError *obj = (LDKProbingError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKProbingError_Invoice: {
+                       LDKStr invoice_str = obj->invoice;
+                       jstring invoice_conv = str_ref_to_java(env, invoice_str.chars, invoice_str.len);
+                       return (*env)->NewObject(env, LDKProbingError_Invoice_class, LDKProbingError_Invoice_meth, invoice_conv);
+               }
+               case LDKProbingError_Sending: {
+                       int64_t sending_ref = tag_ptr(&obj->sending, false);
+                       return (*env)->NewObject(env, LDKProbingError_Sending_class, LDKProbingError_Sending_meth, sending_ref);
+               }
+               default: abort();
+       }
+}
+static inline struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ ret_var = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(owner_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 o = 0; o < ret_var.datalen; o++) {
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+               *ret_conv_40_conv = ret_var.data[o];
+               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+static inline struct LDKProbingError CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return ProbingError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(owner);
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKStr CResult_StrSecp256k1ErrorZ_get_ok(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_StringErrorZ* owner_conv = (LDKCResult_StringErrorZ*)untag_ptr(owner);
-       LDKStr ret_str = CResult_StringErrorZ_get_ok(owner_conv);
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
+       LDKStr ret_str = CResult_StrSecp256k1ErrorZ_get_ok(owner_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        return ret_conv;
 }
 
-static inline enum LDKSecp256k1Error CResult_StringErrorZ_get_err(LDKCResult_StringErrorZ *NONNULL_PTR owner){
+static inline enum LDKSecp256k1Error CResult_StrSecp256k1ErrorZ_get_err(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_StringErrorZ* owner_conv = (LDKCResult_StringErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_StringErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_StrSecp256k1ErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -13416,6 +14073,30 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNoneZ
        CResult_OnionMessagePathNoneZ_get_err(owner_conv);
 }
 
+static inline struct LDKPublicKey C2Tuple_PublicKeyOnionMessageZ_get_a(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR owner){
+       return owner->a;
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* owner_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_PublicKeyOnionMessageZ_get_a(owner_conv).compressed_form);
+       return ret_arr;
+}
+
+static inline struct LDKOnionMessage C2Tuple_PublicKeyOnionMessageZ_get_b(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR owner){
+       LDKOnionMessage ret = owner->b;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* owner_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(owner);
+       LDKOnionMessage ret_var = C2Tuple_PublicKeyOnionMessageZ_get_b(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static jclass LDKSendError_Secp256k1_class = NULL;
 static jmethodID LDKSendError_Secp256k1_meth = NULL;
 static jclass LDKSendError_TooBigPacket_class = NULL;
@@ -13505,6 +14186,29 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSendError_1ref_1from_1pt
                default: abort();
        }
 }
+static inline struct LDKC2Tuple_PublicKeyOnionMessageZ CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C2Tuple_PublicKeyOnionMessageZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* owner_conv = (LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)untag_ptr(owner);
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline struct LDKSendError CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return SendError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* owner_conv = (LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)untag_ptr(owner);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline void CResult_NoneSendErrorZ_get_ok(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -13549,6 +14253,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1get
        CResult_BlindedPathNoneZ_get_err(owner_conv);
 }
 
+static inline struct LDKC2Tuple_BlindedPayInfoBlindedPathZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C2Tuple_BlindedPayInfoBlindedPathZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(owner_conv);
+}
+
 static inline struct LDKBlindedPath CResult_BlindedPathDecodeErrorZ_get_ok(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner){
        LDKBlindedPath ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13870,6 +14594,255 @@ static inline LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ CVec_C2Tuple_OutPo
        }
        return ret;
 }
+typedef struct LDKKVStore_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       jmethodID read_meth;
+       jmethodID write_meth;
+       jmethodID remove_meth;
+       jmethodID list_meth;
+} LDKKVStore_JCalls;
+static void LDKKVStore_JCalls_free(void* this_arg) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+LDKCResult_CVec_u8ZIOErrorZ read_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace, LDKStr key) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       LDKStr key_str = key;
+       jstring key_conv = str_ref_to_java(env, key_str.chars, key_str.len);
+       Str_free(key_str);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->read_meth, primary_namespace_conv, secondary_namespace_conv, key_conv);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to read in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_CVec_u8ZIOErrorZ ret_conv = *(LDKCResult_CVec_u8ZIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_NoneIOErrorZ write_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace, LDKStr key, LDKu8slice buf) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       LDKStr key_str = key;
+       jstring key_conv = str_ref_to_java(env, key_str.chars, key_str.len);
+       Str_free(key_str);
+       LDKu8slice buf_var = buf;
+       int8_tArray buf_arr = (*env)->NewByteArray(env, buf_var.datalen);
+       (*env)->SetByteArrayRegion(env, buf_arr, 0, buf_var.datalen, buf_var.data);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->write_meth, primary_namespace_conv, secondary_namespace_conv, key_conv, buf_arr);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to write in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_NoneIOErrorZ remove_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace, LDKStr key, bool lazy) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       LDKStr key_str = key;
+       jstring key_conv = str_ref_to_java(env, key_str.chars, key_str.len);
+       Str_free(key_str);
+       jboolean lazy_conv = lazy;
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->remove_meth, primary_namespace_conv, secondary_namespace_conv, key_conv, lazy_conv);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to remove in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_CVec_StrZIOErrorZ list_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->list_meth, primary_namespace_conv, secondary_namespace_conv);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to list in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_CVec_StrZIOErrorZ ret_conv = *(LDKCResult_CVec_StrZIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+static void LDKKVStore_JCalls_cloned(LDKKVStore* new_obj) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKKVStore LDKKVStore_init (JNIEnv *env, jclass clz, jobject o) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKKVStore_JCalls *calls = MALLOC(sizeof(LDKKVStore_JCalls), "LDKKVStore_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->read_meth = (*env)->GetMethodID(env, c, "read", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J");
+       CHECK(calls->read_meth != NULL);
+       calls->write_meth = (*env)->GetMethodID(env, c, "write", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[B)J");
+       CHECK(calls->write_meth != NULL);
+       calls->remove_meth = (*env)->GetMethodID(env, c, "remove", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)J");
+       CHECK(calls->remove_meth != NULL);
+       calls->list_meth = (*env)->GetMethodID(env, c, "list", "(Ljava/lang/String;Ljava/lang/String;)J");
+       CHECK(calls->list_meth != NULL);
+
+       LDKKVStore ret = {
+               .this_arg = (void*) calls,
+               .read = read_LDKKVStore_jcall,
+               .write = write_LDKKVStore_jcall,
+               .remove = remove_LDKKVStore_jcall,
+               .list = list_LDKKVStore_jcall,
+               .free = LDKKVStore_JCalls_free,
+       };
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKKVStore_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKKVStore *res_ptr = MALLOC(sizeof(LDKKVStore), "LDKKVStore");
+       *res_ptr = LDKKVStore_init(env, clz, o);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1read(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace, jstring key) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKStr key_conv = java_to_owned_str(env, key);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = (this_arg_conv->read)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv, key_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1write(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace, jstring key, int8_tArray buf) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKStr key_conv = java_to_owned_str(env, key);
+       LDKu8slice buf_ref;
+       buf_ref.datalen = (*env)->GetArrayLength(env, buf);
+       buf_ref.data = (*env)->GetByteArrayElements (env, buf, NULL);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = (this_arg_conv->write)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv, key_conv, buf_ref);
+       (*env)->ReleaseByteArrayElements(env, buf, (int8_t*)buf_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1remove(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace, jstring key, jboolean lazy) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKStr key_conv = java_to_owned_str(env, key);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = (this_arg_conv->remove)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv, key_conv, lazy);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1list(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = (this_arg_conv->list)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 typedef struct LDKPersister_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
@@ -13895,7 +14868,7 @@ static void LDKPersister_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCResult_NoneErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, const LDKChannelManager * channel_manager) {
+LDKCResult_NoneIOErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, const LDKChannelManager * channel_manager) {
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -13918,14 +14891,14 @@ LDKCResult_NoneErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, c
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_NoneErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, const LDKNetworkGraph * network_graph) {
+LDKCResult_NoneIOErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, const LDKNetworkGraph * network_graph) {
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -13948,14 +14921,14 @@ LDKCResult_NoneErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, con
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_NoneErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, const LDKWriteableScore * scorer) {
+LDKCResult_NoneIOErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, const LDKWriteableScore * scorer) {
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -13975,7 +14948,7 @@ LDKCResult_NoneErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, co
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -14023,7 +14996,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1manager
        channel_manager_conv.is_owned = ptr_is_owned(channel_manager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        channel_manager_conv.is_owned = false;
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = (this_arg_conv->persist_manager)(this_arg_conv->this_arg, &channel_manager_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -14037,7 +15010,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1graph(J
        network_graph_conv.is_owned = ptr_is_owned(network_graph);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        network_graph_conv.is_owned = false;
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = (this_arg_conv->persist_graph)(this_arg_conv->this_arg, &network_graph_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -14049,11 +15022,189 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1scorer(
        void* scorer_ptr = untag_ptr(scorer);
        if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
        LDKWriteableScore* scorer_conv = (LDKWriteableScore*)scorer_ptr;
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = (this_arg_conv->persist_scorer)(this_arg_conv->this_arg, scorer_conv);
        return tag_ptr(ret_conv, true);
 }
 
+typedef struct LDKPersist_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       jmethodID persist_new_channel_meth;
+       jmethodID update_persisted_channel_meth;
+} LDKPersist_JCalls;
+static void LDKPersist_JCalls_free(void* this_arg) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKOutPoint channel_id_var = channel_id;
+       int64_t channel_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
+       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
+       LDKChannelMonitor data_var = *data;
+       int64_t data_ref = 0;
+       data_var = ChannelMonitor_clone(&data_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
+       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
+       LDKMonitorUpdateId update_id_var = update_id;
+       int64_t update_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
+       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->persist_new_channel_meth, channel_id_ref, data_ref, update_id_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to persist_new_channel in LDKPersist from rust threw an exception.");
+       }
+       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, LDKChannelMonitorUpdate update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKOutPoint channel_id_var = channel_id;
+       int64_t channel_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
+       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
+       LDKChannelMonitorUpdate update_var = update;
+       int64_t update_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
+       update_ref = tag_ptr(update_var.inner, update_var.is_owned);
+       LDKChannelMonitor data_var = *data;
+       int64_t data_ref = 0;
+       data_var = ChannelMonitor_clone(&data_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
+       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
+       LDKMonitorUpdateId update_id_var = update_id;
+       int64_t update_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
+       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->update_persisted_channel_meth, channel_id_ref, update_ref, data_ref, update_id_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to update_persisted_channel in LDKPersist from rust threw an exception.");
+       }
+       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKPersist LDKPersist_init (JNIEnv *env, jclass clz, jobject o) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKPersist_JCalls *calls = MALLOC(sizeof(LDKPersist_JCalls), "LDKPersist_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->persist_new_channel_meth = (*env)->GetMethodID(env, c, "persist_new_channel", "(JJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       CHECK(calls->persist_new_channel_meth != NULL);
+       calls->update_persisted_channel_meth = (*env)->GetMethodID(env, c, "update_persisted_channel", "(JJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       CHECK(calls->update_persisted_channel_meth != NULL);
+
+       LDKPersist ret = {
+               .this_arg = (void*) calls,
+               .persist_new_channel = persist_new_channel_LDKPersist_jcall,
+               .update_persisted_channel = update_persisted_channel_LDKPersist_jcall,
+               .free = LDKPersist_JCalls_free,
+       };
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKPersist_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKPersist *res_ptr = MALLOC(sizeof(LDKPersist), "LDKPersist");
+       *res_ptr = LDKPersist_init(env, clz, o);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t data, int64_t update_id) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
+       LDKOutPoint channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = OutPoint_clone(&channel_id_conv);
+       LDKChannelMonitor data_conv;
+       data_conv.inner = untag_ptr(data);
+       data_conv.is_owned = ptr_is_owned(data);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
+       data_conv.is_owned = false;
+       LDKMonitorUpdateId update_id_conv;
+       update_id_conv.inner = untag_ptr(update_id);
+       update_id_conv.is_owned = ptr_is_owned(update_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
+       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t update, int64_t data, int64_t update_id) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
+       LDKOutPoint channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = OutPoint_clone(&channel_id_conv);
+       LDKChannelMonitorUpdate update_conv;
+       update_conv.inner = untag_ptr(update);
+       update_conv.is_owned = ptr_is_owned(update);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
+       update_conv = ChannelMonitorUpdate_clone(&update_conv);
+       LDKChannelMonitor data_conv;
+       data_conv.inner = untag_ptr(data);
+       data_conv.is_owned = ptr_is_owned(data);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
+       data_conv.is_owned = false;
+       LDKMonitorUpdateId update_id_conv;
+       update_id_conv.inner = untag_ptr(update_id);
+       update_id_conv.is_owned = ptr_is_owned(update_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
+       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, update_conv, &data_conv, update_id_conv));
+       return ret_conv;
+}
+
 typedef struct LDKFutureCallback_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
@@ -14422,7 +15573,7 @@ void best_block_updated_LDKConfirm_jcall(const void* this_arg, const uint8_t (*
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
+LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -14438,20 +15589,20 @@ LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ get_relevant_txids_LDKConfirm_jcall(con
                (*env)->ExceptionDescribe(env);
                (*env)->FatalError(env, "A call to get_relevant_txids in LDKConfirm from rust threw an exception.");
        }
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret_constr;
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret_constr;
        ret_constr.datalen = (*env)->GetArrayLength(env, ret);
        if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ Elements");
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ Elements");
        else
                ret_constr.data = NULL;
        int64_t* ret_vals = (*env)->GetLongArrayElements (env, ret, NULL);
-       for (size_t i = 0; i < ret_constr.datalen; i++) {
-               int64_t ret_conv_34 = ret_vals[i];
-               void* ret_conv_34_ptr = untag_ptr(ret_conv_34);
-               CHECK_ACCESS(ret_conv_34_ptr);
-               LDKC2Tuple_TxidCOption_BlockHashZZ ret_conv_34_conv = *(LDKC2Tuple_TxidCOption_BlockHashZZ*)(ret_conv_34_ptr);
-               FREE(untag_ptr(ret_conv_34));
-               ret_constr.data[i] = ret_conv_34_conv;
+       for (size_t x = 0; x < ret_constr.datalen; x++) {
+               int64_t ret_conv_49 = ret_vals[x];
+               void* ret_conv_49_ptr = untag_ptr(ret_conv_49);
+               CHECK_ACCESS(ret_conv_49_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ ret_conv_49_conv = *(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)(ret_conv_49_ptr);
+               FREE(untag_ptr(ret_conv_49));
+               ret_constr.data[x] = ret_conv_49_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -14547,198 +15698,20 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Confirm_1get_1relevant
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKConfirm* this_arg_conv = (LDKConfirm*)this_arg_ptr;
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret_var = (this_arg_conv->get_relevant_txids)(this_arg_conv->this_arg);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret_var = (this_arg_conv->get_relevant_txids)(this_arg_conv->this_arg);
        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++) {
-               LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv_34_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-               *ret_conv_34_conv = ret_var.data[i];
-               ret_arr_ptr[i] = tag_ptr(ret_conv_34_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
        return ret_arr;
 }
 
-typedef struct LDKPersist_JCalls {
-       atomic_size_t refcnt;
-       JavaVM *vm;
-       jweak o;
-       jmethodID persist_new_channel_meth;
-       jmethodID update_persisted_channel_meth;
-} LDKPersist_JCalls;
-static void LDKPersist_JCalls_free(void* this_arg) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
-       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
-               JNIEnv *env;
-               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-               if (get_jenv_res == JNI_EDETACHED) {
-                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-               } else {
-                       DO_ASSERT(get_jenv_res == JNI_OK);
-               }
-               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
-               if (get_jenv_res == JNI_EDETACHED) {
-                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-               }
-               FREE(j_calls);
-       }
-}
-LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
-       JNIEnv *env;
-       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-       } else {
-               DO_ASSERT(get_jenv_res == JNI_OK);
-       }
-       LDKOutPoint channel_id_var = channel_id;
-       int64_t channel_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
-       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
-       CHECK(obj != NULL);
-       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->persist_new_channel_meth, channel_id_ref, data_ref, update_id_ref);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to persist_new_channel in LDKPersist from rust threw an exception.");
-       }
-       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-       }
-       return ret_conv;
-}
-LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, LDKChannelMonitorUpdate update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
-       JNIEnv *env;
-       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-       } else {
-               DO_ASSERT(get_jenv_res == JNI_OK);
-       }
-       LDKOutPoint channel_id_var = channel_id;
-       int64_t channel_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
-       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
-       LDKChannelMonitorUpdate update_var = update;
-       int64_t update_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
-       update_ref = tag_ptr(update_var.inner, update_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
-       CHECK(obj != NULL);
-       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->update_persisted_channel_meth, channel_id_ref, update_ref, data_ref, update_id_ref);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to update_persisted_channel in LDKPersist from rust threw an exception.");
-       }
-       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-       }
-       return ret_conv;
-}
-static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) new_obj->this_arg;
-       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
-}
-static inline LDKPersist LDKPersist_init (JNIEnv *env, jclass clz, jobject o) {
-       jclass c = (*env)->GetObjectClass(env, o);
-       CHECK(c != NULL);
-       LDKPersist_JCalls *calls = MALLOC(sizeof(LDKPersist_JCalls), "LDKPersist_JCalls");
-       atomic_init(&calls->refcnt, 1);
-       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
-       calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->persist_new_channel_meth = (*env)->GetMethodID(env, c, "persist_new_channel", "(JJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
-       CHECK(calls->persist_new_channel_meth != NULL);
-       calls->update_persisted_channel_meth = (*env)->GetMethodID(env, c, "update_persisted_channel", "(JJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
-       CHECK(calls->update_persisted_channel_meth != NULL);
-
-       LDKPersist ret = {
-               .this_arg = (void*) calls,
-               .persist_new_channel = persist_new_channel_LDKPersist_jcall,
-               .update_persisted_channel = update_persisted_channel_LDKPersist_jcall,
-               .free = LDKPersist_JCalls_free,
-       };
-       return ret;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKPersist_1new(JNIEnv *env, jclass clz, jobject o) {
-       LDKPersist *res_ptr = MALLOC(sizeof(LDKPersist), "LDKPersist");
-       *res_ptr = LDKPersist_init(env, clz, o);
-       return tag_ptr(res_ptr, true);
-}
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t data, int64_t update_id) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
-       LDKOutPoint channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = OutPoint_clone(&channel_id_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv));
-       return ret_conv;
-}
-
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t update, int64_t data, int64_t update_id) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
-       LDKOutPoint channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = OutPoint_clone(&channel_id_conv);
-       LDKChannelMonitorUpdate update_conv;
-       update_conv.inner = untag_ptr(update);
-       update_conv.is_owned = ptr_is_owned(update);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
-       update_conv = ChannelMonitorUpdate_clone(&update_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, update_conv, &data_conv, update_id_conv));
-       return ret_conv;
-}
-
 typedef struct LDKEventHandler_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
@@ -14907,32 +15880,51 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EventsProvider_1process_1pendi
        (this_arg_conv->process_pending_events)(this_arg_conv->this_arg, handler_conv);
 }
 
-static jclass LDKRetry_Attempts_class = NULL;
-static jmethodID LDKRetry_Attempts_meth = NULL;
-static jclass LDKRetry_Timeout_class = NULL;
-static jmethodID LDKRetry_Timeout_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKRetry_init (JNIEnv *env, jclass clz) {
-       LDKRetry_Attempts_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Attempts"));
-       CHECK(LDKRetry_Attempts_class != NULL);
-       LDKRetry_Attempts_meth = (*env)->GetMethodID(env, LDKRetry_Attempts_class, "<init>", "(J)V");
-       CHECK(LDKRetry_Attempts_meth != NULL);
-       LDKRetry_Timeout_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Timeout"));
-       CHECK(LDKRetry_Timeout_class != NULL);
-       LDKRetry_Timeout_meth = (*env)->GetMethodID(env, LDKRetry_Timeout_class, "<init>", "(J)V");
-       CHECK(LDKRetry_Timeout_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRetry_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKRetry *obj = (LDKRetry*)untag_ptr(ptr);
+static jclass LDKFailureCode_TemporaryNodeFailure_class = NULL;
+static jmethodID LDKFailureCode_TemporaryNodeFailure_meth = NULL;
+static jclass LDKFailureCode_RequiredNodeFeatureMissing_class = NULL;
+static jmethodID LDKFailureCode_RequiredNodeFeatureMissing_meth = NULL;
+static jclass LDKFailureCode_IncorrectOrUnknownPaymentDetails_class = NULL;
+static jmethodID LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth = NULL;
+static jclass LDKFailureCode_InvalidOnionPayload_class = NULL;
+static jmethodID LDKFailureCode_InvalidOnionPayload_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKFailureCode_init (JNIEnv *env, jclass clz) {
+       LDKFailureCode_TemporaryNodeFailure_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$TemporaryNodeFailure"));
+       CHECK(LDKFailureCode_TemporaryNodeFailure_class != NULL);
+       LDKFailureCode_TemporaryNodeFailure_meth = (*env)->GetMethodID(env, LDKFailureCode_TemporaryNodeFailure_class, "<init>", "()V");
+       CHECK(LDKFailureCode_TemporaryNodeFailure_meth != NULL);
+       LDKFailureCode_RequiredNodeFeatureMissing_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$RequiredNodeFeatureMissing"));
+       CHECK(LDKFailureCode_RequiredNodeFeatureMissing_class != NULL);
+       LDKFailureCode_RequiredNodeFeatureMissing_meth = (*env)->GetMethodID(env, LDKFailureCode_RequiredNodeFeatureMissing_class, "<init>", "()V");
+       CHECK(LDKFailureCode_RequiredNodeFeatureMissing_meth != NULL);
+       LDKFailureCode_IncorrectOrUnknownPaymentDetails_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$IncorrectOrUnknownPaymentDetails"));
+       CHECK(LDKFailureCode_IncorrectOrUnknownPaymentDetails_class != NULL);
+       LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth = (*env)->GetMethodID(env, LDKFailureCode_IncorrectOrUnknownPaymentDetails_class, "<init>", "()V");
+       CHECK(LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth != NULL);
+       LDKFailureCode_InvalidOnionPayload_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$InvalidOnionPayload"));
+       CHECK(LDKFailureCode_InvalidOnionPayload_class != NULL);
+       LDKFailureCode_InvalidOnionPayload_meth = (*env)->GetMethodID(env, LDKFailureCode_InvalidOnionPayload_class, "<init>", "(J)V");
+       CHECK(LDKFailureCode_InvalidOnionPayload_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKFailureCode_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKFailureCode *obj = (LDKFailureCode*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKRetry_Attempts: {
-                       int64_t attempts_conv = obj->attempts;
-                       return (*env)->NewObject(env, LDKRetry_Attempts_class, LDKRetry_Attempts_meth, attempts_conv);
+               case LDKFailureCode_TemporaryNodeFailure: {
+                       return (*env)->NewObject(env, LDKFailureCode_TemporaryNodeFailure_class, LDKFailureCode_TemporaryNodeFailure_meth);
                }
-               case LDKRetry_Timeout: {
-                       int64_t timeout_conv = obj->timeout;
-                       return (*env)->NewObject(env, LDKRetry_Timeout_class, LDKRetry_Timeout_meth, timeout_conv);
+               case LDKFailureCode_RequiredNodeFeatureMissing: {
+                       return (*env)->NewObject(env, LDKFailureCode_RequiredNodeFeatureMissing_class, LDKFailureCode_RequiredNodeFeatureMissing_meth);
+               }
+               case LDKFailureCode_IncorrectOrUnknownPaymentDetails: {
+                       return (*env)->NewObject(env, LDKFailureCode_IncorrectOrUnknownPaymentDetails_class, LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth);
+               }
+               case LDKFailureCode_InvalidOnionPayload: {
+                       int64_t invalid_onion_payload_ref = tag_ptr(&obj->invalid_onion_payload, false);
+                       return (*env)->NewObject(env, LDKFailureCode_InvalidOnionPayload_class, LDKFailureCode_InvalidOnionPayload_meth, invalid_onion_payload_ref);
                }
                default: abort();
        }
@@ -15989,7 +16981,7 @@ LDKInitFeatures provided_init_features_LDKChannelMessageHandler_jcall(const void
        }
        return ret_conv;
 }
-LDKCOption_CVec_ChainHashZZ get_genesis_hashes_LDKChannelMessageHandler_jcall(const void* this_arg) {
+LDKCOption_CVec_ThirtyTwoBytesZZ get_genesis_hashes_LDKChannelMessageHandler_jcall(const void* this_arg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -16007,7 +16999,7 @@ LDKCOption_CVec_ChainHashZZ get_genesis_hashes_LDKChannelMessageHandler_jcall(co
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCOption_CVec_ChainHashZZ ret_conv = *(LDKCOption_CVec_ChainHashZZ*)(ret_ptr);
+       LDKCOption_CVec_ThirtyTwoBytesZZ ret_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -16637,7 +17629,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1get_
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKChannelMessageHandler* this_arg_conv = (LDKChannelMessageHandler*)this_arg_ptr;
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
        *ret_copy = (this_arg_conv->get_genesis_hashes)(this_arg_conv->this_arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -18556,6 +19548,107 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPayee_1ref_1from_1ptr(JN
                default: abort();
        }
 }
+typedef struct LDKScore_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       LDKScoreLookUp_JCalls* ScoreLookUp;
+       LDKScoreUpdate_JCalls* ScoreUpdate;
+       jmethodID write_meth;
+} LDKScore_JCalls;
+static void LDKScore_JCalls_free(void* this_arg) {
+       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
+       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       int8_tArray ret = (*env)->CallObjectMethod(env, obj, j_calls->write_meth);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to write in LDKScore from rust threw an exception.");
+       }
+       LDKCVec_u8Z ret_ref;
+       ret_ref.datalen = (*env)->GetArrayLength(env, ret);
+       ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, ret, 0, ret_ref.datalen, ret_ref.data);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_ref;
+}
+static void LDKScore_JCalls_cloned(LDKScore* new_obj) {
+       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+       atomic_fetch_add_explicit(&j_calls->ScoreLookUp->refcnt, 1, memory_order_release);
+       atomic_fetch_add_explicit(&j_calls->ScoreUpdate->refcnt, 1, memory_order_release);
+}
+static inline LDKScore LDKScore_init (JNIEnv *env, jclass clz, jobject o, jobject ScoreLookUp, jobject ScoreUpdate) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKScore_JCalls *calls = MALLOC(sizeof(LDKScore_JCalls), "LDKScore_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->write_meth = (*env)->GetMethodID(env, c, "write", "()[B");
+       CHECK(calls->write_meth != NULL);
+
+       LDKScore ret = {
+               .this_arg = (void*) calls,
+               .write = write_LDKScore_jcall,
+               .free = LDKScore_JCalls_free,
+               .ScoreLookUp = LDKScoreLookUp_init(env, clz, ScoreLookUp),
+               .ScoreUpdate = LDKScoreUpdate_init(env, clz, ScoreUpdate),
+       };
+       calls->ScoreLookUp = ret.ScoreLookUp.this_arg;
+       calls->ScoreUpdate = ret.ScoreUpdate.this_arg;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1new(JNIEnv *env, jclass clz, jobject o, jobject ScoreLookUp, jobject ScoreUpdate) {
+       LDKScore *res_ptr = MALLOC(sizeof(LDKScore), "LDKScore");
+       *res_ptr = LDKScore_init(env, clz, o, ScoreLookUp, ScoreUpdate);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1get_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKScore *inp = (LDKScore *)untag_ptr(arg);
+       return tag_ptr(&inp->ScoreLookUp, false);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1get_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKScore *inp = (LDKScore *)untag_ptr(arg);
+       return tag_ptr(&inp->ScoreUpdate, false);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Score_1write(JNIEnv *env, jclass clz, int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKCVec_u8Z ret_var = (this_arg_conv->write)(this_arg_conv->this_arg);
+       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;
+}
+
 static jclass LDKDestination_Node_class = NULL;
 static jmethodID LDKDestination_Node_meth = NULL;
 static jclass LDKDestination_BlindedPath_class = NULL;
@@ -18983,7 +20076,7 @@ LDKCResult_CVec_UtxoZNoneZ list_confirmed_utxos_LDKWalletSource_jcall(const void
        }
        return ret_conv;
 }
-LDKCResult_ScriptNoneZ get_change_script_LDKWalletSource_jcall(const void* this_arg) {
+LDKCResult_CVec_u8ZNoneZ get_change_script_LDKWalletSource_jcall(const void* this_arg) {
        LDKWalletSource_JCalls *j_calls = (LDKWalletSource_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -19001,7 +20094,7 @@ LDKCResult_ScriptNoneZ get_change_script_LDKWalletSource_jcall(const void* this_
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_ScriptNoneZ ret_conv = *(LDKCResult_ScriptNoneZ*)(ret_ptr);
+       LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -19082,7 +20175,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WalletSource_1get_1change_1
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKWalletSource* this_arg_conv = (LDKWalletSource*)this_arg_ptr;
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
        *ret_conv = (this_arg_conv->get_change_script)(this_arg_conv->this_arg);
        return tag_ptr(ret_conv, true);
 }
@@ -19350,45 +20443,45 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Str_1free(JNIEnv *env, jclass
        Str_free(dummy);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1some(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_some(o);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1some(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_some(o);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_DurationZ _res_conv = *(LDKCOption_DurationZ*)(_res_ptr);
+       LDKCOption_u64Z _res_conv = *(LDKCOption_u64Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_DurationZ_free(_res_conv);
+       COption_u64Z_free(_res_conv);
 }
 
-static inline uint64_t COption_DurationZ_clone_ptr(LDKCOption_DurationZ *NONNULL_PTR arg) {
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_clone(arg);
+static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_DurationZ* arg_conv = (LDKCOption_DurationZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_DurationZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_u64Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_DurationZ* orig_conv = (LDKCOption_DurationZ*)untag_ptr(orig);
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)untag_ptr(orig);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -19413,49 +20506,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BlindedPathZ_1free(JNIEn
        CVec_BlindedPathZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1some(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_some(o);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_u64Z _res_conv = *(LDKCOption_u64Z*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_u64Z_free(_res_conv);
-}
-
-static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u64Z_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)untag_ptr(orig);
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKRefund o_conv;
        o_conv.inner = untag_ptr(o);
@@ -19511,6 +20561,59 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseE
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKRetry o_conv = *(LDKRetry*)(o_ptr);
+       o_conv = Retry_clone((LDKRetry*)untag_ptr(o));
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RetryDecodeErrorZ* o_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_RetryDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_RetryDecodeErrorZ _res_conv = *(LDKCResult_RetryDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_RetryDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_RetryDecodeErrorZ_clone_ptr(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RetryDecodeErrorZ* arg_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_RetryDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_RetryDecodeErrorZ* orig_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1ok(JNIEnv *env, jclass clz) {
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
        *ret_conv = CResult_NoneAPIErrorZ_ok();
@@ -19600,48 +20703,48 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1APIErrorZ_1free(JNIEnv *
        CVec_APIErrorZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_some(o_ref);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_some(o_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentSecretZ _res_conv = *(LDKCOption_PaymentSecretZ*)(_res_ptr);
+       LDKCOption_ThirtyTwoBytesZ _res_conv = *(LDKCOption_ThirtyTwoBytesZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_PaymentSecretZ_free(_res_conv);
+       COption_ThirtyTwoBytesZ_free(_res_conv);
 }
 
-static inline uint64_t COption_PaymentSecretZ_clone_ptr(LDKCOption_PaymentSecretZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_clone(arg);
+static inline uint64_t COption_ThirtyTwoBytesZ_clone_ptr(LDKCOption_ThirtyTwoBytesZ *NONNULL_PTR arg) {
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentSecretZ* arg_conv = (LDKCOption_PaymentSecretZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentSecretZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_ThirtyTwoBytesZ* arg_conv = (LDKCOption_ThirtyTwoBytesZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_ThirtyTwoBytesZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentSecretZ* orig_conv = (LDKCOption_PaymentSecretZ*)untag_ptr(orig);
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_ThirtyTwoBytesZ* orig_conv = (LDKCOption_ThirtyTwoBytesZ*)untag_ptr(orig);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -19755,6 +20858,234 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFiel
        return tag_ptr(ret_conv, true);
 }
 
+static inline uint64_t C2Tuple_u64CVec_u8ZZ_clone_ptr(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u64CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+       *ret_conv = C2Tuple_u64CVec_u8ZZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u64CVec_u8ZZ* arg_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_u64CVec_u8ZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_u64CVec_u8ZZ* orig_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(orig);
+       LDKC2Tuple_u64CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+       *ret_conv = C2Tuple_u64CVec_u8ZZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1new(JNIEnv *env, jclass clz, int64_t a, int8_tArray b) {
+       LDKCVec_u8Z b_ref;
+       b_ref.datalen = (*env)->GetArrayLength(env, b);
+       b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data);
+       LDKC2Tuple_u64CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+       *ret_conv = C2Tuple_u64CVec_u8ZZ_new(a, b_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_u64CVec_u8ZZ _res_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_u64CVec_u8ZZ_free(_res_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u64CVec_1u8ZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_23 = _res_vals[x];
+               void* _res_conv_23_ptr = untag_ptr(_res_conv_23);
+               CHECK_ACCESS(_res_conv_23_ptr);
+               LDKC2Tuple_u64CVec_u8ZZ _res_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(_res_conv_23_ptr);
+               FREE(untag_ptr(_res_conv_23));
+               _res_constr.data[x] = _res_conv_23_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_u64CVec_u8ZZZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRecipientOnionFields o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = RecipientOnionFields_clone(&o_conv);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RecipientOnionFieldsNoneZ* o_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_RecipientOnionFieldsNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_RecipientOnionFieldsNoneZ _res_conv = *(LDKCResult_RecipientOnionFieldsNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_RecipientOnionFieldsNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_RecipientOnionFieldsNoneZ_clone_ptr(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR arg) {
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RecipientOnionFieldsNoneZ* arg_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_RecipientOnionFieldsNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_RecipientOnionFieldsNoneZ* orig_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(orig);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
+       LDKCVec_ThirtyTwoBytesZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
+       else
+               _res_constr.data = NULL;
+       for (size_t i = 0; i < _res_constr.datalen; i++) {
+               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
+               LDKThirtyTwoBytes _res_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
+               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
+               _res_constr.data[i] = _res_conv_8_ref;
+       }
+       CVec_ThirtyTwoBytesZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1some(JNIEnv *env, jclass clz, jobjectArray o) {
+       LDKCVec_ThirtyTwoBytesZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
+       else
+               o_constr.data = NULL;
+       for (size_t i = 0; i < o_constr.datalen; i++) {
+               int8_tArray o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
+               LDKThirtyTwoBytes o_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, o_conv_8) == 32);
+               (*env)->GetByteArrayRegion(env, o_conv_8, 0, 32, o_conv_8_ref.data);
+               o_constr.data[i] = o_conv_8_ref;
+       }
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_some(o_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_CVec_ThirtyTwoBytesZZ _res_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_CVec_ThirtyTwoBytesZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_CVec_ThirtyTwoBytesZZ_clone_ptr(LDKCOption_CVec_ThirtyTwoBytesZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ* arg_conv = (LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_CVec_ThirtyTwoBytesZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ* orig_conv = (LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(orig);
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKThirtyTwoBytes o_ref;
+       CHECK((*env)->GetArrayLength(env, o) == 32);
+       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesNoneZ* o_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ThirtyTwoBytesNoneZ _res_conv = *(LDKCResult_ThirtyTwoBytesNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ThirtyTwoBytesNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ThirtyTwoBytesNoneZ_clone_ptr(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesNoneZ* arg_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesNoneZ* orig_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKBlindedPayInfo o_conv;
        o_conv.inner = untag_ptr(o);
@@ -20010,152 +21341,135 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TxOutZ_1free(JNIEnv *env
        CVec_TxOutZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1some(JNIEnv *env, jclass clz, int32_t o) {
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_some(o);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1some(JNIEnv *env, jclass clz, int32_t o) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_some(o);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_PackedLockTimeZ _res_conv = *(LDKCOption_PackedLockTimeZ*)(_res_ptr);
+       LDKCOption_u32Z _res_conv = *(LDKCOption_u32Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_PackedLockTimeZ_free(_res_conv);
+       COption_u32Z_free(_res_conv);
 }
 
-static inline uint64_t COption_PackedLockTimeZ_clone_ptr(LDKCOption_PackedLockTimeZ *NONNULL_PTR arg) {
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_clone(arg);
+static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PackedLockTimeZ* arg_conv = (LDKCOption_PackedLockTimeZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PackedLockTimeZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_u32Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PackedLockTimeZ* orig_conv = (LDKCOption_PackedLockTimeZ*)untag_ptr(orig);
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)untag_ptr(orig);
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone(arg);
+static inline uint64_t C2Tuple_CVec_u8ZusizeZ_clone_ptr(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR arg) {
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = C2Tuple_CVec_u8ZusizeZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* arg_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_CVec_u8ZusizeZ* arg_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_CVec_u8ZusizeZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* orig_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(orig);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_CVec_u8ZusizeZ* orig_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(orig);
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = C2Tuple_CVec_u8ZusizeZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKCVec_u8Z a_ref;
        a_ref.datalen = (*env)->GetArrayLength(env, a);
        a_ref.data = MALLOC(a_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, a, 0, a_ref.datalen, a_ref.data);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_new(a_ref, b);
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = C2Tuple_CVec_u8ZusizeZ_new(a_ref, b);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ _res_conv = *(LDKC2Tuple_PartiallySignedTransactionusizeZ*)(_res_ptr);
+       LDKC2Tuple_CVec_u8ZusizeZ _res_conv = *(LDKC2Tuple_CVec_u8ZusizeZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PartiallySignedTransactionusizeZ_free(_res_conv);
+       C2Tuple_CVec_u8ZusizeZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ o_conv = *(LDKC2Tuple_PartiallySignedTransactionusizeZ*)(o_ptr);
-       o_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone((LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_ok(o_conv);
+       LDKC2Tuple_CVec_u8ZusizeZ o_conv = *(LDKC2Tuple_CVec_u8ZusizeZ*)(o_ptr);
+       o_conv = C2Tuple_CVec_u8ZusizeZ_clone((LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* o_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* o_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ _res_conv = *(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)(_res_ptr);
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ _res_conv = *(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_free(_res_conv);
+       CResult_C2Tuple_CVec_u8ZusizeZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* arg_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* arg_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* orig_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* orig_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PaymentPreimageZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_PaymentPreimageZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_PaymentPreimageZ Elements");
-       else
-               _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKThirtyTwoBytes _res_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
-               _res_constr.data[i] = _res_conv_8_ref;
-       }
-       CVec_PaymentPreimageZ_free(_res_constr);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1ok(JNIEnv *env, jclass clz) {
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
        *ret_conv = CResult_NoneNoneZ_ok();
@@ -20201,166 +21515,166 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone(J
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SignatureZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_SignatureZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ECDSASignatureZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
+       LDKCVec_ECDSASignatureZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                _res_constr.data = NULL;
        for (size_t i = 0; i < _res_constr.datalen; i++) {
                int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKSignature _res_conv_8_ref;
+               LDKECDSASignature _res_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, _res_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 64, _res_conv_8_ref.compact_form);
                _res_constr.data[i] = _res_conv_8_ref;
        }
-       CVec_SignatureZ_free(_res_constr);
+       CVec_ECDSASignatureZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(arg);
+static inline uint64_t C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* arg_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* arg_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(orig);
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* orig_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(orig);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, jobjectArray b) {
-       LDKSignature a_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, jobjectArray b) {
+       LDKECDSASignature a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 64);
        (*env)->GetByteArrayRegion(env, a, 0, 64, a_ref.compact_form);
-       LDKCVec_SignatureZ b_constr;
+       LDKCVec_ECDSASignatureZ b_constr;
        b_constr.datalen = (*env)->GetArrayLength(env, b);
        if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                b_constr.data = NULL;
        for (size_t i = 0; i < b_constr.datalen; i++) {
                int8_tArray b_conv_8 = (*env)->GetObjectArrayElement(env, b, i);
-               LDKSignature b_conv_8_ref;
+               LDKECDSASignature b_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, b_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, b_conv_8, 0, 64, b_conv_8_ref.compact_form);
                b_constr.data[i] = b_conv_8_ref;
        }
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_new(a_ref, b_constr);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_new(a_ref, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_SignatureCVec_SignatureZZ _res_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(_res_ptr);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ _res_conv = *(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_SignatureCVec_SignatureZZ_free(_res_conv);
+       C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_SignatureCVec_SignatureZZ o_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(o_ptr);
-       o_conv = C2Tuple_SignatureCVec_SignatureZZ_clone((LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(o_conv);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ o_conv = *(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)(o_ptr);
+       o_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone((LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv);
+       CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKSignature o_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKECDSASignature o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 64);
        (*env)->GetByteArrayRegion(env, o, 0, 64, o_ref.compact_form);
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_ok(o_ref);
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_SignatureNoneZ* o_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_SignatureNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ECDSASignatureNoneZ* o_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ECDSASignatureNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_SignatureNoneZ _res_conv = *(LDKCResult_SignatureNoneZ*)(_res_ptr);
+       LDKCResult_ECDSASignatureNoneZ _res_conv = *(LDKCResult_ECDSASignatureNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_SignatureNoneZ_free(_res_conv);
+       CResult_ECDSASignatureNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg) {
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_clone(arg);
+static inline uint64_t CResult_ECDSASignatureNoneZ_clone_ptr(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_SignatureNoneZ* arg_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_SignatureNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ECDSASignatureNoneZ* arg_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ECDSASignatureNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(orig);
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ECDSASignatureNoneZ* orig_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(orig);
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -20412,101 +21726,53 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1cl
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
        LDKBigEndianScalar o_conv = *(LDKBigEndianScalar*)(o_ptr);
        // WARNING: we may need a move here but no clone is available for LDKBigEndianScalar
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_some(o_conv);
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_ScalarZ _res_conv = *(LDKCOption_ScalarZ*)(_res_ptr);
+       LDKCOption_BigEndianScalarZ _res_conv = *(LDKCOption_BigEndianScalarZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_ScalarZ_free(_res_conv);
+       COption_BigEndianScalarZ_free(_res_conv);
 }
 
-static inline uint64_t COption_ScalarZ_clone_ptr(LDKCOption_ScalarZ *NONNULL_PTR arg) {
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_clone(arg);
+static inline uint64_t COption_BigEndianScalarZ_clone_ptr(LDKCOption_BigEndianScalarZ *NONNULL_PTR arg) {
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_ScalarZ* arg_conv = (LDKCOption_ScalarZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_ScalarZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_BigEndianScalarZ* arg_conv = (LDKCOption_BigEndianScalarZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_BigEndianScalarZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_ScalarZ* orig_conv = (LDKCOption_ScalarZ*)untag_ptr(orig);
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_BigEndianScalarZ* orig_conv = (LDKCOption_BigEndianScalarZ*)untag_ptr(orig);
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_ok(o_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_SharedSecretNoneZ* o_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_SharedSecretNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_SharedSecretNoneZ _res_conv = *(LDKCResult_SharedSecretNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_SharedSecretNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_SharedSecretNoneZ_clone_ptr(LDKCResult_SharedSecretNoneZ *NONNULL_PTR arg) {
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_SharedSecretNoneZ* arg_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_SharedSecretNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_SharedSecretNoneZ* orig_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(orig);
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1U5Z_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
        LDKCVec_U5Z _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -20572,6 +21838,54 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatu
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKSchnorrSignature o_ref;
+       CHECK((*env)->GetArrayLength(env, o) == 64);
+       (*env)->GetByteArrayRegion(env, o, 0, 64, o_ref.compact_form);
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SchnorrSignatureNoneZ* o_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SchnorrSignatureNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_SchnorrSignatureNoneZ _res_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_SchnorrSignatureNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_SchnorrSignatureNoneZ_clone_ptr(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SchnorrSignatureNoneZ* arg_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SchnorrSignatureNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_SchnorrSignatureNoneZ* orig_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(orig);
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChannelSignerDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -20628,52 +21942,52 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChan
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKCVec_u8Z o_ref;
        o_ref.datalen = (*env)->GetArrayLength(env, o);
        o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_ok(o_ref);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_ScriptNoneZ* o_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_ScriptNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_u8ZNoneZ* o_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_u8ZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_ScriptNoneZ _res_conv = *(LDKCResult_ScriptNoneZ*)(_res_ptr);
+       LDKCResult_CVec_u8ZNoneZ _res_conv = *(LDKCResult_CVec_u8ZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_ScriptNoneZ_free(_res_conv);
+       CResult_CVec_u8ZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_ScriptNoneZ_clone_ptr(LDKCResult_ScriptNoneZ *NONNULL_PTR arg) {
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_u8ZNoneZ_clone_ptr(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_ScriptNoneZ* arg_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_ScriptNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_u8ZNoneZ* arg_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_u8ZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_ScriptNoneZ* orig_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(orig);
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_u8ZNoneZ* orig_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -20727,6 +22041,92 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNone
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1some(JNIEnv *env, jclass clz, int16_t o) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_some(o);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_u16Z _res_conv = *(LDKCOption_u16Z*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_u16Z_free(_res_conv);
+}
+
+static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_u16Z_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)untag_ptr(orig);
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1some(JNIEnv *env, jclass clz, jboolean o) {
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_some(o);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_boolZ _res_conv = *(LDKCOption_boolZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_boolZ_free(_res_conv);
+}
+
+static inline uint64_t COption_boolZ_clone_ptr(LDKCOption_boolZ *NONNULL_PTR arg) {
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_boolZ* arg_conv = (LDKCOption_boolZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_boolZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_boolZ* orig_conv = (LDKCOption_boolZ*)untag_ptr(orig);
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CVec_1u8ZZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
        LDKCVec_CVec_u8ZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -20858,55 +22258,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKCVec_u8Z o_ref;
-       o_ref.datalen = (*env)->GetArrayLength(env, o);
-       o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_ok(o_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PartiallySignedTransactionNoneZ* o_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PartiallySignedTransactionNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_PartiallySignedTransactionNoneZ _res_conv = *(LDKCResult_PartiallySignedTransactionNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_PartiallySignedTransactionNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_PartiallySignedTransactionNoneZ_clone_ptr(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR arg) {
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PartiallySignedTransactionNoneZ* arg_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PartiallySignedTransactionNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PartiallySignedTransactionNoneZ* orig_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(orig);
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKTransaction o_ref;
        o_ref.datalen = (*env)->GetArrayLength(env, o);
@@ -20987,49 +22338,49 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1WriteableScoreZ_1free
        COption_WriteableScoreZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1ok(JNIEnv *env, jclass clz) {
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_ok();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1ok(JNIEnv *env, jclass clz) {
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_ok();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKIOError e_conv = LDKIOError_from_java(env, e);
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_err(e_conv);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_NoneErrorZ* o_conv = (LDKCResult_NoneErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_NoneErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneIOErrorZ* o_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneIOErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_NoneErrorZ _res_conv = *(LDKCResult_NoneErrorZ*)(_res_ptr);
+       LDKCResult_NoneIOErrorZ _res_conv = *(LDKCResult_NoneIOErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_NoneErrorZ_free(_res_conv);
+       CResult_NoneIOErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg) {
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_clone(arg);
+static inline uint64_t CResult_NoneIOErrorZ_clone_ptr(LDKCResult_NoneIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_NoneErrorZ* arg_conv = (LDKCResult_NoneErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_NoneErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneIOErrorZ* arg_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneIOErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_NoneErrorZ* orig_conv = (LDKCResult_NoneErrorZ*)untag_ptr(orig);
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_NoneIOErrorZ* orig_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(orig);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -21310,49 +22661,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHopZ_1free(JNIEnv *
        CVec_RouteHopZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1some(JNIEnv *env, jclass clz, int32_t o) {
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_some(o);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_u32Z _res_conv = *(LDKCOption_u32Z*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_u32Z_free(_res_conv);
-}
-
-static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u32Z_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)untag_ptr(orig);
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PathZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
        LDKCVec_PathZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -21933,31 +23241,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u64ZZ_
        return ret_ref;
 }
 
-static inline uint64_t C2Tuple_Z_clone_ptr(LDKC2Tuple_Z *NONNULL_PTR arg) {
-       LDKC2Tuple_Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_Z), "LDKC2Tuple_Z");
-       *ret_conv = C2Tuple_Z_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_Z* arg_conv = (LDKC2Tuple_Z*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_Z_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_Z* orig_conv = (LDKC2Tuple_Z*)untag_ptr(orig);
-       LDKC2Tuple_Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_Z), "LDKC2Tuple_Z");
-       *ret_conv = C2Tuple_Z_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1new(JNIEnv *env, jclass clz, int16_tArray a, int16_tArray b) {
-       LDKEightU16s a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 8);
-       (*env)->GetShortArrayRegion(env, a, 0, 8, a_ref.data);
-       LDKEightU16s b_ref;
-       CHECK((*env)->GetArrayLength(env, b) == 8);
-       (*env)->GetShortArrayRegion(env, b, 0, 8, b_ref.data);
+       LDKThirtyTwoU16s a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 32);
+       (*env)->GetShortArrayRegion(env, a, 0, 32, a_ref.data);
+       LDKThirtyTwoU16s b_ref;
+       CHECK((*env)->GetArrayLength(env, b) == 32);
+       (*env)->GetShortArrayRegion(env, b, 0, 32, b_ref.data);
        LDKC2Tuple_Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_Z), "LDKC2Tuple_Z");
        *ret_conv = C2Tuple_Z_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
@@ -21972,88 +23262,93 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1free(JNIEnv *env,
        C2Tuple_Z_free(_res_conv);
 }
 
-static inline uint64_t C2Tuple__u168_u168Z_clone_ptr(LDKC2Tuple__u168_u168Z *NONNULL_PTR arg) {
-       LDKC2Tuple__u168_u168Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-       *ret_conv = C2Tuple__u168_u168Z_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1new(JNIEnv *env, jclass clz, int16_tArray a, int16_tArray b) {
+       LDKThirtyTwoU16s a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 32);
+       (*env)->GetShortArrayRegion(env, a, 0, 32, a_ref.data);
+       LDKThirtyTwoU16s b_ref;
+       CHECK((*env)->GetArrayLength(env, b) == 32);
+       (*env)->GetShortArrayRegion(env, b, 0, 32, b_ref.data);
+       LDKC2Tuple__u1632_u1632Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u1632_u1632Z), "LDKC2Tuple__u1632_u1632Z");
+       *ret_conv = C2Tuple__u1632_u1632Z_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple__u168_u168Z* arg_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple__u168_u168Z_clone_ptr(arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple__u1632_u1632Z _res_conv = *(LDKC2Tuple__u1632_u1632Z*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple__u1632_u1632Z_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple__u168_u168Z* orig_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(orig);
-       LDKC2Tuple__u168_u168Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-       *ret_conv = C2Tuple__u168_u168Z_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple__u1632_u1632Z o_conv = *(LDKC2Tuple__u1632_u1632Z*)(o_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKC2Tuple__u1632_u1632Z
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1new(JNIEnv *env, jclass clz, int16_tArray a, int16_tArray b) {
-       LDKEightU16s a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 8);
-       (*env)->GetShortArrayRegion(env, a, 0, 8, a_ref.data);
-       LDKEightU16s b_ref;
-       CHECK((*env)->GetArrayLength(env, b) == 8);
-       (*env)->GetShortArrayRegion(env, b, 0, 8, b_ref.data);
-       LDKC2Tuple__u168_u168Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-       *ret_conv = C2Tuple__u168_u168Z_new(a_ref, b_ref);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple__u168_u168Z _res_conv = *(LDKC2Tuple__u168_u168Z*)(_res_ptr);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ _res_conv = *(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple__u168_u168Z_free(_res_conv);
+       COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1some(JNIEnv *env, jclass clz, int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC2Tuple__u168_u168Z o_conv = *(LDKC2Tuple__u168_u168Z*)(o_ptr);
-       o_conv = C2Tuple__u168_u168Z_clone((LDKC2Tuple__u168_u168Z*)untag_ptr(o));
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_some(o_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1some(JNIEnv *env, jclass clz, double o) {
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_some(o);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ _res_conv = *(LDKCOption_C2Tuple_EightU16sEightU16sZZ*)(_res_ptr);
+       LDKCOption_f64Z _res_conv = *(LDKCOption_f64Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_C2Tuple_EightU16sEightU16sZZ_free(_res_conv);
+       COption_f64Z_free(_res_conv);
 }
 
-static inline uint64_t COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(LDKCOption_C2Tuple_EightU16sEightU16sZZ *NONNULL_PTR arg) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_clone(arg);
+static inline uint64_t COption_f64Z_clone_ptr(LDKCOption_f64Z *NONNULL_PTR arg) {
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ* arg_conv = (LDKCOption_C2Tuple_EightU16sEightU16sZZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_f64Z* arg_conv = (LDKCOption_f64Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_f64Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ* orig_conv = (LDKCOption_C2Tuple_EightU16sEightU16sZZ*)untag_ptr(orig);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_f64Z* orig_conv = (LDKCOption_f64Z*)untag_ptr(orig);
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -22153,110 +23448,110 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1usizeTransactio
        CVec_C2Tuple_usizeTransactionZZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_BlockHashZ _res_conv = *(LDKCOption_BlockHashZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_BlockHashZ_free(_res_conv);
-}
-
-static inline uint64_t COption_BlockHashZ_clone_ptr(LDKCOption_BlockHashZ *NONNULL_PTR arg) {
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_BlockHashZ* arg_conv = (LDKCOption_BlockHashZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_BlockHashZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_BlockHashZ* orig_conv = (LDKCOption_BlockHashZ*)untag_ptr(orig);
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-static inline uint64_t C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-       *ret_conv = C2Tuple_TxidCOption_BlockHashZZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* arg_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* orig_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(orig);
-       LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-       *ret_conv = C2Tuple_TxidCOption_BlockHashZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKCOption_BlockHashZ b_conv = *(LDKCOption_BlockHashZ*)(b_ptr);
-       b_conv = COption_BlockHashZ_clone((LDKCOption_BlockHashZ*)untag_ptr(b));
-       LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-       *ret_conv = C2Tuple_TxidCOption_BlockHashZZ_new(a_ref, b_conv);
+       LDKCOption_ThirtyTwoBytesZ b_conv = *(LDKCOption_ThirtyTwoBytesZ*)(b_ptr);
+       b_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(b));
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_TxidCOption_BlockHashZZ _res_conv = *(LDKC2Tuple_TxidCOption_BlockHashZZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_TxidCOption_BlockHashZZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCOption_1BlockHashZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int64_t _res_conv_34 = _res_vals[i];
-               void* _res_conv_34_ptr = untag_ptr(_res_conv_34);
-               CHECK_ACCESS(_res_conv_34_ptr);
-               LDKC2Tuple_TxidCOption_BlockHashZZ _res_conv_34_conv = *(LDKC2Tuple_TxidCOption_BlockHashZZ*)(_res_conv_34_ptr);
-               FREE(untag_ptr(_res_conv_34));
-               _res_constr.data[i] = _res_conv_34_conv;
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_49 = _res_vals[x];
+               void* _res_conv_49_ptr = untag_ptr(_res_conv_49);
+               CHECK_ACCESS(_res_conv_49_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ _res_conv_49_conv = *(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)(_res_conv_49_ptr);
+               FREE(untag_ptr(_res_conv_49));
+               _res_constr.data[x] = _res_conv_49_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_TxidCOption_BlockHashZZZ_free(_res_constr);
+       CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1ok(JNIEnv *env, jclass clz, jclass o) {
+       LDKChannelMonitorUpdateStatus o_conv = LDKChannelMonitorUpdateStatus_from_java(env, o);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* o_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ _res_conv = *(LDKCResult_ChannelMonitorUpdateStatusNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ChannelMonitorUpdateStatusNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* arg_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* orig_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(orig);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1MonitorEventZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
@@ -22734,23 +24029,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTypeFeature
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChainHashZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_ChainHashZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ChainHashZ Elements");
-       else
-               _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKThirtyTwoBytes _res_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
-               _res_constr.data[i] = _res_conv_8_ref;
-       }
-       CVec_ChainHashZ_free(_res_constr);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKOffer o_conv;
        o_conv.inner = untag_ptr(o);
@@ -22806,52 +24084,52 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseEr
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKPublicKey o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 33);
        (*env)->GetByteArrayRegion(env, o, 0, 33, o_ref.compressed_form);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_ok(o_ref);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_java(env, e);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_err(e_conv);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PublicKeyErrorZ* o_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PublicKeyErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* o_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PublicKeySecp256k1ErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PublicKeyErrorZ _res_conv = *(LDKCResult_PublicKeyErrorZ*)(_res_ptr);
+       LDKCResult_PublicKeySecp256k1ErrorZ _res_conv = *(LDKCResult_PublicKeySecp256k1ErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PublicKeyErrorZ_free(_res_conv);
+       CResult_PublicKeySecp256k1ErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_clone(arg);
+static inline uint64_t CResult_PublicKeySecp256k1ErrorZ_clone_ptr(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PublicKeyErrorZ* arg_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PublicKeyErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* arg_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PublicKeySecp256k1ErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PublicKeyErrorZ* orig_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(orig);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* orig_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(orig);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -23416,24 +24694,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_NetAddressZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SocketAddressZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_SocketAddressZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t m = 0; m < _res_constr.datalen; m++) {
-               int64_t _res_conv_12 = _res_vals[m];
-               void* _res_conv_12_ptr = untag_ptr(_res_conv_12);
-               CHECK_ACCESS(_res_conv_12_ptr);
-               LDKNetAddress _res_conv_12_conv = *(LDKNetAddress*)(_res_conv_12_ptr);
-               FREE(untag_ptr(_res_conv_12));
-               _res_constr.data[m] = _res_conv_12_conv;
+       for (size_t p = 0; p < _res_constr.datalen; p++) {
+               int64_t _res_conv_15 = _res_vals[p];
+               void* _res_conv_15_ptr = untag_ptr(_res_conv_15);
+               CHECK_ACCESS(_res_conv_15_ptr);
+               LDKSocketAddress _res_conv_15_conv = *(LDKSocketAddress*)(_res_conv_15_ptr);
+               FREE(untag_ptr(_res_conv_15));
+               _res_constr.data[p] = _res_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_NetAddressZ_free(_res_constr);
+       CVec_SocketAddressZ_free(_res_constr);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
@@ -23635,109 +24913,171 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErr
        CResult_NetworkGraphDecodeErrorZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1some(JNIEnv *env, jclass clz, int64_tArray o) {
-       LDKCVec_NetAddressZ o_constr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1some(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_SocketAddressZ o_constr;
        o_constr.datalen = (*env)->GetArrayLength(env, o);
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                o_constr.data = NULL;
        int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
-       for (size_t m = 0; m < o_constr.datalen; m++) {
-               int64_t o_conv_12 = o_vals[m];
-               void* o_conv_12_ptr = untag_ptr(o_conv_12);
-               CHECK_ACCESS(o_conv_12_ptr);
-               LDKNetAddress o_conv_12_conv = *(LDKNetAddress*)(o_conv_12_ptr);
-               o_conv_12_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(o_conv_12));
-               o_constr.data[m] = o_conv_12_conv;
+       for (size_t p = 0; p < o_constr.datalen; p++) {
+               int64_t o_conv_15 = o_vals[p];
+               void* o_conv_15_ptr = untag_ptr(o_conv_15);
+               CHECK_ACCESS(o_conv_15_ptr);
+               LDKSocketAddress o_conv_15_conv = *(LDKSocketAddress*)(o_conv_15_ptr);
+               o_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o_conv_15));
+               o_constr.data[p] = o_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_some(o_constr);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_some(o_constr);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_CVec_NetAddressZZ _res_conv = *(LDKCOption_CVec_NetAddressZZ*)(_res_ptr);
+       LDKCOption_CVec_SocketAddressZZ _res_conv = *(LDKCOption_CVec_SocketAddressZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_CVec_NetAddressZZ_free(_res_conv);
+       COption_CVec_SocketAddressZZ_free(_res_conv);
 }
 
-static inline uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg) {
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_clone(arg);
+static inline uint64_t COption_CVec_SocketAddressZZ_clone_ptr(LDKCOption_CVec_SocketAddressZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_CVec_NetAddressZZ* arg_conv = (LDKCOption_CVec_NetAddressZZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_CVec_NetAddressZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_CVec_SocketAddressZZ* arg_conv = (LDKCOption_CVec_SocketAddressZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_CVec_SocketAddressZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_CVec_NetAddressZZ* orig_conv = (LDKCOption_CVec_NetAddressZZ*)untag_ptr(orig);
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_CVec_SocketAddressZZ* orig_conv = (LDKCOption_CVec_SocketAddressZZ*)untag_ptr(orig);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKChannelDerivationParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ChannelDerivationParameters_clone(&o_conv);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* o_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentPreimageZ _res_conv = *(LDKCOption_PaymentPreimageZ*)(_res_ptr);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ _res_conv = *(LDKCResult_ChannelDerivationParametersDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_PaymentPreimageZ_free(_res_conv);
+       CResult_ChannelDerivationParametersDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t COption_PaymentPreimageZ_clone_ptr(LDKCOption_PaymentPreimageZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+static inline uint64_t CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentPreimageZ* arg_conv = (LDKCOption_PaymentPreimageZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentPreimageZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* arg_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentPreimageZ* orig_conv = (LDKCOption_PaymentPreimageZ*)untag_ptr(orig);
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* orig_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKHTLCDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = HTLCDescriptor_clone(&o_conv);
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* o_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_HTLCDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_HTLCDescriptorDecodeErrorZ _res_conv = *(LDKCResult_HTLCDescriptorDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_HTLCDescriptorDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* arg_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* orig_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1HTLCOutputInCommitmentZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
@@ -23979,45 +25319,82 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1UtxoZNoneZ_1
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1some(JNIEnv *env, jclass clz, int16_t o) {
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_some(o);
+static inline uint64_t C2Tuple_u64u16Z_clone_ptr(LDKC2Tuple_u64u16Z *NONNULL_PTR arg) {
+       LDKC2Tuple_u64u16Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+       *ret_conv = C2Tuple_u64u16Z_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u64u16Z* arg_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_u64u16Z_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_u64u16Z* orig_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(orig);
+       LDKC2Tuple_u64u16Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+       *ret_conv = C2Tuple_u64u16Z_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1new(JNIEnv *env, jclass clz, int64_t a, int16_t b) {
+       LDKC2Tuple_u64u16Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+       *ret_conv = C2Tuple_u64u16Z_new(a, b);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_u64u16Z _res_conv = *(LDKC2Tuple_u64u16Z*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_u64u16Z_free(_res_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_u64u16Z o_conv = *(LDKC2Tuple_u64u16Z*)(o_ptr);
+       o_conv = C2Tuple_u64u16Z_clone((LDKC2Tuple_u64u16Z*)untag_ptr(o));
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_u16Z _res_conv = *(LDKCOption_u16Z*)(_res_ptr);
+       LDKCOption_C2Tuple_u64u16ZZ _res_conv = *(LDKCOption_C2Tuple_u64u16ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_u16Z_free(_res_conv);
+       COption_C2Tuple_u64u16ZZ_free(_res_conv);
 }
 
-static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_clone(arg);
+static inline uint64_t COption_C2Tuple_u64u16ZZ_clone_ptr(LDKCOption_C2Tuple_u64u16ZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u16Z_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_C2Tuple_u64u16ZZ* arg_conv = (LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_u64u16ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)untag_ptr(orig);
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_C2Tuple_u64u16ZZ* orig_conv = (LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -24066,101 +25443,55 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownSta
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentHashZ _res_conv = *(LDKCOption_PaymentHashZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_PaymentHashZ_free(_res_conv);
-}
-
-static inline uint64_t COption_PaymentHashZ_clone_ptr(LDKCOption_PaymentHashZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentHashZ* arg_conv = (LDKCOption_PaymentHashZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentHashZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentHashZ* orig_conv = (LDKCOption_PaymentHashZ*)untag_ptr(orig);
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKAPIError e_conv = *(LDKAPIError*)(e_ptr);
        e_conv = APIError_clone((LDKAPIError*)untag_ptr(e));
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult__u832APIErrorZ* o_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult__u832APIErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* o_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult__u832APIErrorZ _res_conv = *(LDKCResult__u832APIErrorZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ _res_conv = *(LDKCResult_ThirtyTwoBytesAPIErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult__u832APIErrorZ_free(_res_conv);
+       CResult_ThirtyTwoBytesAPIErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg) {
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult__u832APIErrorZ* arg_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult__u832APIErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* arg_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult__u832APIErrorZ* orig_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(orig);
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* orig_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -24279,460 +25610,392 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneRetryableSendF
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKPaymentSendFailure e_conv = *(LDKPaymentSendFailure*)(e_ptr);
        e_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(e));
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* o_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentHashPaymentSendFailureZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* o_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentHashPaymentSendFailureZ _res_conv = *(LDKCResult_PaymentHashPaymentSendFailureZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ _res_conv = *(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentHashPaymentSendFailureZ_free(_res_conv);
+       CResult_ThirtyTwoBytesPaymentSendFailureZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentHashPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* arg_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentHashPaymentSendFailureZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* arg_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* orig_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(orig);
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* orig_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKRetryableSendFailure e_conv = LDKRetryableSendFailure_from_java(env, e);
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* o_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentHashRetryableSendFailureZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* o_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentHashRetryableSendFailureZ _res_conv = *(LDKCResult_PaymentHashRetryableSendFailureZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ _res_conv = *(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentHashRetryableSendFailureZ_free(_res_conv);
+       CResult_ThirtyTwoBytesRetryableSendFailureZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentHashRetryableSendFailureZ_clone_ptr(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* arg_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentHashRetryableSendFailureZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* arg_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* orig_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(orig);
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* orig_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(orig);
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
        LDKThirtyTwoBytes b_ref;
        CHECK((*env)->GetArrayLength(env, b) == 32);
        (*env)->GetByteArrayRegion(env, b, 0, 32, b_ref.data);
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_new(a_ref, b_ref);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PaymentHashPaymentIdZ _res_conv = *(LDKC2Tuple_PaymentHashPaymentIdZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PaymentHashPaymentIdZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_PaymentHashPaymentIdZ o_conv = *(LDKC2Tuple_PaymentHashPaymentIdZ*)(o_ptr);
-       o_conv = C2Tuple_PaymentHashPaymentIdZ_clone((LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKPaymentSendFailure e_conv = *(LDKPaymentSendFailure*)(e_ptr);
        e_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(e));
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(e_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ _res_conv = *(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_ThirtyTwoBytesZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ Elements");
        else
                _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKThirtyTwoBytes _res_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
-               _res_constr.data[i] = _res_conv_8_ref;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t o = 0; o < _res_constr.datalen; o++) {
+               int64_t _res_conv_40 = _res_vals[o];
+               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
+               CHECK_ACCESS(_res_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ _res_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(_res_conv_40_ptr);
+               FREE(untag_ptr(_res_conv_40));
+               _res_constr.data[o] = _res_conv_40_conv;
        }
-       CVec_ThirtyTwoBytesZ_free(_res_constr);
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ Elements");
+       else
+               o_constr.data = NULL;
+       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
+       for (size_t o = 0; o < o_constr.datalen; o++) {
+               int64_t o_conv_40 = o_vals[o];
+               void* o_conv_40_ptr = untag_ptr(o_conv_40);
+               CHECK_ACCESS(o_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_conv_40_ptr);
+               o_conv_40_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o_conv_40));
+               o_constr.data[o] = o_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(orig);
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKProbeSendFailure e_conv = *(LDKProbeSendFailure*)(e_ptr);
+       e_conv = ProbeSendFailure_clone((LDKProbeSendFailure*)untag_ptr(e));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
-       LDKThirtyTwoBytes a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 32);
-       (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
-       LDKThirtyTwoBytes b_ref;
-       CHECK((*env)->GetArrayLength(env, b) == 32);
-       (*env)->GetByteArrayRegion(env, b, 0, 32, b_ref.data);
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_new(a_ref, b_ref);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* o_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok(o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PaymentHashPaymentSecretZ _res_conv = *(LDKC2Tuple_PaymentHashPaymentSecretZ*)(_res_ptr);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ _res_conv = *(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PaymentHashPaymentSecretZ_free(_res_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_PaymentHashPaymentSecretZ o_conv = *(LDKC2Tuple_PaymentHashPaymentSecretZ*)(o_ptr);
-       o_conv = C2Tuple_PaymentHashPaymentSecretZ_clone((LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
+       CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_err();
+static inline uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(o_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* arg_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ _res_conv = *(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_free(_res_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* orig_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(orig);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKC2Tuple_ThirtyTwoBytesPublicKeyZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_ok(o_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKC2Tuple_ThirtyTwoBytesPublicKeyZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
+       LDKThirtyTwoBytes a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 32);
+       (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
+       LDKPublicKey b_ref;
+       CHECK((*env)->GetArrayLength(env, b) == 33);
+       (*env)->GetByteArrayRegion(env, b, 0, 33, b_ref.compressed_form);
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKC2Tuple_ThirtyTwoBytesPublicKeyZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentSecretNoneZ* o_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentSecretNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentSecretNoneZ _res_conv = *(LDKCResult_PaymentSecretNoneZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentSecretNoneZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesPublicKeyZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentSecretNoneZ_clone_ptr(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentSecretNoneZ* arg_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentSecretNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentSecretNoneZ* orig_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(orig);
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesPublicKeyZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t j = 0; j < _res_constr.datalen; j++) {
+               int64_t _res_conv_35 = _res_vals[j];
+               void* _res_conv_35_ptr = untag_ptr(_res_conv_35);
+               CHECK_ACCESS(_res_conv_35_ptr);
+               LDKC2Tuple_ThirtyTwoBytesPublicKeyZ _res_conv_35_conv = *(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)(_res_conv_35_ptr);
+               FREE(untag_ptr(_res_conv_35));
+               _res_constr.data[j] = _res_conv_35_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_ok(o_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKAPIError e_conv = *(LDKAPIError*)(e_ptr);
-       e_conv = APIError_clone((LDKAPIError*)untag_ptr(e));
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_err(e_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentPreimageAPIErrorZ* o_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentPreimageAPIErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentPreimageAPIErrorZ _res_conv = *(LDKCResult_PaymentPreimageAPIErrorZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentPreimageAPIErrorZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentPreimageAPIErrorZ_clone_ptr(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentPreimageAPIErrorZ* arg_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentPreimageAPIErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentPreimageAPIErrorZ* orig_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(orig);
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1some(JNIEnv *env, jclass clz, jobjectArray o) {
-       LDKCVec_ChainHashZ o_constr;
-       o_constr.datalen = (*env)->GetArrayLength(env, o);
-       if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ChainHashZ Elements");
-       else
-               o_constr.data = NULL;
-       for (size_t i = 0; i < o_constr.datalen; i++) {
-               int8_tArray o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
-               LDKThirtyTwoBytes o_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, o_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, o_conv_8, 0, 32, o_conv_8_ref.data);
-               o_constr.data[i] = o_conv_8_ref;
-       }
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_some(o_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_CVec_ChainHashZZ _res_conv = *(LDKCOption_CVec_ChainHashZZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_CVec_ChainHashZZ_free(_res_conv);
-}
-
-static inline uint64_t COption_CVec_ChainHashZZ_clone_ptr(LDKCOption_CVec_ChainHashZZ *NONNULL_PTR arg) {
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_CVec_ChainHashZZ* arg_conv = (LDKCOption_CVec_ChainHashZZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_CVec_ChainHashZZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_CVec_ChainHashZZ* orig_conv = (LDKCOption_CVec_ChainHashZZ*)untag_ptr(orig);
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyForwardingInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKCounterpartyForwardingInfo o_conv;
        o_conv.inner = untag_ptr(o);
@@ -25019,7 +26282,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelMonitorZ_1free(JN
        CVec_ChannelMonitorZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
@@ -25029,53 +26292,53 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        // WARNING: we need a move here but no clone is available for LDKChannelManager
        
-       LDKC2Tuple_BlockHashChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ");
-       *ret_conv = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ), "LDKC2Tuple_ThirtyTwoBytesChannelManagerZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelManagerZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_BlockHashChannelManagerZ _res_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_BlockHashChannelManagerZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesChannelManagerZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_BlockHashChannelManagerZ o_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(o_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKC2Tuple_BlockHashChannelManagerZ
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)(o_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKC2Tuple_ThirtyTwoBytesChannelManagerZ
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_free(_res_conv);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1MaxDustHTLCExposureDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
@@ -25540,25 +26803,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeEr
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg) {
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
-       *ret_conv = C2Tuple_OutPointScriptZ_clone(arg);
+static inline uint64_t C2Tuple_OutPointCVec_u8ZZ_clone_ptr(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u8ZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_OutPointScriptZ* arg_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_OutPointScriptZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* arg_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OutPointCVec_u8ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_OutPointScriptZ* orig_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(orig);
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
-       *ret_conv = C2Tuple_OutPointScriptZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* orig_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(orig);
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u8ZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1new(JNIEnv *env, jclass clz, int64_t a, int8_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1new(JNIEnv *env, jclass clz, int64_t a, int8_tArray b) {
        LDKOutPoint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
@@ -25568,147 +26831,167 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1n
        b_ref.datalen = (*env)->GetArrayLength(env, b);
        b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data);
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
-       *ret_conv = C2Tuple_OutPointScriptZ_new(a_conv, b_ref);
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u8ZZ_new(a_conv, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_OutPointScriptZ _res_conv = *(LDKC2Tuple_OutPointScriptZ*)(_res_ptr);
+       LDKC2Tuple_OutPointCVec_u8ZZ _res_conv = *(LDKC2Tuple_OutPointCVec_u8ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_OutPointScriptZ_free(_res_conv);
+       C2Tuple_OutPointCVec_u8ZZ_free(_res_conv);
 }
 
-static inline uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg) {
-       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
-       *ret_conv = C2Tuple_u32ScriptZ_clone(arg);
+static inline uint64_t C2Tuple_u32CVec_u8ZZ_clone_ptr(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+       *ret_conv = C2Tuple_u32CVec_u8ZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_u32ScriptZ* arg_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_u32ScriptZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u32CVec_u8ZZ* arg_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_u32CVec_u8ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_u32ScriptZ* orig_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(orig);
-       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
-       *ret_conv = C2Tuple_u32ScriptZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_u32CVec_u8ZZ* orig_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(orig);
+       LDKC2Tuple_u32CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+       *ret_conv = C2Tuple_u32CVec_u8ZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1new(JNIEnv *env, jclass clz, int32_t a, int8_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1new(JNIEnv *env, jclass clz, int32_t a, int8_tArray b) {
        LDKCVec_u8Z b_ref;
        b_ref.datalen = (*env)->GetArrayLength(env, b);
        b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data);
-       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
-       *ret_conv = C2Tuple_u32ScriptZ_new(a, b_ref);
+       LDKC2Tuple_u32CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+       *ret_conv = C2Tuple_u32CVec_u8ZZ_new(a, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_u32ScriptZ _res_conv = *(LDKC2Tuple_u32ScriptZ*)(_res_ptr);
+       LDKC2Tuple_u32CVec_u8ZZ _res_conv = *(LDKC2Tuple_u32CVec_u8ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_u32ScriptZ_free(_res_conv);
+       C2Tuple_u32CVec_u8ZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32ScriptZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_u32ScriptZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32CVec_1u8ZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_u32ScriptZ), "LDKCVec_C2Tuple_u32ScriptZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKCVec_C2Tuple_u32CVec_u8ZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t v = 0; v < _res_constr.datalen; v++) {
-               int64_t _res_conv_21 = _res_vals[v];
-               void* _res_conv_21_ptr = untag_ptr(_res_conv_21);
-               CHECK_ACCESS(_res_conv_21_ptr);
-               LDKC2Tuple_u32ScriptZ _res_conv_21_conv = *(LDKC2Tuple_u32ScriptZ*)(_res_conv_21_ptr);
-               FREE(untag_ptr(_res_conv_21));
-               _res_constr.data[v] = _res_conv_21_conv;
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_23 = _res_vals[x];
+               void* _res_conv_23_ptr = untag_ptr(_res_conv_23);
+               CHECK_ACCESS(_res_conv_23_ptr);
+               LDKC2Tuple_u32CVec_u8ZZ _res_conv_23_conv = *(LDKC2Tuple_u32CVec_u8ZZ*)(_res_conv_23_ptr);
+               FREE(untag_ptr(_res_conv_23));
+               _res_constr.data[x] = _res_conv_23_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_u32ScriptZZ_free(_res_constr);
+       CVec_C2Tuple_u32CVec_u8ZZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(orig);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
-       LDKCVec_C2Tuple_u32ScriptZZ b_constr;
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ b_constr;
        b_constr.datalen = (*env)->GetArrayLength(env, b);
        if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKC2Tuple_u32ScriptZ), "LDKCVec_C2Tuple_u32ScriptZZ Elements");
+               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKCVec_C2Tuple_u32CVec_u8ZZZ Elements");
        else
                b_constr.data = NULL;
        int64_t* b_vals = (*env)->GetLongArrayElements (env, b, NULL);
-       for (size_t v = 0; v < b_constr.datalen; v++) {
-               int64_t b_conv_21 = b_vals[v];
-               void* b_conv_21_ptr = untag_ptr(b_conv_21);
-               CHECK_ACCESS(b_conv_21_ptr);
-               LDKC2Tuple_u32ScriptZ b_conv_21_conv = *(LDKC2Tuple_u32ScriptZ*)(b_conv_21_ptr);
-               b_conv_21_conv = C2Tuple_u32ScriptZ_clone((LDKC2Tuple_u32ScriptZ*)untag_ptr(b_conv_21));
-               b_constr.data[v] = b_conv_21_conv;
+       for (size_t x = 0; x < b_constr.datalen; x++) {
+               int64_t b_conv_23 = b_vals[x];
+               void* b_conv_23_ptr = untag_ptr(b_conv_23);
+               CHECK_ACCESS(b_conv_23_ptr);
+               LDKC2Tuple_u32CVec_u8ZZ b_conv_23_conv = *(LDKC2Tuple_u32CVec_u8ZZ*)(b_conv_23_ptr);
+               b_conv_23_conv = C2Tuple_u32CVec_u8ZZ_clone((LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(b_conv_23));
+               b_constr.data[x] = b_conv_23_conv;
        }
        (*env)->ReleaseLongArrayElements(env, b, b_vals, 0);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(a_ref, b_constr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_new(a_ref, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_40 = _res_vals[o];
-               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
-               CHECK_ACCESS(_res_conv_40_ptr);
-               LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ _res_conv_40_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(_res_conv_40_ptr);
-               FREE(untag_ptr(_res_conv_40));
-               _res_constr.data[o] = _res_conv_40_conv;
+       for (size_t a = 0; a < _res_constr.datalen; a++) {
+               int64_t _res_conv_52 = _res_vals[a];
+               void* _res_conv_52_ptr = untag_ptr(_res_conv_52);
+               CHECK_ACCESS(_res_conv_52_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ _res_conv_52_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)(_res_conv_52_ptr);
+               FREE(untag_ptr(_res_conv_52));
+               _res_constr.data[a] = _res_conv_52_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(_res_constr);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CommitmentTransactionZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_CommitmentTransactionZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKCommitmentTransaction), "LDKCVec_CommitmentTransactionZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_23 = _res_vals[x];
+               LDKCommitmentTransaction _res_conv_23_conv;
+               _res_conv_23_conv.inner = untag_ptr(_res_conv_23);
+               _res_conv_23_conv.is_owned = ptr_is_owned(_res_conv_23);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_23_conv);
+               _res_constr.data[x] = _res_conv_23_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_free(_res_constr);
+       CVec_CommitmentTransactionZ_free(_res_constr);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
@@ -25787,25 +27070,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre
        CVec_C2Tuple_u32TxOutZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(orig);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
@@ -25825,38 +27108,38 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_
                b_constr.data[u] = b_conv_20_conv;
        }
        (*env)->ReleaseLongArrayElements(env, b, b_vals, 0);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(a_ref, b_constr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_new(a_ref, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t n = 0; n < _res_constr.datalen; n++) {
-               int64_t _res_conv_39 = _res_vals[n];
-               void* _res_conv_39_ptr = untag_ptr(_res_conv_39);
-               CHECK_ACCESS(_res_conv_39_ptr);
-               LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv_39_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(_res_conv_39_ptr);
-               FREE(untag_ptr(_res_conv_39));
-               _res_constr.data[n] = _res_conv_39_conv;
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_49 = _res_vals[x];
+               void* _res_conv_49_ptr = untag_ptr(_res_conv_49);
+               CHECK_ACCESS(_res_conv_49_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ _res_conv_49_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)(_res_conv_49_ptr);
+               FREE(untag_ptr(_res_conv_49));
+               _res_constr.data[x] = _res_conv_49_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free(_res_constr);
+       CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free(_res_constr);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BalanceZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
@@ -25879,25 +27162,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BalanceZ_1free(JNIEnv *e
        CVec_BalanceZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* arg_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* orig_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(orig);
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
@@ -25906,70 +27189,70 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelMonitor_clone(&b_conv);
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_BlockHashChannelMonitorZ _res_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_BlockHashChannelMonitorZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesChannelMonitorZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_BlockHashChannelMonitorZ o_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(o_ptr);
-       o_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone((LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -26289,111 +27572,111 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDeco
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKNetAddress o_conv = *(LDKNetAddress*)(o_ptr);
-       o_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(o));
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_some(o_conv);
+       LDKSocketAddress o_conv = *(LDKSocketAddress*)(o_ptr);
+       o_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o));
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_NetAddressZ _res_conv = *(LDKCOption_NetAddressZ*)(_res_ptr);
+       LDKCOption_SocketAddressZ _res_conv = *(LDKCOption_SocketAddressZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_NetAddressZ_free(_res_conv);
+       COption_SocketAddressZ_free(_res_conv);
 }
 
-static inline uint64_t COption_NetAddressZ_clone_ptr(LDKCOption_NetAddressZ *NONNULL_PTR arg) {
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_clone(arg);
+static inline uint64_t COption_SocketAddressZ_clone_ptr(LDKCOption_SocketAddressZ *NONNULL_PTR arg) {
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_NetAddressZ* arg_conv = (LDKCOption_NetAddressZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_NetAddressZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_SocketAddressZ* arg_conv = (LDKCOption_SocketAddressZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_SocketAddressZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_NetAddressZ* orig_conv = (LDKCOption_NetAddressZ*)untag_ptr(orig);
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_SocketAddressZ* orig_conv = (LDKCOption_SocketAddressZ*)untag_ptr(orig);
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_clone(arg);
+static inline uint64_t C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+       *ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* arg_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* arg_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* orig_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(orig);
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* orig_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(orig);
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+       *ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKPublicKey a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 33);
        (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKCOption_NetAddressZ b_conv = *(LDKCOption_NetAddressZ*)(b_ptr);
-       b_conv = COption_NetAddressZ_clone((LDKCOption_NetAddressZ*)untag_ptr(b));
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_new(a_ref, b_conv);
+       LDKCOption_SocketAddressZ b_conv = *(LDKCOption_SocketAddressZ*)(b_ptr);
+       b_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(b));
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+       *ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ _res_conv = *(LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)(_res_ptr);
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ _res_conv = *(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PublicKeyCOption_NetAddressZZ_free(_res_conv);
+       C2Tuple_PublicKeyCOption_SocketAddressZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1PublicKeyCOption_1NetAddressZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1PublicKeyCOption_1SocketAddressZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_40 = _res_vals[o];
-               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
-               CHECK_ACCESS(_res_conv_40_ptr);
-               LDKC2Tuple_PublicKeyCOption_NetAddressZZ _res_conv_40_conv = *(LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)(_res_conv_40_ptr);
-               FREE(untag_ptr(_res_conv_40));
-               _res_constr.data[o] = _res_conv_40_conv;
+       for (size_t r = 0; r < _res_constr.datalen; r++) {
+               int64_t _res_conv_43 = _res_vals[r];
+               void* _res_conv_43_ptr = untag_ptr(_res_conv_43);
+               CHECK_ACCESS(_res_conv_43_ptr);
+               LDKC2Tuple_PublicKeyCOption_SocketAddressZZ _res_conv_43_conv = *(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)(_res_conv_43_ptr);
+               FREE(untag_ptr(_res_conv_43));
+               _res_constr.data[r] = _res_conv_43_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_free(_res_constr);
+       CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_free(_res_constr);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
@@ -26581,148 +27864,356 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1u32GraphSyncErrorZ_1f
        CResult_u32GraphSyncErrorZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKSecretKey o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.bytes);
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKCVec_u8Z o_ref;
+       o_ref.datalen = (*env)->GetArrayLength(env, o);
+       o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_u8ZIOErrorZ* o_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_u8ZIOErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_KeyPairZ _res_conv = *(LDKCOption_KeyPairZ*)(_res_ptr);
+       LDKCResult_CVec_u8ZIOErrorZ _res_conv = *(LDKCResult_CVec_u8ZIOErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_KeyPairZ_free(_res_conv);
+       CResult_CVec_u8ZIOErrorZ_free(_res_conv);
 }
 
-static inline uint64_t COption_KeyPairZ_clone_ptr(LDKCOption_KeyPairZ *NONNULL_PTR arg) {
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+static inline uint64_t CResult_CVec_u8ZIOErrorZ_clone_ptr(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_KeyPairZ* arg_conv = (LDKCOption_KeyPairZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_KeyPairZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_u8ZIOErrorZ* arg_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_u8ZIOErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_KeyPairZ* orig_conv = (LDKCOption_KeyPairZ*)untag_ptr(orig);
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_u8ZIOErrorZ* orig_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1StrZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
+       LDKCVec_StrZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
+       else
+               _res_constr.data = NULL;
+       for (size_t i = 0; i < _res_constr.datalen; i++) {
+               jstring _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
+               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
+               _res_constr.data[i] = dummy;
+       }
+       CVec_StrZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) {
+       LDKCVec_StrZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
+       else
+               o_constr.data = NULL;
+       for (size_t i = 0; i < o_constr.datalen; i++) {
+               jstring o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
+               LDKStr o_conv_8_conv = java_to_owned_str(env, o_conv_8);
+               o_constr.data[i] = o_conv_8_conv;
+       }
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_ok(o_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_StrZIOErrorZ* o_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_StrZIOErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CVec_StrZIOErrorZ _res_conv = *(LDKCResult_CVec_StrZIOErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CVec_StrZIOErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CVec_StrZIOErrorZ_clone_ptr(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_StrZIOErrorZ* arg_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_StrZIOErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_StrZIOErrorZ* orig_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t o = 0; o < _res_constr.datalen; o++) {
+               int64_t _res_conv_40 = _res_vals[o];
+               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
+               CHECK_ACCESS(_res_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ _res_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(_res_conv_40_ptr);
+               FREE(untag_ptr(_res_conv_40));
+               _res_constr.data[o] = _res_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ Elements");
+       else
+               o_constr.data = NULL;
+       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
+       for (size_t o = 0; o < o_constr.datalen; o++) {
+               int64_t o_conv_40 = o_vals[o];
+               void* o_conv_40_ptr = untag_ptr(o_conv_40);
+               CHECK_ACCESS(o_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(o_conv_40_ptr);
+               o_conv_40_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone((LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(o_conv_40));
+               o_constr.data[o] = o_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_ok(o_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ _res_conv = *(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKCOption_KeyPairZ o_conv = *(LDKCOption_KeyPairZ*)(o_ptr);
-       o_conv = COption_KeyPairZ_clone((LDKCOption_KeyPairZ*)untag_ptr(o));
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone((LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_COption_KeyPairZNoneZ* o_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_COption_KeyPairZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_COption_KeyPairZNoneZ _res_conv = *(LDKCResult_COption_KeyPairZNoneZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_COption_KeyPairZNoneZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_COption_KeyPairZNoneZ_clone_ptr(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_COption_KeyPairZNoneZ* arg_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_COption_KeyPairZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_COption_KeyPairZNoneZ* orig_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(orig);
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKCVec_u8Z o_ref;
-       o_ref.datalen = (*env)->GetArrayLength(env, o);
-       o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_some(o_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKSecretKey o_ref;
+       CHECK((*env)->GetArrayLength(env, o) == 32);
+       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.bytes);
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_some(o_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_ScriptZ _res_conv = *(LDKCOption_ScriptZ*)(_res_ptr);
+       LDKCOption_SecretKeyZ _res_conv = *(LDKCOption_SecretKeyZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_ScriptZ_free(_res_conv);
+       COption_SecretKeyZ_free(_res_conv);
 }
 
-static inline uint64_t COption_ScriptZ_clone_ptr(LDKCOption_ScriptZ *NONNULL_PTR arg) {
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_clone(arg);
+static inline uint64_t COption_SecretKeyZ_clone_ptr(LDKCOption_SecretKeyZ *NONNULL_PTR arg) {
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_ScriptZ* arg_conv = (LDKCOption_ScriptZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_ScriptZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_SecretKeyZ* arg_conv = (LDKCOption_SecretKeyZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_SecretKeyZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_ScriptZ* orig_conv = (LDKCOption_ScriptZ*)untag_ptr(orig);
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_SecretKeyZ* orig_conv = (LDKCOption_SecretKeyZ*)untag_ptr(orig);
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKVerifiedInvoiceRequest o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = VerifiedInvoiceRequest_clone(&o_conv);
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* o_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_VerifiedInvoiceRequestNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_VerifiedInvoiceRequestNoneZ _res_conv = *(LDKCResult_VerifiedInvoiceRequestNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_VerifiedInvoiceRequestNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR arg) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* arg_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* orig_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(orig);
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_COption_1NoneZ_1some(JNIEnv *env, jclass clz) {
        jclass ret_conv = LDKCOption_NoneZ_to_java(env, COption_NoneZ_some());
        return ret_conv;
@@ -26800,102 +28291,106 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1i64Z_1clone(JNIEnv
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKSocketAddress o_conv = *(LDKSocketAddress*)(o_ptr);
+       o_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o));
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SocketAddressDecodeErrorZ* o_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SocketAddressDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_TxidZ _res_conv = *(LDKCOption_TxidZ*)(_res_ptr);
+       LDKCResult_SocketAddressDecodeErrorZ _res_conv = *(LDKCResult_SocketAddressDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_TxidZ_free(_res_conv);
+       CResult_SocketAddressDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t COption_TxidZ_clone_ptr(LDKCOption_TxidZ *NONNULL_PTR arg) {
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+static inline uint64_t CResult_SocketAddressDecodeErrorZ_clone_ptr(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_TxidZ* arg_conv = (LDKCOption_TxidZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_TxidZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SocketAddressDecodeErrorZ* arg_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SocketAddressDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_TxidZ* orig_conv = (LDKCOption_TxidZ*)untag_ptr(orig);
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_SocketAddressDecodeErrorZ* orig_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKNetAddress o_conv = *(LDKNetAddress*)(o_ptr);
-       o_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(o));
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_ok(o_conv);
+       LDKSocketAddress o_conv = *(LDKSocketAddress*)(o_ptr);
+       o_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o));
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
-       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_err(e_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKSocketAddressParseError e_conv = LDKSocketAddressParseError_from_java(env, e);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_NetAddressDecodeErrorZ* o_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_NetAddressDecodeErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* o_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_NetAddressDecodeErrorZ _res_conv = *(LDKCResult_NetAddressDecodeErrorZ*)(_res_ptr);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ _res_conv = *(LDKCResult_SocketAddressSocketAddressParseErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_NetAddressDecodeErrorZ_free(_res_conv);
+       CResult_SocketAddressSocketAddressParseErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_NetAddressDecodeErrorZ* arg_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_NetAddressDecodeErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* arg_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_NetAddressDecodeErrorZ* orig_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* orig_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(orig);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -30132,64 +31627,107 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTran
        CResult_TrustedCommitmentTransactionNoneZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) {
-       LDKCVec_SignatureZ o_constr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) {
+       LDKCVec_ECDSASignatureZ o_constr;
        o_constr.datalen = (*env)->GetArrayLength(env, o);
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                o_constr.data = NULL;
        for (size_t i = 0; i < o_constr.datalen; i++) {
                int8_tArray o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
-               LDKSignature o_conv_8_ref;
+               LDKECDSASignature o_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, o_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, o_conv_8, 0, 64, o_conv_8_ref.compact_form);
                o_constr.data[i] = o_conv_8_ref;
        }
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_ok(o_constr);
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_CVec_SignatureZNoneZ* o_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_SignatureZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* o_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_ECDSASignatureZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_SignatureZNoneZ _res_conv = *(LDKCResult_CVec_SignatureZNoneZ*)(_res_ptr);
+       LDKCResult_CVec_ECDSASignatureZNoneZ _res_conv = *(LDKCResult_CVec_ECDSASignatureZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_CVec_SignatureZNoneZ_free(_res_conv);
+       CResult_CVec_ECDSASignatureZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_CVec_SignatureZNoneZ* arg_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_SignatureZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* arg_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(orig);
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* orig_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_some(o);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_usizeZ _res_conv = *(LDKCOption_usizeZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_usizeZ_free(_res_conv);
+}
+
+static inline uint64_t COption_usizeZ_clone_ptr(LDKCOption_usizeZ *NONNULL_PTR arg) {
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_usizeZ* arg_conv = (LDKCOption_usizeZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_usizeZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_usizeZ* orig_conv = (LDKCOption_usizeZ*)untag_ptr(orig);
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKShutdownScript o_conv;
        o_conv.inner = untag_ptr(o);
@@ -30352,6 +31890,60 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDeco
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKClaimedHTLC o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ClaimedHTLC_clone(&o_conv);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* o_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ClaimedHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ClaimedHTLCDecodeErrorZ _res_conv = *(LDKCResult_ClaimedHTLCDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ClaimedHTLCDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* arg_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* orig_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PathFailureZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -30702,96 +32294,70 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentFailureReas
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1some(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1some(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKU128 o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 16);
        (*env)->GetByteArrayRegion(env, o, 0, 16, o_ref.le_bytes);
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_some(o_ref);
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_some(o_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_u128Z _res_conv = *(LDKCOption_u128Z*)(_res_ptr);
+       LDKCOption_U128Z _res_conv = *(LDKCOption_U128Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_u128Z_free(_res_conv);
+       COption_U128Z_free(_res_conv);
 }
 
-static inline uint64_t COption_u128Z_clone_ptr(LDKCOption_u128Z *NONNULL_PTR arg) {
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_clone(arg);
+static inline uint64_t COption_U128Z_clone_ptr(LDKCOption_U128Z *NONNULL_PTR arg) {
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u128Z* arg_conv = (LDKCOption_u128Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u128Z_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_U128Z* arg_conv = (LDKCOption_U128Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_U128Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u128Z* orig_conv = (LDKCOption_u128Z*)untag_ptr(orig);
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_U128Z* orig_conv = (LDKCOption_U128Z*)untag_ptr(orig);
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentIdZ _res_conv = *(LDKCOption_PaymentIdZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_PaymentIdZ_free(_res_conv);
-}
-
-static inline uint64_t COption_PaymentIdZ_clone_ptr(LDKCOption_PaymentIdZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentIdZ* arg_conv = (LDKCOption_PaymentIdZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentIdZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentIdZ* orig_conv = (LDKCOption_PaymentIdZ*)untag_ptr(orig);
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ClaimedHTLCZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_ClaimedHTLCZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t n = 0; n < _res_constr.datalen; n++) {
+               int64_t _res_conv_13 = _res_vals[n];
+               LDKClaimedHTLC _res_conv_13_conv;
+               _res_conv_13_conv.inner = untag_ptr(_res_conv_13);
+               _res_conv_13_conv.is_owned = ptr_is_owned(_res_conv_13);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_13_conv);
+               _res_constr.data[n] = _res_conv_13_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_ClaimedHTLCZ_free(_res_constr);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentFailureReasonZ_1some(JNIEnv *env, jclass clz, jclass o) {
@@ -30938,88 +32504,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDec
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1BlockHashChannelMonitorZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t j = 0; j < _res_constr.datalen; j++) {
-               int64_t _res_conv_35 = _res_vals[j];
-               void* _res_conv_35_ptr = untag_ptr(_res_conv_35);
-               CHECK_ACCESS(_res_conv_35_ptr);
-               LDKC2Tuple_BlockHashChannelMonitorZ _res_conv_35_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(_res_conv_35_ptr);
-               FREE(untag_ptr(_res_conv_35));
-               _res_constr.data[j] = _res_conv_35_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_BlockHashChannelMonitorZZ_free(_res_constr);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ o_constr;
-       o_constr.datalen = (*env)->GetArrayLength(env, o);
-       if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Elements");
-       else
-               o_constr.data = NULL;
-       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
-       for (size_t j = 0; j < o_constr.datalen; j++) {
-               int64_t o_conv_35 = o_vals[j];
-               void* o_conv_35_ptr = untag_ptr(o_conv_35);
-               CHECK_ACCESS(o_conv_35_ptr);
-               LDKC2Tuple_BlockHashChannelMonitorZ o_conv_35_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(o_conv_35_ptr);
-               o_conv_35_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(o_conv_35));
-               o_constr.data[j] = o_conv_35_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok(o_constr);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
-       LDKIOError e_conv = LDKIOError_from_java(env, e);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ _res_conv = *(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(orig);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixBolt11ParseErrorZ_1ok(JNIEnv *env, jclass clz, jclass o) {
        LDKSiPrefix o_conv = LDKSiPrefix_from_java(env, o);
        LDKCResult_SiPrefixBolt11ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixBolt11ParseErrorZ), "LDKCResult_SiPrefixBolt11ParseErrorZ");
@@ -31224,54 +32708,54 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawBolt11Invoice_1u83
        C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKPayeePubKey o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PayeePubKey_clone(&o_conv);
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_ok(o_conv);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_java(env, e);
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_err(e_conv);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PayeePubKeyErrorZ* o_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PayeePubKeyErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* o_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PayeePubKeyErrorZ _res_conv = *(LDKCResult_PayeePubKeyErrorZ*)(_res_ptr);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ _res_conv = *(LDKCResult_PayeePubKeySecp256k1ErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PayeePubKeyErrorZ_free(_res_conv);
+       CResult_PayeePubKeySecp256k1ErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_clone(arg);
+static inline uint64_t CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PayeePubKeyErrorZ* arg_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PayeePubKeyErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* arg_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PayeePubKeyErrorZ* orig_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(orig);
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* orig_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(orig);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -31443,21 +32927,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1Bolt11InvoiceBolt1
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1AddressZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_AddressZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_AddressZ Elements");
-       else
-               _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               jstring _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
-               _res_constr.data[i] = dummy;
-       }
-       CVec_AddressZ_free(_res_constr);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKDescription o_conv;
        o_conv.inner = untag_ptr(o);
@@ -31880,55 +33349,217 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDec
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKReceiveTlvs o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ReceiveTlvs_clone(&o_conv);
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* o_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ReceiveTlvsDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ReceiveTlvsDecodeErrorZ _res_conv = *(LDKCResult_ReceiveTlvsDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ReceiveTlvsDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* arg_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* orig_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPaymentRelay o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = PaymentRelay_clone(&o_conv);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentRelayDecodeErrorZ* o_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PaymentRelayDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_PaymentRelayDecodeErrorZ _res_conv = *(LDKCResult_PaymentRelayDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_PaymentRelayDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_PaymentRelayDecodeErrorZ_clone_ptr(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentRelayDecodeErrorZ* arg_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PaymentRelayDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PaymentRelayDecodeErrorZ* orig_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPaymentConstraints o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = PaymentConstraints_clone(&o_conv);
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* o_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PaymentConstraintsDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_PaymentConstraintsDecodeErrorZ _res_conv = *(LDKCResult_PaymentConstraintsDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_PaymentConstraintsDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* arg_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* orig_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKPaymentError e_conv = *(LDKPaymentError*)(e_ptr);
        e_conv = PaymentError_clone((LDKPaymentError*)untag_ptr(e));
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentIdPaymentErrorZ* o_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentIdPaymentErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* o_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentIdPaymentErrorZ _res_conv = *(LDKCResult_PaymentIdPaymentErrorZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ _res_conv = *(LDKCResult_ThirtyTwoBytesPaymentErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentIdPaymentErrorZ_free(_res_conv);
+       CResult_ThirtyTwoBytesPaymentErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentIdPaymentErrorZ* arg_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentIdPaymentErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* arg_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentIdPaymentErrorZ* orig_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(orig);
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* orig_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -31981,50 +33612,115 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentErrorZ_
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1ok(JNIEnv *env, jclass clz, jstring o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ Elements");
+       else
+               o_constr.data = NULL;
+       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
+       for (size_t o = 0; o < o_constr.datalen; o++) {
+               int64_t o_conv_40 = o_vals[o];
+               void* o_conv_40_ptr = untag_ptr(o_conv_40);
+               CHECK_ACCESS(o_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_conv_40_ptr);
+               o_conv_40_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o_conv_40));
+               o_constr.data[o] = o_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_ok(o_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKProbingError e_conv = *(LDKProbingError*)(e_ptr);
+       e_conv = ProbingError_clone((LDKProbingError*)untag_ptr(e));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ _res_conv = *(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1ok(JNIEnv *env, jclass clz, jstring o) {
        LDKStr o_conv = java_to_owned_str(env, o);
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_ok(o_conv);
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_java(env, e);
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_err(e_conv);
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_StringErrorZ* o_conv = (LDKCResult_StringErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_StringErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_StrSecp256k1ErrorZ* o_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_StrSecp256k1ErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_StringErrorZ _res_conv = *(LDKCResult_StringErrorZ*)(_res_ptr);
+       LDKCResult_StrSecp256k1ErrorZ _res_conv = *(LDKCResult_StrSecp256k1ErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_StringErrorZ_free(_res_conv);
+       CResult_StrSecp256k1ErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_StringErrorZ_clone_ptr(LDKCResult_StringErrorZ *NONNULL_PTR arg) {
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_clone(arg);
+static inline uint64_t CResult_StrSecp256k1ErrorZ_clone_ptr(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR arg) {
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_StringErrorZ* arg_conv = (LDKCResult_StringErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_StringErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_StrSecp256k1ErrorZ* arg_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_StrSecp256k1ErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_StringErrorZ* orig_conv = (LDKCResult_StringErrorZ*)untag_ptr(orig);
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_StrSecp256k1ErrorZ* orig_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(orig);
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -32128,6 +33824,82 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNo
        return tag_ptr(ret_conv, true);
 }
 
+static inline uint64_t C2Tuple_PublicKeyOnionMessageZ_clone_ptr(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = C2Tuple_PublicKeyOnionMessageZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* arg_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_PublicKeyOnionMessageZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* orig_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(orig);
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = C2Tuple_PublicKeyOnionMessageZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+       LDKPublicKey a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 33);
+       (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
+       LDKOnionMessage b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = OnionMessage_clone(&b_conv);
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = C2Tuple_PublicKeyOnionMessageZ_new(a_ref, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_PublicKeyOnionMessageZ _res_conv = *(LDKC2Tuple_PublicKeyOnionMessageZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_PublicKeyOnionMessageZ_free(_res_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_PublicKeyOnionMessageZ o_conv = *(LDKC2Tuple_PublicKeyOnionMessageZ*)(o_ptr);
+       o_conv = C2Tuple_PublicKeyOnionMessageZ_clone((LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ), "LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ");
+       *ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKSendError e_conv = *(LDKSendError*)(e_ptr);
+       e_conv = SendError_clone((LDKSendError*)untag_ptr(e));
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ), "LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ");
+       *ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* o_conv = (LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ _res_conv = *(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_free(_res_conv);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSendErrorZ_1ok(JNIEnv *env, jclass clz) {
        LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
        *ret_conv = CResult_NoneSendErrorZ_ok();
@@ -32209,6 +33981,55 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_BlindedPayInfoBlindedPathZ o_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(o_ptr);
+       o_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* o_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ _res_conv = *(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* arg_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* orig_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKBlindedPath o_conv;
        o_conv.inner = untag_ptr(o);
@@ -32962,7 +34783,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_sign(JNIEnv *env, jclass cl
        CHECK((*env)->GetArrayLength(env, sk) == 32);
        (*env)->GetByteArrayRegion(env, sk, 0, 32, sk_arr);
        uint8_t (*sk_ref)[32] = &sk_arr;
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
        *ret_conv = sign(msg_ref, sk_ref);
        (*env)->ReleaseByteArrayElements(env, msg, (int8_t*)msg_ref.data, 0);
        return tag_ptr(ret_conv, true);
@@ -32973,7 +34794,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_recover_1pk(JNIEnv *env, jc
        msg_ref.datalen = (*env)->GetArrayLength(env, msg);
        msg_ref.data = (*env)->GetByteArrayElements (env, msg, NULL);
        LDKStr sig_conv = java_to_owned_str(env, sig);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
        *ret_conv = recover_pk(msg_ref, sig_conv);
        (*env)->ReleaseByteArrayElements(env, msg, (int8_t*)msg_ref.data, 0);
        return tag_ptr(ret_conv, true);
@@ -33017,6 +34838,15 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_construct_1invoice_1pre
        return ret_arr;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KVStore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKKVStore this_ptr_conv = *(LDKKVStore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       KVStore_free(this_ptr_conv);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Persister_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -33026,6 +34856,134 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Persister_1free(JNIEnv *env, j
        Persister_free(this_ptr_conv);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_read_1channel_1monitors(JNIEnv *env, jclass clz, int64_t kv_store, int64_t entropy_source, int64_t signer_provider) {
+       void* kv_store_ptr = untag_ptr(kv_store);
+       CHECK_ACCESS(kv_store_ptr);
+       LDKKVStore kv_store_conv = *(LDKKVStore*)(kv_store_ptr);
+       if (kv_store_conv.free == LDKKVStore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKKVStore_JCalls_cloned(&kv_store_conv);
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       CHECK_ACCESS(signer_provider_ptr);
+       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
+       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
+       }
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = read_channel_monitors(kv_store_conv, entropy_source_conv, signer_provider_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMonitorUpdatingPersister this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MonitorUpdatingPersister_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1new(JNIEnv *env, jclass clz, int64_t kv_store, int64_t logger, int64_t maximum_pending_updates, int64_t entropy_source, int64_t signer_provider) {
+       void* kv_store_ptr = untag_ptr(kv_store);
+       CHECK_ACCESS(kv_store_ptr);
+       LDKKVStore kv_store_conv = *(LDKKVStore*)(kv_store_ptr);
+       if (kv_store_conv.free == LDKKVStore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKKVStore_JCalls_cloned(&kv_store_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       CHECK_ACCESS(signer_provider_ptr);
+       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
+       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
+       }
+       LDKMonitorUpdatingPersister ret_var = MonitorUpdatingPersister_new(kv_store_conv, logger_conv, maximum_pending_updates, entropy_source_conv, signer_provider_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1read_1all_1channel_1monitors_1with_1updates(JNIEnv *env, jclass clz, int64_t this_arg, int64_t broadcaster, int64_t fee_estimator) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
+       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
+       void* fee_estimator_ptr = untag_ptr(fee_estimator);
+       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
+       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = MonitorUpdatingPersister_read_all_channel_monitors_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1read_1channel_1monitor_1with_1updates(JNIEnv *env, jclass clz, int64_t this_arg, int64_t broadcaster, int64_t fee_estimator, jstring monitor_key) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
+       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
+       void* fee_estimator_ptr = untag_ptr(fee_estimator);
+       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
+       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
+       LDKStr monitor_key_conv = java_to_owned_str(env, monitor_key);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = MonitorUpdatingPersister_read_channel_monitor_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv, monitor_key_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1cleanup_1stale_1updates(JNIEnv *env, jclass clz, int64_t this_arg, jboolean lazy) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = MonitorUpdatingPersister_cleanup_stale_updates(&this_arg_conv, lazy);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1as_1Persist(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPersist* ret_ret = MALLOC(sizeof(LDKPersist), "LDKPersist");
+       *ret_ret = MonitorUpdatingPersister_as_Persist(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UntrustedString_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKUntrustedString this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -34872,8 +36830,8 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1permanent_1failure(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, ChannelMonitorUpdateStatus_permanent_failure());
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1unrecoverable_1error(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, ChannelMonitorUpdateStatus_unrecoverable_error());
        return ret_conv;
 }
 
@@ -34916,7 +36874,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1block_1
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = WatchedOutput_get_block_hash(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -34930,8 +36888,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1block_1has
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_BlockHashZ val_conv = *(LDKCOption_BlockHashZ*)(val_ptr);
-       val_conv = COption_BlockHashZ_clone((LDKCOption_BlockHashZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        WatchedOutput_set_block_hash(&this_ptr_conv, val_conv);
 }
 
@@ -34990,8 +36948,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1script_1pu
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *env, jclass clz, int64_t block_hash_arg, int64_t outpoint_arg, int8_tArray script_pubkey_arg) {
        void* block_hash_arg_ptr = untag_ptr(block_hash_arg);
        CHECK_ACCESS(block_hash_arg_ptr);
-       LDKCOption_BlockHashZ block_hash_arg_conv = *(LDKCOption_BlockHashZ*)(block_hash_arg_ptr);
-       block_hash_arg_conv = COption_BlockHashZ_clone((LDKCOption_BlockHashZ*)untag_ptr(block_hash_arg));
+       LDKCOption_ThirtyTwoBytesZ block_hash_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(block_hash_arg_ptr);
+       block_hash_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(block_hash_arg));
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
        outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
@@ -35574,14 +37532,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1htlcevent(JNI
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1commitment_1tx_1confirmed(JNIEnv *env, jclass clz, int64_t a) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1holder_1force_1closed(JNIEnv *env, jclass clz, int64_t a) {
        LDKOutPoint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
-       *ret_copy = MonitorEvent_commitment_tx_confirmed(a_conv);
+       *ret_copy = MonitorEvent_holder_force_closed(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -35598,18 +37556,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1completed(JNI
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1failed(JNIEnv *env, jclass clz, int64_t a) {
-       LDKOutPoint a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = OutPoint_clone(&a_conv);
-       LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
-       *ret_copy = MonitorEvent_update_failed(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKMonitorEvent* a_conv = (LDKMonitorEvent*)untag_ptr(a);
        LDKMonitorEvent* b_conv = (LDKMonitorEvent*)untag_ptr(b);
@@ -35874,12 +37820,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1update_1mon
        if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
        LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
        void* fee_estimator_ptr = untag_ptr(fee_estimator);
-       CHECK_ACCESS(fee_estimator_ptr);
-       LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(fee_estimator_ptr);
-       if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKFeeEstimator_JCalls_cloned(&fee_estimator_conv);
-       }
+       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
+       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
        void* logger_ptr = untag_ptr(logger);
        if (ptr_is_owned(logger)) { CHECK_ACCESS(logger_ptr); }
        LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
@@ -35904,7 +37846,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1fundin
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
        *ret_conv = ChannelMonitor_get_funding_txo(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -35915,14 +37857,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1o
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&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 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];
-               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       for (size_t a = 0; a < ret_var.datalen; a++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv_52_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+               *ret_conv_52_conv = ret_var.data[a];
+               ret_arr_ptr[a] = tag_ptr(ret_conv_52_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -35974,6 +37916,62 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1process_1pendi
        ChannelMonitor_process_pending_events(&this_arg_conv, handler_conv);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1initial_1counterparty_1commitment_1tx(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCommitmentTransaction ret_var = ChannelMonitor_initial_counterparty_commitment_tx(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1counterparty_1commitment_1txs_1from_1update(JNIEnv *env, jclass clz, int64_t this_arg, int64_t update) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelMonitorUpdate update_conv;
+       update_conv.inner = untag_ptr(update);
+       update_conv.is_owned = ptr_is_owned(update);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
+       update_conv.is_owned = false;
+       LDKCVec_CommitmentTransactionZ ret_var = ChannelMonitor_counterparty_commitment_txs_from_update(&this_arg_conv, &update_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 x = 0; x < ret_var.datalen; x++) {
+               LDKCommitmentTransaction ret_conv_23_var = ret_var.data[x];
+               int64_t ret_conv_23_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_23_var);
+               ret_conv_23_ref = tag_ptr(ret_conv_23_var.inner, ret_conv_23_var.is_owned);
+               ret_arr_ptr[x] = ret_conv_23_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_ChannelMonitor_1sign_1to_1local_1justice_1tx(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray justice_tx, int64_t input_idx, int64_t value, int64_t commitment_number) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction justice_tx_ref;
+       justice_tx_ref.datalen = (*env)->GetArrayLength(env, justice_tx);
+       justice_tx_ref.data = MALLOC(justice_tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, justice_tx, 0, justice_tx_ref.datalen, justice_tx_ref.data);
+       justice_tx_ref.data_is_owned = true;
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = ChannelMonitor_sign_to_local_justice_tx(&this_arg_conv, justice_tx_ref, input_idx, value, commitment_number);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1counterparty_1node_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -36057,14 +38055,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       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);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_block_connected(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_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 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];
-               ret_arr_ptr[n] = tag_ptr(ret_conv_39_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36152,14 +38150,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1transa
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       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);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_transactions_confirmed(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_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 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];
-               ret_arr_ptr[n] = tag_ptr(ret_conv_39_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36231,14 +38229,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1best_1
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_best_block_updated(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_conv);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_best_block_updated(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_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 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];
-               ret_arr_ptr[n] = tag_ptr(ret_conv_39_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36251,14 +38249,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1r
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret_var = ChannelMonitor_get_relevant_txids(&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++) {
-               LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv_34_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-               *ret_conv_34_conv = ret_var.data[i];
-               ret_arr_ptr[i] = tag_ptr(ret_conv_34_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36308,6 +38306,32 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1rebroadcast_1p
        ChannelMonitor_rebroadcast_pending_claims(&this_arg_conv, broadcaster_conv, fee_estimator_conv, logger_conv);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray tx, int32_t confirmation_height) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction tx_ref;
+       tx_ref.datalen = (*env)->GetArrayLength(env, tx);
+       tx_ref.data = MALLOC(tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, tx, 0, tx_ref.datalen, tx_ref.data);
+       tx_ref.data_is_owned = true;
+       LDKCVec_SpendableOutputDescriptorZ ret_var = ChannelMonitor_get_spendable_outputs(&this_arg_conv, tx_ref, confirmation_height);
+       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 b = 0; b < ret_var.datalen; b++) {
+               LDKSpendableOutputDescriptor *ret_conv_27_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+               *ret_conv_27_copy = ret_var.data[b];
+               int64_t ret_conv_27_ref = tag_ptr(ret_conv_27_copy, true);
+               ret_arr_ptr[b] = ret_conv_27_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1claimable_1balances(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -36329,7 +38353,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1c
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
@@ -36339,8 +38363,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        void* arg_b_ptr = untag_ptr(arg_b);
        if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
        LDKSignerProvider* arg_b_conv = (LDKSignerProvider*)arg_b_ptr;
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_read(ser_ref, arg_a_conv, arg_b_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_read(ser_ref, arg_a_conv, arg_b_conv);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
@@ -36495,25 +38519,65 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1read(JNIEnv *env,
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKFailureCode* orig_conv = (LDKFailureCode*)untag_ptr(orig);
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_clone(orig_conv));
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FailureCode_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKFailureCode this_ptr_conv = *(LDKFailureCode*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       FailureCode_free(this_ptr_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1temporary_1node_1failure(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_temporary_node_failure());
+static inline uint64_t FailureCode_clone_ptr(LDKFailureCode *NONNULL_PTR arg) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFailureCode* arg_conv = (LDKFailureCode*)untag_ptr(arg);
+       int64_t ret_conv = FailureCode_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1required_1node_1feature_1missing(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_required_node_feature_missing());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKFailureCode* orig_conv = (LDKFailureCode*)untag_ptr(orig);
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1incorrect_1or_1unknown_1payment_1details(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_incorrect_or_unknown_payment_details());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1temporary_1node_1failure(JNIEnv *env, jclass clz) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_temporary_node_failure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1required_1node_1feature_1missing(JNIEnv *env, jclass clz) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_required_node_feature_missing();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1incorrect_1or_1unknown_1payment_1details(JNIEnv *env, jclass clz) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_incorrect_or_unknown_payment_details();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1invalid_1onion_1payload(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCOption_C2Tuple_u64u16ZZ a_conv = *(LDKCOption_C2Tuple_u64u16ZZ*)(a_ptr);
+       a_conv = COption_C2Tuple_u64u16ZZ_clone((LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(a));
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_invalid_onion_payload(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
@@ -37764,33 +39828,52 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1clone
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1pending(JNIEnv *env, jclass clz, int8_tArray payment_hash, int64_t total_msat) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1awaiting_1invoice(JNIEnv *env, jclass clz, int8_tArray payment_id) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
+       LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
+       *ret_copy = RecentPaymentDetails_awaiting_invoice(payment_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1pending(JNIEnv *env, jclass clz, int8_tArray payment_id, int8_tArray payment_hash, int64_t total_msat) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
        LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
-       *ret_copy = RecentPaymentDetails_pending(payment_hash_ref, total_msat);
+       *ret_copy = RecentPaymentDetails_pending(payment_id_ref, payment_hash_ref, total_msat);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1fulfilled(JNIEnv *env, jclass clz, int64_t payment_hash) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1fulfilled(JNIEnv *env, jclass clz, int8_tArray payment_id, int64_t payment_hash) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
-       *ret_copy = RecentPaymentDetails_fulfilled(payment_hash_conv);
+       *ret_copy = RecentPaymentDetails_fulfilled(payment_id_ref, payment_hash_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1abandoned(JNIEnv *env, jclass clz, int8_tArray payment_hash) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1abandoned(JNIEnv *env, jclass clz, int8_tArray payment_id, int8_tArray payment_hash) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
        LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
-       *ret_copy = RecentPaymentDetails_abandoned(payment_hash_ref);
+       *ret_copy = RecentPaymentDetails_abandoned(payment_id_ref, payment_hash_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -38055,7 +40138,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1cha
        override_config_conv.is_owned = ptr_is_owned(override_config);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(override_config_conv);
        override_config_conv = UserConfig_clone(&override_config_conv);
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
        *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_channel_id_ref, override_config_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38332,8 +40415,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        route_conv.is_owned = false;
        void* payment_preimage_ptr = untag_ptr(payment_preimage);
        CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_PaymentPreimageZ payment_preimage_conv = *(LDKCOption_PaymentPreimageZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(payment_preimage));
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
        LDKRecipientOnionFields recipient_onion_conv;
        recipient_onion_conv.inner = untag_ptr(recipient_onion);
        recipient_onion_conv.is_owned = ptr_is_owned(recipient_onion);
@@ -38342,7 +40425,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
        *ret_conv = ChannelManager_send_spontaneous_payment(&this_arg_conv, &route_conv, payment_preimage_conv, recipient_onion_conv, payment_id_ref);
        return tag_ptr(ret_conv, true);
 }
@@ -38355,8 +40438,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        this_arg_conv.is_owned = false;
        void* payment_preimage_ptr = untag_ptr(payment_preimage);
        CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_PaymentPreimageZ payment_preimage_conv = *(LDKCOption_PaymentPreimageZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(payment_preimage));
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
        LDKRecipientOnionFields recipient_onion_conv;
        recipient_onion_conv.inner = untag_ptr(recipient_onion);
        recipient_onion_conv.is_owned = ptr_is_owned(recipient_onion);
@@ -38374,7 +40457,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        CHECK_ACCESS(retry_strategy_ptr);
        LDKRetry retry_strategy_conv = *(LDKRetry*)(retry_strategy_ptr);
        retry_strategy_conv = Retry_clone((LDKRetry*)untag_ptr(retry_strategy));
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
        *ret_conv = ChannelManager_send_spontaneous_payment_with_retry(&this_arg_conv, payment_preimage_conv, recipient_onion_conv, payment_id_ref, route_params_conv, retry_strategy_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38390,11 +40473,49 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1probe
        path_conv.is_owned = ptr_is_owned(path);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
        path_conv = Path_clone(&path_conv);
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
        *ret_conv = ChannelManager_send_probe(&this_arg_conv, path_conv);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spontaneous_1preflight_1probes(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray node_id, int64_t amount_msat, int32_t final_cltv_expiry_delta, int64_t liquidity_limit_multiplier) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = ChannelManager_send_spontaneous_preflight_probes(&this_arg_conv, node_id_ref, amount_msat, final_cltv_expiry_delta, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1preflight_1probes(JNIEnv *env, jclass clz, int64_t this_arg, int64_t route_params, int64_t liquidity_limit_multiplier) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv = RouteParameters_clone(&route_params_conv);
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = ChannelManager_send_preflight_probes(&this_arg_conv, route_params_conv, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1transaction_1generated(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray temporary_channel_id, int8_tArray counterparty_node_id, int8_tArray funding_transaction) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -38418,6 +40539,38 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1tr
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1batch_1funding_1transaction_1generated(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray temporary_channels, int8_tArray funding_transaction) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ temporary_channels_constr;
+       temporary_channels_constr.datalen = (*env)->GetArrayLength(env, temporary_channels);
+       if (temporary_channels_constr.datalen > 0)
+               temporary_channels_constr.data = MALLOC(temporary_channels_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ Elements");
+       else
+               temporary_channels_constr.data = NULL;
+       int64_t* temporary_channels_vals = (*env)->GetLongArrayElements (env, temporary_channels, NULL);
+       for (size_t j = 0; j < temporary_channels_constr.datalen; j++) {
+               int64_t temporary_channels_conv_35 = temporary_channels_vals[j];
+               void* temporary_channels_conv_35_ptr = untag_ptr(temporary_channels_conv_35);
+               CHECK_ACCESS(temporary_channels_conv_35_ptr);
+               LDKC2Tuple_ThirtyTwoBytesPublicKeyZ temporary_channels_conv_35_conv = *(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)(temporary_channels_conv_35_ptr);
+               temporary_channels_conv_35_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone((LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(temporary_channels_conv_35));
+               temporary_channels_constr.data[j] = temporary_channels_conv_35_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, temporary_channels, temporary_channels_vals, 0);
+       LDKTransaction funding_transaction_ref;
+       funding_transaction_ref.datalen = (*env)->GetArrayLength(env, funding_transaction);
+       funding_transaction_ref.data = MALLOC(funding_transaction_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, funding_transaction, 0, funding_transaction_ref.datalen, funding_transaction_ref.data);
+       funding_transaction_ref.data_is_owned = true;
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = ChannelManager_batch_funding_transaction_generated(&this_arg_conv, temporary_channels_constr, funding_transaction_ref);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1update_1partial_1channel_1config(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray counterparty_node_id, jobjectArray channel_ids, int64_t config_update) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -38548,7 +40701,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1ba
        ChannelManager_fail_htlc_backwards(&this_arg_conv, payment_hash_ref);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1backwards_1with_1reason(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray payment_hash, jclass failure_code) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1backwards_1with_1reason(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray payment_hash, int64_t failure_code) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -38558,7 +40711,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1ba
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_arr);
        uint8_t (*payment_hash_ref)[32] = &payment_hash_arr;
-       LDKFailureCode failure_code_conv = LDKFailureCode_from_java(env, failure_code);
+       void* failure_code_ptr = untag_ptr(failure_code);
+       CHECK_ACCESS(failure_code_ptr);
+       LDKFailureCode failure_code_conv = *(LDKFailureCode*)(failure_code_ptr);
+       failure_code_conv = FailureCode_clone((LDKFailureCode*)untag_ptr(failure_code));
        ChannelManager_fail_htlc_backwards_with_reason(&this_arg_conv, payment_hash_ref, failure_code_conv);
 }
 
@@ -38574,6 +40730,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1funds(J
        ChannelManager_claim_funds(&this_arg_conv, payment_preimage_ref);
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1funds_1with_1known_1custom_1tlvs(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray payment_preimage) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKThirtyTwoBytes payment_preimage_ref;
+       CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
+       (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
+       ChannelManager_claim_funds_with_known_custom_tlvs(&this_arg_conv, payment_preimage_ref);
+}
+
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1our_1node_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -38641,7 +40809,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
        min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
        *ret_conv = ChannelManager_create_inbound_payment(&this_arg_conv, min_value_msat_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38663,7 +40831,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        CHECK_ACCESS(min_final_cltv_expiry_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_ptr);
        min_final_cltv_expiry_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry));
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
        *ret_conv = ChannelManager_create_inbound_payment_for_hash(&this_arg_conv, payment_hash_ref, min_value_msat_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38680,7 +40848,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1paymen
        LDKThirtyTwoBytes payment_secret_ref;
        CHECK((*env)->GetArrayLength(env, payment_secret) == 32);
        (*env)->GetByteArrayRegion(env, payment_secret, 0, 32, payment_secret_ref.data);
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
        *ret_conv = ChannelManager_get_payment_preimage(&this_arg_conv, payment_hash_ref, payment_secret_ref);
        return tag_ptr(ret_conv, true);
 }
@@ -38775,19 +40943,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Confirm
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1persistable_1update_1future(JNIEnv *env, jclass clz, int64_t this_arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1event_1or_1persistence_1needed_1future(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKFuture ret_var = ChannelManager_get_persistable_update_future(&this_arg_conv);
+       LDKFuture ret_var = ChannelManager_get_event_or_persistence_needed_future(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1and_1clear_1needs_1persistence(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelManager_get_and_clear_needs_persistence(&this_arg_conv);
+       return ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1current_1best_1block(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -39338,7 +41516,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
@@ -39348,8 +41526,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        // WARNING: we need a move here but no clone is available for LDKChannelManagerReadArgs
        
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
-       *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelManagerZ_read(ser_ref, arg_conv);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
@@ -39391,7 +41569,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create(JNIEnv *env, jclass
        CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
        min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
        *ret_conv = create(&keys_conv, min_value_msat_conv, invoice_expiry_delta_secs, entropy_source_conv, current_time, min_final_cltv_expiry_delta_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -39413,7 +41591,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1from_1hash(JNIEnv *
        CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
        min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
        *ret_conv = create_from_hash(&keys_conv, min_value_msat_conv, payment_hash_ref, invoice_expiry_delta_secs, current_time, min_final_cltv_expiry_delta_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -39545,7 +41723,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1get_1networks(JNIEnv
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
        *ret_copy = Init_get_networks(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -39559,8 +41737,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1networks(JNIEnv *en
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_ChainHashZZ val_conv = *(LDKCOption_CVec_ChainHashZZ*)(val_ptr);
-       val_conv = COption_CVec_ChainHashZZ_clone((LDKCOption_CVec_ChainHashZZ*)untag_ptr(val));
+       LDKCOption_CVec_ThirtyTwoBytesZZ val_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(val_ptr);
+       val_conv = COption_CVec_ThirtyTwoBytesZZ_clone((LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(val));
        Init_set_networks(&this_ptr_conv, val_conv);
 }
 
@@ -39570,7 +41748,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1get_1remote_1network_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
        *ret_copy = Init_get_remote_network_address(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -39584,8 +41762,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1remote_1network_1ad
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_NetAddressZ val_conv = *(LDKCOption_NetAddressZ*)(val_ptr);
-       val_conv = COption_NetAddressZ_clone((LDKCOption_NetAddressZ*)untag_ptr(val));
+       LDKCOption_SocketAddressZ val_conv = *(LDKCOption_SocketAddressZ*)(val_ptr);
+       val_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(val));
        Init_set_remote_network_address(&this_ptr_conv, val_conv);
 }
 
@@ -39597,11 +41775,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1new(JNIEnv *env, jcla
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        void* networks_arg_ptr = untag_ptr(networks_arg);
        CHECK_ACCESS(networks_arg_ptr);
-       LDKCOption_CVec_ChainHashZZ networks_arg_conv = *(LDKCOption_CVec_ChainHashZZ*)(networks_arg_ptr);
-       networks_arg_conv = COption_CVec_ChainHashZZ_clone((LDKCOption_CVec_ChainHashZZ*)untag_ptr(networks_arg));
+       LDKCOption_CVec_ThirtyTwoBytesZZ networks_arg_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(networks_arg_ptr);
+       networks_arg_conv = COption_CVec_ThirtyTwoBytesZZ_clone((LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(networks_arg));
        void* remote_network_address_arg_ptr = untag_ptr(remote_network_address_arg);
        CHECK_ACCESS(remote_network_address_arg_ptr);
-       LDKCOption_NetAddressZ remote_network_address_arg_conv = *(LDKCOption_NetAddressZ*)(remote_network_address_arg_ptr);
+       LDKCOption_SocketAddressZ remote_network_address_arg_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_arg_ptr);
        LDKInit ret_var = Init_new(features_arg_conv, networks_arg_conv, remote_network_address_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
@@ -40441,7 +42619,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1shutdown_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = OpenChannel_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -40455,8 +42633,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1shutdown_1sc
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        OpenChannel_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -40514,8 +42692,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1new(JNIEnv *en
        (*env)->GetByteArrayRegion(env, first_per_commitment_point_arg, 0, 33, first_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -40984,7 +43162,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannelV2_1get_1shutdow
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = OpenChannelV2_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -40998,8 +43176,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannelV2_1set_1shutdown_1
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        OpenChannelV2_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -41080,8 +43258,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannelV2_1new(JNIEnv *
        (*env)->GetByteArrayRegion(env, second_per_commitment_point_arg, 0, 33, second_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -41448,7 +43626,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1shutdow
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = AcceptChannel_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -41462,8 +43640,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1shutdown_1
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        AcceptChannel_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -41518,8 +43696,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1new(JNIEnv *
        (*env)->GetByteArrayRegion(env, first_per_commitment_point_arg, 0, 33, first_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -41908,7 +44086,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannelV2_1get_1shutd
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = AcceptChannelV2_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -41922,8 +44100,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannelV2_1set_1shutdown
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        AcceptChannelV2_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -42001,8 +44179,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannelV2_1new(JNIEnv
        (*env)->GetByteArrayRegion(env, second_per_commitment_point_arg, 0, 33, second_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -42151,7 +44329,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1signature
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        FundingCreated_set_signature(&this_ptr_conv, val_ref);
@@ -42164,7 +44342,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new(JNIEnv
        LDKThirtyTwoBytes funding_txid_arg_ref;
        CHECK((*env)->GetArrayLength(env, funding_txid_arg) == 32);
        (*env)->GetByteArrayRegion(env, funding_txid_arg, 0, 32, funding_txid_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKFundingCreated ret_var = FundingCreated_new(temporary_channel_id_arg_ref, funding_txid_arg_ref, funding_output_index_arg, signature_arg_ref);
@@ -42267,7 +44445,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1signature(
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        FundingSigned_set_signature(&this_ptr_conv, val_ref);
@@ -42277,7 +44455,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new(JNIEnv *
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKFundingSigned ret_var = FundingSigned_new(channel_id_arg_ref, signature_arg_ref);
@@ -43946,7 +46124,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1signature(
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ClosingSigned_set_signature(&this_ptr_conv, val_ref);
@@ -43983,7 +46161,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new(JNIEnv *
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKClosingSignedFeeRange fee_range_arg_conv;
@@ -44255,6 +46433,49 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessage_1set_1blinding_1p
        OnionMessage_set_blinding_point(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessage_1get_1onion_1routing_1packet(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKOnionMessage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPacket ret_var = OnionMessage_get_onion_routing_packet(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessage_1set_1onion_1routing_1packet(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKOnionMessage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPacket val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = Packet_clone(&val_conv);
+       OnionMessage_set_onion_routing_packet(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessage_1new(JNIEnv *env, jclass clz, int8_tArray blinding_point_arg, int64_t onion_routing_packet_arg) {
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
+       LDKPacket onion_routing_packet_arg_conv;
+       onion_routing_packet_arg_conv.inner = untag_ptr(onion_routing_packet_arg);
+       onion_routing_packet_arg_conv.is_owned = ptr_is_owned(onion_routing_packet_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_routing_packet_arg_conv);
+       onion_routing_packet_arg_conv = Packet_clone(&onion_routing_packet_arg_conv);
+       LDKOnionMessage ret_var = OnionMessage_new(blinding_point_arg_ref, onion_routing_packet_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline uint64_t OnionMessage_clone_ptr(LDKOnionMessage *NONNULL_PTR arg) {
        LDKOnionMessage ret_var = OnionMessage_clone(arg);
        int64_t ret_ref = 0;
@@ -44689,7 +46910,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signatu
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        CommitmentSigned_set_signature(&this_ptr_conv, val_ref);
@@ -44701,7 +46922,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ ret_var = CommitmentSigned_get_htlc_signatures(&this_ptr_conv);
+       LDKCVec_ECDSASignatureZ 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);
        ;
@@ -44721,15 +46942,15 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1s
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ val_constr;
+       LDKCVec_ECDSASignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                val_constr.data = NULL;
        for (size_t i = 0; i < val_constr.datalen; i++) {
                int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
-               LDKSignature val_conv_8_ref;
+               LDKECDSASignature val_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, val_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, val_conv_8, 0, 64, val_conv_8_ref.compact_form);
                val_constr.data[i] = val_conv_8_ref;
@@ -44741,18 +46962,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new(JNIEn
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
-       LDKCVec_SignatureZ htlc_signatures_arg_constr;
+       LDKCVec_ECDSASignatureZ htlc_signatures_arg_constr;
        htlc_signatures_arg_constr.datalen = (*env)->GetArrayLength(env, htlc_signatures_arg);
        if (htlc_signatures_arg_constr.datalen > 0)
-               htlc_signatures_arg_constr.data = MALLOC(htlc_signatures_arg_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               htlc_signatures_arg_constr.data = MALLOC(htlc_signatures_arg_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                htlc_signatures_arg_constr.data = NULL;
        for (size_t i = 0; i < htlc_signatures_arg_constr.datalen; i++) {
                int8_tArray htlc_signatures_arg_conv_8 = (*env)->GetObjectArrayElement(env, htlc_signatures_arg, i);
-               LDKSignature htlc_signatures_arg_conv_8_ref;
+               LDKECDSASignature htlc_signatures_arg_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, htlc_signatures_arg_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, htlc_signatures_arg_conv_8, 0, 64, htlc_signatures_arg_conv_8_ref.compact_form);
                htlc_signatures_arg_constr.data[i] = htlc_signatures_arg_conv_8_ref;
@@ -45175,7 +47396,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1ne
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = ChannelReestablish_get_next_funding_txid(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -45189,8 +47410,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_TxidZ val_conv = *(LDKCOption_TxidZ*)(val_ptr);
-       val_conv = COption_TxidZ_clone((LDKCOption_TxidZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        ChannelReestablish_set_next_funding_txid(&this_ptr_conv, val_conv);
 }
 
@@ -45206,8 +47427,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1new(JNI
        (*env)->GetByteArrayRegion(env, my_current_per_commitment_point_arg, 0, 33, my_current_per_commitment_point_arg_ref.compressed_form);
        void* next_funding_txid_arg_ptr = untag_ptr(next_funding_txid_arg);
        CHECK_ACCESS(next_funding_txid_arg_ptr);
-       LDKCOption_TxidZ next_funding_txid_arg_conv = *(LDKCOption_TxidZ*)(next_funding_txid_arg_ptr);
-       next_funding_txid_arg_conv = COption_TxidZ_clone((LDKCOption_TxidZ*)untag_ptr(next_funding_txid_arg));
+       LDKCOption_ThirtyTwoBytesZ next_funding_txid_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(next_funding_txid_arg_ptr);
+       next_funding_txid_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(next_funding_txid_arg));
        LDKChannelReestablish ret_var = ChannelReestablish_new(channel_id_arg_ref, next_local_commitment_number_arg, next_remote_commitment_number_arg, your_last_per_commitment_secret_arg_ref, my_current_per_commitment_point_arg_ref, next_funding_txid_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
@@ -45327,7 +47548,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1n
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        AnnouncementSignatures_set_node_signature(&this_ptr_conv, val_ref);
@@ -45350,7 +47571,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1b
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        AnnouncementSignatures_set_bitcoin_signature(&this_ptr_conv, val_ref);
@@ -45360,10 +47581,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature node_signature_arg_ref;
+       LDKECDSASignature node_signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, node_signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, node_signature_arg, 0, 64, node_signature_arg_ref.compact_form);
-       LDKSignature bitcoin_signature_arg_ref;
+       LDKECDSASignature bitcoin_signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, bitcoin_signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, bitcoin_signature_arg, 0, 64, bitcoin_signature_arg_ref.compact_form);
        LDKAnnouncementSignatures ret_var = AnnouncementSignatures_new(channel_id_arg_ref, short_channel_id_arg, node_signature_arg_ref, bitcoin_signature_arg_ref);
@@ -45418,113 +47639,160 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1eq
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SocketAddress_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKNetAddress this_ptr_conv = *(LDKNetAddress*)(this_ptr_ptr);
+       LDKSocketAddress this_ptr_conv = *(LDKSocketAddress*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       NetAddress_free(this_ptr_conv);
+       SocketAddress_free(this_ptr_conv);
 }
 
-static inline uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg) {
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_clone(arg);
+static inline uint64_t SocketAddress_clone_ptr(LDKSocketAddress *NONNULL_PTR arg) {
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNetAddress* arg_conv = (LDKNetAddress*)untag_ptr(arg);
-       int64_t ret_conv = NetAddress_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSocketAddress* arg_conv = (LDKSocketAddress*)untag_ptr(arg);
+       int64_t ret_conv = SocketAddress_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNetAddress* orig_conv = (LDKNetAddress*)untag_ptr(orig);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSocketAddress* orig_conv = (LDKSocketAddress*)untag_ptr(orig);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1ipv4(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1tcp_1ip_1v4(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
        LDKFourBytes addr_ref;
        CHECK((*env)->GetArrayLength(env, addr) == 4);
        (*env)->GetByteArrayRegion(env, addr, 0, 4, addr_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_ipv4(addr_ref, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_tcp_ip_v4(addr_ref, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1ipv6(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1tcp_1ip_1v6(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
        LDKSixteenBytes addr_ref;
        CHECK((*env)->GetArrayLength(env, addr) == 16);
        (*env)->GetByteArrayRegion(env, addr, 0, 16, addr_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_ipv6(addr_ref, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_tcp_ip_v6(addr_ref, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1onion_1v2(JNIEnv *env, jclass clz, int8_tArray a) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1onion_1v2(JNIEnv *env, jclass clz, int8_tArray a) {
        LDKTwelveBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 12);
        (*env)->GetByteArrayRegion(env, a, 0, 12, a_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_onion_v2(a_ref);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_onion_v2(a_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1onion_1v3(JNIEnv *env, jclass clz, int8_tArray ed25519_pubkey, int16_t checksum, int8_t version, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1onion_1v3(JNIEnv *env, jclass clz, int8_tArray ed25519_pubkey, int16_t checksum, int8_t version, int16_t port) {
        LDKThirtyTwoBytes ed25519_pubkey_ref;
        CHECK((*env)->GetArrayLength(env, ed25519_pubkey) == 32);
        (*env)->GetByteArrayRegion(env, ed25519_pubkey, 0, 32, ed25519_pubkey_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_onion_v3(ed25519_pubkey_ref, checksum, version, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_onion_v3(ed25519_pubkey_ref, checksum, version, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1hostname(JNIEnv *env, jclass clz, int64_t hostname, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1hostname(JNIEnv *env, jclass clz, int64_t hostname, int16_t port) {
        LDKHostname hostname_conv;
        hostname_conv.inner = untag_ptr(hostname);
        hostname_conv.is_owned = ptr_is_owned(hostname);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(hostname_conv);
        hostname_conv = Hostname_clone(&hostname_conv);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_hostname(hostname_conv, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_hostname(hostname_conv, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetAddress_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNetAddress* a_conv = (LDKNetAddress*)untag_ptr(a);
-       LDKNetAddress* b_conv = (LDKNetAddress*)untag_ptr(b);
-       jboolean ret_conv = NetAddress_eq(a_conv, b_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SocketAddress_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSocketAddress* a_conv = (LDKSocketAddress*)untag_ptr(a);
+       LDKSocketAddress* b_conv = (LDKSocketAddress*)untag_ptr(b);
+       jboolean ret_conv = SocketAddress_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetAddress_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNetAddress* obj_conv = (LDKNetAddress*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = NetAddress_write(obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SocketAddress_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKSocketAddress* obj_conv = (LDKSocketAddress*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = SocketAddress_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = NetAddress_read(ser_ref);
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = SocketAddress_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSocketAddressParseError* orig_conv = (LDKSocketAddressParseError*)untag_ptr(orig);
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_clone(orig_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1socket_1addr_1parse(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_socket_addr_parse());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1input(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_invalid_input());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1port(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_invalid_port());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1onion_1v3(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_invalid_onion_v3());
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSocketAddressParseError* a_conv = (LDKSocketAddressParseError*)untag_ptr(a);
+       LDKSocketAddressParseError* b_conv = (LDKSocketAddressParseError*)untag_ptr(b);
+       jboolean ret_conv = SocketAddressParseError_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_parse_1onion_1address(JNIEnv *env, jclass clz, jstring host, int16_t port) {
+       LDKStr host_conv = java_to_owned_str(env, host);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = parse_onion_address(host_conv, port);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1from_1str(JNIEnv *env, jclass clz, jstring s) {
+       LDKStr s_conv = java_to_owned_str(env, s);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = SocketAddress_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedGossipMessage_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -45736,15 +48004,15 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnounceme
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_NetAddressZ ret_var = UnsignedNodeAnnouncement_get_addresses(&this_ptr_conv);
+       LDKCVec_SocketAddressZ 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 = tag_ptr(ret_conv_12_copy, true);
-               ret_arr_ptr[m] = ret_conv_12_ref;
+       for (size_t p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -45757,20 +48025,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_NetAddressZ val_constr;
+       LDKCVec_SocketAddressZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                val_constr.data = NULL;
        int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               void* val_conv_12_ptr = untag_ptr(val_conv_12);
-               CHECK_ACCESS(val_conv_12_ptr);
-               LDKNetAddress val_conv_12_conv = *(LDKNetAddress*)(val_conv_12_ptr);
-               val_conv_12_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(val_conv_12));
-               val_constr.data[m] = val_conv_12_conv;
+       for (size_t p = 0; p < val_constr.datalen; p++) {
+               int64_t val_conv_15 = val_vals[p];
+               void* val_conv_15_ptr = untag_ptr(val_conv_15);
+               CHECK_ACCESS(val_conv_15_ptr);
+               LDKSocketAddress val_conv_15_conv = *(LDKSocketAddress*)(val_conv_15_ptr);
+               val_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(val_conv_15));
+               val_constr.data[p] = val_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
        UnsignedNodeAnnouncement_set_addresses(&this_ptr_conv, val_constr);
@@ -45846,7 +48114,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1signatu
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        NodeAnnouncement_set_signature(&this_ptr_conv, val_ref);
@@ -45880,7 +48148,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1content
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEnv *env, jclass clz, int8_tArray signature_arg, int64_t contents_arg) {
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKUnsignedNodeAnnouncement contents_arg_conv;
@@ -46125,6 +48393,72 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        UnsignedChannelAnnouncement_set_bitcoin_key_2(&this_ptr_conv, val_conv);
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1get_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKUnsignedChannelAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedChannelAnnouncement_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_UnsignedChannelAnnouncement_1set_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKUnsignedChannelAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = (*env)->GetArrayLength(env, val);
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, val, 0, val_ref.datalen, val_ref.data);
+       UnsignedChannelAnnouncement_set_excess_data(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1new(JNIEnv *env, jclass clz, int64_t features_arg, int8_tArray chain_hash_arg, int64_t short_channel_id_arg, int64_t node_id_1_arg, int64_t node_id_2_arg, int64_t bitcoin_key_1_arg, int64_t bitcoin_key_2_arg, int8_tArray excess_data_arg) {
+       LDKChannelFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = ChannelFeatures_clone(&features_arg_conv);
+       LDKThirtyTwoBytes chain_hash_arg_ref;
+       CHECK((*env)->GetArrayLength(env, chain_hash_arg) == 32);
+       (*env)->GetByteArrayRegion(env, chain_hash_arg, 0, 32, chain_hash_arg_ref.data);
+       LDKNodeId node_id_1_arg_conv;
+       node_id_1_arg_conv.inner = untag_ptr(node_id_1_arg);
+       node_id_1_arg_conv.is_owned = ptr_is_owned(node_id_1_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_1_arg_conv);
+       node_id_1_arg_conv = NodeId_clone(&node_id_1_arg_conv);
+       LDKNodeId node_id_2_arg_conv;
+       node_id_2_arg_conv.inner = untag_ptr(node_id_2_arg);
+       node_id_2_arg_conv.is_owned = ptr_is_owned(node_id_2_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_2_arg_conv);
+       node_id_2_arg_conv = NodeId_clone(&node_id_2_arg_conv);
+       LDKNodeId bitcoin_key_1_arg_conv;
+       bitcoin_key_1_arg_conv.inner = untag_ptr(bitcoin_key_1_arg);
+       bitcoin_key_1_arg_conv.is_owned = ptr_is_owned(bitcoin_key_1_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(bitcoin_key_1_arg_conv);
+       bitcoin_key_1_arg_conv = NodeId_clone(&bitcoin_key_1_arg_conv);
+       LDKNodeId bitcoin_key_2_arg_conv;
+       bitcoin_key_2_arg_conv.inner = untag_ptr(bitcoin_key_2_arg);
+       bitcoin_key_2_arg_conv.is_owned = ptr_is_owned(bitcoin_key_2_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(bitcoin_key_2_arg_conv);
+       bitcoin_key_2_arg_conv = NodeId_clone(&bitcoin_key_2_arg_conv);
+       LDKCVec_u8Z excess_data_arg_ref;
+       excess_data_arg_ref.datalen = (*env)->GetArrayLength(env, excess_data_arg);
+       excess_data_arg_ref.data = MALLOC(excess_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, excess_data_arg, 0, excess_data_arg_ref.datalen, excess_data_arg_ref.data);
+       LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_new(features_arg_conv, chain_hash_arg_ref, short_channel_id_arg, node_id_1_arg_conv, node_id_2_arg_conv, bitcoin_key_1_arg_conv, bitcoin_key_2_arg_conv, excess_data_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg) {
        LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(arg);
        int64_t ret_ref = 0;
@@ -46195,7 +48529,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_node_signature_1(&this_ptr_conv, val_ref);
@@ -46218,7 +48552,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_node_signature_2(&this_ptr_conv, val_ref);
@@ -46241,7 +48575,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_bitcoin_signature_1(&this_ptr_conv, val_ref);
@@ -46264,7 +48598,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_bitcoin_signature_2(&this_ptr_conv, val_ref);
@@ -46298,16 +48632,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1cont
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JNIEnv *env, jclass clz, int8_tArray node_signature_1_arg, int8_tArray node_signature_2_arg, int8_tArray bitcoin_signature_1_arg, int8_tArray bitcoin_signature_2_arg, int64_t contents_arg) {
-       LDKSignature node_signature_1_arg_ref;
+       LDKECDSASignature node_signature_1_arg_ref;
        CHECK((*env)->GetArrayLength(env, node_signature_1_arg) == 64);
        (*env)->GetByteArrayRegion(env, node_signature_1_arg, 0, 64, node_signature_1_arg_ref.compact_form);
-       LDKSignature node_signature_2_arg_ref;
+       LDKECDSASignature node_signature_2_arg_ref;
        CHECK((*env)->GetArrayLength(env, node_signature_2_arg) == 64);
        (*env)->GetByteArrayRegion(env, node_signature_2_arg, 0, 64, node_signature_2_arg_ref.compact_form);
-       LDKSignature bitcoin_signature_1_arg_ref;
+       LDKECDSASignature bitcoin_signature_1_arg_ref;
        CHECK((*env)->GetArrayLength(env, bitcoin_signature_1_arg) == 64);
        (*env)->GetByteArrayRegion(env, bitcoin_signature_1_arg, 0, 64, bitcoin_signature_1_arg_ref.compact_form);
-       LDKSignature bitcoin_signature_2_arg_ref;
+       LDKECDSASignature bitcoin_signature_2_arg_ref;
        CHECK((*env)->GetArrayLength(env, bitcoin_signature_2_arg) == 64);
        (*env)->GetByteArrayRegion(env, bitcoin_signature_2_arg, 0, 64, bitcoin_signature_2_arg_ref.compact_form);
        LDKUnsignedChannelAnnouncement contents_arg_conv;
@@ -46661,7 +48995,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1signature(
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelUpdate_set_signature(&this_ptr_conv, val_ref);
@@ -46695,7 +49029,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1contents(J
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv *env, jclass clz, int8_tArray signature_arg, int64_t contents_arg) {
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKUnsignedChannelUpdate contents_arg_conv;
@@ -49527,14 +51861,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_PeerManager_1get_1peer
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
+       LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ ret_var = PeerManager_get_peer_node_ids(&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 o = 0; o < ret_var.datalen; o++) {
-               LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-               *ret_conv_40_conv = ret_var.data[o];
-               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       for (size_t r = 0; r < ret_var.datalen; r++) {
+               LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv_43_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+               *ret_conv_43_conv = ret_var.data[r];
+               ret_arr_ptr[r] = tag_ptr(ret_conv_43_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -49559,7 +51893,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1outbound_
        }
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
-       LDKCOption_NetAddressZ remote_network_address_conv = *(LDKCOption_NetAddressZ*)(remote_network_address_ptr);
+       LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = PeerManager_new_outbound_connection(&this_arg_conv, their_node_id_ref, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -49580,7 +51914,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1inbound_1
        }
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
-       LDKCOption_NetAddressZ remote_network_address_conv = *(LDKCOption_NetAddressZ*)(remote_network_address_ptr);
+       LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = PeerManager_new_inbound_connection(&this_arg_conv, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -49681,19 +52015,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1broadcast_1node_1
        LDKThirtyTwoBytes alias_ref;
        CHECK((*env)->GetArrayLength(env, alias) == 32);
        (*env)->GetByteArrayRegion(env, alias, 0, 32, alias_ref.data);
-       LDKCVec_NetAddressZ addresses_constr;
+       LDKCVec_SocketAddressZ addresses_constr;
        addresses_constr.datalen = (*env)->GetArrayLength(env, addresses);
        if (addresses_constr.datalen > 0)
-               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                addresses_constr.data = NULL;
        int64_t* addresses_vals = (*env)->GetLongArrayElements (env, addresses, NULL);
-       for (size_t m = 0; m < addresses_constr.datalen; m++) {
-               int64_t addresses_conv_12 = addresses_vals[m];
-               void* addresses_conv_12_ptr = untag_ptr(addresses_conv_12);
-               CHECK_ACCESS(addresses_conv_12_ptr);
-               LDKNetAddress addresses_conv_12_conv = *(LDKNetAddress*)(addresses_conv_12_ptr);
-               addresses_constr.data[m] = addresses_conv_12_conv;
+       for (size_t p = 0; p < addresses_constr.datalen; p++) {
+               int64_t addresses_conv_15 = addresses_vals[p];
+               void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
+               CHECK_ACCESS(addresses_conv_15_ptr);
+               LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
+               addresses_constr.data[p] = addresses_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, addresses, addresses_vals, 0);
        PeerManager_broadcast_node_announcement(&this_arg_conv, rgb_ref, alias_ref, addresses_constr);
@@ -50345,6 +52679,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone(JN
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKChannelPublicKeys o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelPublicKeys_hash(&o_conv);
+       return ret_conv;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKChannelPublicKeys a_conv;
        a_conv.inner = untag_ptr(a);
@@ -50441,6 +52785,22 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_get_1revokeable_1redeem
        return ret_arr;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_get_1counterparty_1payment_1script(JNIEnv *env, jclass clz, int64_t channel_type_features, int8_tArray payment_key) {
+       LDKChannelTypeFeatures channel_type_features_conv;
+       channel_type_features_conv.inner = untag_ptr(channel_type_features);
+       channel_type_features_conv.is_owned = ptr_is_owned(channel_type_features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_features_conv);
+       channel_type_features_conv.is_owned = false;
+       LDKPublicKey payment_key_ref;
+       CHECK((*env)->GetArrayLength(env, payment_key) == 33);
+       (*env)->GetByteArrayRegion(env, payment_key, 0, 33, payment_key_ref.compressed_form);
+       LDKCVec_u8Z ret_var = get_counterparty_payment_script(&channel_type_features_conv, payment_key_ref);
+       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_HTLCOutputInCommitment_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKHTLCOutputInCommitment this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -50703,16 +53063,16 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1htlc_1transactio
 }
 
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1htlc_1input_1witness(JNIEnv *env, jclass clz, int8_tArray local_sig, int8_tArray remote_sig, int64_t preimage, int8_tArray redeem_script, int64_t channel_type_features) {
-       LDKSignature local_sig_ref;
+       LDKECDSASignature local_sig_ref;
        CHECK((*env)->GetArrayLength(env, local_sig) == 64);
        (*env)->GetByteArrayRegion(env, local_sig, 0, 64, local_sig_ref.compact_form);
-       LDKSignature remote_sig_ref;
+       LDKECDSASignature remote_sig_ref;
        CHECK((*env)->GetArrayLength(env, remote_sig) == 64);
        (*env)->GetByteArrayRegion(env, remote_sig, 0, 64, remote_sig_ref.compact_form);
        void* preimage_ptr = untag_ptr(preimage);
        CHECK_ACCESS(preimage_ptr);
-       LDKCOption_PaymentPreimageZ preimage_conv = *(LDKCOption_PaymentPreimageZ*)(preimage_ptr);
-       preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(preimage));
+       LDKCOption_ThirtyTwoBytesZ preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(preimage_ptr);
+       preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(preimage));
        LDKu8slice redeem_script_ref;
        redeem_script_ref.datalen = (*env)->GetArrayLength(env, redeem_script);
        redeem_script_ref.data = (*env)->GetByteArrayElements (env, redeem_script, NULL);
@@ -50755,7 +53115,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1anchor_1input_1w
        LDKPublicKey funding_key_ref;
        CHECK((*env)->GetArrayLength(env, funding_key) == 33);
        (*env)->GetByteArrayRegion(env, funding_key, 0, 33, funding_key_ref.compressed_form);
-       LDKSignature funding_sig_ref;
+       LDKECDSASignature funding_sig_ref;
        CHECK((*env)->GetArrayLength(env, funding_sig) == 64);
        (*env)->GetByteArrayRegion(env, funding_sig, 0, 64, funding_sig_ref.compact_form);
        LDKWitness ret_var = build_anchor_input_witness(funding_key_ref, funding_sig_ref);
@@ -50977,6 +53337,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKChannelTransactionParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelTransactionParameters_hash(&o_conv);
+       return ret_conv;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKChannelTransactionParameters a_conv;
        a_conv.inner = untag_ptr(a);
@@ -51089,6 +53459,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCounterpartyChannelTransactionParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = CounterpartyChannelTransactionParameters_hash(&o_conv);
+       return ret_conv;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKCounterpartyChannelTransactionParameters a_conv;
        a_conv.inner = untag_ptr(a);
@@ -51291,7 +53671,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        HolderCommitmentTransaction_set_counterparty_sig(&this_ptr_conv, val_ref);
@@ -51303,7 +53683,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransa
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ ret_var = HolderCommitmentTransaction_get_counterparty_htlc_sigs(&this_ptr_conv);
+       LDKCVec_ECDSASignatureZ 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);
        ;
@@ -51323,15 +53703,15 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ val_constr;
+       LDKCVec_ECDSASignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                val_constr.data = NULL;
        for (size_t i = 0; i < val_constr.datalen; i++) {
                int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
-               LDKSignature val_conv_8_ref;
+               LDKECDSASignature val_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, val_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, val_conv_8, 0, 64, val_conv_8_ref.compact_form);
                val_constr.data[i] = val_conv_8_ref;
@@ -51398,18 +53778,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction
        commitment_tx_conv.is_owned = ptr_is_owned(commitment_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv);
-       LDKSignature counterparty_sig_ref;
+       LDKECDSASignature counterparty_sig_ref;
        CHECK((*env)->GetArrayLength(env, counterparty_sig) == 64);
        (*env)->GetByteArrayRegion(env, counterparty_sig, 0, 64, counterparty_sig_ref.compact_form);
-       LDKCVec_SignatureZ counterparty_htlc_sigs_constr;
+       LDKCVec_ECDSASignatureZ counterparty_htlc_sigs_constr;
        counterparty_htlc_sigs_constr.datalen = (*env)->GetArrayLength(env, counterparty_htlc_sigs);
        if (counterparty_htlc_sigs_constr.datalen > 0)
-               counterparty_htlc_sigs_constr.data = MALLOC(counterparty_htlc_sigs_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               counterparty_htlc_sigs_constr.data = MALLOC(counterparty_htlc_sigs_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                counterparty_htlc_sigs_constr.data = NULL;
        for (size_t i = 0; i < counterparty_htlc_sigs_constr.datalen; i++) {
                int8_tArray counterparty_htlc_sigs_conv_8 = (*env)->GetObjectArrayElement(env, counterparty_htlc_sigs, i);
-               LDKSignature counterparty_htlc_sigs_conv_8_ref;
+               LDKECDSASignature counterparty_htlc_sigs_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, counterparty_htlc_sigs_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, counterparty_htlc_sigs_conv_8, 0, 64, counterparty_htlc_sigs_conv_8_ref.compact_form);
                counterparty_htlc_sigs_constr.data[i] = counterparty_htlc_sigs_conv_8_ref;
@@ -52038,11 +54418,38 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        void* entropy_source_ptr = untag_ptr(entropy_source);
        if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
        LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
        *ret_conv = TrustedCommitmentTransaction_get_htlc_sigs(&this_arg_conv, htlc_base_key_ref, &channel_parameters_conv, entropy_source_conv);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1revokeable_1output_1index(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKTrustedCommitmentTransaction this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = TrustedCommitmentTransaction_revokeable_output_index(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1build_1to_1local_1justice_1tx(JNIEnv *env, jclass clz, int64_t this_arg, int64_t feerate_per_kw, int8_tArray destination_script) {
+       LDKTrustedCommitmentTransaction this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_u8Z destination_script_ref;
+       destination_script_ref.datalen = (*env)->GetArrayLength(env, destination_script);
+       destination_script_ref.data = MALLOC(destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, destination_script, 0, destination_script_ref.datalen, destination_script_ref.data);
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = TrustedCommitmentTransaction_build_to_local_justice_tx(&this_arg_conv, feerate_per_kw, destination_script_ref);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_get_1commitment_1transaction_1number_1obscure_1factor(JNIEnv *env, jclass clz, int8_tArray broadcaster_payment_basepoint, int8_tArray countersignatory_payment_basepoint, jboolean outbound_from_broadcaster) {
        LDKPublicKey broadcaster_payment_basepoint_ref;
        CHECK((*env)->GetArrayLength(env, broadcaster_payment_basepoint) == 33);
@@ -52564,6 +54971,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1un
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52619,6 +55048,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1un
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52674,6 +55125,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1requires_
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKChannelFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52729,6 +55202,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1req
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKBolt11InvoiceFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52784,6 +55279,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1requires_1u
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKOfferFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52839,6 +55356,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1re
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKInvoiceRequestFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52894,6 +55433,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1req
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKBolt12InvoiceFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52949,6 +55510,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1requir
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKBlindedHopFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -53004,6 +55587,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requi
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKChannelTypeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -54317,6 +56922,120 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1sh
        return ret_conv;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1taproot_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_optional(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1taproot_1required(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_required(&this_arg_conv);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1supports_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1taproot_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_optional(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1taproot_1required(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_required(&this_arg_conv);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1supports_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1taproot_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_optional(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1taproot_1required(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_required(&this_arg_conv);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1supports_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requires_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1onion_1messages_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -55027,7 +57746,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1clone(JNIEnv *env, j
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1attempts(JNIEnv *env, jclass clz, int64_t a) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1attempts(JNIEnv *env, jclass clz, int32_t a) {
        LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
        *ret_copy = Retry_attempts(a);
        int64_t ret_ref = tag_ptr(ret_copy, true);
@@ -55054,6 +57773,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1hash(JNIEnv *env, jc
        return ret_conv;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Retry_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRetry* obj_conv = (LDKRetry*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = Retry_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = Retry_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_RetryableSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRetryableSendFailure* orig_conv = (LDKRetryableSendFailure*)untag_ptr(orig);
        jclass ret_conv = LDKRetryableSendFailure_to_java(env, RetryableSendFailure_clone(orig_conv));
@@ -55205,6 +57943,67 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1partial
        return ret_ref;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPaymentSendFailure* a_conv = (LDKPaymentSendFailure*)untag_ptr(a);
+       LDKPaymentSendFailure* b_conv = (LDKPaymentSendFailure*)untag_ptr(b);
+       jboolean ret_conv = PaymentSendFailure_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKProbeSendFailure this_ptr_conv = *(LDKProbeSendFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ProbeSendFailure_free(this_ptr_conv);
+}
+
+static inline uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg) {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbeSendFailure* arg_conv = (LDKProbeSendFailure*)untag_ptr(arg);
+       int64_t ret_conv = ProbeSendFailure_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbeSendFailure* orig_conv = (LDKProbeSendFailure*)untag_ptr(orig);
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1route_1not_1found(JNIEnv *env, jclass clz) {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_route_not_found();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1sending_1failed(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKPaymentSendFailure a_conv = *(LDKPaymentSendFailure*)(a_ptr);
+       a_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(a));
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_sending_failed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKProbeSendFailure* a_conv = (LDKProbeSendFailure*)untag_ptr(a);
+       LDKProbeSendFailure* b_conv = (LDKProbeSendFailure*)untag_ptr(b);
+       jboolean ret_conv = ProbeSendFailure_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKRecipientOnionFields this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -55219,7 +58018,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1get_1
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = RecipientOnionFields_get_payment_secret(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -55233,8 +58032,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1set_1pay
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_PaymentSecretZ val_conv = *(LDKCOption_PaymentSecretZ*)(val_ptr);
-       val_conv = COption_PaymentSecretZ_clone((LDKCOption_PaymentSecretZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        RecipientOnionFields_set_payment_secret(&this_ptr_conv, val_conv);
 }
 
@@ -55263,22 +58062,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1set_1pay
        RecipientOnionFields_set_payment_metadata(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1new(JNIEnv *env, jclass clz, int64_t payment_secret_arg, int64_t payment_metadata_arg) {
-       void* payment_secret_arg_ptr = untag_ptr(payment_secret_arg);
-       CHECK_ACCESS(payment_secret_arg_ptr);
-       LDKCOption_PaymentSecretZ payment_secret_arg_conv = *(LDKCOption_PaymentSecretZ*)(payment_secret_arg_ptr);
-       payment_secret_arg_conv = COption_PaymentSecretZ_clone((LDKCOption_PaymentSecretZ*)untag_ptr(payment_secret_arg));
-       void* payment_metadata_arg_ptr = untag_ptr(payment_metadata_arg);
-       CHECK_ACCESS(payment_metadata_arg_ptr);
-       LDKCOption_CVec_u8ZZ payment_metadata_arg_conv = *(LDKCOption_CVec_u8ZZ*)(payment_metadata_arg_ptr);
-       payment_metadata_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(payment_metadata_arg));
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_new(payment_secret_arg_conv, payment_metadata_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
 static inline uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg) {
        LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(arg);
        int64_t ret_ref = 0;
@@ -55366,6 +58149,53 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1spont
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1with_1custom_1tlvs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray custom_tlvs) {
+       LDKRecipientOnionFields this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RecipientOnionFields_clone(&this_arg_conv);
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs_constr;
+       custom_tlvs_constr.datalen = (*env)->GetArrayLength(env, custom_tlvs);
+       if (custom_tlvs_constr.datalen > 0)
+               custom_tlvs_constr.data = MALLOC(custom_tlvs_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
+       else
+               custom_tlvs_constr.data = NULL;
+       int64_t* custom_tlvs_vals = (*env)->GetLongArrayElements (env, custom_tlvs, NULL);
+       for (size_t x = 0; x < custom_tlvs_constr.datalen; x++) {
+               int64_t custom_tlvs_conv_23 = custom_tlvs_vals[x];
+               void* custom_tlvs_conv_23_ptr = untag_ptr(custom_tlvs_conv_23);
+               CHECK_ACCESS(custom_tlvs_conv_23_ptr);
+               LDKC2Tuple_u64CVec_u8ZZ custom_tlvs_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(custom_tlvs_conv_23_ptr);
+               custom_tlvs_conv_23_conv = C2Tuple_u64CVec_u8ZZ_clone((LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(custom_tlvs_conv_23));
+               custom_tlvs_constr.data[x] = custom_tlvs_conv_23_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, custom_tlvs, custom_tlvs_vals, 0);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = RecipientOnionFields_with_custom_tlvs(this_arg_conv, custom_tlvs_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1custom_1tlvs(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRecipientOnionFields this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret_var = RecipientOnionFields_custom_tlvs(&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 x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_u64CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+               *ret_conv_23_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomMessageReader_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -55406,961 +58236,760 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Type_1free(JNIEnv *env, jclass
        Type_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKUnsignedBolt12Invoice this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedBolt12Invoice_free(this_obj_conv);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
-       return ret_arr;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBolt12Invoice this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Offer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKOffer this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12Invoice_free(this_obj_conv);
+       Offer_free(this_obj_conv);
 }
 
-static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
+static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
+       LDKOffer ret_var = Offer_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBolt12Invoice arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOffer arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBolt12Invoice orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOffer orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
+       LDKOffer ret_var = Offer_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = Offer_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = Offer_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = Offer_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1created_1at(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1relative_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
-       return ret_conv;
+       LDKOfferFeatures ret_var = Offer_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payment_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_payment_hash(&this_arg_conv).data);
-       return ret_arr;
+       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedPathZ ret_var = Offer_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_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_Bolt12Invoice_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_features(&this_arg_conv);
+       LDKQuantity ret_var = Offer_supported_quantity(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Offer_signing_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signable_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1supports_1chain(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray chain) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_signable_hash(&this_arg_conv).data);
-       return ret_arr;
+       LDKThirtyTwoBytes chain_ref;
+       CHECK((*env)->GetArrayLength(env, chain) == 32);
+       (*env)->GetByteArrayRegion(env, chain, 0, 32, chain_ref.data);
+       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
+       return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       jboolean ret_conv = Bolt12Invoice_verify(&this_arg_conv, &key_conv);
+       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBolt12Invoice obj_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1valid_1quantity(JNIEnv *env, jclass clz, int64_t this_arg, int64_t quantity) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1expects_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKOffer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Offer_write(&obj_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_BlindedPayInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedPayInfo this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Amount_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKAmount this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPayInfo_free(this_obj_conv);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
-}
-
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+       Amount_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
+static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
+       LDKAmount ret_var = Amount_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedHopFeatures_clone(&val_conv);
-       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAmount arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Amount_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1new(JNIEnv *env, jclass clz, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
-       LDKBlindedHopFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKAmount orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKAmount ret_var = Amount_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Quantity_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKQuantity this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Quantity_free(this_obj_conv);
+}
+
+static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
+       LDKQuantity ret_var = Quantity_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedPayInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKQuantity arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = Quantity_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedPayInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKQuantity orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
+       LDKQuantity ret_var = Quantity_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedPayInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedPayInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedPayInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1from_1str(JNIEnv *env, jclass clz, jstring s) {
+       LDKStr s_conv = java_to_owned_str(env, s);
+       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
+       *ret_conv = Offer_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedPayInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_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_UnsignedBolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKUnsignedBolt12Invoice this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedBolt12Invoice_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = BlindedPayInfo_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1tagged_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTaggedHash ret_var = UnsignedBolt12Invoice_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInvoiceError this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBolt12Invoice this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceError_free(this_obj_conv);
+       Bolt12Invoice_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
+static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ErroneousField_clone(&val_conv);
-       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBolt12Invoice arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBolt12Invoice orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = UntrustedString_clone(&val_conv);
-       InvoiceError_set_message(&this_ptr_conv, val_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1new(JNIEnv *env, jclass clz, int64_t erroneous_field_arg, int64_t message_arg) {
-       LDKErroneousField erroneous_field_arg_conv;
-       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
-       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
-       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
-       LDKUntrustedString message_arg_conv;
-       message_arg_conv.inner = untag_ptr(message_arg);
-       message_arg_conv.is_owned = ptr_is_owned(message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
-       message_arg_conv = UntrustedString_clone(&message_arg_conv);
-       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
-       LDKInvoiceError ret_var = InvoiceError_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInvoiceError arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInvoiceError orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = UnsignedBolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKErroneousField this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ErroneousField_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, UnsignedBolt12Invoice_chain(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
        LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
+       *ret_copy = UnsignedBolt12Invoice_metadata(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
-       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
-       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1new(JNIEnv *env, jclass clz, int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
-       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
-       CHECK_ACCESS(suggested_value_arg_ptr);
-       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
-       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
-       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = UnsignedBolt12Invoice_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
-       LDKErroneousField ret_var = ErroneousField_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = UnsignedBolt12Invoice_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKErroneousField arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKErroneousField orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceError_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInvoiceError obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
-       *ret_conv = InvoiceError_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKUnsignedInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedInvoiceRequest_free(this_obj_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequest_free(this_obj_conv);
-}
-
-static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedBolt12Invoice_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInvoiceRequest arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInvoiceRequest orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1message_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = InvoiceRequest_metadata(&this_arg_conv);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       LDKCVec_BlindedPathZ ret_var = UnsignedBolt12Invoice_message_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, InvoiceRequest_chain(&this_arg_conv).data);
-       return ret_arr;
+       LDKQuantity ret_var = UnsignedBolt12Invoice_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKu8slice ret_var = UnsignedBolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_features(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = UnsignedBolt12Invoice_invoice_request_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
+       *ret_copy = UnsignedBolt12Invoice_quantity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, InvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedBolt12Invoice_payer_id(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_payer_note(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1created_1at(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = InvoiceRequest_verify(&this_arg_conv, &key_conv);
-       return tag_ptr(ret_conv, true);
+       int64_t ret_conv = UnsignedBolt12Invoice_created_at(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInvoiceRequest obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1relative_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedBolt12Invoice_relative_expiry(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Offer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKOffer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Offer_free(this_obj_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = UnsignedBolt12Invoice_is_expired(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
-       LDKOffer ret_var = Offer_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payment_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, UnsignedBolt12Invoice_payment_hash(&this_arg_conv).data);
+       return ret_arr;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOffer arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedBolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOffer orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOffer ret_var = Offer_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1invoice_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures ret_var = UnsignedBolt12Invoice_invoice_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_ChainHashZ ret_var = Offer_chains(&this_arg_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, 32);
-               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
-               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
-       }
-       
-       FREE(ret_var.data);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1supports_1chain(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray chain) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKThirtyTwoBytes chain_ref;
-       CHECK((*env)->GetArrayLength(env, chain) == 32);
-       (*env)->GetByteArrayRegion(env, chain, 0, 32, chain_ref.data);
-       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
-       return ret_conv;
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = Bolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_chain(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = Offer_metadata(&this_arg_conv);
+       *ret_copy = Bolt12Invoice_metadata(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKAmount ret_var = Offer_amount(&this_arg_conv);
+       LDKAmount ret_var = Bolt12Invoice_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
+       LDKOfferFeatures ret_var = Bolt12Invoice_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = Offer_features(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_absolute_expiry(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1message_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Offer_paths(&this_arg_conv);
+       LDKCVec_BlindedPathZ ret_var = Bolt12Invoice_message_paths(&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);
@@ -56376,2996 +59005,3227 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths(JNIEnv *e
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKQuantity ret_var = Offer_supported_quantity(&this_arg_conv);
+       LDKQuantity ret_var = Bolt12Invoice_supported_quantity(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1valid_1quantity(JNIEnv *env, jclass clz, int64_t this_arg, int64_t quantity) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
-       return ret_conv;
+       LDKu8slice ret_var = Bolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1expects_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
-       return ret_conv;
+       LDKInvoiceRequestFeatures ret_var = Bolt12Invoice_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Offer_signing_pubkey(&this_arg_conv).compressed_form);
-       return ret_arr;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKOffer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Offer_write(&obj_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);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Bolt12Invoice_payer_id(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Amount_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKAmount this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Amount_free(this_obj_conv);
-}
-
-static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
-       LDKAmount ret_var = Amount_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Bolt12Invoice_payer_note(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKAmount arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Amount_clone_ptr(&arg_conv);
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1created_1at(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKAmount orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKAmount ret_var = Amount_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1relative_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Quantity_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKQuantity this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Quantity_free(this_obj_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
-       LDKQuantity ret_var = Quantity_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payment_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_payment_hash(&this_arg_conv).data);
+       return ret_arr;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKQuantity arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Quantity_clone_ptr(&arg_conv);
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKQuantity orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKQuantity ret_var = Quantity_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1invoice_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_invoice_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1from_1str(JNIEnv *env, jclass clz, jstring s) {
-       LDKStr s_conv = java_to_owned_str(env, s);
-       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
-       *ret_conv = Offer_from_str(s_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBolt12ParseError this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12ParseError_free(this_obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signature(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, Bolt12Invoice_signature(&this_arg_conv).compact_form);
+       return ret_arr;
 }
 
-static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBolt12ParseError arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signable_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_signable_hash(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBolt12ParseError orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = Bolt12Invoice_verify(&this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_clone(orig_conv));
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKUnsignedBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedBolt12Invoice_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1already_1expired(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_already_expired());
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1chain(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_chain());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedPayInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedPayInfo_free(this_obj_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1chain(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_chain());
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_amount());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_amount());
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1insufficient_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_insufficient_amount());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_amount());
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1currency(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_currency());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unknown_1required_1features(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unknown_required_features());
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1features(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_features());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1description(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_description());
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signing_1pubkey(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signing_pubkey());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1signing_1pubkey(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_signing_pubkey());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1signing_1pubkey(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_signing_pubkey());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1quantity(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_quantity());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1new(JNIEnv *env, jclass clz, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1quantity(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_quantity());
+static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedPayInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1quantity(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_quantity());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedPayInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1metadata(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_metadata());
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedPayInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1metadata(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_metadata());
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedPayInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedPayInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1metadata(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_metadata());
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedPayInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1id(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_id());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = BlindedPayInfo_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1paths(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_paths());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInvoiceError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceError_free(this_obj_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1pay_1info(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_pay_info());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1creation_1time(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_creation_time());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ErroneousField_clone(&val_conv);
+       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payment_1hash(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payment_hash());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signature(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signature());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = UntrustedString_clone(&val_conv);
+       InvoiceError_set_message(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Refund_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRefund this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Refund_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1new(JNIEnv *env, jclass clz, int64_t erroneous_field_arg, int64_t message_arg) {
+       LDKErroneousField erroneous_field_arg_conv;
+       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
+       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
+       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
+       LDKUntrustedString message_arg_conv;
+       message_arg_conv.inner = untag_ptr(message_arg);
+       message_arg_conv.is_owned = ptr_is_owned(message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
+       message_arg_conv = UntrustedString_clone(&message_arg_conv);
+       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
-       LDKRefund ret_var = Refund_clone(arg);
+static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
+       LDKInvoiceError ret_var = InvoiceError_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRefund arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceError arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRefund orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInvoiceError orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRefund ret_var = Refund_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
+       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKErroneousField this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ErroneousField_free(this_obj_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Refund_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Refund_paths(&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 n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = Refund_metadata(&this_arg_conv);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
-       return ret_arr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Refund_chain(&this_arg_conv).data);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
+       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1new(JNIEnv *env, jclass clz, int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
+       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
+       CHECK_ACCESS(suggested_value_arg_ptr);
+       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
+       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
+       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Refund_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
+       LDKErroneousField ret_var = ErroneousField_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Refund_payer_id(&this_arg_conv).compressed_form);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKErroneousField arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKErroneousField orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRefund obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceError_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInvoiceError obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Refund_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1from_1str(JNIEnv *env, jclass clz, jstring s) {
-       LDKStr s_conv = java_to_owned_str(env, s);
-       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
-       *ret_conv = Refund_from_str(s_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
+       *ret_conv = InvoiceError_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
-       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_clone(orig_conv));
-       return ret_conv;
-}
-
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1chain(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_chain());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKUnsignedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedInvoiceRequest_free(this_obj_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1tx(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_tx());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1tagged_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTaggedHash ret_var = UnsignedInvoiceRequest_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoResult_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       UtxoResult_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequest_free(this_obj_conv);
 }
 
-static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
-       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1sync(JNIEnv *env, jclass clz, int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
-       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_sync(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKVerifiedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       VerifiedInvoiceRequest_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1async(JNIEnv *env, jclass clz, int64_t a) {
-       LDKUtxoFuture a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = UtxoFuture_clone(&a_conv);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_async(a_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1get_1keys(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = VerifiedInvoiceRequest_get_keys(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoLookup_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       UtxoLookup_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKUtxoFuture this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UtxoFuture_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1set_1keys(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_SecretKeyZ val_conv = *(LDKCOption_SecretKeyZ*)(val_ptr);
+       val_conv = COption_SecretKeyZ_clone((LDKCOption_SecretKeyZ*)untag_ptr(val));
+       VerifiedInvoiceRequest_set_keys(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
-       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
+static inline uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg) {
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKUtxoFuture arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKVerifiedInvoiceRequest arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
+       int64_t ret_conv = VerifiedInvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKUtxoFuture orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKVerifiedInvoiceRequest orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1new(JNIEnv *env, jclass clz) {
-       LDKUtxoFuture ret_var = UtxoFuture_new();
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1resolve_1without_1forwarding(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = UnsignedInvoiceRequest_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*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_UtxoFuture_1resolve(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       LDKP2PGossipSync gossip_conv;
-       gossip_conv.inner = untag_ptr(gossip);
-       gossip_conv.is_owned = ptr_is_owned(gossip);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
-       gossip_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = UnsignedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeId this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeId_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = UnsignedInvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
-       LDKNodeId ret_var = NodeId_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeId arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeId orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKNodeId ret_var = NodeId_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = UnsignedInvoiceRequest_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1from_1pubkey(JNIEnv *env, jclass clz, int8_tArray pubkey) {
-       LDKPublicKey pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
-       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1slice(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNodeId this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       LDKCVec_BlindedPathZ ret_var = UnsignedInvoiceRequest_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_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_NodeId_1as_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNodeId this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
-       return tag_ptr(ret_conv, true);
+       LDKQuantity ret_var = UnsignedInvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKNodeId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = NodeId_hash(&o_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeId obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = UnsignedInvoiceRequest_payer_metadata(&this_arg_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 int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = NodeId_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNetworkGraph this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NetworkGraph_free(this_obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, UnsignedInvoiceRequest_chain(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKReadOnlyNetworkGraph this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ReadOnlyNetworkGraph_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NetworkUpdate_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = UnsignedInvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_quantity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
-       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedInvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1update_1message(JNIEnv *env, jclass clz, int64_t msg) {
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1failure(JNIEnv *env, jclass clz, int64_t short_channel_id, jboolean is_permanent) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_ThirtyTwoBytesZ ret_var = InvoiceRequest_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1node_1failure(JNIEnv *env, jclass clz, int8_tArray node_id, jboolean is_permanent) {
-       LDKPublicKey node_id_ref;
-       CHECK((*env)->GetArrayLength(env, node_id) == 33);
-       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = InvoiceRequest_metadata(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
-       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
-       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = InvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = InvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
-       *ret_conv = NetworkUpdate_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = InvoiceRequest_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKP2PGossipSync this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       P2PGossipSync_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = InvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1add_1utxo_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t utxo_lookup) {
-       LDKP2PGossipSync this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
+       LDKCVec_BlindedPathZ ret_var = InvoiceRequest_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_ref;
        }
-       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_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_NetworkGraph_1handle_1network_1update(JNIEnv *env, jclass clz, int64_t this_arg, int64_t network_update) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
-       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
+       LDKQuantity ret_var = InvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1genesis_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, NetworkGraph_get_genesis_hash(&this_arg_conv).data);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, InvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1node_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_node_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1channel_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_channel_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1RoutingMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
-       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+       LDKu8slice ret_var = InvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1MessageSendEventsProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
-       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKChannelUpdateInfo this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUpdateInfo_free(this_obj_conv);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, InvoiceRequest_chain(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, InvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1signature(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, InvoiceRequest_signature(&this_arg_conv).compact_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = InvoiceRequest_verify(this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_ThirtyTwoBytesZ ret_var = VerifiedInvoiceRequest_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*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_ChannelUpdateInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = VerifiedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = VerifiedInvoiceRequest_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = VerifiedInvoiceRequest_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdate val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdate_clone(&val_conv);
-       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1new(JNIEnv *env, jclass clz, int32_t last_update_arg, jboolean enabled_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int64_t last_update_message_arg) {
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       LDKChannelUpdate last_update_message_arg_conv;
-       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
-       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
-       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_message_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPathZ ret_var = VerifiedInvoiceRequest_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_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_VerifiedInvoiceRequest_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKQuantity ret_var = VerifiedInvoiceRequest_supported_quantity(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKChannelUpdateInfo arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, VerifiedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKChannelUpdateInfo orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = VerifiedInvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, VerifiedInvoiceRequest_chain(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = VerifiedInvoiceRequest_invoice_request_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKChannelUpdateInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelUpdateInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKChannelUpdateInfo obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, VerifiedInvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKUnsignedInvoiceRequest obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = UnsignedInvoiceRequest_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
-       *ret_conv = ChannelUpdateInfo_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInvoiceRequest obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_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_ChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKChannelInfo this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TaggedHash_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKTaggedHash this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelInfo_free(this_obj_conv);
+       TaggedHash_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBolt12ParseError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12ParseError_free(this_obj_conv);
+}
+
+static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       ChannelInfo_set_features(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBolt12ParseError arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBolt12ParseError orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_clone(orig_conv));
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1already_1expired(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_already_expired());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1chain(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_chain());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1chain(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_chain());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_amount());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_amount());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1insufficient_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_insufficient_amount());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_amount());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1currency(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_currency());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unknown_1required_1features(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unknown_required_features());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelAnnouncement_clone(&val_conv);
-       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1features(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_features());
+       return ret_conv;
 }
 
-static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
-       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1description(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_description());
+       return ret_conv;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKChannelInfo arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signing_1pubkey(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signing_pubkey());
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKChannelInfo orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1signing_1pubkey(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_signing_pubkey());
+       return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKChannelInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1signing_1pubkey(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_signing_pubkey());
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1directional_1info(JNIEnv *env, jclass clz, int64_t this_arg, int8_t channel_flags) {
-       LDKChannelInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1quantity(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_quantity());
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKChannelInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1quantity(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_quantity());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
-       *ret_conv = ChannelInfo_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1quantity(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_quantity());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDirectedChannelInfo this_obj_conv;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1metadata(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_metadata());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1metadata(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_metadata());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1metadata(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_metadata());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1id(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_id());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1paths(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_paths());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1pay_1info(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_pay_info());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1creation_1time(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_creation_time());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payment_1hash(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payment_hash());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signature(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signature());
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Refund_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRefund this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DirectedChannelInfo_free(this_obj_conv);
+       Refund_free(this_obj_conv);
 }
 
-static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
+       LDKRefund ret_var = Refund_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKDirectedChannelInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRefund arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKDirectedChannelInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRefund orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
+       LDKRefund ret_var = Refund_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1channel(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
+       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = DirectedChannelInfo_htlc_maximum_msat(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Refund_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EffectiveCapacity_free(this_ptr_conv);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPathZ ret_var = Refund_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Refund_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
-       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Refund_chain(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1exact_1liquidity(JNIEnv *env, jclass clz, int64_t liquidity_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_quantity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1advertised_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Refund_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1total(JNIEnv *env, jclass clz, int64_t capacity_msat, int64_t htlc_maximum_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRefund obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Refund_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1from_1str(JNIEnv *env, jclass clz, jstring s) {
+       LDKStr s_conv = java_to_owned_str(env, s);
+       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
+       *ret_conv = Refund_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
+       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_clone(orig_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1chain(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_chain());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1tx(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_tx());
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoResult_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoResult_free(this_ptr_conv);
+}
+
+static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
+       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1infinite(JNIEnv *env, jclass clz) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_infinite();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1hint_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1sync(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
+       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_sync(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1unknown(JNIEnv *env, jclass clz) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_unknown();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1async(JNIEnv *env, jclass clz, int64_t a) {
+       LDKUtxoFuture a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = UtxoFuture_clone(&a_conv);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_async(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1as_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
-       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoLookup_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoLookup_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRoutingFees this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKUtxoFuture this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RoutingFees_free(this_obj_conv);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
-       return ret_conv;
+       UtxoFuture_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RoutingFees_set_base_msat(&this_ptr_conv, val);
+static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
+       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUtxoFuture arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKUtxoFuture orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new(JNIEnv *env, jclass clz, int32_t base_msat_arg, int32_t proportional_millionths_arg) {
-       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1new(JNIEnv *env, jclass clz) {
+       LDKUtxoFuture ret_var = UtxoFuture_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRoutingFees a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoutingFees b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1resolve_1without_1forwarding(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
 }
 
-static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
-       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1resolve(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       LDKP2PGossipSync gossip_conv;
+       gossip_conv.inner = untag_ptr(gossip);
+       gossip_conv.is_owned = ptr_is_owned(gossip);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
+       gossip_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeId_free(this_obj_conv);
+}
+
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRoutingFees arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeId arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRoutingFees orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeId orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
+       LDKNodeId ret_var = NodeId_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRoutingFees o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1from_1pubkey(JNIEnv *env, jclass clz, int8_tArray pubkey) {
+       LDKPublicKey pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
+       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1slice(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeId this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeId this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKNodeId o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_hash(&o_conv);
+       int64_t ret_conv = NodeId_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRoutingFees obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeId obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeId_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
-       *ret_conv = RoutingFees_read(ser_ref);
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = NodeId_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeAnnouncementInfo this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNetworkGraph this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAnnouncementInfo_free(this_obj_conv);
+       NetworkGraph_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKReadOnlyNetworkGraph this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeFeatures_clone(&val_conv);
-       NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NetworkUpdate_free(this_ptr_conv);
 }
 
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
-       return ret_conv;
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
+       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv));
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThreeBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 3);
-       (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
-       NodeAnnouncementInfo_set_rgb(&this_ptr_conv, val_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1update_1message(JNIEnv *env, jclass clz, int64_t msg) {
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelUpdate_clone(&msg_conv);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1alias(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1failure(JNIEnv *env, jclass clz, int64_t short_channel_id, jboolean is_permanent) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1node_1failure(JNIEnv *env, jclass clz, int8_tArray node_id, jboolean is_permanent) {
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
+       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
+       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKP2PGossipSync this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       P2PGossipSync_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1add_1utxo_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t utxo_lookup) {
+       LDKP2PGossipSync this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1handle_1network_1update(JNIEnv *env, jclass clz, int64_t this_arg, int64_t network_update) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
+       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1genesis_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, NetworkGraph_get_genesis_hash(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1node_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_node_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1channel_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_channel_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1RoutingMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
+       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1MessageSendEventsProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
+       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKChannelUpdateInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUpdateInfo_free(this_obj_conv);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAnnouncementInfo_get_alias(&this_ptr_conv);
+       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+}
+
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1alias(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias val_conv;
+       LDKRoutingFees val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAlias_clone(&val_conv);
-       NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
+       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement val_conv;
+       LDKChannelUpdate val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncement_clone(&val_conv);
-       NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
+       val_conv = ChannelUpdate_clone(&val_conv);
+       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(JNIEnv *env, jclass clz, int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_t announcement_message_arg) {
-       LDKNodeFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
-       LDKThreeBytes rgb_arg_ref;
-       CHECK((*env)->GetArrayLength(env, rgb_arg) == 3);
-       (*env)->GetByteArrayRegion(env, rgb_arg, 0, 3, rgb_arg_ref.data);
-       LDKNodeAlias alias_arg_conv;
-       alias_arg_conv.inner = untag_ptr(alias_arg);
-       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
-       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
-       LDKNodeAnnouncement announcement_message_arg_conv;
-       announcement_message_arg_conv.inner = untag_ptr(announcement_message_arg);
-       announcement_message_arg_conv.is_owned = ptr_is_owned(announcement_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
-       announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, announcement_message_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1new(JNIEnv *env, jclass clz, int32_t last_update_arg, jboolean enabled_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int64_t last_update_message_arg) {
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       LDKChannelUpdate last_update_message_arg_conv;
+       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
+       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
+       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_message_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeAnnouncementInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelUpdateInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeAnnouncementInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKChannelUpdateInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNodeAnnouncementInfo a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKChannelUpdateInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeAnnouncementInfo b_conv;
+       LDKChannelUpdateInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeAnnouncementInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1addresses(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNodeAnnouncementInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NetAddressZ ret_var = NodeAnnouncementInfo_addresses(&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 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 = tag_ptr(ret_conv_12_copy, true);
-               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 int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeAnnouncementInfo obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKChannelUpdateInfo obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
-       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
+       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
+       *ret_conv = ChannelUpdateInfo_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeAlias this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKChannelInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAlias_free(this_obj_conv);
+       ChannelInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAlias this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *NodeAlias_get_a(&this_ptr_conv));
-       return ret_arr;
+       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKNodeAlias this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       NodeAlias_set_a(&this_ptr_conv, val_ref);
+       LDKChannelFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       ChannelInfo_set_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1new(JNIEnv *env, jclass clz, int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK((*env)->GetArrayLength(env, a_arg) == 32);
-       (*env)->GetByteArrayRegion(env, a_arg, 0, 32, a_arg_ref.data);
-       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
-       LDKNodeAlias ret_var = NodeAlias_clone(arg);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeAlias arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeAlias orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAlias_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNodeAlias a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKNodeAlias b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeAlias obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_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_ChannelInfo_1set_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
-       *ret_conv = NodeAlias_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeInfo this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeInfo_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_two_to_one(&this_ptr_conv, val_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;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       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;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-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;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       NodeInfo_set_channels(&this_ptr_conv, val_constr);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeInfo this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
+       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeInfo this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo val_conv;
+       LDKChannelAnnouncement val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncementInfo_clone(&val_conv);
-       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env, jclass clz, int64_tArray channels_arg, int64_t announcement_info_arg) {
-       LDKCVec_u64Z channels_arg_constr;
-       channels_arg_constr.datalen = (*env)->GetArrayLength(env, channels_arg);
-       if (channels_arg_constr.datalen > 0)
-               channels_arg_constr.data = MALLOC(channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               channels_arg_constr.data = NULL;
-       int64_t* channels_arg_vals = (*env)->GetLongArrayElements (env, channels_arg, NULL);
-       for (size_t g = 0; g < channels_arg_constr.datalen; g++) {
-               int64_t channels_arg_conv_6 = channels_arg_vals[g];
-               channels_arg_constr.data[g] = channels_arg_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, channels_arg, channels_arg_vals, 0);
-       LDKNodeAnnouncementInfo announcement_info_arg_conv;
-       announcement_info_arg_conv.inner = untag_ptr(announcement_info_arg);
-       announcement_info_arg_conv.is_owned = ptr_is_owned(announcement_info_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
-       announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
-       LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, announcement_info_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       val_conv = ChannelAnnouncement_clone(&val_conv);
+       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
-       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKChannelInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
+       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNodeInfo a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKChannelInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeInfo b_conv;
+       LDKChannelInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeInfo obj_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1directional_1info(JNIEnv *env, jclass clz, int64_t this_arg, int8_t channel_flags) {
+       LDKChannelInfo this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKChannelInfo obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
-       *ret_conv = NodeInfo_read(ser_ref);
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = ChannelInfo_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNetworkGraph obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_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_DirectedChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDirectedChannelInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DirectedChannelInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
-       if (arg_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_conv);
-       }
-       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
-       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDirectedChannelInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1new(JNIEnv *env, jclass clz, jclass network, int64_t logger) {
-       LDKNetwork network_conv = LDKNetwork_from_java(env, network);
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKDirectedChannelInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read_1only(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1channel(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
+       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int64_t ret_conv = DirectedChannelInfo_htlc_maximum_msat(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1set_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EffectiveCapacity_free(this_ptr_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
+       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement_1no_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1exact_1liquidity(JNIEnv *env, jclass clz, int64_t liquidity_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1advertised_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1add_1channel_1from_1partial_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = ChannelFeatures_clone(&features_conv);
-       LDKPublicKey node_id_1_ref;
-       CHECK((*env)->GetArrayLength(env, node_id_1) == 33);
-       (*env)->GetByteArrayRegion(env, node_id_1, 0, 33, node_id_1_ref.compressed_form);
-       LDKPublicKey node_id_2_ref;
-       CHECK((*env)->GetArrayLength(env, node_id_2) == 33);
-       (*env)->GetByteArrayRegion(env, node_id_2, 0, 33, node_id_2_ref.compressed_form);
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1total(JNIEnv *env, jclass clz, int64_t capacity_msat, int64_t htlc_maximum_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1channel_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1infinite(JNIEnv *env, jclass clz) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_infinite();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1node_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray node_id) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPublicKey node_id_ref;
-       CHECK((*env)->GetArrayLength(env, node_id) == 33);
-       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1hint_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1unknown(JNIEnv *env, jclass clz) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_unknown();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking_1with_1time(JNIEnv *env, jclass clz, int64_t this_arg, int64_t current_time_unix) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1as_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
+       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRoutingFees this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RoutingFees_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1unsigned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       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_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
-               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
-               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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPublicKey pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDefaultRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultRouter_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes, int64_t scorer, int64_t score_params) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKThirtyTwoBytes random_seed_bytes_ref;
-       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
-       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_ref.data);
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
-       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLockableScore_JCalls_cloned(&scorer_conv);
-       }
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
-       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, random_seed_bytes_ref, scorer_conv, score_params_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1as_1Router(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDefaultRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
-       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Router_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Router_free(this_ptr_conv);
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1new(JNIEnv *env, jclass clz, int64_t scorer, int64_t inflight_htlcs) {
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKScore scorer_conv = *(LDKScore*)(scorer_ptr);
-       if (scorer_conv.free == LDKScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&scorer_conv);
-       }
-       LDKInFlightHtlcs inflight_htlcs_conv;
-       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
-       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
-       inflight_htlcs_conv.is_owned = false;
-       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new(JNIEnv *env, jclass clz, int32_t base_msat_arg, int32_t proportional_millionths_arg) {
+       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKScorerAccountingForInFlightHtlcs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ScorerAccountingForInFlightHtlcs_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = ScorerAccountingForInFlightHtlcs_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InFlightHtlcs_free(this_obj_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRoutingFees a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRoutingFees b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInFlightHtlcs arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoutingFees arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
+       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInFlightHtlcs orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRoutingFees orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1new(JNIEnv *env, jclass clz) {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
+       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1process_1path(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv.is_owned = false;
-       LDKPublicKey payer_node_id_ref;
-       CHECK((*env)->GetArrayLength(env, payer_node_id) == 33);
-       (*env)->GetByteArrayRegion(env, payer_node_id, 0, 33, payer_node_id_ref.compressed_form);
-       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1add_1inflight_1htlc(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1used_1liquidity_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRoutingFees o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RoutingFees_hash(&o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInFlightHtlcs obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRoutingFees obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
-       *ret_conv = InFlightHtlcs_read(ser_ref);
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = RoutingFees_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteHop this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeAnnouncementInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHop_free(this_obj_conv);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHop_get_pubkey(&this_ptr_conv).compressed_form);
-       return ret_arr;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
+       NodeAnnouncementInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
+       LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -59375,2735 +62235,2772 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
-       RouteHop_set_node_features(&this_ptr_conv, val_conv);
+       NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
+       int32_t ret_conv = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_short_channel_id(&this_ptr_conv, val);
+       NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv));
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
+       LDKThreeBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 3);
+       (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
+       NodeAnnouncementInfo_set_rgb(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1alias(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeAlias ret_var = NodeAnnouncementInfo_get_alias(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1alias(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_fee_msat(&this_ptr_conv, val);
+       LDKNodeAlias val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeAlias_clone(&val_conv);
+       NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+       LDKNodeAnnouncement val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeAnnouncement_clone(&val_conv);
+       NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env, jclass clz, int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg) {
-       LDKPublicKey pubkey_arg_ref;
-       CHECK((*env)->GetArrayLength(env, pubkey_arg) == 33);
-       (*env)->GetByteArrayRegion(env, pubkey_arg, 0, 33, pubkey_arg_ref.compressed_form);
-       LDKNodeFeatures node_features_arg_conv;
-       node_features_arg_conv.inner = untag_ptr(node_features_arg);
-       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
-       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
-       LDKChannelFeatures channel_features_arg_conv;
-       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
-       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
-       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
-       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(JNIEnv *env, jclass clz, int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_t announcement_message_arg) {
+       LDKNodeFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
+       LDKThreeBytes rgb_arg_ref;
+       CHECK((*env)->GetArrayLength(env, rgb_arg) == 3);
+       (*env)->GetByteArrayRegion(env, rgb_arg, 0, 3, rgb_arg_ref.data);
+       LDKNodeAlias alias_arg_conv;
+       alias_arg_conv.inner = untag_ptr(alias_arg);
+       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
+       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
+       LDKNodeAnnouncement announcement_message_arg_conv;
+       announcement_message_arg_conv.inner = untag_ptr(announcement_message_arg);
+       announcement_message_arg_conv.is_owned = ptr_is_owned(announcement_message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
+       announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, announcement_message_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
-       LDKRouteHop ret_var = RouteHop_clone(arg);
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteHop arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAnnouncementInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteHop orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeAnnouncementInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRouteHop o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteHop a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNodeAnnouncementInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHop b_conv;
+       LDKNodeAnnouncementInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeAnnouncementInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteHop obj_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1addresses(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeAnnouncementInfo this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementInfo_addresses(&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 p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeAnnouncementInfo obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
-       *ret_conv = RouteHop_read(ser_ref);
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedTail this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeAlias this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedTail_free(this_obj_conv);
-}
-
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&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++) {
-               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
-               int64_t ret_conv_12_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
-               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
-               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_BlindedTail_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               LDKBlindedHop val_conv_12_conv;
-               val_conv_12_conv.inner = untag_ptr(val_conv_12);
-               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
-               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
-               val_constr.data[m] = val_conv_12_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       BlindedTail_set_hops(&this_ptr_conv, val_constr);
+       NodeAlias_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *NodeAlias_get_a(&this_ptr_conv));
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedTail this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       NodeAlias_set_a(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
-       LDKCVec_BlindedHopZ hops_arg_constr;
-       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
-       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
-               int64_t hops_arg_conv_12 = hops_arg_vals[m];
-               LDKBlindedHop hops_arg_conv_12_conv;
-               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
-               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
-               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
-               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
-       LDKPublicKey blinding_point_arg_ref;
-       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
-       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
-       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1new(JNIEnv *env, jclass clz, int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK((*env)->GetArrayLength(env, a_arg) == 32);
+       (*env)->GetByteArrayRegion(env, a_arg, 0, 32, a_arg_ref.data);
+       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
-       LDKBlindedTail ret_var = BlindedTail_clone(arg);
+static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
+       LDKNodeAlias ret_var = NodeAlias_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedTail arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAlias arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedTail orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeAlias orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
+       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedTail o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedTail_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedTail a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAlias_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNodeAlias a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedTail b_conv;
+       LDKNodeAlias b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedTail obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeAlias obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
-       *ret_conv = BlindedTail_read(ser_ref);
+       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
+       *ret_conv = NodeAlias_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKPath this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Path_free(this_obj_conv);
+       NodeInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Path_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPath this_ptr_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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ ret_var = Path_get_hops(&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 k = 0; k < ret_var.datalen; k++) {
-               LDKRouteHop ret_conv_10_var = ret_var.data[k];
-               int64_t ret_conv_10_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
-               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
-               ret_arr_ptr[k] = ret_conv_10_ref;
+       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_Path_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKPath this_ptr_conv;
+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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ val_constr;
+       LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
        else
                val_constr.data = NULL;
        int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t k = 0; k < val_constr.datalen; k++) {
-               int64_t val_conv_10 = val_vals[k];
-               LDKRouteHop val_conv_10_conv;
-               val_conv_10_conv.inner = untag_ptr(val_conv_10);
-               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
-               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
-               val_constr.data[k] = val_conv_10_conv;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
        }
        (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       Path_set_hops(&this_ptr_conv, val_constr);
+       NodeInfo_set_channels(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1get_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPath this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+       LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1set_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKPath this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedTail val_conv;
+       LDKNodeAnnouncementInfo val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedTail_clone(&val_conv);
-       Path_set_blinded_tail(&this_ptr_conv, val_conv);
+       val_conv = NodeAnnouncementInfo_clone(&val_conv);
+       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int64_t blinded_tail_arg) {
-       LDKCVec_RouteHopZ hops_arg_constr;
-       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env, jclass clz, int64_tArray channels_arg, int64_t announcement_info_arg) {
+       LDKCVec_u64Z channels_arg_constr;
+       channels_arg_constr.datalen = (*env)->GetArrayLength(env, channels_arg);
+       if (channels_arg_constr.datalen > 0)
+               channels_arg_constr.data = MALLOC(channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
        else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
-       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
-               int64_t hops_arg_conv_10 = hops_arg_vals[k];
-               LDKRouteHop hops_arg_conv_10_conv;
-               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
-               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
-               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
-               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+               channels_arg_constr.data = NULL;
+       int64_t* channels_arg_vals = (*env)->GetLongArrayElements (env, channels_arg, NULL);
+       for (size_t g = 0; g < channels_arg_constr.datalen; g++) {
+               int64_t channels_arg_conv_6 = channels_arg_vals[g];
+               channels_arg_constr.data[g] = channels_arg_conv_6;
        }
-       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
-       LDKBlindedTail blinded_tail_arg_conv;
-       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
-       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
-       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
-       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
+       (*env)->ReleaseLongArrayElements(env, channels_arg, channels_arg_vals, 0);
+       LDKNodeAnnouncementInfo announcement_info_arg_conv;
+       announcement_info_arg_conv.inner = untag_ptr(announcement_info_arg);
+       announcement_info_arg_conv.is_owned = ptr_is_owned(announcement_info_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
+       announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
+       LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, announcement_info_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
-       LDKPath ret_var = Path_clone(arg);
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKPath arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Path_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKPath orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPath ret_var = Path_clone(&orig_conv);
+       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Path_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Path_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKPath a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNodeInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKPath b_conv;
+       LDKNodeInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPath this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPath this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = NodeInfo_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNetworkGraph obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
+       if (arg_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1new(JNIEnv *env, jclass clz, jclass network, int64_t logger) {
+       LDKNetwork network_conv = LDKNetwork_from_java(env, network);
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read_1only(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
-       return ret_conv;
+       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPath this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRoute this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Route_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1set_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ ret_var = Route_get_paths(&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++) {
-               LDKPath ret_conv_6_var = ret_var.data[g];
-               int64_t ret_conv_6_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
-               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
-               ret_arr_ptr[g] = ret_conv_6_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_NetworkGraph_1update_1node_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               LDKPath val_conv_6_conv;
-               val_conv_6_conv.inner = untag_ptr(val_conv_6);
-               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
-               val_conv_6_conv = Path_clone(&val_conv_6_conv);
-               val_constr.data[g] = val_conv_6_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       Route_set_paths(&this_ptr_conv, val_constr);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKUnsignedNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters ret_var = Route_get_payment_params(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentParameters_clone(&val_conv);
-       Route_set_payment_params(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement_1no_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jclass clz, int64_tArray paths_arg, int64_t payment_params_arg) {
-       LDKCVec_PathZ paths_arg_constr;
-       paths_arg_constr.datalen = (*env)->GetArrayLength(env, paths_arg);
-       if (paths_arg_constr.datalen > 0)
-               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               paths_arg_constr.data = NULL;
-       int64_t* paths_arg_vals = (*env)->GetLongArrayElements (env, paths_arg, NULL);
-       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
-               int64_t paths_arg_conv_6 = paths_arg_vals[g];
-               LDKPath paths_arg_conv_6_conv;
-               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
-               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
-               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
-               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKUnsignedChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
        }
-       (*env)->ReleaseLongArrayElements(env, paths_arg, paths_arg_vals, 0);
-       LDKPaymentParameters payment_params_arg_conv;
-       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
-       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
-       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
-       LDKRoute ret_var = Route_new(paths_arg_constr, payment_params_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
-       LDKRoute ret_var = Route_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1add_1channel_1from_1partial_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = ChannelFeatures_clone(&features_conv);
+       LDKPublicKey node_id_1_ref;
+       CHECK((*env)->GetArrayLength(env, node_id_1) == 33);
+       (*env)->GetByteArrayRegion(env, node_id_1, 0, 33, node_id_1_ref.compressed_form);
+       LDKPublicKey node_id_2_ref;
+       CHECK((*env)->GetArrayLength(env, node_id_2) == 33);
+       (*env)->GetByteArrayRegion(env, node_id_2, 0, 33, node_id_2_ref.compressed_form);
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRoute arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Route_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1channel_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRoute orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKRoute ret_var = Route_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1node_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray node_id) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRoute o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Route_hash(&o_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Route_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRoute a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoute b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking_1with_1time(JNIEnv *env, jclass clz, int64_t this_arg, int64_t current_time_unix) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1fees(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRoute this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
-       return ret_conv;
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRoute this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1unsigned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
-       return ret_conv;
+       LDKUnsignedChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRoute obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Route_write(&obj_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);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       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_Route_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
-       *ret_conv = Route_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteParameters this_obj_conv;
+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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       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_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
+               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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPublicKey pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDefaultRouter this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteParameters_free(this_obj_conv);
+       DefaultRouter_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes, int64_t scorer, int64_t score_params) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKThirtyTwoBytes random_seed_bytes_ref;
+       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
+       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_ref.data);
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
+       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLockableScore_JCalls_cloned(&scorer_conv);
+       }
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
+       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, random_seed_bytes_ref, scorer_conv, score_params_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentParameters_clone(&val_conv);
-       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1as_1Router(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDefaultRouter this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
+       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Router_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Router_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv *env, jclass clz, int64_t payment_params_arg, int64_t final_value_msat_arg) {
-       LDKPaymentParameters payment_params_arg_conv;
-       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
-       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
-       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
-       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1new(JNIEnv *env, jclass clz, int64_t scorer, int64_t inflight_htlcs) {
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKScoreLookUp scorer_conv = *(LDKScoreLookUp*)(scorer_ptr);
+       if (scorer_conv.free == LDKScoreLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScoreLookUp_JCalls_cloned(&scorer_conv);
+       }
+       LDKInFlightHtlcs inflight_htlcs_conv;
+       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
+       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
+       inflight_htlcs_conv.is_owned = false;
+       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
-       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InFlightHtlcs_free(this_obj_conv);
+}
+
+static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInFlightHtlcs arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInFlightHtlcs orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteParameters a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRouteParameters b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1new(JNIEnv *env, jclass clz) {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteParameters obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1process_1path(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
+       LDKInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv.is_owned = false;
+       LDKPublicKey payer_node_id_ref;
+       CHECK((*env)->GetArrayLength(env, payer_node_id) == 33);
+       (*env)->GetByteArrayRegion(env, payer_node_id, 0, 33, payer_node_id_ref.compressed_form);
+       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1add_1inflight_1htlc(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
+       LDKInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1used_1liquidity_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
+       LDKInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInFlightHtlcs obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
-       *ret_conv = RouteParameters_read(ser_ref);
+       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
+       *ret_conv = InFlightHtlcs_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKPaymentParameters this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentParameters_free(this_obj_conv);
+       RouteHop_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1payee(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHop_get_pubkey(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1payee(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
-       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
-       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
+       LDKNodeFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeFeatures_clone(&val_conv);
+       RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
+       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
+       RouteHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
+       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
+       RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
+       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
+       RouteHop_set_cltv_expiry_delta(&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;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1maybe_1announced_1channel(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       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;
+       jboolean ret_conv = RouteHop_get_maybe_announced_channel(&this_ptr_conv);
+       return ret_conv;
 }
 
-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;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1maybe_1announced_1channel(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
+       RouteHop_set_maybe_announced_channel(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1new(JNIEnv *env, jclass clz, int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg) {
-       void* payee_arg_ptr = untag_ptr(payee_arg);
-       CHECK_ACCESS(payee_arg_ptr);
-       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
-       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
-       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
-       CHECK_ACCESS(expiry_time_arg_ptr);
-       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
-       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
-       LDKCVec_u64Z previously_failed_channels_arg_constr;
-       previously_failed_channels_arg_constr.datalen = (*env)->GetArrayLength(env, previously_failed_channels_arg);
-       if (previously_failed_channels_arg_constr.datalen > 0)
-               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               previously_failed_channels_arg_constr.data = NULL;
-       int64_t* previously_failed_channels_arg_vals = (*env)->GetLongArrayElements (env, previously_failed_channels_arg, NULL);
-       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
-               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
-               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, previously_failed_channels_arg, previously_failed_channels_arg_vals, 0);
-       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env, jclass clz, int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg, jboolean maybe_announced_channel_arg) {
+       LDKPublicKey pubkey_arg_ref;
+       CHECK((*env)->GetArrayLength(env, pubkey_arg) == 33);
+       (*env)->GetByteArrayRegion(env, pubkey_arg, 0, 33, pubkey_arg_ref.compressed_form);
+       LDKNodeFeatures node_features_arg_conv;
+       node_features_arg_conv.inner = untag_ptr(node_features_arg);
+       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
+       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
+       LDKChannelFeatures channel_features_arg_conv;
+       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
+       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
+       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
+       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
-       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKPaymentParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKPaymentParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
+       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKPaymentParameters o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteHop o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_hash(&o_conv);
+       int64_t ret_conv = RouteHop_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKPaymentParameters a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKPaymentParameters b_conv;
+       LDKRouteHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKPaymentParameters obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteHop obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteHop_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser, int32_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
-       *ret_conv = PaymentParameters_read(ser_ref, arg);
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = RouteHop_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1node_1id(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
-       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1for_1keysend(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
-       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1bolt12_1invoice(JNIEnv *env, jclass clz, int64_t invoice) {
-       LDKBolt12Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Payee_free(this_ptr_conv);
-}
-
-static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
-       int64_t ret_conv = Payee_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1blinded(JNIEnv *env, jclass clz, int64_tArray route_hints, int64_t features) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_constr;
-       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_37 = route_hints_vals[l];
-               void* route_hints_conv_37_ptr = untag_ptr(route_hints_conv_37);
-               CHECK_ACCESS(route_hints_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(route_hints_conv_37_ptr);
-               route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(route_hints_conv_37));
-               route_hints_constr.data[l] = route_hints_conv_37_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
-       LDKBolt12InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clear(JNIEnv *env, jclass clz, int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey node_id_ref;
-       CHECK((*env)->GetArrayLength(env, node_id) == 33);
-       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       LDKCVec_RouteHintZ route_hints_constr;
-       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_11 = route_hints_vals[l];
-               LDKRouteHint route_hints_conv_11_conv;
-               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
-               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
-               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
-               route_hints_constr.data[l] = route_hints_conv_11_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
-       LDKBolt11InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
-       int64_t ret_conv = Payee_hash(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Payee_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
-       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
-       jboolean ret_conv = Payee_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteHint this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedTail this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHint_free(this_obj_conv);
+       BlindedTail_free(this_obj_conv);
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHint this_ptr_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
+       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&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 o = 0; o < ret_var.datalen; o++) {
-               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
-               int64_t ret_conv_14_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
-               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
-               ret_arr_ptr[o] = ret_conv_14_ref;
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               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_RouteHint_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKRouteHint this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKBlindedTail this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ val_constr;
+       LDKCVec_BlindedHopZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
        else
                val_constr.data = NULL;
        int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t o = 0; o < val_constr.datalen; o++) {
-               int64_t val_conv_14 = val_vals[o];
-               LDKRouteHintHop val_conv_14_conv;
-               val_conv_14_conv.inner = untag_ptr(val_conv_14);
-               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
-               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
-               val_constr.data[o] = val_conv_14_conv;
+       for (size_t m = 0; m < val_constr.datalen; m++) {
+               int64_t val_conv_12 = val_vals[m];
+               LDKBlindedHop val_conv_12_conv;
+               val_conv_12_conv.inner = untag_ptr(val_conv_12);
+               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
+               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
+               val_constr.data[m] = val_conv_12_conv;
        }
        (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       RouteHint_set_a(&this_ptr_conv, val_constr);
+       BlindedTail_set_hops(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env, jclass clz, int64_tArray a_arg) {
-       LDKCVec_RouteHintHopZ a_arg_constr;
-       a_arg_constr.datalen = (*env)->GetArrayLength(env, a_arg);
-       if (a_arg_constr.datalen > 0)
-               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               a_arg_constr.data = NULL;
-       int64_t* a_arg_vals = (*env)->GetLongArrayElements (env, a_arg, NULL);
-       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
-               int64_t a_arg_conv_14 = a_arg_vals[o];
-               LDKRouteHintHop a_arg_conv_14_conv;
-               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
-               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
-               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
-               a_arg_constr.data[o] = a_arg_conv_14_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, a_arg, a_arg_vals, 0);
-       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
+       LDKCVec_BlindedHopZ hops_arg_constr;
+       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
+       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
+               int64_t hops_arg_conv_12 = hops_arg_vals[m];
+               LDKBlindedHop hops_arg_conv_12_conv;
+               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
+               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
+               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
+               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
+       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
-       LDKRouteHint ret_var = RouteHint_clone(arg);
+static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
+       LDKBlindedTail ret_var = BlindedTail_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteHint arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedTail arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteHint orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedTail orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
+       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRouteHint o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedTail o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_hash(&o_conv);
+       int64_t ret_conv = BlindedTail_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHint_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteHint a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedTail_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedTail a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHint b_conv;
+       LDKBlindedTail b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
+       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteHint obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedTail obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
+       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
-       *ret_conv = RouteHint_read(ser_ref);
+       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
+       *ret_conv = BlindedTail_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteHintHop this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPath this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHintHop_free(this_obj_conv);
+       Path_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Path_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form);
+       LDKCVec_RouteHopZ ret_var = Path_get_hops(&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 k = 0; k < ret_var.datalen; k++) {
+               LDKRouteHop ret_conv_10_var = ret_var.data[k];
+               int64_t ret_conv_10_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
+               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
+               ret_arr_ptr[k] = ret_conv_10_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_RouteHintHop_1set_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
+       LDKCVec_RouteHopZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t k = 0; k < val_constr.datalen; k++) {
+               int64_t val_conv_10 = val_vals[k];
+               LDKRouteHop val_conv_10_conv;
+               val_conv_10_conv.inner = untag_ptr(val_conv_10);
+               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
+               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
+               val_constr.data[k] = val_conv_10_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       Path_set_hops(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1get_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1set_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
+       LDKBlindedTail val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedTail_clone(&val_conv);
+       Path_set_blinded_tail(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int64_t blinded_tail_arg) {
+       LDKCVec_RouteHopZ hops_arg_constr;
+       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
+       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
+               int64_t hops_arg_conv_10 = hops_arg_vals[k];
+               LDKRouteHop hops_arg_conv_10_conv;
+               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
+               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
+               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
+               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
+       LDKBlindedTail blinded_tail_arg_conv;
+       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
+       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
+       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
+       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
+static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
+       LDKPath ret_var = Path_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPath arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Path_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPath orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPath ret_var = Path_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Path_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Path_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRoute this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Route_free(this_obj_conv);
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKCVec_PathZ ret_var = Route_get_paths(&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++) {
+               LDKPath ret_conv_6_var = ret_var.data[g];
+               int64_t ret_conv_6_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
+               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
+               ret_arr_ptr[g] = ret_conv_6_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_RouteHintHop_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
+       LDKCVec_PathZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               LDKPath val_conv_6_conv;
+               val_conv_6_conv.inner = untag_ptr(val_conv_6);
+               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
+               val_conv_6_conv = Path_clone(&val_conv_6_conv);
+               val_constr.data[g] = val_conv_6_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       Route_set_paths(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1route_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKRouteParameters ret_var = Route_get_route_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1route_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
+       LDKRouteParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RouteParameters_clone(&val_conv);
+       Route_set_route_params(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *env, jclass clz, int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
-       LDKPublicKey src_node_id_arg_ref;
-       CHECK((*env)->GetArrayLength(env, src_node_id_arg) == 33);
-       (*env)->GetByteArrayRegion(env, src_node_id_arg, 0, 33, src_node_id_arg_ref.compressed_form);
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
-       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
-       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
-       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
-       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
-       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
-       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jclass clz, int64_tArray paths_arg, int64_t route_params_arg) {
+       LDKCVec_PathZ paths_arg_constr;
+       paths_arg_constr.datalen = (*env)->GetArrayLength(env, paths_arg);
+       if (paths_arg_constr.datalen > 0)
+               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               paths_arg_constr.data = NULL;
+       int64_t* paths_arg_vals = (*env)->GetLongArrayElements (env, paths_arg, NULL);
+       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
+               int64_t paths_arg_conv_6 = paths_arg_vals[g];
+               LDKPath paths_arg_conv_6_conv;
+               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
+               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
+               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
+               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, paths_arg, paths_arg_vals, 0);
+       LDKRouteParameters route_params_arg_conv;
+       route_params_arg_conv.inner = untag_ptr(route_params_arg);
+       route_params_arg_conv.is_owned = ptr_is_owned(route_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_arg_conv);
+       route_params_arg_conv = RouteParameters_clone(&route_params_arg_conv);
+       LDKRoute ret_var = Route_new(paths_arg_constr, route_params_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
-       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteHintHop arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoute arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = Route_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteHintHop orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRoute orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
+       LDKRoute ret_var = Route_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRouteHintHop o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRoute o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_hash(&o_conv);
+       int64_t ret_conv = Route_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteHintHop a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Route_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRoute a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHintHop b_conv;
+       LDKRoute b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteHintHop obj_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1fees(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRoute obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Route_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
-       *ret_conv = RouteHintHop_read(ser_ref);
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = Route_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKCVec_ChannelDetailsZ first_hops_constr;
-       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
-       if (first_hops != NULL) {
-               first_hops_constr.datalen = (*env)->GetArrayLength(env, first_hops);
-               if (first_hops_constr.datalen > 0)
-                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
-               else
-                       first_hops_constr.data = NULL;
-               int64_t* first_hops_vals = (*env)->GetLongArrayElements (env, first_hops, NULL);
-               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
-                       int64_t first_hops_conv_16 = first_hops_vals[q];
-                       LDKChannelDetails first_hops_conv_16_conv;
-                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
-                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
-                       first_hops_conv_16_conv.is_owned = false;
-                       first_hops_constr.data[q] = first_hops_conv_16_conv;
-               }
-               (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
-               first_hops_ptr = &first_hops_constr;
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* scorer_ptr = untag_ptr(scorer);
-       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
-       LDKScore* scorer_conv = (LDKScore*)scorer_ptr;
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv.is_owned = false;
-       uint8_t random_seed_bytes_arr[32];
-       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
-       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
-       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_build_1route_1from_1hops(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, jobjectArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
-       LDKCVec_PublicKeyZ hops_constr;
-       hops_constr.datalen = (*env)->GetArrayLength(env, hops);
-       if (hops_constr.datalen > 0)
-               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               hops_constr.data = NULL;
-       for (size_t i = 0; i < hops_constr.datalen; i++) {
-               int8_tArray hops_conv_8 = (*env)->GetObjectArrayElement(env, hops, i);
-               LDKPublicKey hops_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, hops_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, hops_conv_8, 0, 33, hops_conv_8_ref.compressed_form);
-               hops_constr.data[i] = hops_conv_8_ref;
-       }
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       uint8_t random_seed_bytes_arr[32];
-       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
-       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Score_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       LockableScore_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableScore_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKMultiThreadedLockableScore this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedLockableScore_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1LockableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
-       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKMultiThreadedLockableScore obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1WriteableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
-       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1new(JNIEnv *env, jclass clz, int64_t score) {
-       void* score_ptr = untag_ptr(score);
-       CHECK_ACCESS(score_ptr);
-       LDKScore score_conv = *(LDKScore*)(score_ptr);
-       if (score_conv.free == LDKScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&score_conv);
-       }
-       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKMultiThreadedScoreLock this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedScoreLock_free(this_obj_conv);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKMultiThreadedScoreLock obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedScoreLock_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKMultiThreadedScoreLock this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = MultiThreadedScoreLock_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKChannelUsage this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUsage_free(this_obj_conv);
+       RouteParameters_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
+       LDKPaymentParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentParameters_clone(&val_conv);
+       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
+       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
+       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1max_1total_1routing_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteParameters_get_max_total_routing_fee_msat(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1max_1total_1routing_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
-       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
-       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteParameters_set_max_total_routing_fee_msat(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1new(JNIEnv *env, jclass clz, int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
-       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
-       CHECK_ACCESS(effective_capacity_arg_ptr);
-       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
-       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
-       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv *env, jclass clz, int64_t payment_params_arg, int64_t final_value_msat_arg, int64_t max_total_routing_fee_msat_arg) {
+       LDKPaymentParameters payment_params_arg_conv;
+       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
+       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
+       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
+       void* max_total_routing_fee_msat_arg_ptr = untag_ptr(max_total_routing_fee_msat_arg);
+       CHECK_ACCESS(max_total_routing_fee_msat_arg_ptr);
+       LDKCOption_u64Z max_total_routing_fee_msat_arg_conv = *(LDKCOption_u64Z*)(max_total_routing_fee_msat_arg_ptr);
+       max_total_routing_fee_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(max_total_routing_fee_msat_arg));
+       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg, max_total_routing_fee_msat_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
-       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKChannelUsage arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKChannelUsage orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
+       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKFixedPenaltyScorer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FixedPenaltyScorer_free(this_obj_conv);
-}
-
-static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKFixedPenaltyScorer arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteParameters_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKFixedPenaltyScorer orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRouteParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1with_1penalty(JNIEnv *env, jclass clz, int64_t penalty_msat) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1from_1payment_1params_1and_1value(JNIEnv *env, jclass clz, int64_t payment_params, int64_t final_value_msat) {
+       LDKPaymentParameters payment_params_conv;
+       payment_params_conv.inner = untag_ptr(payment_params);
+       payment_params_conv.is_owned = ptr_is_owned(payment_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_conv);
+       payment_params_conv = PaymentParameters_clone(&payment_params_conv);
+       LDKRouteParameters ret_var = RouteParameters_from_payment_params_and_value(payment_params_conv, final_value_msat);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKFixedPenaltyScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = FixedPenaltyScorer_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKFixedPenaltyScorer obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteParameters obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
-       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = RouteParameters_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKProbabilisticScorer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScorer_free(this_obj_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKProbabilisticScoringFeeParameters this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPaymentParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringFeeParameters_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
+       PaymentParameters_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1payee(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1payee(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
+       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
+       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
+       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
-       return ret_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_ProbabilisticScoringFeeParameters_1set_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1new(JNIEnv *env, jclass clz, int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg) {
+       void* payee_arg_ptr = untag_ptr(payee_arg);
+       CHECK_ACCESS(payee_arg_ptr);
+       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
+       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
+       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
+       CHECK_ACCESS(expiry_time_arg_ptr);
+       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
+       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
+       LDKCVec_u64Z previously_failed_channels_arg_constr;
+       previously_failed_channels_arg_constr.datalen = (*env)->GetArrayLength(env, previously_failed_channels_arg);
+       if (previously_failed_channels_arg_constr.datalen > 0)
+               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               previously_failed_channels_arg_constr.data = NULL;
+       int64_t* previously_failed_channels_arg_vals = (*env)->GetLongArrayElements (env, previously_failed_channels_arg, NULL);
+       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
+               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
+               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
+       }
+       (*env)->ReleaseLongArrayElements(env, previously_failed_channels_arg, previously_failed_channels_arg_vals, 0);
+       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
+static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
+       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKProbabilisticScoringFeeParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKProbabilisticScoringFeeParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPaymentParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
+       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1default(JNIEnv *env, jclass clz) {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPaymentParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = PaymentParameters_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPaymentParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPaymentParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPaymentParameters obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser, int32_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
+       *ret_conv = PaymentParameters_read(ser_ref, arg);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1node_1id(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
+       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1for_1keysend(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
+       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned_1from_1list(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray node_ids) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NodeIdZ node_ids_constr;
-       node_ids_constr.datalen = (*env)->GetArrayLength(env, node_ids);
-       if (node_ids_constr.datalen > 0)
-               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1bolt12_1invoice(JNIEnv *env, jclass clz, int64_t invoice) {
+       LDKBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1blinded(JNIEnv *env, jclass clz, int64_tArray blinded_route_hints) {
+       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ blinded_route_hints_constr;
+       blinded_route_hints_constr.datalen = (*env)->GetArrayLength(env, blinded_route_hints);
+       if (blinded_route_hints_constr.datalen > 0)
+               blinded_route_hints_constr.data = MALLOC(blinded_route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
        else
-               node_ids_constr.data = NULL;
-       int64_t* node_ids_vals = (*env)->GetLongArrayElements (env, node_ids, NULL);
-       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
-               int64_t node_ids_conv_8 = node_ids_vals[i];
-               LDKNodeId node_ids_conv_8_conv;
-               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
-               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
-               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
-               node_ids_constr.data[i] = node_ids_conv_8_conv;
+               blinded_route_hints_constr.data = NULL;
+       int64_t* blinded_route_hints_vals = (*env)->GetLongArrayElements (env, blinded_route_hints, NULL);
+       for (size_t l = 0; l < blinded_route_hints_constr.datalen; l++) {
+               int64_t blinded_route_hints_conv_37 = blinded_route_hints_vals[l];
+               void* blinded_route_hints_conv_37_ptr = untag_ptr(blinded_route_hints_conv_37);
+               CHECK_ACCESS(blinded_route_hints_conv_37_ptr);
+               LDKC2Tuple_BlindedPayInfoBlindedPathZ blinded_route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(blinded_route_hints_conv_37_ptr);
+               blinded_route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(blinded_route_hints_conv_37));
+               blinded_route_hints_constr.data[l] = blinded_route_hints_conv_37_conv;
        }
-       (*env)->ReleaseLongArrayElements(env, node_ids, node_ids_vals, 0);
-       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
+       (*env)->ReleaseLongArrayElements(env, blinded_route_hints, blinded_route_hints_vals, 0);
+       LDKPaymentParameters ret_var = PaymentParameters_blinded(blinded_route_hints_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Payee_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id, int64_t penalty) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
+       int64_t ret_conv = Payee_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clear_1manual_1penalties(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1blinded(JNIEnv *env, jclass clz, int64_tArray route_hints, int64_t features) {
+       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_constr;
+       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
+       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
+               int64_t route_hints_conv_37 = route_hints_vals[l];
+               void* route_hints_conv_37_ptr = untag_ptr(route_hints_conv_37);
+               CHECK_ACCESS(route_hints_conv_37_ptr);
+               LDKC2Tuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(route_hints_conv_37_ptr);
+               route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(route_hints_conv_37));
+               route_hints_constr.data[l] = route_hints_conv_37_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
+       LDKBolt12InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKProbabilisticScoringDecayParameters this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringDecayParameters_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clear(JNIEnv *env, jclass clz, int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       LDKCVec_RouteHintZ route_hints_constr;
+       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
+       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
+               int64_t route_hints_conv_11 = route_hints_vals[l];
+               LDKRouteHint route_hints_conv_11_conv;
+               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
+               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
+               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
+               route_hints_constr.data[l] = route_hints_conv_11_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
+       LDKBolt11InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
+       int64_t ret_conv = Payee_hash(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1set_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Payee_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
+       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
+       jboolean ret_conv = Payee_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteHint this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RouteHint_free(this_obj_conv);
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
-       return ret_conv;
+       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&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 o = 0; o < ret_var.datalen; o++) {
+               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
+               int64_t ret_conv_14_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
+               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
+               ret_arr_ptr[o] = ret_conv_14_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_ProbabilisticScoringDecayParameters_1set_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
+       LDKCVec_RouteHintHopZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t o = 0; o < val_constr.datalen; o++) {
+               int64_t val_conv_14 = val_vals[o];
+               LDKRouteHintHop val_conv_14_conv;
+               val_conv_14_conv.inner = untag_ptr(val_conv_14);
+               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
+               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
+               val_constr.data[o] = val_conv_14_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       RouteHint_set_a(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1new(JNIEnv *env, jclass clz, int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env, jclass clz, int64_tArray a_arg) {
+       LDKCVec_RouteHintHopZ a_arg_constr;
+       a_arg_constr.datalen = (*env)->GetArrayLength(env, a_arg);
+       if (a_arg_constr.datalen > 0)
+               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               a_arg_constr.data = NULL;
+       int64_t* a_arg_vals = (*env)->GetLongArrayElements (env, a_arg, NULL);
+       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
+               int64_t a_arg_conv_14 = a_arg_vals[o];
+               LDKRouteHintHop a_arg_conv_14_conv;
+               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
+               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
+               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
+               a_arg_constr.data[o] = a_arg_conv_14_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, a_arg, a_arg_vals, 0);
+       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKProbabilisticScoringDecayParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHint arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKProbabilisticScoringDecayParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteHint orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
+       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1default(JNIEnv *env, jclass clz) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteHint o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteHint_hash(&o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1new(JNIEnv *env, jclass clz, int64_t decay_params, int64_t network_graph, int64_t logger) {
-       LDKProbabilisticScoringDecayParameters decay_params_conv;
-       decay_params_conv.inner = untag_ptr(decay_params);
-       decay_params_conv.is_owned = ptr_is_owned(decay_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
-       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHint_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteHint a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRouteHint b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1debug_1log_1liquidity_1stats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteHint obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteHint_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1estimated_1channel_1liquidity_1range(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
-       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = RouteHint_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1channel_1liquidity_1probabilities(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKProbabilisticScorer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKProbabilisticScoringDecayParameters arg_a_conv;
-       arg_a_conv.inner = untag_ptr(arg_a);
-       arg_a_conv.is_owned = ptr_is_owned(arg_a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
-       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
-       LDKNetworkGraph arg_b_conv;
-       arg_b_conv.inner = untag_ptr(arg_b);
-       arg_b_conv.is_owned = ptr_is_owned(arg_b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
-       arg_b_conv.is_owned = false;
-       void* arg_c_ptr = untag_ptr(arg_c);
-       CHECK_ACCESS(arg_c_ptr);
-       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
-       if (arg_c_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_c_conv);
-       }
-       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
-       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDelayedPaymentOutputDescriptor this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DelayedPaymentOutputDescriptor_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+       RouteHintHop_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -62111,1068 +65008,2461 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
+       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
+       RouteHintHop_set_short_channel_id(&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;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return 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;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+       LDKRoutingFees val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form);
-       return ret_arr;
+       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_ref);
+       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
-       return ret_arr;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int8_tArray revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       LDKPublicKey per_commitment_point_arg_ref;
-       CHECK((*env)->GetArrayLength(env, per_commitment_point_arg) == 33);
-       (*env)->GetByteArrayRegion(env, per_commitment_point_arg, 0, 33, per_commitment_point_arg_ref.compressed_form);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKPublicKey revocation_pubkey_arg_ref;
-       CHECK((*env)->GetArrayLength(env, revocation_pubkey_arg) == 33);
-       (*env)->GetByteArrayRegion(env, revocation_pubkey_arg, 0, 33, revocation_pubkey_arg_ref.compressed_form);
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
-       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_ref, channel_keys_id_arg_ref, channel_value_satoshis_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *env, jclass clz, int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
+       LDKPublicKey src_node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, src_node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, src_node_id_arg, 0, 33, src_node_id_arg_ref.compressed_form);
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
+       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
+       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
+       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
+       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
+       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
+       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKDelayedPaymentOutputDescriptor arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHintHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKDelayedPaymentOutputDescriptor orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteHintHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
+       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteHintHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteHintHop_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteHintHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor b_conv;
+       LDKRouteHintHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKDelayedPaymentOutputDescriptor obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteHintHop obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = RouteHintHop_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKStaticPaymentOutputDescriptor this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       StaticPaymentOutputDescriptor_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKCVec_ChannelDetailsZ first_hops_constr;
+       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
+       if (first_hops != NULL) {
+               first_hops_constr.datalen = (*env)->GetArrayLength(env, first_hops);
+               if (first_hops_constr.datalen > 0)
+                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
+               else
+                       first_hops_constr.data = NULL;
+               int64_t* first_hops_vals = (*env)->GetLongArrayElements (env, first_hops, NULL);
+               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
+                       int64_t first_hops_conv_16 = first_hops_vals[q];
+                       LDKChannelDetails first_hops_conv_16_conv;
+                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
+                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
+                       first_hops_conv_16_conv.is_owned = false;
+                       first_hops_constr.data[q] = first_hops_conv_16_conv;
+               }
+               (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
+               first_hops_ptr = &first_hops_constr;
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* scorer_ptr = untag_ptr(scorer);
+       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
+       LDKScoreLookUp* scorer_conv = (LDKScoreLookUp*)scorer_ptr;
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv.is_owned = false;
+       uint8_t random_seed_bytes_arr[32];
+       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
+       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
+       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_build_1route_1from_1hops(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, jobjectArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
+       LDKCVec_PublicKeyZ hops_constr;
+       hops_constr.datalen = (*env)->GetArrayLength(env, hops);
+       if (hops_constr.datalen > 0)
+               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               hops_constr.data = NULL;
+       for (size_t i = 0; i < hops_constr.datalen; i++) {
+               int8_tArray hops_conv_8 = (*env)->GetObjectArrayElement(env, hops, i);
+               LDKPublicKey hops_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, hops_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, hops_conv_8, 0, 33, hops_conv_8_ref.compressed_form);
+               hops_constr.data[i] = hops_conv_8_ref;
+       }
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       uint8_t random_seed_bytes_arr[32];
+       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
+       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreLookUp_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreLookUp this_ptr_conv = *(LDKScoreLookUp*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreLookUp_free(this_ptr_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 = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreUpdate this_ptr_conv = *(LDKScoreUpdate*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreUpdate_free(this_ptr_conv);
 }
 
-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 = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Score_free(this_ptr_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
-       return ret_arr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       LockableScore_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WriteableScore_free(this_ptr_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMultiThreadedLockableScore this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedLockableScore_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1LockableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
+       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
-       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKMultiThreadedLockableScore obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_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;
 }
 
-static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1WriteableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
+       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1new(JNIEnv *env, jclass clz, int64_t score) {
+       void* score_ptr = untag_ptr(score);
+       CHECK_ACCESS(score_ptr);
+       LDKScore score_conv = *(LDKScore*)(score_ptr);
+       if (score_conv.free == LDKScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScore_JCalls_cloned(&score_conv);
+       }
+       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKStaticPaymentOutputDescriptor arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockRead_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMultiThreadedScoreLockRead this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedScoreLockRead_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKStaticPaymentOutputDescriptor orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMultiThreadedScoreLockWrite this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedScoreLockWrite_free(this_obj_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKStaticPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockRead_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedScoreLockRead this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = MultiThreadedScoreLockRead_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKStaticPaymentOutputDescriptor obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKMultiThreadedScoreLockWrite obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = MultiThreadedScoreLockWrite_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1as_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedScoreLockWrite this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = MultiThreadedScoreLockWrite_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SpendableOutputDescriptor_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKChannelUsage this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUsage_free(this_obj_conv);
 }
 
-static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
-       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1output(JNIEnv *env, jclass clz, int64_t outpoint, int64_t output) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       void* output_ptr = untag_ptr(output);
-       CHECK_ACCESS(output_ptr);
-       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
-       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1delayed_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
-       LDKStaticPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
-       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
-       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
+       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
+       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1new(JNIEnv *env, jclass clz, int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
+       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
+       CHECK_ACCESS(effective_capacity_arg_ptr);
+       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
+       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
+       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
-       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
+       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1create_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_PackedLockTimeZ locktime_conv = *(LDKCOption_PackedLockTimeZ*)(locktime_ptr);
-       locktime_conv = COption_PackedLockTimeZ_clone((LDKCOption_PackedLockTimeZ*)untag_ptr(locktime));
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelUsage arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ChannelSigner_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKChannelUsage orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EcdsaChannelSigner_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKFixedPenaltyScorer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       FixedPenaltyScorer_free(this_obj_conv);
 }
 
-static inline uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg) {
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(arg);
-       return tag_ptr(ret_ret, true);
+static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKWriteableEcdsaChannelSigner* arg_conv = (LDKWriteableEcdsaChannelSigner*)arg_ptr;
-       int64_t ret_conv = WriteableEcdsaChannelSigner_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFixedPenaltyScorer arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKWriteableEcdsaChannelSigner* orig_conv = (LDKWriteableEcdsaChannelSigner*)orig_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableEcdsaChannelSigner this_ptr_conv = *(LDKWriteableEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableEcdsaChannelSigner_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKFixedPenaltyScorer orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
-       jclass ret_conv = LDKRecipient_to_java(env, Recipient_clone(orig_conv));
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1with_1penalty(JNIEnv *env, jclass clz, int64_t penalty_msat) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1node(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKRecipient_to_java(env, Recipient_node());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = FixedPenaltyScorer_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1phantom_1node(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKRecipient_to_java(env, Recipient_phantom_node());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = FixedPenaltyScorer_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EntropySource_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EntropySource_free(this_ptr_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKFixedPenaltyScorer obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_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_NodeSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NodeSigner_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
+       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignerProvider_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignerProvider_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKProbabilisticScorer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ProbabilisticScorer_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInMemorySigner this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKProbabilisticScoringFeeParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InMemorySigner_free(this_obj_conv);
+       ProbabilisticScoringFeeParameters_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_funding_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_revocation_base_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_payment_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_htlc_base_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_commitment_seed(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
-       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1linear_1success_1probability(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ProbabilisticScoringFeeParameters_get_linear_success_probability(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1linear_1success_1probability(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_linear_success_probability(&this_ptr_conv, val);
+}
+
+static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInMemorySigner arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbabilisticScoringFeeParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInMemorySigner orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbabilisticScoringFeeParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1new(JNIEnv *env, jclass clz, int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
-       LDKSecretKey funding_key_ref;
-       CHECK((*env)->GetArrayLength(env, funding_key) == 32);
-       (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_ref.bytes);
-       LDKSecretKey revocation_base_key_ref;
-       CHECK((*env)->GetArrayLength(env, revocation_base_key) == 32);
-       (*env)->GetByteArrayRegion(env, revocation_base_key, 0, 32, revocation_base_key_ref.bytes);
-       LDKSecretKey payment_key_ref;
-       CHECK((*env)->GetArrayLength(env, payment_key) == 32);
-       (*env)->GetByteArrayRegion(env, payment_key, 0, 32, payment_key_ref.bytes);
-       LDKSecretKey delayed_payment_base_key_ref;
-       CHECK((*env)->GetArrayLength(env, delayed_payment_base_key) == 32);
-       (*env)->GetByteArrayRegion(env, delayed_payment_base_key, 0, 32, delayed_payment_base_key_ref.bytes);
-       LDKSecretKey htlc_base_key_ref;
-       CHECK((*env)->GetArrayLength(env, htlc_base_key) == 32);
-       (*env)->GetByteArrayRegion(env, htlc_base_key, 0, 32, htlc_base_key_ref.bytes);
-       LDKThirtyTwoBytes commitment_seed_ref;
-       CHECK((*env)->GetArrayLength(env, commitment_seed) == 32);
-       (*env)->GetByteArrayRegion(env, commitment_seed, 0, 32, commitment_seed_ref.data);
-       LDKThirtyTwoBytes channel_keys_id_ref;
-       CHECK((*env)->GetArrayLength(env, channel_keys_id) == 32);
-       (*env)->GetByteArrayRegion(env, channel_keys_id, 0, 32, channel_keys_id_ref.data);
-       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
-       CHECK((*env)->GetArrayLength(env, rand_bytes_unique_start) == 32);
-       (*env)->GetByteArrayRegion(env, rand_bytes_unique_start, 0, 32, rand_bytes_unique_start_ref.data);
-       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1default(JNIEnv *env, jclass clz) {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1pubkeys(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned_1from_1list(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray node_ids) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int16_t ret_conv = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_NodeIdZ node_ids_constr;
+       node_ids_constr.datalen = (*env)->GetArrayLength(env, node_ids);
+       if (node_ids_constr.datalen > 0)
+               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
+       else
+               node_ids_constr.data = NULL;
+       int64_t* node_ids_vals = (*env)->GetLongArrayElements (env, node_ids, NULL);
+       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
+               int64_t node_ids_conv_8 = node_ids_vals[i];
+               LDKNodeId node_ids_conv_8_conv;
+               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
+               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
+               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
+               node_ids_constr.data[i] = node_ids_conv_8_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, node_ids, node_ids_vals, 0);
+       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int16_t ret_conv = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
-       return ret_conv;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbound(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id, int64_t penalty) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InMemorySigner_is_outbound(&this_arg_conv);
-       return ret_conv;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1funding_1outpoint(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1channel_1parameters(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clear_1manual_1penalties(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
+       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKProbabilisticScoringDecayParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ProbabilisticScoringDecayParameters_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1set_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1set_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1new(JNIEnv *env, jclass clz, int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1channel_1type_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
+static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbabilisticScoringDecayParameters arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1counterparty_1payment_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbabilisticScoringDecayParameters orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1default(JNIEnv *env, jclass clz) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1new(JNIEnv *env, jclass clz, int64_t decay_params, int64_t network_graph, int64_t logger) {
+       LDKProbabilisticScoringDecayParameters decay_params_conv;
+       decay_params_conv.inner = untag_ptr(decay_params);
+       decay_params_conv.is_owned = ptr_is_owned(decay_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
+       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1debug_1log_1liquidity_1stats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
-       spend_tx_ref.data_is_owned = true;
-       LDKStaticPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
-       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
+       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynamic_1p2wsh_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1estimated_1channel_1liquidity_1range(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
-       spend_tx_ref.data_is_owned = true;
-       LDKDelayedPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
-       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
+       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1channel_1liquidity_1probabilities(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1ChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1payment_1success_1probability(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target, int64_t amount_msat, int64_t params) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
-       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKProbabilisticScoringFeeParameters params_conv;
+       params_conv.inner = untag_ptr(params);
+       params_conv.is_owned = ptr_is_owned(params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
+       params_conv.is_owned = false;
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = ProbabilisticScorer_historical_estimated_payment_success_probability(&this_arg_conv, scid, &target_conv, amount_msat, &params_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ProbabilisticScorer_as_ScoreLookUp(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = ProbabilisticScorer_as_ScoreUpdate(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1WriteableEcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_WriteableEcdsaChannelSigner(&this_arg_conv);
+       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
+       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInMemorySigner obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKProbabilisticScorer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
-       if (arg_conv.free == LDKEntropySource_JCalls_free) {
+       LDKProbabilisticScoringDecayParameters arg_a_conv;
+       arg_a_conv.inner = untag_ptr(arg_a);
+       arg_a_conv.is_owned = ptr_is_owned(arg_a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
+       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
+       LDKNetworkGraph arg_b_conv;
+       arg_b_conv.inner = untag_ptr(arg_b);
+       arg_b_conv.is_owned = ptr_is_owned(arg_b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
+       arg_b_conv.is_owned = false;
+       void* arg_c_ptr = untag_ptr(arg_c);
+       CHECK_ACCESS(arg_c_ptr);
+       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
+       if (arg_c_conv.free == LDKLogger_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&arg_conv);
+               LDKLogger_JCalls_cloned(&arg_c_conv);
        }
-       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
-       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
+       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
+       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKKeysManager this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       KeysManager_free(this_obj_conv);
+       DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
-       uint8_t seed_arr[32];
-       CHECK((*env)->GetArrayLength(env, seed) == 32);
-       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_KeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, KeysManager_get_node_secret_key(&this_arg_conv).bytes);
-       return ret_arr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int8_tArray revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       LDKPublicKey per_commitment_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, per_commitment_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, per_commitment_point_arg, 0, 33, per_commitment_point_arg_ref.compressed_form);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKPublicKey revocation_pubkey_arg_ref;
+       CHECK((*env)->GetArrayLength(env, revocation_pubkey_arg) == 33);
+       (*env)->GetByteArrayRegion(env, revocation_pubkey_arg, 0, 33, revocation_pubkey_arg_ref.compressed_form);
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
+       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_ref, channel_keys_id_arg_ref, channel_value_satoshis_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKDelayedPaymentOutputDescriptor orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKDelayedPaymentOutputDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKDelayedPaymentOutputDescriptor b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKDelayedPaymentOutputDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKStaticPaymentOutputDescriptor this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       StaticPaymentOutputDescriptor_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1transaction_1parameters(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = StaticPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1transaction_1parameters(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       StaticPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
+       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
+       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
+       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
+       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
+       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKStaticPaymentOutputDescriptor orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKStaticPaymentOutputDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKStaticPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKStaticPaymentOutputDescriptor b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1witness_1script(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = StaticPaymentOutputDescriptor_witness_script(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1max_1witness_1length(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_max_witness_length(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKStaticPaymentOutputDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SpendableOutputDescriptor_free(this_ptr_conv);
+}
+
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
+       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1output(JNIEnv *env, jclass clz, int64_t outpoint, int64_t output) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       void* output_ptr = untag_ptr(output);
+       CHECK_ACCESS(output_ptr);
+       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
+       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1delayed_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
+       LDKStaticPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKSpendableOutputDescriptor* o_conv = (LDKSpendableOutputDescriptor*)untag_ptr(o);
+       int64_t ret_conv = SpendableOutputDescriptor_hash(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
+       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
+       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1create_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ChannelSigner_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EcdsaChannelSigner_free(this_ptr_conv);
+}
+
+static inline uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg) {
+       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       *ret_ret = WriteableEcdsaChannelSigner_clone(arg);
+       return tag_ptr(ret_ret, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKWriteableEcdsaChannelSigner* arg_conv = (LDKWriteableEcdsaChannelSigner*)arg_ptr;
+       int64_t ret_conv = WriteableEcdsaChannelSigner_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKWriteableEcdsaChannelSigner* orig_conv = (LDKWriteableEcdsaChannelSigner*)orig_ptr;
+       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       *ret_ret = WriteableEcdsaChannelSigner_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWriteableEcdsaChannelSigner this_ptr_conv = *(LDKWriteableEcdsaChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WriteableEcdsaChannelSigner_free(this_ptr_conv);
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
+       jclass ret_conv = LDKRecipient_to_java(env, Recipient_clone(orig_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1node(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKRecipient_to_java(env, Recipient_node());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1phantom_1node(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKRecipient_to_java(env, Recipient_phantom_node());
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EntropySource_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EntropySource_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeSigner_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignerProvider_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignerProvider_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInMemorySigner this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InMemorySigner_free(this_obj_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_funding_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_revocation_base_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_payment_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_htlc_base_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_commitment_seed(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
+}
+
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInMemorySigner arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInMemorySigner orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1new(JNIEnv *env, jclass clz, int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
+       LDKSecretKey funding_key_ref;
+       CHECK((*env)->GetArrayLength(env, funding_key) == 32);
+       (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_ref.bytes);
+       LDKSecretKey revocation_base_key_ref;
+       CHECK((*env)->GetArrayLength(env, revocation_base_key) == 32);
+       (*env)->GetByteArrayRegion(env, revocation_base_key, 0, 32, revocation_base_key_ref.bytes);
+       LDKSecretKey payment_key_ref;
+       CHECK((*env)->GetArrayLength(env, payment_key) == 32);
+       (*env)->GetByteArrayRegion(env, payment_key, 0, 32, payment_key_ref.bytes);
+       LDKSecretKey delayed_payment_base_key_ref;
+       CHECK((*env)->GetArrayLength(env, delayed_payment_base_key) == 32);
+       (*env)->GetByteArrayRegion(env, delayed_payment_base_key, 0, 32, delayed_payment_base_key_ref.bytes);
+       LDKSecretKey htlc_base_key_ref;
+       CHECK((*env)->GetArrayLength(env, htlc_base_key) == 32);
+       (*env)->GetByteArrayRegion(env, htlc_base_key, 0, 32, htlc_base_key_ref.bytes);
+       LDKThirtyTwoBytes commitment_seed_ref;
+       CHECK((*env)->GetArrayLength(env, commitment_seed) == 32);
+       (*env)->GetByteArrayRegion(env, commitment_seed, 0, 32, commitment_seed_ref.data);
+       LDKThirtyTwoBytes channel_keys_id_ref;
+       CHECK((*env)->GetArrayLength(env, channel_keys_id) == 32);
+       (*env)->GetByteArrayRegion(env, channel_keys_id, 0, 32, channel_keys_id_ref.data);
+       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
+       CHECK((*env)->GetArrayLength(env, rand_bytes_unique_start) == 32);
+       (*env)->GetByteArrayRegion(env, rand_bytes_unique_start, 0, 32, rand_bytes_unique_start_ref.data);
+       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1pubkeys(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbound(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = InMemorySigner_is_outbound(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1funding_1outpoint(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1channel_1parameters(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1channel_1type_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1counterparty_1payment_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
+       spend_tx_ref.data_is_owned = true;
+       LDKStaticPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynamic_1p2wsh_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
+       spend_tx_ref.data_is_owned = true;
+       LDKDelayedPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1ChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
+       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1WriteableEcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       *ret_ret = InMemorySigner_as_WriteableEcdsaChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInMemorySigner obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
+       if (arg_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKKeysManager this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       KeysManager_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
+       uint8_t seed_arr[32];
+       CHECK((*env)->GetArrayLength(env, seed) == 32);
+       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_KeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, KeysManager_get_node_secret_key(&this_arg_conv).bytes);
+       return ret_arr;
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channel_1keys(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
@@ -63192,1074 +67482,2138 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channe
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1sign_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
-       LDKKeysManager this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1sign_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_u8Z psbt_ref;
+       psbt_ref.datalen = (*env)->GetArrayLength(env, psbt);
+       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, psbt, 0, psbt_ref.datalen, psbt_ref.data);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = KeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPhantomKeysManager this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PhantomKeysManager_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
+       uint8_t seed_arr[32];
+       CHECK((*env)->GetArrayLength(env, seed) == 32);
+       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       uint8_t cross_node_seed_arr[32];
+       CHECK((*env)->GetArrayLength(env, cross_node_seed) == 32);
+       (*env)->GetByteArrayRegion(env, cross_node_seed, 0, 32, cross_node_seed_arr);
+       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
+       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = PhantomKeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1derive_1channel_1keys(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       uint8_t params_arr[32];
+       CHECK((*env)->GetArrayLength(env, params) == 32);
+       (*env)->GetByteArrayRegion(env, params, 0, 32, params_arr);
+       uint8_t (*params_ref)[32] = &params_arr;
+       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes);
+       return ret_arr;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1phantom_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKOnionMessenger this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessenger_free(this_obj_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageRouter_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDefaultMessageRouter this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DefaultMessageRouter_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1new(JNIEnv *env, jclass clz) {
+       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1as_1MessageRouter(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDefaultMessageRouter this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
+       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKOnionMessagePath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessagePath_free(this_obj_conv);
+}
+
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&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, 33);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 33, ret_var.data[i].compressed_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_OnionMessagePath_1set_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PublicKeyZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               val_constr.data = NULL;
+       for (size_t i = 0; i < val_constr.datalen; i++) {
+               int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
+               LDKPublicKey val_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, val_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, val_conv_8, 0, 33, val_conv_8_ref.compressed_form);
+               val_constr.data[i] = val_conv_8_ref;
+       }
+       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1destination(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1set_1destination(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
+       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
+       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1new(JNIEnv *env, jclass clz, jobjectArray intermediate_nodes_arg, int64_t destination_arg) {
+       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
+       intermediate_nodes_arg_constr.datalen = (*env)->GetArrayLength(env, intermediate_nodes_arg);
+       if (intermediate_nodes_arg_constr.datalen > 0)
+               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               intermediate_nodes_arg_constr.data = NULL;
+       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
+               int8_tArray intermediate_nodes_arg_conv_8 = (*env)->GetObjectArrayElement(env, intermediate_nodes_arg, i);
+               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, intermediate_nodes_arg_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, intermediate_nodes_arg_conv_8, 0, 33, intermediate_nodes_arg_conv_8_ref.compressed_form);
+               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
+       }
+       void* destination_arg_ptr = untag_ptr(destination_arg);
+       CHECK_ACCESS(destination_arg_ptr);
+       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
+       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
+       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOnionMessagePath arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOnionMessagePath orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Destination_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Destination_free(this_ptr_conv);
+}
+
+static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
+       int64_t ret_conv = Destination_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1node(JNIEnv *env, jclass clz, int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 33);
+       (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_node(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1blinded_1path(JNIEnv *env, jclass clz, int64_t a) {
+       LDKBlindedPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = BlindedPath_clone(&a_conv);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_blinded_path(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SendError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SendError_free(this_ptr_conv);
+}
+
+static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
+       int64_t ret_conv = SendError_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1secp256k1(JNIEnv *env, jclass clz, jclass a) {
+       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_java(env, a);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_secp256k1(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1big_1packet(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_big_packet();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1few_1blinded_1hops(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_few_blinded_hops();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1first_1hop(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_first_hop();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1message(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_message();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1buffer_1full(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_buffer_full();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1get_1node_1id_1failed(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_get_node_id_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1blinded_1path_1advance_1failed(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_blinded_path_advance_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SendError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
+       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
+       jboolean ret_conv = SendError_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomOnionMessageHandler_free(this_ptr_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1onion_1message(JNIEnv *env, jclass clz, int64_t entropy_source, int64_t node_signer, int64_t path, int64_t message, int64_t reply_path) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* message_ptr = untag_ptr(message);
+       CHECK_ACCESS(message_ptr);
+       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
+       message_conv = OnionMessageContents_clone((LDKOnionMessageContents*)untag_ptr(message));
+       LDKBlindedPath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedPath_clone(&reply_path_conv);
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ), "LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ");
+       *ret_conv = create_onion_message(entropy_source_conv, node_signer_conv, path_conv, message_conv, reply_path_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1new(JNIEnv *env, jclass clz, int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t message_router, int64_t offers_handler, int64_t custom_handler) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* message_router_ptr = untag_ptr(message_router);
+       CHECK_ACCESS(message_router_ptr);
+       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
+       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKMessageRouter_JCalls_cloned(&message_router_conv);
+       }
+       void* offers_handler_ptr = untag_ptr(offers_handler);
+       CHECK_ACCESS(offers_handler_ptr);
+       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
+       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, message_router_conv, offers_handler_conv, custom_handler_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1send_1onion_1message(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t message, int64_t reply_path) {
+       LDKOnionMessenger this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_u8Z psbt_ref;
-       psbt_ref.datalen = (*env)->GetArrayLength(env, psbt);
-       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, psbt, 0, psbt_ref.datalen, psbt_ref.data);
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* message_ptr = untag_ptr(message);
+       CHECK_ACCESS(message_ptr);
+       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
+       message_conv = OnionMessageContents_clone((LDKOnionMessageContents*)untag_ptr(message));
+       LDKBlindedPath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedPath_clone(&reply_path_conv);
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, path_conv, message_conv, reply_path_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKKeysManager this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
+       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
+       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessageProvider* ret_ret = MALLOC(sizeof(LDKOnionMessageProvider), "LDKOnionMessageProvider");
+       *ret_ret = OnionMessenger_as_OnionMessageProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessageHandler_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessage_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessage_free(this_ptr_conv);
+}
+
+static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
+       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1request(JNIEnv *env, jclass clz, int64_t a) {
+       LDKInvoiceRequest a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceRequest_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_request(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice(JNIEnv *env, jclass clz, int64_t a) {
+       LDKBolt12Invoice a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12Invoice_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1error(JNIEnv *env, jclass clz, int64_t a) {
+       LDKInvoiceError a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceError_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_error(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OffersMessage_1is_1known_1type(JNIEnv *env, jclass clz, int64_t tlv_type) {
+       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1tlv_1type(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
+       int64_t ret_conv = OffersMessage_tlv_type(this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OffersMessage_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = OffersMessage_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       void* arg_b_ptr = untag_ptr(arg_b);
+       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
+       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
+       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
+       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPacket this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Packet_free(this_obj_conv);
+}
+
+JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_Packet_1get_1version(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = Packet_get_version(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1version(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       Packet_set_version(&this_ptr_conv, val);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1public_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Packet_get_public_key(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1public_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       Packet_set_public_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1hop_1data(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Packet_get_hop_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_Packet_1set_1hop_1data(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = (*env)->GetArrayLength(env, val);
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, val, 0, val_ref.datalen, val_ref.data);
+       Packet_set_hop_data(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1hmac(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Packet_get_hmac(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1hmac(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       Packet_set_hmac(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Packet_1new(JNIEnv *env, jclass clz, int8_t version_arg, int8_tArray public_key_arg, int8_tArray hop_data_arg, int8_tArray hmac_arg) {
+       LDKPublicKey public_key_arg_ref;
+       CHECK((*env)->GetArrayLength(env, public_key_arg) == 33);
+       (*env)->GetByteArrayRegion(env, public_key_arg, 0, 33, public_key_arg_ref.compressed_form);
+       LDKCVec_u8Z hop_data_arg_ref;
+       hop_data_arg_ref.datalen = (*env)->GetArrayLength(env, hop_data_arg);
+       hop_data_arg_ref.data = MALLOC(hop_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, hop_data_arg, 0, hop_data_arg_ref.datalen, hop_data_arg_ref.data);
+       LDKThirtyTwoBytes hmac_arg_ref;
+       CHECK((*env)->GetArrayLength(env, hmac_arg) == 32);
+       (*env)->GetByteArrayRegion(env, hmac_arg, 0, 32, hmac_arg_ref.data);
+       LDKPacket ret_var = Packet_new(version_arg, public_key_arg_ref, hop_data_arg_ref, hmac_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg) {
+       LDKPacket ret_var = Packet_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Packet_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPacket arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Packet_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Packet_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPacket orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPacket ret_var = Packet_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Packet_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPacket a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPacket b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Packet_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPacket obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Packet_write(&obj_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_OnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OnionMessageContents_free(this_ptr_conv);
+}
+
+static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)untag_ptr(arg);
+       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)untag_ptr(orig);
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1offers(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
+       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_offers(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1custom(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCustomOnionMessageContents a_conv = *(LDKCustomOnionMessageContents*)(a_ptr);
+       if (a_conv.free == LDKCustomOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageContents_JCalls_cloned(&a_conv);
        }
-       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_PackedLockTimeZ locktime_conv = *(LDKCOption_PackedLockTimeZ*)(locktime_ptr);
-       locktime_conv = COption_PackedLockTimeZ_clone((LDKCOption_PackedLockTimeZ*)untag_ptr(locktime));
-       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
-       *ret_conv = KeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_custom(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
+static inline uint64_t CustomOnionMessageContents_clone_ptr(LDKCustomOnionMessageContents *NONNULL_PTR arg) {
+       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
+       *ret_ret = CustomOnionMessageContents_clone(arg);
        return tag_ptr(ret_ret, true);
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKCustomOnionMessageContents* arg_conv = (LDKCustomOnionMessageContents*)arg_ptr;
+       int64_t ret_conv = CustomOnionMessageContents_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKCustomOnionMessageContents* orig_conv = (LDKCustomOnionMessageContents*)orig_ptr;
+       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
+       *ret_ret = CustomOnionMessageContents_clone(orig_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomOnionMessageContents this_ptr_conv = *(LDKCustomOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomOnionMessageContents_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKPhantomKeysManager this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedPath this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PhantomKeysManager_free(this_obj_conv);
+       BlindedPath_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1introduction_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedPath_get_introduction_node_id(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1introduction_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedPath_set_introduction_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedPath_get_blinding_point(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
-       uint8_t seed_arr[32];
-       CHECK((*env)->GetArrayLength(env, seed) == 32);
-       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       uint8_t cross_node_seed_arr[32];
-       CHECK((*env)->GetArrayLength(env, cross_node_seed) == 32);
-       (*env)->GetByteArrayRegion(env, cross_node_seed, 0, 32, cross_node_seed_arr);
-       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
-       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedPath_set_blinding_point(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1blinded_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedPath_get_blinded_hops(&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++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               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_BlindedPath_1set_1blinded_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
        else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t m = 0; m < val_constr.datalen; m++) {
+               int64_t val_conv_12 = val_vals[m];
+               LDKBlindedHop val_conv_12_conv;
+               val_conv_12_conv.inner = untag_ptr(val_conv_12);
+               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
+               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
+               val_constr.data[m] = val_conv_12_conv;
        }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       BlindedPath_set_blinded_hops(&this_ptr_conv, val_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new(JNIEnv *env, jclass clz, int8_tArray introduction_node_id_arg, int8_tArray blinding_point_arg, int64_tArray blinded_hops_arg) {
+       LDKPublicKey introduction_node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, introduction_node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, introduction_node_id_arg, 0, 33, introduction_node_id_arg_ref.compressed_form);
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
+       LDKCVec_BlindedHopZ blinded_hops_arg_constr;
+       blinded_hops_arg_constr.datalen = (*env)->GetArrayLength(env, blinded_hops_arg);
+       if (blinded_hops_arg_constr.datalen > 0)
+               blinded_hops_arg_constr.data = MALLOC(blinded_hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
        else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
+               blinded_hops_arg_constr.data = NULL;
+       int64_t* blinded_hops_arg_vals = (*env)->GetLongArrayElements (env, blinded_hops_arg, NULL);
+       for (size_t m = 0; m < blinded_hops_arg_constr.datalen; m++) {
+               int64_t blinded_hops_arg_conv_12 = blinded_hops_arg_vals[m];
+               LDKBlindedHop blinded_hops_arg_conv_12_conv;
+               blinded_hops_arg_conv_12_conv.inner = untag_ptr(blinded_hops_arg_conv_12);
+               blinded_hops_arg_conv_12_conv.is_owned = ptr_is_owned(blinded_hops_arg_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_hops_arg_conv_12_conv);
+               blinded_hops_arg_conv_12_conv = BlindedHop_clone(&blinded_hops_arg_conv_12_conv);
+               blinded_hops_arg_constr.data[m] = blinded_hops_arg_conv_12_conv;
        }
-       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_PackedLockTimeZ locktime_conv = *(LDKCOption_PackedLockTimeZ*)(locktime_ptr);
-       locktime_conv = COption_PackedLockTimeZ_clone((LDKCOption_PackedLockTimeZ*)untag_ptr(locktime));
-       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
-       *ret_conv = PhantomKeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
+       (*env)->ReleaseLongArrayElements(env, blinded_hops_arg, blinded_hops_arg_vals, 0);
+       LDKBlindedPath ret_var = BlindedPath_new(introduction_node_id_arg_ref, blinding_point_arg_ref, blinded_hops_arg_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1derive_1channel_1keys(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       uint8_t params_arr[32];
-       CHECK((*env)->GetArrayLength(env, params) == 32);
-       (*env)->GetByteArrayRegion(env, params, 0, 32, params_arr);
-       uint8_t (*params_ref)[32] = &params_arr;
-       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
+static inline uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg) {
+       LDKBlindedPath ret_var = BlindedPath_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedPath arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedPath_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedPath orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedPath ret_var = BlindedPath_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1phantom_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPath_hash(&o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKOnionMessenger this_obj_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPath_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPath_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessenger_free(this_obj_conv);
+       BlindedHop_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageRouter_free(this_ptr_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1get_1blinded_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedHop_get_blinded_node_id(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDefaultMessageRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultMessageRouter_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1set_1blinded_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedHop_set_blinded_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1new(JNIEnv *env, jclass clz) {
-       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new();
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1get_1encrypted_1payload(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_get_encrypted_payload(&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_BlindedHop_1set_1encrypted_1payload(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = (*env)->GetArrayLength(env, val);
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, val, 0, val_ref.datalen, val_ref.data);
+       BlindedHop_set_encrypted_payload(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1new(JNIEnv *env, jclass clz, int8_tArray blinded_node_id_arg, int8_tArray encrypted_payload_arg) {
+       LDKPublicKey blinded_node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinded_node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinded_node_id_arg, 0, 33, blinded_node_id_arg_ref.compressed_form);
+       LDKCVec_u8Z encrypted_payload_arg_ref;
+       encrypted_payload_arg_ref.datalen = (*env)->GetArrayLength(env, encrypted_payload_arg);
+       encrypted_payload_arg_ref.data = MALLOC(encrypted_payload_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, encrypted_payload_arg, 0, encrypted_payload_arg_ref.datalen, encrypted_payload_arg_ref.data);
+       LDKBlindedHop ret_var = BlindedHop_new(blinded_node_id_arg_ref, encrypted_payload_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1as_1MessageRouter(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDefaultMessageRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
-       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
+       LDKBlindedHop ret_var = BlindedHop_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedHop arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKOnionMessagePath this_obj_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedHop orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedHop_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedHop a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedHop b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new_1for_1message(JNIEnv *env, jclass clz, jobjectArray node_pks, int64_t entropy_source) {
+       LDKCVec_PublicKeyZ node_pks_constr;
+       node_pks_constr.datalen = (*env)->GetArrayLength(env, node_pks);
+       if (node_pks_constr.datalen > 0)
+               node_pks_constr.data = MALLOC(node_pks_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               node_pks_constr.data = NULL;
+       for (size_t i = 0; i < node_pks_constr.datalen; i++) {
+               int8_tArray node_pks_conv_8 = (*env)->GetObjectArrayElement(env, node_pks, i);
+               LDKPublicKey node_pks_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, node_pks_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, node_pks_conv_8, 0, 33, node_pks_conv_8_ref.compressed_form);
+               node_pks_constr.data[i] = node_pks_conv_8_ref;
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
+       *ret_conv = BlindedPath_new_for_message(node_pks_constr, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1one_1hop_1for_1payment(JNIEnv *env, jclass clz, int8_tArray payee_node_id, int64_t payee_tlvs, int64_t entropy_source) {
+       LDKPublicKey payee_node_id_ref;
+       CHECK((*env)->GetArrayLength(env, payee_node_id) == 33);
+       (*env)->GetByteArrayRegion(env, payee_node_id, 0, 33, payee_node_id_ref.compressed_form);
+       LDKReceiveTlvs payee_tlvs_conv;
+       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
+       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
+       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = BlindedPath_one_hop_for_payment(payee_node_id_ref, payee_tlvs_conv, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedPath obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedPath_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
+       *ret_conv = BlindedPath_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedHop obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
+       *ret_conv = BlindedHop_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKForwardNode this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessagePath_free(this_obj_conv);
+       ForwardNode_free(this_obj_conv);
 }
 
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1tlvs(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&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, 33);
-               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 33, ret_var.data[i].compressed_form);
-               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
-       }
-       
-       FREE(ret_var.data);
+       LDKForwardTlvs ret_var = ForwardNode_get_tlvs(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1tlvs(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKForwardTlvs val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ForwardTlvs_clone(&val_conv);
+       ForwardNode_set_tlvs(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ForwardNode_get_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1set_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               val_constr.data = NULL;
-       for (size_t i = 0; i < val_constr.datalen; i++) {
-               int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
-               LDKPublicKey val_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, val_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, val_conv_8, 0, 33, val_conv_8_ref.compressed_form);
-               val_constr.data[i] = val_conv_8_ref;
-       }
-       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       ForwardNode_set_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1destination(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int64_t ret_conv = ForwardNode_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1set_1destination(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
-       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
-       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
+       ForwardNode_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1new(JNIEnv *env, jclass clz, jobjectArray intermediate_nodes_arg, int64_t destination_arg) {
-       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
-       intermediate_nodes_arg_constr.datalen = (*env)->GetArrayLength(env, intermediate_nodes_arg);
-       if (intermediate_nodes_arg_constr.datalen > 0)
-               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               intermediate_nodes_arg_constr.data = NULL;
-       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
-               int8_tArray intermediate_nodes_arg_conv_8 = (*env)->GetObjectArrayElement(env, intermediate_nodes_arg, i);
-               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, intermediate_nodes_arg_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, intermediate_nodes_arg_conv_8, 0, 33, intermediate_nodes_arg_conv_8_ref.compressed_form);
-               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
-       }
-       void* destination_arg_ptr = untag_ptr(destination_arg);
-       CHECK_ACCESS(destination_arg_ptr);
-       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
-       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
-       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1new(JNIEnv *env, jclass clz, int64_t tlvs_arg, int8_tArray node_id_arg, int64_t htlc_maximum_msat_arg) {
+       LDKForwardTlvs tlvs_arg_conv;
+       tlvs_arg_conv.inner = untag_ptr(tlvs_arg);
+       tlvs_arg_conv.is_owned = ptr_is_owned(tlvs_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_arg_conv);
+       tlvs_arg_conv = ForwardTlvs_clone(&tlvs_arg_conv);
+       LDKPublicKey node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, node_id_arg, 0, 33, node_id_arg_ref.compressed_form);
+       LDKForwardNode ret_var = ForwardNode_new(tlvs_arg_conv, node_id_arg_ref, htlc_maximum_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
+static inline uint64_t ForwardNode_clone_ptr(LDKForwardNode *NONNULL_PTR arg) {
+       LDKForwardNode ret_var = ForwardNode_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOnionMessagePath arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKForwardNode arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
+       int64_t ret_conv = ForwardNode_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOnionMessagePath orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKForwardNode orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
+       LDKForwardNode ret_var = ForwardNode_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Destination_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Destination_free(this_ptr_conv);
-}
-
-static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
-       int64_t ret_conv = Destination_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1node(JNIEnv *env, jclass clz, int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 33);
-       (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_node(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1blinded_1path(JNIEnv *env, jclass clz, int64_t a) {
-       LDKBlindedPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPath_clone(&a_conv);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_blinded_path(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SendError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SendError_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKForwardTlvs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ForwardTlvs_free(this_obj_conv);
 }
 
-static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
-       int64_t ret_conv = SendError_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_get_short_channel_id(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1secp256k1(JNIEnv *env, jclass clz, jclass a) {
-       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_java(env, a);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_secp256k1(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ForwardTlvs_set_short_channel_id(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1big_1packet(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_big_packet();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1payment_1relay(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay ret_var = ForwardTlvs_get_payment_relay(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1few_1blinded_1hops(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_few_blinded_hops();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1payment_1relay(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentRelay_clone(&val_conv);
+       ForwardTlvs_set_payment_relay(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1first_1hop(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_first_hop();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints ret_var = ForwardTlvs_get_payment_constraints(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1message(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_message();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ForwardTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1buffer_1full(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_buffer_full();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = ForwardTlvs_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1get_1node_1id_1failed(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_get_node_id_failed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       ForwardTlvs_set_features(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1new(JNIEnv *env, jclass clz, int64_t short_channel_id_arg, int64_t payment_relay_arg, int64_t payment_constraints_arg, int64_t features_arg) {
+       LDKPaymentRelay payment_relay_arg_conv;
+       payment_relay_arg_conv.inner = untag_ptr(payment_relay_arg);
+       payment_relay_arg_conv.is_owned = ptr_is_owned(payment_relay_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_relay_arg_conv);
+       payment_relay_arg_conv = PaymentRelay_clone(&payment_relay_arg_conv);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKForwardTlvs ret_var = ForwardTlvs_new(short_channel_id_arg, payment_relay_arg_conv, payment_constraints_arg_conv, features_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1blinded_1path_1advance_1failed(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_blinded_path_advance_failed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg) {
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SendError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
-       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
-       jboolean ret_conv = SendError_eq(a_conv, b_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKForwardTlvs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomOnionMessageHandler_free(this_ptr_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1new(JNIEnv *env, jclass clz, int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t message_router, int64_t offers_handler, int64_t custom_handler) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* message_router_ptr = untag_ptr(message_router);
-       CHECK_ACCESS(message_router_ptr);
-       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
-       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKMessageRouter_JCalls_cloned(&message_router_conv);
-       }
-       void* offers_handler_ptr = untag_ptr(offers_handler);
-       CHECK_ACCESS(offers_handler_ptr);
-       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
-       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
-       }
-       void* custom_handler_ptr = untag_ptr(custom_handler);
-       CHECK_ACCESS(custom_handler_ptr);
-       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
-       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
-       }
-       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, message_router_conv, offers_handler_conv, custom_handler_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKForwardTlvs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1send_1onion_1message(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t message, int64_t reply_path) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessagePath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = OnionMessagePath_clone(&path_conv);
-       void* message_ptr = untag_ptr(message);
-       CHECK_ACCESS(message_ptr);
-       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
-       message_conv = OnionMessageContents_clone((LDKOnionMessageContents*)untag_ptr(message));
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
-       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, path_conv, message_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
-       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessageProvider* ret_ret = MALLOC(sizeof(LDKOnionMessageProvider), "LDKOnionMessageProvider");
-       *ret_ret = OnionMessenger_as_OnionMessageProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessageHandler_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessage_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessage_free(this_ptr_conv);
-}
-
-static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
-       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKReceiveTlvs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReceiveTlvs_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1request(JNIEnv *env, jclass clz, int64_t a) {
-       LDKInvoiceRequest a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceRequest_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_request(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1get_1payment_1secret(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ReceiveTlvs_get_payment_secret(&this_ptr_conv));
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice(JNIEnv *env, jclass clz, int64_t a) {
-       LDKBolt12Invoice a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12Invoice_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1set_1payment_1secret(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       ReceiveTlvs_set_payment_secret(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1error(JNIEnv *env, jclass clz, int64_t a) {
-       LDKInvoiceError a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceError_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_error(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1get_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints ret_var = ReceiveTlvs_get_payment_constraints(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OffersMessage_1is_1known_1type(JNIEnv *env, jclass clz, int64_t tlv_type) {
-       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1tlv_1type(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
-       int64_t ret_conv = OffersMessage_tlv_type(this_arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OffersMessage_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = OffersMessage_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       void* arg_b_ptr = untag_ptr(arg_b);
-       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
-       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
-       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
-       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1set_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ReceiveTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OnionMessageContents_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1new(JNIEnv *env, jclass clz, int8_tArray payment_secret_arg, int64_t payment_constraints_arg) {
+       LDKThirtyTwoBytes payment_secret_arg_ref;
+       CHECK((*env)->GetArrayLength(env, payment_secret_arg) == 32);
+       (*env)->GetByteArrayRegion(env, payment_secret_arg, 0, 32, payment_secret_arg_ref.data);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       LDKReceiveTlvs ret_var = ReceiveTlvs_new(payment_secret_arg_ref, payment_constraints_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg) {
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)untag_ptr(arg);
-       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKReceiveTlvs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ReceiveTlvs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)untag_ptr(orig);
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKReceiveTlvs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1offers(JNIEnv *env, jclass clz, int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
-       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_offers(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPaymentRelay this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentRelay_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1custom(JNIEnv *env, jclass clz, int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKCustomOnionMessageContents a_conv = *(LDKCustomOnionMessageContents*)(a_ptr);
-       if (a_conv.free == LDKCustomOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageContents_JCalls_cloned(&a_conv);
-       }
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_custom(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = PaymentRelay_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
 }
 
-static inline uint64_t CustomOnionMessageContents_clone_ptr(LDKCustomOnionMessageContents *NONNULL_PTR arg) {
-       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
-       *ret_ret = CustomOnionMessageContents_clone(arg);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentRelay_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKCustomOnionMessageContents* arg_conv = (LDKCustomOnionMessageContents*)arg_ptr;
-       int64_t ret_conv = CustomOnionMessageContents_clone_ptr(arg_conv);
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentRelay_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKCustomOnionMessageContents* orig_conv = (LDKCustomOnionMessageContents*)orig_ptr;
-       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
-       *ret_ret = CustomOnionMessageContents_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentRelay_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomOnionMessageContents this_ptr_conv = *(LDKCustomOnionMessageContents*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomOnionMessageContents_free(this_ptr_conv);
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentRelay_get_fee_base_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedPath this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPath_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentRelay_set_fee_base_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg) {
-       LDKBlindedPath ret_var = BlindedPath_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1new(JNIEnv *env, jclass clz, int16_t cltv_expiry_delta_arg, int32_t fee_proportional_millionths_arg, int32_t fee_base_msat_arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedPath arg_conv;
+
+static inline uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentRelay arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentRelay_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedPath orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPaymentRelay orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPath ret_var = BlindedPath_clone(&orig_conv);
+       LDKPaymentRelay ret_var = PaymentRelay_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_hash(&o_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPaymentConstraints this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentConstraints_free(this_obj_conv);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1get_1max_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentConstraints_get_max_cltv_expiry(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPath_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedPath b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPath_eq(&a_conv, &b_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1set_1max_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentConstraints_set_max_cltv_expiry(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = PaymentConstraints_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedHop this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedHop_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentConstraints_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
-       LDKBlindedHop ret_var = BlindedHop_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1new(JNIEnv *env, jclass clz, int32_t max_cltv_expiry_arg, int64_t htlc_minimum_msat_arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedHop arg_conv;
+
+static inline uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentConstraints arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentConstraints_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedHop orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPaymentConstraints orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedHop o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_hash(&o_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKForwardTlvs obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ForwardTlvs_write(&obj_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 jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedHop a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedHop b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKReceiveTlvs obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ReceiveTlvs_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new_1for_1message(JNIEnv *env, jclass clz, jobjectArray node_pks, int64_t entropy_source) {
-       LDKCVec_PublicKeyZ node_pks_constr;
-       node_pks_constr.datalen = (*env)->GetArrayLength(env, node_pks);
-       if (node_pks_constr.datalen > 0)
-               node_pks_constr.data = MALLOC(node_pks_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               node_pks_constr.data = NULL;
-       for (size_t i = 0; i < node_pks_constr.datalen; i++) {
-               int8_tArray node_pks_conv_8 = (*env)->GetObjectArrayElement(env, node_pks, i);
-               LDKPublicKey node_pks_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, node_pks_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, node_pks_conv_8, 0, 33, node_pks_conv_8_ref.compressed_form);
-               node_pks_constr.data[i] = node_pks_conv_8_ref;
-       }
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = BlindedPath_new_for_message(node_pks_constr, entropy_source_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = ReceiveTlvs_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedPath obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPaymentRelay obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPath_write(&obj_conv);
+       LDKCVec_u8Z ret_var = PaymentRelay_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = BlindedPath_read(ser_ref);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = PaymentRelay_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedHop obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPaymentConstraints obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = PaymentConstraints_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
-       *ret_conv = BlindedHop_read(ser_ref);
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = PaymentConstraints_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
@@ -64296,8 +69650,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone(JNIEn
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1invoice_1payment(JNIEnv *env, jclass clz, int64_t payment_preimage, int8_tArray payment_secret) {
        void* payment_preimage_ptr = untag_ptr(payment_preimage);
        CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_PaymentPreimageZ payment_preimage_conv = *(LDKCOption_PaymentPreimageZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(payment_preimage));
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
        LDKThirtyTwoBytes payment_secret_ref;
        CHECK((*env)->GetArrayLength(env, payment_secret) == 32);
        (*env)->GetByteArrayRegion(env, payment_secret, 0, 32, payment_secret_ref.data);
@@ -64343,6 +69697,180 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1read(JNIEnv
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKClaimedHTLC this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ClaimedHTLC_free(this_obj_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ClaimedHTLC_get_channel_id(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       ClaimedHTLC_set_channel_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1user_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 16);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 16, ClaimedHTLC_get_user_channel_id(&this_ptr_conv).le_bytes);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1user_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKU128 val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 16);
+       (*env)->GetByteArrayRegion(env, val, 0, 16, val_ref.le_bytes);
+       ClaimedHTLC_set_user_channel_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = ClaimedHTLC_get_cltv_expiry(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ClaimedHTLC_set_cltv_expiry(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ClaimedHTLC_get_value_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ClaimedHTLC_set_value_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1new(JNIEnv *env, jclass clz, int8_tArray channel_id_arg, int8_tArray user_channel_id_arg, int32_t cltv_expiry_arg, int64_t value_msat_arg) {
+       LDKThirtyTwoBytes channel_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
+       (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
+       LDKU128 user_channel_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, user_channel_id_arg) == 16);
+       (*env)->GetByteArrayRegion(env, user_channel_id_arg, 0, 16, user_channel_id_arg_ref.le_bytes);
+       LDKClaimedHTLC ret_var = ClaimedHTLC_new(channel_id_arg_ref, user_channel_id_arg_ref, cltv_expiry_arg, value_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg) {
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClaimedHTLC arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ClaimedHTLC_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKClaimedHTLC orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKClaimedHTLC a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKClaimedHTLC b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ClaimedHTLC_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKClaimedHTLC obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ClaimedHTLC_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = ClaimedHTLC_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PathFailure_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -64518,6 +70046,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1counterparty
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1funding_1batch_1closure(JNIEnv *env, jclass clz) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_funding_batch_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ClosureReason_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKClosureReason* a_conv = (LDKClosureReason*)untag_ptr(a);
        LDKClosureReason* b_conv = (LDKClosureReason*)untag_ptr(b);
@@ -64747,7 +70282,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1funding_1generation_
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int8_tArray via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int64_t via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
        LDKPublicKey receiver_node_id_ref;
        CHECK((*env)->GetArrayLength(env, receiver_node_id) == 33);
        (*env)->GetByteArrayRegion(env, receiver_node_id, 0, 33, receiver_node_id_ref.compressed_form);
@@ -64763,24 +70298,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable(J
        CHECK_ACCESS(purpose_ptr);
        LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
        purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
-       LDKThirtyTwoBytes via_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, via_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, via_channel_id, 0, 32, via_channel_id_ref.data);
+       void* via_channel_id_ptr = untag_ptr(via_channel_id);
+       CHECK_ACCESS(via_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ via_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(via_channel_id_ptr);
+       via_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(via_channel_id));
        void* via_user_channel_id_ptr = untag_ptr(via_user_channel_id);
        CHECK_ACCESS(via_user_channel_id_ptr);
-       LDKCOption_u128Z via_user_channel_id_conv = *(LDKCOption_u128Z*)(via_user_channel_id_ptr);
-       via_user_channel_id_conv = COption_u128Z_clone((LDKCOption_u128Z*)untag_ptr(via_user_channel_id));
+       LDKCOption_U128Z via_user_channel_id_conv = *(LDKCOption_U128Z*)(via_user_channel_id_ptr);
+       via_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(via_user_channel_id));
        void* claim_deadline_ptr = untag_ptr(claim_deadline);
        CHECK_ACCESS(claim_deadline_ptr);
        LDKCOption_u32Z claim_deadline_conv = *(LDKCOption_u32Z*)(claim_deadline_ptr);
        claim_deadline_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(claim_deadline));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_ref, via_user_channel_id_conv, claim_deadline_conv);
+       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_conv, via_user_channel_id_conv, claim_deadline_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose, int64_tArray htlcs, int64_t sender_intended_total_msat) {
        LDKPublicKey receiver_node_id_ref;
        CHECK((*env)->GetArrayLength(env, receiver_node_id) == 33);
        (*env)->GetByteArrayRegion(env, receiver_node_id, 0, 33, receiver_node_id_ref.compressed_form);
@@ -64791,8 +70327,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNI
        CHECK_ACCESS(purpose_ptr);
        LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
        purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
+       LDKCVec_ClaimedHTLCZ htlcs_constr;
+       htlcs_constr.datalen = (*env)->GetArrayLength(env, htlcs);
+       if (htlcs_constr.datalen > 0)
+               htlcs_constr.data = MALLOC(htlcs_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
+       else
+               htlcs_constr.data = NULL;
+       int64_t* htlcs_vals = (*env)->GetLongArrayElements (env, htlcs, NULL);
+       for (size_t n = 0; n < htlcs_constr.datalen; n++) {
+               int64_t htlcs_conv_13 = htlcs_vals[n];
+               LDKClaimedHTLC htlcs_conv_13_conv;
+               htlcs_conv_13_conv.inner = untag_ptr(htlcs_conv_13);
+               htlcs_conv_13_conv.is_owned = ptr_is_owned(htlcs_conv_13);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_conv);
+               htlcs_conv_13_conv = ClaimedHTLC_clone(&htlcs_conv_13_conv);
+               htlcs_constr.data[n] = htlcs_conv_13_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, htlcs, htlcs_vals, 0);
+       void* sender_intended_total_msat_ptr = untag_ptr(sender_intended_total_msat);
+       CHECK_ACCESS(sender_intended_total_msat_ptr);
+       LDKCOption_u64Z sender_intended_total_msat_conv = *(LDKCOption_u64Z*)(sender_intended_total_msat_ptr);
+       sender_intended_total_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(sender_intended_total_msat));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv);
+       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv, htlcs_constr, sender_intended_total_msat_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -64800,8 +70357,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNI
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1sent(JNIEnv *env, jclass clz, int64_t payment_id, int8_tArray payment_preimage, int8_tArray payment_hash, int64_t fee_paid_msat) {
        void* payment_id_ptr = untag_ptr(payment_id);
        CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_PaymentIdZ payment_id_conv = *(LDKCOption_PaymentIdZ*)(payment_id_ptr);
-       payment_id_conv = COption_PaymentIdZ_clone((LDKCOption_PaymentIdZ*)untag_ptr(payment_id));
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
        (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
@@ -64841,8 +70398,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1succe
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -64857,8 +70414,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1succe
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1failed(JNIEnv *env, jclass clz, int64_t payment_id, int8_tArray payment_hash, jboolean payment_failed_permanently, int64_t failure, int64_t path, int64_t short_channel_id) {
        void* payment_id_ptr = untag_ptr(payment_id);
        CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_PaymentIdZ payment_id_conv = *(LDKCOption_PaymentIdZ*)(payment_id_ptr);
-       payment_id_conv = COption_PaymentIdZ_clone((LDKCOption_PaymentIdZ*)untag_ptr(payment_id));
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -64941,7 +70498,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1htlcintercepted(JNIE
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs(JNIEnv *env, jclass clz, int64_tArray outputs) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs(JNIEnv *env, jclass clz, int64_tArray outputs, int64_t channel_id) {
        LDKCVec_SpendableOutputDescriptorZ outputs_constr;
        outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
        if (outputs_constr.datalen > 0)
@@ -64958,19 +70515,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs(J
                outputs_constr.data[b] = outputs_conv_27_conv;
        }
        (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       void* channel_id_ptr = untag_ptr(channel_id);
+       CHECK_ACCESS(channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(channel_id_ptr);
+       channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(channel_id));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_spendable_outputs(outputs_constr);
+       *ret_copy = Event_spendable_outputs(outputs_constr, channel_id_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded(JNIEnv *env, jclass clz, int8_tArray prev_channel_id, int8_tArray next_channel_id, int64_t fee_earned_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
-       LDKThirtyTwoBytes prev_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, prev_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, prev_channel_id, 0, 32, prev_channel_id_ref.data);
-       LDKThirtyTwoBytes next_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, next_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, next_channel_id, 0, 32, next_channel_id_ref.data);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded(JNIEnv *env, jclass clz, int64_t prev_channel_id, int64_t next_channel_id, int64_t fee_earned_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
+       void* prev_channel_id_ptr = untag_ptr(prev_channel_id);
+       CHECK_ACCESS(prev_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ prev_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(prev_channel_id_ptr);
+       prev_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(prev_channel_id));
+       void* next_channel_id_ptr = untag_ptr(next_channel_id);
+       CHECK_ACCESS(next_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ next_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(next_channel_id_ptr);
+       next_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(next_channel_id));
        void* fee_earned_msat_ptr = untag_ptr(fee_earned_msat);
        CHECK_ACCESS(fee_earned_msat_ptr);
        LDKCOption_u64Z fee_earned_msat_conv = *(LDKCOption_u64Z*)(fee_earned_msat_ptr);
@@ -64980,21 +70543,22 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded(J
        LDKCOption_u64Z outbound_amount_forwarded_msat_conv = *(LDKCOption_u64Z*)(outbound_amount_forwarded_msat_ptr);
        outbound_amount_forwarded_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(outbound_amount_forwarded_msat));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_forwarded(prev_channel_id_ref, next_channel_id_ref, fee_earned_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
+       *ret_copy = Event_payment_forwarded(prev_channel_id_conv, next_channel_id_conv, fee_earned_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int8_tArray former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int64_t former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo) {
        LDKThirtyTwoBytes channel_id_ref;
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_ref.data);
        LDKU128 user_channel_id_ref;
        CHECK((*env)->GetArrayLength(env, user_channel_id) == 16);
        (*env)->GetByteArrayRegion(env, user_channel_id, 0, 16, user_channel_id_ref.le_bytes);
-       LDKThirtyTwoBytes former_temporary_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, former_temporary_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, former_temporary_channel_id, 0, 32, former_temporary_channel_id_ref.data);
+       void* former_temporary_channel_id_ptr = untag_ptr(former_temporary_channel_id);
+       CHECK_ACCESS(former_temporary_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ former_temporary_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(former_temporary_channel_id_ptr);
+       former_temporary_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(former_temporary_channel_id));
        LDKPublicKey counterparty_node_id_ref;
        CHECK((*env)->GetArrayLength(env, counterparty_node_id) == 33);
        (*env)->GetByteArrayRegion(env, counterparty_node_id, 0, 33, counterparty_node_id_ref.compressed_form);
@@ -65004,7 +70568,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending(JNI
        CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_pending(channel_id_ref, user_channel_id_ref, former_temporary_channel_id_ref, counterparty_node_id_ref, funding_txo_conv);
+       *ret_copy = Event_channel_pending(channel_id_ref, user_channel_id_ref, former_temporary_channel_id_conv, counterparty_node_id_ref, funding_txo_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -65030,7 +70594,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1ready(JNIEn
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int64_t reason) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int64_t reason, int8_tArray counterparty_node_id, int64_t channel_capacity_sats) {
        LDKThirtyTwoBytes channel_id_ref;
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_ref.data);
@@ -65041,8 +70605,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed(JNIE
        CHECK_ACCESS(reason_ptr);
        LDKClosureReason reason_conv = *(LDKClosureReason*)(reason_ptr);
        reason_conv = ClosureReason_clone((LDKClosureReason*)untag_ptr(reason));
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK((*env)->GetArrayLength(env, counterparty_node_id) == 33);
+       (*env)->GetByteArrayRegion(env, counterparty_node_id, 0, 33, counterparty_node_id_ref.compressed_form);
+       void* channel_capacity_sats_ptr = untag_ptr(channel_capacity_sats);
+       CHECK_ACCESS(channel_capacity_sats_ptr);
+       LDKCOption_u64Z channel_capacity_sats_conv = *(LDKCOption_u64Z*)(channel_capacity_sats_ptr);
+       channel_capacity_sats_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(channel_capacity_sats));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_closed(channel_id_ref, user_channel_id_ref, reason_conv);
+       *ret_copy = Event_channel_closed(channel_id_ref, user_channel_id_ref, reason_conv, counterparty_node_id_ref, channel_capacity_sats_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -65374,11 +70945,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1tx_
        LDKPublicKey node_id_ref;
        CHECK((*env)->GetArrayLength(env, node_id) == 33);
        (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       LDKTxAddInput msg_conv;
+       LDKTxAbort msg_conv;
        msg_conv.inner = untag_ptr(msg);
        msg_conv.is_owned = ptr_is_owned(msg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAddInput_clone(&msg_conv);
+       msg_conv = TxAbort_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_tx_abort(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
@@ -65814,6 +71385,29 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameter
        return ret_conv;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKChannelDerivationParameters obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelDerivationParameters_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = ChannelDerivationParameters_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnchorDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKAnchorDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -65980,7 +71574,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnchorDescriptor_1tx_1i
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKSignature signature_ref;
+       LDKECDSASignature signature_ref;
        CHECK((*env)->GetArrayLength(env, signature) == 64);
        (*env)->GetByteArrayRegion(env, signature, 0, 64, signature_ref.compact_form);
        LDKWitness ret_var = AnchorDescriptor_tx_input_witness(&this_arg_conv, signature_ref);
@@ -66114,7 +71708,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1get_1preima
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = HTLCDescriptor_get_preimage(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -66128,8 +71722,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1set_1preimage(
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_PaymentPreimageZ val_conv = *(LDKCOption_PaymentPreimageZ*)(val_ptr);
-       val_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        HTLCDescriptor_set_preimage(&this_ptr_conv, val_conv);
 }
 
@@ -66150,7 +71744,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1set_1counterpa
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        HTLCDescriptor_set_counterparty_sig(&this_ptr_conv, val_ref);
@@ -66201,6 +71795,29 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1eq(JNIEnv
        return ret_conv;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKHTLCDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = HTLCDescriptor_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = HTLCDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1outpoint(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -66266,7 +71883,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1tx_1inp
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKSignature signature_ref;
+       LDKECDSASignature signature_ref;
        CHECK((*env)->GetArrayLength(env, signature) == 64);
        (*env)->GetByteArrayRegion(env, signature, 0, 64, signature_ref.compact_form);
        LDKu8slice witness_script_ref;
@@ -66964,54 +72581,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BumpTransactionEventHandler_1h
        BumpTransactionEventHandler_handle_event(&this_arg_conv, event_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKFilesystemPersister this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKFilesystemStore this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FilesystemPersister_free(this_obj_conv);
+       FilesystemStore_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1new(JNIEnv *env, jclass clz, jstring path_to_channel_data) {
-       LDKStr path_to_channel_data_conv = java_to_owned_str(env, path_to_channel_data);
-       LDKFilesystemPersister ret_var = FilesystemPersister_new(path_to_channel_data_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1new(JNIEnv *env, jclass clz, jstring data_dir) {
+       LDKStr data_dir_conv = java_to_owned_str(env, data_dir);
+       LDKFilesystemStore ret_var = FilesystemStore_new(data_dir_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1get_1data_1dir(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKFilesystemPersister this_arg_conv;
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1get_1data_1dir(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFilesystemStore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKStr ret_str = FilesystemPersister_get_data_dir(&this_arg_conv);
+       LDKStr ret_str = FilesystemStore_get_data_dir(&this_arg_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1read_1channelmonitors(JNIEnv *env, jclass clz, int64_t this_arg, int64_t entropy_source, int64_t signer_provider) {
-       LDKFilesystemPersister this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1as_1KVStore(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFilesystemStore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
-       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = FilesystemPersister_read_channelmonitors(&this_arg_conv, entropy_source_conv, signer_provider_conv);
-       return tag_ptr(ret_conv, true);
+       LDKKVStore* ret_ret = MALLOC(sizeof(LDKKVStore), "LDKKVStore");
+       *ret_ret = FilesystemStore_as_KVStore(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
@@ -67128,7 +72735,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1join(J
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // WARNING: we need a move here but no clone is available for LDKBackgroundProcessor
        
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = BackgroundProcessor_join(this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -67140,7 +72747,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1stop(J
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // WARNING: we need a move here but no clone is available for LDKBackgroundProcessor
        
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = BackgroundProcessor_stop(this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -68470,7 +74077,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawBolt11Invoice_1rec
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
        *ret_conv = SignedRawBolt11Invoice_recover_payee_pub_key(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -68580,7 +74187,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawBolt11Invoice_1payment_1
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = RawBolt11Invoice_payment_secret(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -68844,7 +74451,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11Invoice_1expires_1at(
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Bolt11Invoice_expires_at(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -68916,7 +74523,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Bolt11Invoice_1fallbac
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_AddressZ ret_var = Bolt11Invoice_fallback_addresses(&this_arg_conv);
+       LDKCVec_StrZ ret_var = Bolt11Invoice_fallback_addresses(&this_arg_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, String_clz, NULL);
        ;
@@ -69273,7 +74880,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_pay_1invoice(JNIEnv *env, j
        channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        channelmanager_conv.is_owned = false;
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
        *ret_conv = pay_invoice(&invoice_conv, retry_strategy_conv, &channelmanager_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -69316,7 +74923,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_pay_1zero_1value_1invoice(J
        channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        channelmanager_conv.is_owned = false;
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
        *ret_conv = pay_zero_value_invoice(&invoice_conv, amount_msats, retry_strategy_conv, &channelmanager_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -69344,6 +74951,46 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_pay_1zero_1value_1invoice_1
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_preflight_1probe_1invoice(JNIEnv *env, jclass clz, int64_t invoice, int64_t channelmanager, int64_t liquidity_limit_multiplier) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = preflight_probe_invoice(&invoice_conv, &channelmanager_conv, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_preflight_1probe_1zero_1value_1invoice(JNIEnv *env, jclass clz, int64_t invoice, int64_t amount_msat, int64_t channelmanager, int64_t liquidity_limit_multiplier) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = preflight_probe_zero_value_invoice(&invoice_conv, amount_msat, &channelmanager_conv, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -69396,6 +75043,61 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentError_1eq(JNIEnv *e
        return ret_conv;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbingError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKProbingError this_ptr_conv = *(LDKProbingError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ProbingError_free(this_ptr_conv);
+}
+
+static inline uint64_t ProbingError_clone_ptr(LDKProbingError *NONNULL_PTR arg) {
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbingError* arg_conv = (LDKProbingError*)untag_ptr(arg);
+       int64_t ret_conv = ProbingError_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbingError* orig_conv = (LDKProbingError*)untag_ptr(orig);
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1invoice(JNIEnv *env, jclass clz, jstring a) {
+       LDKStr a_conv = java_to_owned_str(env, a);
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_invoice(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1sending(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKProbeSendFailure a_conv = *(LDKProbeSendFailure*)(a_ptr);
+       a_conv = ProbeSendFailure_clone((LDKProbeSendFailure*)untag_ptr(a));
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_sending(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbingError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKProbingError* a_conv = (LDKProbingError*)untag_ptr(a);
+       LDKProbingError* b_conv = (LDKProbingError*)untag_ptr(b);
+       jboolean ret_conv = ProbingError_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1phantom_1invoice(JNIEnv *env, jclass clz, int64_t amt_msat, int64_t payment_hash, jstring description, int32_t invoice_expiry_delta_secs, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, jclass network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
        void* amt_msat_ptr = untag_ptr(amt_msat);
        CHECK_ACCESS(amt_msat_ptr);
@@ -69403,8 +75105,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1phantom_1invoice(JN
        amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKStr description_conv = java_to_owned_str(env, description);
        LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
        phantom_route_hints_constr.datalen = (*env)->GetArrayLength(env, phantom_route_hints);
@@ -69461,8 +75163,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1phantom_1invoice_1w
        amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKSha256 description_hash_conv;
        description_hash_conv.inner = untag_ptr(description_hash);
        description_hash_conv.is_owned = ptr_is_owned(description_hash);
index 3febdce251effe1108ea341eca23d8e2ca5d6114..b25964254133a8209cd77cdf0a751c1d5cb70319 100644 (file)
@@ -37,25 +37,133 @@ typedef jlongArray int64_tArray;
 typedef jbyteArray int8_tArray;
 typedef jshortArray int16_tArray;
 
-static inline jstring str_ref_to_java(JNIEnv *env, const char* chars, size_t len) {
-       // Sadly we need to create a temporary because Java can't accept a char* without a 0-terminator
-       char* conv_buf = MALLOC(len + 1, "str conv buf");
-       memcpy(conv_buf, chars, len);
-       conv_buf[len] = 0;
-       jstring ret = (*env)->NewStringUTF(env, conv_buf);
-       FREE(conv_buf);
+static inline jstring str_ref_to_java(JNIEnv *env, const unsigned char* chars, size_t len) {
+       // Java uses "Modified UTF-8" rather than UTF-8. This requires special
+       // handling for codepoints above 0xFFFF, which get converted from four
+       // bytes to six. We don't know upfront how many codepoints in the string
+       // are above 0xFFFF, so we just allocate an extra 33% up front and waste a
+       // bit of space.
+       unsigned char* java_chars = MALLOC(len * 3 / 2 + 1, "str conv buf");
+       unsigned char* next_java_char = java_chars;
+       const unsigned char* next_in_char = chars;
+       const unsigned char* end = chars + len;
+       #define COPY_CHAR_TO_JAVA do { *next_java_char = *next_in_char; next_java_char++; next_in_char++; } while (0)
+
+       while (next_in_char < end) {
+               if (!*next_in_char) break;
+               if (!(*next_in_char & 0b10000000)) {
+                       COPY_CHAR_TO_JAVA;
+               } else if ((*next_in_char & 0b11100000) == 0b11000000) {
+                       if (next_in_char + 2 > end) { CHECK(false); break; } // bad string
+                       COPY_CHAR_TO_JAVA;
+                       COPY_CHAR_TO_JAVA;
+               } else if ((*next_in_char & 0b11110000) == 0b11100000) {
+                       if (next_in_char + 3 > end) { CHECK(false); break; } // bad string
+                       COPY_CHAR_TO_JAVA;
+                       COPY_CHAR_TO_JAVA;
+                       COPY_CHAR_TO_JAVA;
+               } else if ((*next_in_char & 0b11111000) == 0b11110000) {
+                       if (next_in_char + 4 > end) { CHECK(false); break; } // bad string
+                       uint32_t codepoint = 0;
+                       codepoint |= (((uint32_t)*(next_in_char    )) & 0b00000111) << 18;
+                       codepoint |= (((uint32_t)*(next_in_char + 1)) & 0b00111111) << 12;
+                       codepoint |= (((uint32_t)*(next_in_char + 2)) & 0b00111111) << 6;
+                       codepoint |= (((uint32_t)*(next_in_char + 3)) & 0b00111111) << 0;
+                       codepoint -= 0x10000;
+                       *next_java_char = 0b11101101;
+                       next_java_char++;
+                       *next_java_char = 0b10100000 | ((codepoint >> 16) & 0b00001111);
+                       next_java_char++;
+                       *next_java_char = 0b10000000 | ((codepoint >> 10) & 0b00111111);
+                       next_java_char++;
+                       *next_java_char = 0b11101101;
+                       next_java_char++;
+                       *next_java_char = 0b10110000 | ((codepoint >>  6) & 0b00001111);
+                       next_java_char++;
+                       *next_java_char = 0b10000000 | ((codepoint >>  0) & 0b00111111);
+                       next_java_char++;
+                       next_in_char += 4;
+               } else {
+                       // Bad string
+                       CHECK(false);
+                       break;
+               }
+       }
+       *next_java_char = 0;
+       jstring ret = (*env)->NewStringUTF(env, java_chars);
+       FREE(java_chars);
        return ret;
 }
 static inline LDKStr java_to_owned_str(JNIEnv *env, jstring str) {
        uint64_t str_len = (*env)->GetStringUTFLength(env, str);
-       char* newchars = MALLOC(str_len + 1, "String chars");
-       const char* jchars = (*env)->GetStringUTFChars(env, str, NULL);
-       memcpy(newchars, jchars, str_len);
-       newchars[str_len] = 0;
+       // Java uses "Modified UTF-8" rather than UTF-8. This requires special
+       // handling for codepoints above 0xFFFF, which we implement below.
+       unsigned char* newchars = MALLOC(str_len, "String chars");
+       unsigned char* next_newchar = newchars;
+       uint64_t utf8_len = 0;
+
+       const unsigned char* jchars = (*env)->GetStringUTFChars(env, str, NULL);
+       const unsigned char* next_char = jchars;
+       const unsigned char* end = jchars + str_len;
+
+       #define COPY_CHAR_FROM_JAVA do { *next_newchar = *next_char; next_newchar++; next_char++; utf8_len++; } while (0)
+
+       while (next_char < end) {
+               if (!(*next_char & 0b10000000)) {
+                       CHECK(*next_char != 0); // Bad Modified UTF-8 string, but we'll just cut here
+                       COPY_CHAR_FROM_JAVA;
+               } else if ((*next_char & 0b11100000) == 0b11000000) {
+                       if (next_char + 2 > end) { CHECK(false); break; } // bad string
+                       uint16_t codepoint = 0;
+                       codepoint |= (((uint16_t)(*next_char & 0x1f)) << 6);
+                       codepoint |= *(next_char + 1) & 0x3f;
+                       if (codepoint == 0) {
+                               // We should really never get null codepoints, but java allows them.
+                               // Just skip it.
+                               next_char += 2;
+                       } else {
+                               COPY_CHAR_FROM_JAVA;
+                               COPY_CHAR_FROM_JAVA;
+                       }
+               } else if ((*next_char & 0b11110000) == 0b11100000) {
+                       if (next_char + 3 > end) { CHECK(false); break; } // bad string
+                       if (*next_char == 0b11101101 && (*(next_char + 1) & 0b11110000) == 0b10100000) {
+                               // Surrogate code unit shoul indicate we have a codepoint above
+                               // 0xFFFF, which is where Modified UTF-8 and UTF-8 diverge.
+                               if (next_char + 6 > end) { CHECK(false); break; } // bad string
+                               CHECK(*(next_char + 3) == 0b11101101);
+                               CHECK((*(next_char + 4) & 0b11110000) == 0b10110000);
+                               // Calculate the codepoint per https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html#wp16542
+                               uint32_t codepoint = 0x10000;
+                               codepoint += ((((uint32_t)*(next_char + 1)) & 0x0f) << 16);
+                               codepoint += ((((uint32_t)*(next_char + 2)) & 0x3f) << 10);
+                               codepoint += ((((uint32_t)*(next_char + 4)) & 0x0f) <<  6);
+                               codepoint +=  (((uint32_t)*(next_char + 5)) & 0x3f);
+                               *next_newchar = 0b11110000 | ((codepoint >> 18) &    0b111);
+                               next_newchar++;
+                               *next_newchar = 0b10000000 | ((codepoint >> 12) & 0b111111);
+                               next_newchar++;
+                               *next_newchar = 0b10000000 | ((codepoint >>  6) & 0b111111);
+                               next_newchar++;
+                               *next_newchar = 0b10000000 | ( codepoint        & 0b111111);
+                               next_newchar++;
+                               next_char += 6;
+                               utf8_len += 4;
+                       } else {
+                               COPY_CHAR_FROM_JAVA;
+                               COPY_CHAR_FROM_JAVA;
+                               COPY_CHAR_FROM_JAVA;
+                       }
+               } else {
+                       // Bad string
+                       CHECK(false);
+                       break;
+               }
+       }
        (*env)->ReleaseStringUTFChars(env, str, jchars);
        LDKStr res = {
                .chars = newchars,
-               .len = str_len,
+               .len = utf8_len,
                .chars_is_owned = true
        };
        return res;
@@ -438,7 +546,7 @@ static inline LDKChannelMonitorUpdateStatus LDKChannelMonitorUpdateStatus_from_j
        switch (ord) {
                case 0: return LDKChannelMonitorUpdateStatus_Completed;
                case 1: return LDKChannelMonitorUpdateStatus_InProgress;
-               case 2: return LDKChannelMonitorUpdateStatus_PermanentFailure;
+               case 2: return LDKChannelMonitorUpdateStatus_UnrecoverableError;
        }
        (*env)->FatalError(env, "A call to ChannelMonitorUpdateStatus.ordinal() from rust returned an invalid value.");
        abort(); // Unreachable, but will let the compiler know we don't return here
@@ -446,7 +554,7 @@ static inline LDKChannelMonitorUpdateStatus LDKChannelMonitorUpdateStatus_from_j
 static jclass ChannelMonitorUpdateStatus_class = NULL;
 static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_Completed = NULL;
 static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress = NULL;
-static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure = NULL;
+static jfieldID ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_enums_ChannelMonitorUpdateStatus_init (JNIEnv *env, jclass clz) {
        ChannelMonitorUpdateStatus_class = (*env)->NewGlobalRef(env, clz);
        CHECK(ChannelMonitorUpdateStatus_class != NULL);
@@ -454,8 +562,8 @@ JNIEXPORT void JNICALL Java_org_ldk_enums_ChannelMonitorUpdateStatus_init (JNIEn
        CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_Completed != NULL);
        ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress = (*env)->GetStaticFieldID(env, ChannelMonitorUpdateStatus_class, "LDKChannelMonitorUpdateStatus_InProgress", "Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
        CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress != NULL);
-       ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure = (*env)->GetStaticFieldID(env, ChannelMonitorUpdateStatus_class, "LDKChannelMonitorUpdateStatus_PermanentFailure", "Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
-       CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure != NULL);
+       ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError = (*env)->GetStaticFieldID(env, ChannelMonitorUpdateStatus_class, "LDKChannelMonitorUpdateStatus_UnrecoverableError", "Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       CHECK(ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError != NULL);
 }
 static inline jclass LDKChannelMonitorUpdateStatus_to_java(JNIEnv *env, LDKChannelMonitorUpdateStatus val) {
        switch (val) {
@@ -463,8 +571,8 @@ static inline jclass LDKChannelMonitorUpdateStatus_to_java(JNIEnv *env, LDKChann
                        return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_Completed);
                case LDKChannelMonitorUpdateStatus_InProgress:
                        return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_InProgress);
-               case LDKChannelMonitorUpdateStatus_PermanentFailure:
-                       return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_PermanentFailure);
+               case LDKChannelMonitorUpdateStatus_UnrecoverableError:
+                       return (*env)->GetStaticObjectField(env, ChannelMonitorUpdateStatus_class, ChannelMonitorUpdateStatus_LDKChannelMonitorUpdateStatus_UnrecoverableError);
                default: abort();
        }
 }
@@ -677,46 +785,6 @@ static inline jclass LDKCurrency_to_java(JNIEnv *env, LDKCurrency val) {
        }
 }
 
-static inline LDKFailureCode LDKFailureCode_from_java(JNIEnv *env, jclass clz) {
-       jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to FailureCode.ordinal() from rust threw an exception.");
-       }
-       switch (ord) {
-               case 0: return LDKFailureCode_TemporaryNodeFailure;
-               case 1: return LDKFailureCode_RequiredNodeFeatureMissing;
-               case 2: return LDKFailureCode_IncorrectOrUnknownPaymentDetails;
-       }
-       (*env)->FatalError(env, "A call to FailureCode.ordinal() from rust returned an invalid value.");
-       abort(); // Unreachable, but will let the compiler know we don't return here
-}
-static jclass FailureCode_class = NULL;
-static jfieldID FailureCode_LDKFailureCode_TemporaryNodeFailure = NULL;
-static jfieldID FailureCode_LDKFailureCode_RequiredNodeFeatureMissing = NULL;
-static jfieldID FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_enums_FailureCode_init (JNIEnv *env, jclass clz) {
-       FailureCode_class = (*env)->NewGlobalRef(env, clz);
-       CHECK(FailureCode_class != NULL);
-       FailureCode_LDKFailureCode_TemporaryNodeFailure = (*env)->GetStaticFieldID(env, FailureCode_class, "LDKFailureCode_TemporaryNodeFailure", "Lorg/ldk/enums/FailureCode;");
-       CHECK(FailureCode_LDKFailureCode_TemporaryNodeFailure != NULL);
-       FailureCode_LDKFailureCode_RequiredNodeFeatureMissing = (*env)->GetStaticFieldID(env, FailureCode_class, "LDKFailureCode_RequiredNodeFeatureMissing", "Lorg/ldk/enums/FailureCode;");
-       CHECK(FailureCode_LDKFailureCode_RequiredNodeFeatureMissing != NULL);
-       FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails = (*env)->GetStaticFieldID(env, FailureCode_class, "LDKFailureCode_IncorrectOrUnknownPaymentDetails", "Lorg/ldk/enums/FailureCode;");
-       CHECK(FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails != NULL);
-}
-static inline jclass LDKFailureCode_to_java(JNIEnv *env, LDKFailureCode val) {
-       switch (val) {
-               case LDKFailureCode_TemporaryNodeFailure:
-                       return (*env)->GetStaticObjectField(env, FailureCode_class, FailureCode_LDKFailureCode_TemporaryNodeFailure);
-               case LDKFailureCode_RequiredNodeFeatureMissing:
-                       return (*env)->GetStaticObjectField(env, FailureCode_class, FailureCode_LDKFailureCode_RequiredNodeFeatureMissing);
-               case LDKFailureCode_IncorrectOrUnknownPaymentDetails:
-                       return (*env)->GetStaticObjectField(env, FailureCode_class, FailureCode_LDKFailureCode_IncorrectOrUnknownPaymentDetails);
-               default: abort();
-       }
-}
-
 static inline LDKHTLCClaim LDKHTLCClaim_from_java(JNIEnv *env, jclass clz) {
        jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
@@ -1269,6 +1337,52 @@ static inline jclass LDKSiPrefix_to_java(JNIEnv *env, LDKSiPrefix val) {
        }
 }
 
+static inline LDKSocketAddressParseError LDKSocketAddressParseError_from_java(JNIEnv *env, jclass clz) {
+       jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to SocketAddressParseError.ordinal() from rust threw an exception.");
+       }
+       switch (ord) {
+               case 0: return LDKSocketAddressParseError_SocketAddrParse;
+               case 1: return LDKSocketAddressParseError_InvalidInput;
+               case 2: return LDKSocketAddressParseError_InvalidPort;
+               case 3: return LDKSocketAddressParseError_InvalidOnionV3;
+       }
+       (*env)->FatalError(env, "A call to SocketAddressParseError.ordinal() from rust returned an invalid value.");
+       abort(); // Unreachable, but will let the compiler know we don't return here
+}
+static jclass SocketAddressParseError_class = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_InvalidInput = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_InvalidPort = NULL;
+static jfieldID SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3 = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_enums_SocketAddressParseError_init (JNIEnv *env, jclass clz) {
+       SocketAddressParseError_class = (*env)->NewGlobalRef(env, clz);
+       CHECK(SocketAddressParseError_class != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_SocketAddrParse", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_InvalidInput = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_InvalidInput", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_InvalidInput != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_InvalidPort = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_InvalidPort", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_InvalidPort != NULL);
+       SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3 = (*env)->GetStaticFieldID(env, SocketAddressParseError_class, "LDKSocketAddressParseError_InvalidOnionV3", "Lorg/ldk/enums/SocketAddressParseError;");
+       CHECK(SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3 != NULL);
+}
+static inline jclass LDKSocketAddressParseError_to_java(JNIEnv *env, LDKSocketAddressParseError val) {
+       switch (val) {
+               case LDKSocketAddressParseError_SocketAddrParse:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_SocketAddrParse);
+               case LDKSocketAddressParseError_InvalidInput:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_InvalidInput);
+               case LDKSocketAddressParseError_InvalidPort:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_InvalidPort);
+               case LDKSocketAddressParseError_InvalidOnionV3:
+                       return (*env)->GetStaticObjectField(env, SocketAddressParseError_class, SocketAddressParseError_LDKSocketAddressParseError_InvalidOnionV3);
+               default: abort();
+       }
+}
+
 static inline LDKUtxoLookupError LDKUtxoLookupError_from_java(JNIEnv *env, jclass clz) {
        jint ord = (*env)->CallIntMethod(env, clz, ordinal_meth);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
@@ -1461,42 +1575,6 @@ uint64_t TxOut_get_value (struct LDKTxOut* thing) {      return thing->value;}JNIEXPO
        return ret_conv;
 }
 
-static jclass LDKCOption_DurationZ_Some_class = NULL;
-static jmethodID LDKCOption_DurationZ_Some_meth = NULL;
-static jclass LDKCOption_DurationZ_None_class = NULL;
-static jmethodID LDKCOption_DurationZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1DurationZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_DurationZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_DurationZ$Some"));
-       CHECK(LDKCOption_DurationZ_Some_class != NULL);
-       LDKCOption_DurationZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_DurationZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_DurationZ_Some_meth != NULL);
-       LDKCOption_DurationZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_DurationZ$None"));
-       CHECK(LDKCOption_DurationZ_None_class != NULL);
-       LDKCOption_DurationZ_None_meth = (*env)->GetMethodID(env, LDKCOption_DurationZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_DurationZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1DurationZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_DurationZ *obj = (LDKCOption_DurationZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_DurationZ_Some: {
-                       int64_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_DurationZ_Some_class, LDKCOption_DurationZ_Some_meth, some_conv);
-               }
-               case LDKCOption_DurationZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_DurationZ_None_class, LDKCOption_DurationZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline LDKCVec_BlindedPathZ CVec_BlindedPathZ_clone(const LDKCVec_BlindedPathZ *orig) {
-       LDKCVec_BlindedPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPath) * orig->datalen, "LDKCVec_BlindedPathZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = BlindedPath_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static jclass LDKCOption_u64Z_Some_class = NULL;
 static jmethodID LDKCOption_u64Z_Some_meth = NULL;
 static jclass LDKCOption_u64Z_None_class = NULL;
@@ -1526,6 +1604,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u64Z_1ref_1from
                default: abort();
        }
 }
+static inline LDKCVec_BlindedPathZ CVec_BlindedPathZ_clone(const LDKCVec_BlindedPathZ *orig) {
+       LDKCVec_BlindedPathZ ret = { .data = MALLOC(sizeof(LDKBlindedPath) * orig->datalen, "LDKCVec_BlindedPathZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = BlindedPath_clone(&orig->data[i]);
+       }
+       return ret;
+}
 static inline struct LDKRefund CResult_RefundBolt12ParseErrorZ_get_ok(LDKCResult_RefundBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKRefund ret = *owner->contents.result;
        ret.is_owned = false;
@@ -1554,6 +1639,139 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseE
        return ret_ref;
 }
 
+static jclass LDKRetry_Attempts_class = NULL;
+static jmethodID LDKRetry_Attempts_meth = NULL;
+static jclass LDKRetry_Timeout_class = NULL;
+static jmethodID LDKRetry_Timeout_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKRetry_init (JNIEnv *env, jclass clz) {
+       LDKRetry_Attempts_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Attempts"));
+       CHECK(LDKRetry_Attempts_class != NULL);
+       LDKRetry_Attempts_meth = (*env)->GetMethodID(env, LDKRetry_Attempts_class, "<init>", "(I)V");
+       CHECK(LDKRetry_Attempts_meth != NULL);
+       LDKRetry_Timeout_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Timeout"));
+       CHECK(LDKRetry_Timeout_class != NULL);
+       LDKRetry_Timeout_meth = (*env)->GetMethodID(env, LDKRetry_Timeout_class, "<init>", "(J)V");
+       CHECK(LDKRetry_Timeout_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRetry_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKRetry *obj = (LDKRetry*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKRetry_Attempts: {
+                       int32_t attempts_conv = obj->attempts;
+                       return (*env)->NewObject(env, LDKRetry_Attempts_class, LDKRetry_Attempts_meth, attempts_conv);
+               }
+               case LDKRetry_Timeout: {
+                       int64_t timeout_conv = obj->timeout;
+                       return (*env)->NewObject(env, LDKRetry_Timeout_class, LDKRetry_Timeout_meth, timeout_conv);
+               }
+               default: abort();
+       }
+}
+static jclass LDKDecodeError_UnknownVersion_class = NULL;
+static jmethodID LDKDecodeError_UnknownVersion_meth = NULL;
+static jclass LDKDecodeError_UnknownRequiredFeature_class = NULL;
+static jmethodID LDKDecodeError_UnknownRequiredFeature_meth = NULL;
+static jclass LDKDecodeError_InvalidValue_class = NULL;
+static jmethodID LDKDecodeError_InvalidValue_meth = NULL;
+static jclass LDKDecodeError_ShortRead_class = NULL;
+static jmethodID LDKDecodeError_ShortRead_meth = NULL;
+static jclass LDKDecodeError_BadLengthDescriptor_class = NULL;
+static jmethodID LDKDecodeError_BadLengthDescriptor_meth = NULL;
+static jclass LDKDecodeError_Io_class = NULL;
+static jmethodID LDKDecodeError_Io_meth = NULL;
+static jclass LDKDecodeError_UnsupportedCompression_class = NULL;
+static jmethodID LDKDecodeError_UnsupportedCompression_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKDecodeError_init (JNIEnv *env, jclass clz) {
+       LDKDecodeError_UnknownVersion_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownVersion"));
+       CHECK(LDKDecodeError_UnknownVersion_class != NULL);
+       LDKDecodeError_UnknownVersion_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownVersion_class, "<init>", "()V");
+       CHECK(LDKDecodeError_UnknownVersion_meth != NULL);
+       LDKDecodeError_UnknownRequiredFeature_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownRequiredFeature"));
+       CHECK(LDKDecodeError_UnknownRequiredFeature_class != NULL);
+       LDKDecodeError_UnknownRequiredFeature_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownRequiredFeature_class, "<init>", "()V");
+       CHECK(LDKDecodeError_UnknownRequiredFeature_meth != NULL);
+       LDKDecodeError_InvalidValue_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$InvalidValue"));
+       CHECK(LDKDecodeError_InvalidValue_class != NULL);
+       LDKDecodeError_InvalidValue_meth = (*env)->GetMethodID(env, LDKDecodeError_InvalidValue_class, "<init>", "()V");
+       CHECK(LDKDecodeError_InvalidValue_meth != NULL);
+       LDKDecodeError_ShortRead_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$ShortRead"));
+       CHECK(LDKDecodeError_ShortRead_class != NULL);
+       LDKDecodeError_ShortRead_meth = (*env)->GetMethodID(env, LDKDecodeError_ShortRead_class, "<init>", "()V");
+       CHECK(LDKDecodeError_ShortRead_meth != NULL);
+       LDKDecodeError_BadLengthDescriptor_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$BadLengthDescriptor"));
+       CHECK(LDKDecodeError_BadLengthDescriptor_class != NULL);
+       LDKDecodeError_BadLengthDescriptor_meth = (*env)->GetMethodID(env, LDKDecodeError_BadLengthDescriptor_class, "<init>", "()V");
+       CHECK(LDKDecodeError_BadLengthDescriptor_meth != NULL);
+       LDKDecodeError_Io_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$Io"));
+       CHECK(LDKDecodeError_Io_class != NULL);
+       LDKDecodeError_Io_meth = (*env)->GetMethodID(env, LDKDecodeError_Io_class, "<init>", "(Lorg/ldk/enums/IOError;)V");
+       CHECK(LDKDecodeError_Io_meth != NULL);
+       LDKDecodeError_UnsupportedCompression_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnsupportedCompression"));
+       CHECK(LDKDecodeError_UnsupportedCompression_class != NULL);
+       LDKDecodeError_UnsupportedCompression_meth = (*env)->GetMethodID(env, LDKDecodeError_UnsupportedCompression_class, "<init>", "()V");
+       CHECK(LDKDecodeError_UnsupportedCompression_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKDecodeError_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKDecodeError_UnknownVersion: {
+                       return (*env)->NewObject(env, LDKDecodeError_UnknownVersion_class, LDKDecodeError_UnknownVersion_meth);
+               }
+               case LDKDecodeError_UnknownRequiredFeature: {
+                       return (*env)->NewObject(env, LDKDecodeError_UnknownRequiredFeature_class, LDKDecodeError_UnknownRequiredFeature_meth);
+               }
+               case LDKDecodeError_InvalidValue: {
+                       return (*env)->NewObject(env, LDKDecodeError_InvalidValue_class, LDKDecodeError_InvalidValue_meth);
+               }
+               case LDKDecodeError_ShortRead: {
+                       return (*env)->NewObject(env, LDKDecodeError_ShortRead_class, LDKDecodeError_ShortRead_meth);
+               }
+               case LDKDecodeError_BadLengthDescriptor: {
+                       return (*env)->NewObject(env, LDKDecodeError_BadLengthDescriptor_class, LDKDecodeError_BadLengthDescriptor_meth);
+               }
+               case LDKDecodeError_Io: {
+                       jclass io_conv = LDKIOError_to_java(env, obj->io);
+                       return (*env)->NewObject(env, LDKDecodeError_Io_class, LDKDecodeError_Io_meth, io_conv);
+               }
+               case LDKDecodeError_UnsupportedCompression: {
+                       return (*env)->NewObject(env, LDKDecodeError_UnsupportedCompression_class, LDKDecodeError_UnsupportedCompression_meth);
+               }
+               default: abort();
+       }
+}
+static inline struct LDKRetry CResult_RetryDecodeErrorZ_get_ok(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return Retry_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RetryDecodeErrorZ* owner_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(owner);
+       LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
+       *ret_copy = CResult_RetryDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_RetryDecodeErrorZ_get_err(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RetryDecodeErrorZ* owner_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_RetryDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static jclass LDKAPIError_APIMisuseError_class = NULL;
 static jmethodID LDKAPIError_APIMisuseError_meth = NULL;
 static jclass LDKAPIError_FeeRateTooHigh_class = NULL;
@@ -1670,32 +1888,32 @@ static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *or
        }
        return ret;
 }
-static jclass LDKCOption_PaymentSecretZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentSecretZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentSecretZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentSecretZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentSecretZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentSecretZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentSecretZ$Some"));
-       CHECK(LDKCOption_PaymentSecretZ_Some_class != NULL);
-       LDKCOption_PaymentSecretZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentSecretZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentSecretZ_Some_meth != NULL);
-       LDKCOption_PaymentSecretZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentSecretZ$None"));
-       CHECK(LDKCOption_PaymentSecretZ_None_class != NULL);
-       LDKCOption_PaymentSecretZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentSecretZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentSecretZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentSecretZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentSecretZ *obj = (LDKCOption_PaymentSecretZ*)untag_ptr(ptr);
+static jclass LDKCOption_ThirtyTwoBytesZ_Some_class = NULL;
+static jmethodID LDKCOption_ThirtyTwoBytesZ_Some_meth = NULL;
+static jclass LDKCOption_ThirtyTwoBytesZ_None_class = NULL;
+static jmethodID LDKCOption_ThirtyTwoBytesZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ThirtyTwoBytesZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_ThirtyTwoBytesZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ThirtyTwoBytesZ$Some"));
+       CHECK(LDKCOption_ThirtyTwoBytesZ_Some_class != NULL);
+       LDKCOption_ThirtyTwoBytesZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ThirtyTwoBytesZ_Some_class, "<init>", "([B)V");
+       CHECK(LDKCOption_ThirtyTwoBytesZ_Some_meth != NULL);
+       LDKCOption_ThirtyTwoBytesZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ThirtyTwoBytesZ$None"));
+       CHECK(LDKCOption_ThirtyTwoBytesZ_None_class != NULL);
+       LDKCOption_ThirtyTwoBytesZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ThirtyTwoBytesZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_ThirtyTwoBytesZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ThirtyTwoBytesZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_ThirtyTwoBytesZ *obj = (LDKCOption_ThirtyTwoBytesZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_PaymentSecretZ_Some: {
+               case LDKCOption_ThirtyTwoBytesZ_Some: {
                        int8_tArray some_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentSecretZ_Some_class, LDKCOption_PaymentSecretZ_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_ThirtyTwoBytesZ_Some_class, LDKCOption_ThirtyTwoBytesZ_Some_meth, some_arr);
                }
-               case LDKCOption_PaymentSecretZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentSecretZ_None_class, LDKCOption_PaymentSecretZ_None_meth);
+               case LDKCOption_ThirtyTwoBytesZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_ThirtyTwoBytesZ_None_class, LDKCOption_ThirtyTwoBytesZ_None_meth);
                }
                default: abort();
        }
@@ -1731,85 +1949,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1u8ZZ_1ref
                default: abort();
        }
 }
-static jclass LDKDecodeError_UnknownVersion_class = NULL;
-static jmethodID LDKDecodeError_UnknownVersion_meth = NULL;
-static jclass LDKDecodeError_UnknownRequiredFeature_class = NULL;
-static jmethodID LDKDecodeError_UnknownRequiredFeature_meth = NULL;
-static jclass LDKDecodeError_InvalidValue_class = NULL;
-static jmethodID LDKDecodeError_InvalidValue_meth = NULL;
-static jclass LDKDecodeError_ShortRead_class = NULL;
-static jmethodID LDKDecodeError_ShortRead_meth = NULL;
-static jclass LDKDecodeError_BadLengthDescriptor_class = NULL;
-static jmethodID LDKDecodeError_BadLengthDescriptor_meth = NULL;
-static jclass LDKDecodeError_Io_class = NULL;
-static jmethodID LDKDecodeError_Io_meth = NULL;
-static jclass LDKDecodeError_UnsupportedCompression_class = NULL;
-static jmethodID LDKDecodeError_UnsupportedCompression_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKDecodeError_init (JNIEnv *env, jclass clz) {
-       LDKDecodeError_UnknownVersion_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownVersion"));
-       CHECK(LDKDecodeError_UnknownVersion_class != NULL);
-       LDKDecodeError_UnknownVersion_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownVersion_class, "<init>", "()V");
-       CHECK(LDKDecodeError_UnknownVersion_meth != NULL);
-       LDKDecodeError_UnknownRequiredFeature_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnknownRequiredFeature"));
-       CHECK(LDKDecodeError_UnknownRequiredFeature_class != NULL);
-       LDKDecodeError_UnknownRequiredFeature_meth = (*env)->GetMethodID(env, LDKDecodeError_UnknownRequiredFeature_class, "<init>", "()V");
-       CHECK(LDKDecodeError_UnknownRequiredFeature_meth != NULL);
-       LDKDecodeError_InvalidValue_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$InvalidValue"));
-       CHECK(LDKDecodeError_InvalidValue_class != NULL);
-       LDKDecodeError_InvalidValue_meth = (*env)->GetMethodID(env, LDKDecodeError_InvalidValue_class, "<init>", "()V");
-       CHECK(LDKDecodeError_InvalidValue_meth != NULL);
-       LDKDecodeError_ShortRead_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$ShortRead"));
-       CHECK(LDKDecodeError_ShortRead_class != NULL);
-       LDKDecodeError_ShortRead_meth = (*env)->GetMethodID(env, LDKDecodeError_ShortRead_class, "<init>", "()V");
-       CHECK(LDKDecodeError_ShortRead_meth != NULL);
-       LDKDecodeError_BadLengthDescriptor_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$BadLengthDescriptor"));
-       CHECK(LDKDecodeError_BadLengthDescriptor_class != NULL);
-       LDKDecodeError_BadLengthDescriptor_meth = (*env)->GetMethodID(env, LDKDecodeError_BadLengthDescriptor_class, "<init>", "()V");
-       CHECK(LDKDecodeError_BadLengthDescriptor_meth != NULL);
-       LDKDecodeError_Io_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$Io"));
-       CHECK(LDKDecodeError_Io_class != NULL);
-       LDKDecodeError_Io_meth = (*env)->GetMethodID(env, LDKDecodeError_Io_class, "<init>", "(Lorg/ldk/enums/IOError;)V");
-       CHECK(LDKDecodeError_Io_meth != NULL);
-       LDKDecodeError_UnsupportedCompression_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKDecodeError$UnsupportedCompression"));
-       CHECK(LDKDecodeError_UnsupportedCompression_class != NULL);
-       LDKDecodeError_UnsupportedCompression_meth = (*env)->GetMethodID(env, LDKDecodeError_UnsupportedCompression_class, "<init>", "()V");
-       CHECK(LDKDecodeError_UnsupportedCompression_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKDecodeError_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKDecodeError *obj = (LDKDecodeError*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKDecodeError_UnknownVersion: {
-                       return (*env)->NewObject(env, LDKDecodeError_UnknownVersion_class, LDKDecodeError_UnknownVersion_meth);
-               }
-               case LDKDecodeError_UnknownRequiredFeature: {
-                       return (*env)->NewObject(env, LDKDecodeError_UnknownRequiredFeature_class, LDKDecodeError_UnknownRequiredFeature_meth);
-               }
-               case LDKDecodeError_InvalidValue: {
-                       return (*env)->NewObject(env, LDKDecodeError_InvalidValue_class, LDKDecodeError_InvalidValue_meth);
-               }
-               case LDKDecodeError_ShortRead: {
-                       return (*env)->NewObject(env, LDKDecodeError_ShortRead_class, LDKDecodeError_ShortRead_meth);
-               }
-               case LDKDecodeError_BadLengthDescriptor: {
-                       return (*env)->NewObject(env, LDKDecodeError_BadLengthDescriptor_class, LDKDecodeError_BadLengthDescriptor_meth);
-               }
-               case LDKDecodeError_Io: {
-                       jclass io_conv = LDKIOError_to_java(env, obj->io);
-                       return (*env)->NewObject(env, LDKDecodeError_Io_class, LDKDecodeError_Io_meth, io_conv);
-               }
-               case LDKDecodeError_UnsupportedCompression: {
-                       return (*env)->NewObject(env, LDKDecodeError_UnsupportedCompression_class, LDKDecodeError_UnsupportedCompression_meth);
-               }
-               default: abort();
-       }
-}
 static inline struct LDKRecipientOnionFields CResult_RecipientOnionFieldsDecodeErrorZ_get_ok(LDKCResult_RecipientOnionFieldsDecodeErrorZ *NONNULL_PTR owner){
        LDKRecipientOnionFields ret = *owner->contents.result;
        ret.is_owned = false;
@@ -1836,6 +1975,122 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFiel
        return ret_ref;
 }
 
+static inline uint64_t C2Tuple_u64CVec_u8ZZ_get_a(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR owner){
+       return owner->a;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64CVec_u8ZZ* owner_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(owner);
+       int64_t ret_conv = C2Tuple_u64CVec_u8ZZ_get_a(owner_conv);
+       return ret_conv;
+}
+
+static inline struct LDKCVec_u8Z C2Tuple_u64CVec_u8ZZ_get_b(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR owner){
+       return CVec_u8Z_clone(&owner->b);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64CVec_u8ZZ* owner_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_u64CVec_u8ZZ_get_b(owner_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;
+}
+
+static inline LDKCVec_C2Tuple_u64CVec_u8ZZZ CVec_C2Tuple_u64CVec_u8ZZZ_clone(const LDKCVec_C2Tuple_u64CVec_u8ZZZ *orig) {
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ) * orig->datalen, "LDKCVec_C2Tuple_u64CVec_u8ZZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_u64CVec_u8ZZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKRecipientOnionFields CResult_RecipientOnionFieldsNoneZ_get_ok(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR owner){
+       LDKRecipientOnionFields ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecipientOnionFieldsNoneZ* owner_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(owner);
+       LDKRecipientOnionFields ret_var = CResult_RecipientOnionFieldsNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline void CResult_RecipientOnionFieldsNoneZ_get_err(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecipientOnionFieldsNoneZ* owner_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(owner);
+       CResult_RecipientOnionFieldsNoneZ_get_err(owner_conv);
+}
+
+static inline LDKCVec_ThirtyTwoBytesZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_ThirtyTwoBytesZ *orig) {
+       LDKCVec_ThirtyTwoBytesZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_ThirtyTwoBytesZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static jclass LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class = NULL;
+static jmethodID LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth = NULL;
+static jclass LDKCOption_CVec_ThirtyTwoBytesZZ_None_class = NULL;
+static jmethodID LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1ThirtyTwoBytesZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ThirtyTwoBytesZZ$Some"));
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class != NULL);
+       LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class, "<init>", "([[B)V");
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth != NULL);
+       LDKCOption_CVec_ThirtyTwoBytesZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ThirtyTwoBytesZZ$None"));
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_None_class != NULL);
+       LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ThirtyTwoBytesZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1ThirtyTwoBytesZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ *obj = (LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_CVec_ThirtyTwoBytesZZ_Some: {
+                       LDKCVec_ThirtyTwoBytesZ some_var = obj->some;
+                       jobjectArray some_arr = NULL;
+                       some_arr = (*env)->NewObjectArray(env, some_var.datalen, arr_of_B_clz, NULL);
+                       ;
+                       for (size_t i = 0; i < some_var.datalen; i++) {
+                               int8_tArray some_conv_8_arr = (*env)->NewByteArray(env, 32);
+                               (*env)->SetByteArrayRegion(env, some_conv_8_arr, 0, 32, some_var.data[i].data);
+                               (*env)->SetObjectArrayElement(env, some_arr, i, some_conv_8_arr);
+                       }
+                       
+                       return (*env)->NewObject(env, LDKCOption_CVec_ThirtyTwoBytesZZ_Some_class, LDKCOption_CVec_ThirtyTwoBytesZZ_Some_meth, some_arr);
+               }
+               case LDKCOption_CVec_ThirtyTwoBytesZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_CVec_ThirtyTwoBytesZZ_None_class, LDKCOption_CVec_ThirtyTwoBytesZZ_None_meth);
+               }
+               default: abort();
+       }
+}
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesNoneZ_get_ok(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return ThirtyTwoBytes_clone(&*owner->contents.result);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesNoneZ* owner_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesNoneZ_get_ok(owner_conv).data);
+       return ret_arr;
+}
+
+static inline void CResult_ThirtyTwoBytesNoneZ_get_err(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesNoneZ* owner_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(owner);
+       CResult_ThirtyTwoBytesNoneZ_get_err(owner_conv);
+}
+
 static inline struct LDKBlindedPayInfo CResult_BlindedPayInfoDecodeErrorZ_get_ok(LDKCResult_BlindedPayInfoDecodeErrorZ *NONNULL_PTR owner){
        LDKBlindedPayInfo ret = *owner->contents.result;
        ret.is_owned = false;
@@ -2003,83 +2258,76 @@ static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        }
        return ret;
 }
-static jclass LDKCOption_PackedLockTimeZ_Some_class = NULL;
-static jmethodID LDKCOption_PackedLockTimeZ_Some_meth = NULL;
-static jclass LDKCOption_PackedLockTimeZ_None_class = NULL;
-static jmethodID LDKCOption_PackedLockTimeZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PackedLockTimeZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PackedLockTimeZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PackedLockTimeZ$Some"));
-       CHECK(LDKCOption_PackedLockTimeZ_Some_class != NULL);
-       LDKCOption_PackedLockTimeZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PackedLockTimeZ_Some_class, "<init>", "(I)V");
-       CHECK(LDKCOption_PackedLockTimeZ_Some_meth != NULL);
-       LDKCOption_PackedLockTimeZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PackedLockTimeZ$None"));
-       CHECK(LDKCOption_PackedLockTimeZ_None_class != NULL);
-       LDKCOption_PackedLockTimeZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PackedLockTimeZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PackedLockTimeZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PackedLockTimeZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PackedLockTimeZ *obj = (LDKCOption_PackedLockTimeZ*)untag_ptr(ptr);
+static jclass LDKCOption_u32Z_Some_class = NULL;
+static jmethodID LDKCOption_u32Z_Some_meth = NULL;
+static jclass LDKCOption_u32Z_None_class = NULL;
+static jmethodID LDKCOption_u32Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u32Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_u32Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$Some"));
+       CHECK(LDKCOption_u32Z_Some_class != NULL);
+       LDKCOption_u32Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_Some_class, "<init>", "(I)V");
+       CHECK(LDKCOption_u32Z_Some_meth != NULL);
+       LDKCOption_u32Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$None"));
+       CHECK(LDKCOption_u32Z_None_class != NULL);
+       LDKCOption_u32Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_u32Z_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_u32Z *obj = (LDKCOption_u32Z*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_PackedLockTimeZ_Some: {
+               case LDKCOption_u32Z_Some: {
                        int32_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_PackedLockTimeZ_Some_class, LDKCOption_PackedLockTimeZ_Some_meth, some_conv);
+                       return (*env)->NewObject(env, LDKCOption_u32Z_Some_class, LDKCOption_u32Z_Some_meth, some_conv);
                }
-               case LDKCOption_PackedLockTimeZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PackedLockTimeZ_None_class, LDKCOption_PackedLockTimeZ_None_meth);
+               case LDKCOption_u32Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_u32Z_None_class, LDKCOption_u32Z_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKCVec_u8Z C2Tuple_PartiallySignedTransactionusizeZ_get_a(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z C2Tuple_CVec_u8ZusizeZ_get_a(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR owner){
        return CVec_u8Z_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* owner_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = C2Tuple_PartiallySignedTransactionusizeZ_get_a(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_CVec_u8ZusizeZ* owner_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_CVec_u8ZusizeZ_get_a(owner_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;
 }
 
-static inline uintptr_t C2Tuple_PartiallySignedTransactionusizeZ_get_b(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR owner){
+static inline uintptr_t C2Tuple_CVec_u8ZusizeZ_get_b(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR owner){
        return owner->b;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* owner_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(owner);
-       int64_t ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_CVec_u8ZusizeZ* owner_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(owner);
+       int64_t ret_conv = C2Tuple_CVec_u8ZusizeZ_get_b(owner_conv);
        return ret_conv;
 }
 
-static inline struct LDKC2Tuple_PartiallySignedTransactionusizeZ CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_CVec_u8ZusizeZ CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_PartiallySignedTransactionusizeZ_clone(&*owner->contents.result);
+       return C2Tuple_CVec_u8ZusizeZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline void CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR owner){
+static inline void CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* owner_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err(owner_conv);
 }
 
-static inline LDKCVec_PaymentPreimageZ CVec_PaymentPreimageZ_clone(const LDKCVec_PaymentPreimageZ *orig) {
-       LDKCVec_PaymentPreimageZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_PaymentPreimageZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static inline void CResult_NoneNoneZ_get_ok(LDKCResult_NoneNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -2098,22 +2346,22 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1get_1err(J
        CResult_NoneNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKSignature C2Tuple_SignatureCVec_SignatureZZ_get_a(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR owner){
+static inline struct LDKECDSASignature C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* owner_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* owner_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, C2Tuple_SignatureCVec_SignatureZZ_get_a(owner_conv).compact_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a(owner_conv).compact_form);
        return ret_arr;
 }
 
-static inline struct LDKCVec_SignatureZ C2Tuple_SignatureCVec_SignatureZZ_get_b(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR owner){
+static inline struct LDKCVec_ECDSASignatureZ C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR owner){
        return owner->b;
 }
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* owner_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(owner);
-       LDKCVec_SignatureZ ret_var = C2Tuple_SignatureCVec_SignatureZZ_get_b(owner_conv);
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* owner_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(owner);
+       LDKCVec_ECDSASignatureZ ret_var = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b(owner_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -2126,44 +2374,44 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec
        return ret_arr;
 }
 
-static inline struct LDKC2Tuple_SignatureCVec_SignatureZZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_SignatureCVec_SignatureZZ_clone(&*owner->contents.result);
+       return C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR owner){
+static inline void CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* owner_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKSignature CResult_SignatureNoneZ_get_ok(LDKCResult_SignatureNoneZ *NONNULL_PTR owner){
+static inline struct LDKECDSASignature CResult_ECDSASignatureNoneZ_get_ok(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SignatureNoneZ* owner_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ECDSASignatureNoneZ* owner_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CResult_SignatureNoneZ_get_ok(owner_conv).compact_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CResult_ECDSASignatureNoneZ_get_ok(owner_conv).compact_form);
        return ret_arr;
 }
 
-static inline void CResult_SignatureNoneZ_get_err(LDKCResult_SignatureNoneZ *NONNULL_PTR owner){
+static inline void CResult_ECDSASignatureNoneZ_get_err(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SignatureNoneZ* owner_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(owner);
-       CResult_SignatureNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ECDSASignatureNoneZ* owner_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(owner);
+       CResult_ECDSASignatureNoneZ_get_err(owner_conv);
 }
 
 static inline struct LDKPublicKey CResult_PublicKeyNoneZ_get_ok(LDKCResult_PublicKeyNoneZ *NONNULL_PTR owner){
@@ -2186,73 +2434,73 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1get_1
        CResult_PublicKeyNoneZ_get_err(owner_conv);
 }
 
-static jclass LDKCOption_ScalarZ_Some_class = NULL;
-static jmethodID LDKCOption_ScalarZ_Some_meth = NULL;
-static jclass LDKCOption_ScalarZ_None_class = NULL;
-static jmethodID LDKCOption_ScalarZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ScalarZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_ScalarZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScalarZ$Some"));
-       CHECK(LDKCOption_ScalarZ_Some_class != NULL);
-       LDKCOption_ScalarZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ScalarZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_ScalarZ_Some_meth != NULL);
-       LDKCOption_ScalarZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScalarZ$None"));
-       CHECK(LDKCOption_ScalarZ_None_class != NULL);
-       LDKCOption_ScalarZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ScalarZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_ScalarZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ScalarZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_ScalarZ *obj = (LDKCOption_ScalarZ*)untag_ptr(ptr);
+static jclass LDKCOption_BigEndianScalarZ_Some_class = NULL;
+static jmethodID LDKCOption_BigEndianScalarZ_Some_meth = NULL;
+static jclass LDKCOption_BigEndianScalarZ_None_class = NULL;
+static jmethodID LDKCOption_BigEndianScalarZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1BigEndianScalarZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_BigEndianScalarZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BigEndianScalarZ$Some"));
+       CHECK(LDKCOption_BigEndianScalarZ_Some_class != NULL);
+       LDKCOption_BigEndianScalarZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_BigEndianScalarZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_BigEndianScalarZ_Some_meth != NULL);
+       LDKCOption_BigEndianScalarZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BigEndianScalarZ$None"));
+       CHECK(LDKCOption_BigEndianScalarZ_None_class != NULL);
+       LDKCOption_BigEndianScalarZ_None_meth = (*env)->GetMethodID(env, LDKCOption_BigEndianScalarZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_BigEndianScalarZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1BigEndianScalarZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_BigEndianScalarZ *obj = (LDKCOption_BigEndianScalarZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_ScalarZ_Some: {
+               case LDKCOption_BigEndianScalarZ_Some: {
                        LDKBigEndianScalar* some_ref = &obj->some;
-                       return (*env)->NewObject(env, LDKCOption_ScalarZ_Some_class, LDKCOption_ScalarZ_Some_meth, tag_ptr(some_ref, false));
+                       return (*env)->NewObject(env, LDKCOption_BigEndianScalarZ_Some_class, LDKCOption_BigEndianScalarZ_Some_meth, tag_ptr(some_ref, false));
                }
-               case LDKCOption_ScalarZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_ScalarZ_None_class, LDKCOption_ScalarZ_None_meth);
+               case LDKCOption_BigEndianScalarZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_BigEndianScalarZ_None_class, LDKCOption_BigEndianScalarZ_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKThirtyTwoBytes CResult_SharedSecretNoneZ_get_ok(LDKCResult_SharedSecretNoneZ *NONNULL_PTR owner){
+static inline struct LDKRecoverableSignature CResult_RecoverableSignatureNoneZ_get_ok(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return ThirtyTwoBytes_clone(&*owner->contents.result);
+       return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SharedSecretNoneZ* owner_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_SharedSecretNoneZ_get_ok(owner_conv).data);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 68);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 68, CResult_RecoverableSignatureNoneZ_get_ok(owner_conv).serialized_form);
        return ret_arr;
 }
 
-static inline void CResult_SharedSecretNoneZ_get_err(LDKCResult_SharedSecretNoneZ *NONNULL_PTR owner){
+static inline void CResult_RecoverableSignatureNoneZ_get_err(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_SharedSecretNoneZ* owner_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(owner);
-       CResult_SharedSecretNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
+       CResult_RecoverableSignatureNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKRecoverableSignature CResult_RecoverableSignatureNoneZ_get_ok(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
+static inline struct LDKSchnorrSignature CResult_SchnorrSignatureNoneZ_get_ok(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 68);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 68, CResult_RecoverableSignatureNoneZ_get_ok(owner_conv).serialized_form);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SchnorrSignatureNoneZ* owner_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CResult_SchnorrSignatureNoneZ_get_ok(owner_conv).compact_form);
        return ret_arr;
 }
 
-static inline void CResult_RecoverableSignatureNoneZ_get_err(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR owner){
+static inline void CResult_SchnorrSignatureNoneZ_get_err(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_RecoverableSignatureNoneZ* owner_conv = (LDKCResult_RecoverableSignatureNoneZ*)untag_ptr(owner);
-       CResult_RecoverableSignatureNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SchnorrSignatureNoneZ* owner_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(owner);
+       CResult_SchnorrSignatureNoneZ_get_err(owner_conv);
 }
 
 typedef struct LDKChannelSigner_JCalls {
@@ -2332,7 +2580,7 @@ LDKThirtyTwoBytes release_commitment_secret_LDKChannelSigner_jcall(const void* t
        }
        return ret_ref;
 }
-LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * holder_tx, LDKCVec_PaymentPreimageZ preimages) {
+LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * holder_tx, LDKCVec_ThirtyTwoBytesZ preimages) {
        LDKChannelSigner_JCalls *j_calls = (LDKChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2346,7 +2594,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKChannelSigner_jcall(const voi
        holder_tx_var = HolderCommitmentTransaction_clone(&holder_tx_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_var);
        holder_tx_ref = tag_ptr(holder_tx_var.inner, holder_tx_var.is_owned);
-       LDKCVec_PaymentPreimageZ preimages_var = preimages;
+       LDKCVec_ThirtyTwoBytesZ preimages_var = preimages;
        jobjectArray preimages_arr = NULL;
        preimages_arr = (*env)->NewObjectArray(env, preimages_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -2490,10 +2738,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelSigner_1validate_1ho
        holder_tx_conv.is_owned = ptr_is_owned(holder_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_conv);
        holder_tx_conv.is_owned = false;
-       LDKCVec_PaymentPreimageZ preimages_constr;
+       LDKCVec_ThirtyTwoBytesZ preimages_constr;
        preimages_constr.datalen = (*env)->GetArrayLength(env, preimages);
        if (preimages_constr.datalen > 0)
-               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_PaymentPreimageZ Elements");
+               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
        else
                preimages_constr.data = NULL;
        for (size_t i = 0; i < preimages_constr.datalen; i++) {
@@ -2578,7 +2826,7 @@ static void LDKEcdsaChannelSigner_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKCommitmentTransaction * commitment_tx, LDKCVec_PaymentPreimageZ preimages) {
+LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_counterparty_commitment_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKCommitmentTransaction * commitment_tx, LDKCVec_ThirtyTwoBytesZ preimages) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2592,7 +2840,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        commitment_tx_var = CommitmentTransaction_clone(&commitment_tx_var);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = tag_ptr(commitment_tx_var.inner, commitment_tx_var.is_owned);
-       LDKCVec_PaymentPreimageZ preimages_var = preimages;
+       LDKCVec_ThirtyTwoBytesZ preimages_var = preimages;
        jobjectArray preimages_arr = NULL;
        preimages_arr = (*env)->NewObjectArray(env, preimages_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -2612,7 +2860,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -2647,7 +2895,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKEcdsaChannelSigner_jcal
        }
        return ret_conv;
 }
-LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) {
+LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ sign_holder_commitment_and_htlcs_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2670,14 +2918,14 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32]) {
+LDKCResult_ECDSASignatureNoneZ sign_justice_revoked_output_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32]) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2703,14 +2951,14 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKEcdsaChannelSigner_jcal
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) {
+LDKCResult_ECDSASignatureNoneZ sign_justice_revoked_htlc_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2741,14 +2989,14 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKEcdsaChannelSigner_jcall(
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_holder_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, const LDKHTLCDescriptor * htlc_descriptor) {
+LDKCResult_ECDSASignatureNoneZ sign_holder_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, const LDKHTLCDescriptor * htlc_descriptor) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2776,14 +3024,14 @@ LDKCResult_SignatureNoneZ sign_holder_htlc_transaction_LDKEcdsaChannelSigner_jca
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, LDKPublicKey per_commitment_point, const LDKHTLCOutputInCommitment * htlc) {
+LDKCResult_ECDSASignatureNoneZ sign_counterparty_htlc_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, LDKPublicKey per_commitment_point, const LDKHTLCOutputInCommitment * htlc) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2814,14 +3062,14 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKEcdsaChannelSign
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_closing_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKClosingTransaction * closing_tx) {
+LDKCResult_ECDSASignatureNoneZ sign_closing_transaction_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKClosingTransaction * closing_tx) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2844,14 +3092,14 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKEcdsaChannelSigner_jcall(c
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction anchor_tx, uintptr_t input) {
+LDKCResult_ECDSASignatureNoneZ sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall(const void* this_arg, LDKTransaction anchor_tx, uintptr_t input) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2874,14 +3122,14 @@ LDKCResult_SignatureNoneZ sign_holder_anchor_input_LDKEcdsaChannelSigner_jcall(c
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_channel_announcement_with_funding_key_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) {
+LDKCResult_ECDSASignatureNoneZ sign_channel_announcement_with_funding_key_LDKEcdsaChannelSigner_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) {
        LDKEcdsaChannelSigner_JCalls *j_calls = (LDKEcdsaChannelSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -2904,7 +3152,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_with_funding_key_LDKEcdsaCha
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -2985,10 +3233,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        commitment_tx_conv.is_owned = ptr_is_owned(commitment_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv.is_owned = false;
-       LDKCVec_PaymentPreimageZ preimages_constr;
+       LDKCVec_ThirtyTwoBytesZ preimages_constr;
        preimages_constr.datalen = (*env)->GetArrayLength(env, preimages);
        if (preimages_constr.datalen > 0)
-               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_PaymentPreimageZ Elements");
+               preimages_constr.data = MALLOC(preimages_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
        else
                preimages_constr.data = NULL;
        for (size_t i = 0; i < preimages_constr.datalen; i++) {
@@ -2998,7 +3246,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
                (*env)->GetByteArrayRegion(env, preimages_conv_8, 0, 32, preimages_conv_8_ref.data);
                preimages_constr.data[i] = preimages_conv_8_ref;
        }
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_commitment)(this_arg_conv->this_arg, &commitment_tx_conv, preimages_constr);
        return tag_ptr(ret_conv, true);
 }
@@ -3025,7 +3273,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1h
        commitment_tx_conv.is_owned = ptr_is_owned(commitment_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv.is_owned = false;
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3043,7 +3291,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1j
        CHECK((*env)->GetArrayLength(env, per_commitment_key) == 32);
        (*env)->GetByteArrayRegion(env, per_commitment_key, 0, 32, per_commitment_key_arr);
        uint8_t (*per_commitment_key_ref)[32] = &per_commitment_key_arr;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_output)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref);
        return tag_ptr(ret_conv, true);
 }
@@ -3066,7 +3314,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1j
        htlc_conv.is_owned = ptr_is_owned(htlc);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        htlc_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_htlc)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref, &htlc_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3085,7 +3333,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1h
        htlc_descriptor_conv.is_owned = ptr_is_owned(htlc_descriptor);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_descriptor_conv);
        htlc_descriptor_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, &htlc_descriptor_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3107,7 +3355,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        htlc_conv.is_owned = ptr_is_owned(htlc);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        htlc_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, amount, per_commitment_point_ref, &htlc_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3121,7 +3369,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        closing_tx_conv.is_owned = ptr_is_owned(closing_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_conv);
        closing_tx_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, &closing_tx_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3135,7 +3383,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1h
        anchor_tx_ref.data = MALLOC(anchor_tx_ref.datalen, "LDKTransaction Bytes");
        (*env)->GetByteArrayRegion(env, anchor_tx, 0, anchor_tx_ref.datalen, anchor_tx_ref.data);
        anchor_tx_ref.data_is_owned = true;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_anchor_input)(this_arg_conv->this_arg, anchor_tx_ref, input);
        return tag_ptr(ret_conv, true);
 }
@@ -3149,7 +3397,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1sign_1c
        msg_conv.is_owned = ptr_is_owned(msg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv.is_owned = false;
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_channel_announcement_with_funding_key)(this_arg_conv->this_arg, &msg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -3283,26 +3531,26 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChan
        return ret_ref;
 }
 
-static inline struct LDKCVec_u8Z CResult_ScriptNoneZ_get_ok(LDKCResult_ScriptNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z CResult_CVec_u8ZNoneZ_get_ok(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return CVec_u8Z_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_ScriptNoneZ* owner_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = CResult_ScriptNoneZ_get_ok(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZNoneZ* owner_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = CResult_CVec_u8ZNoneZ_get_ok(owner_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;
 }
 
-static inline void CResult_ScriptNoneZ_get_err(LDKCResult_ScriptNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_u8ZNoneZ_get_err(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_ScriptNoneZ* owner_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(owner);
-       CResult_ScriptNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZNoneZ* owner_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(owner);
+       CResult_CVec_u8ZNoneZ_get_err(owner_conv);
 }
 
 static inline struct LDKShutdownScript CResult_ShutdownScriptNoneZ_get_ok(LDKCResult_ShutdownScriptNoneZ *NONNULL_PTR owner){
@@ -3328,6 +3576,64 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNoneZ_1
        CResult_ShutdownScriptNoneZ_get_err(owner_conv);
 }
 
+static jclass LDKCOption_u16Z_Some_class = NULL;
+static jmethodID LDKCOption_u16Z_Some_meth = NULL;
+static jclass LDKCOption_u16Z_None_class = NULL;
+static jmethodID LDKCOption_u16Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u16Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_u16Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$Some"));
+       CHECK(LDKCOption_u16Z_Some_class != NULL);
+       LDKCOption_u16Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_Some_class, "<init>", "(S)V");
+       CHECK(LDKCOption_u16Z_Some_meth != NULL);
+       LDKCOption_u16Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$None"));
+       CHECK(LDKCOption_u16Z_None_class != NULL);
+       LDKCOption_u16Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_u16Z_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_u16Z *obj = (LDKCOption_u16Z*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_u16Z_Some: {
+                       int16_t some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_u16Z_Some_class, LDKCOption_u16Z_Some_meth, some_conv);
+               }
+               case LDKCOption_u16Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_u16Z_None_class, LDKCOption_u16Z_None_meth);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_boolZ_Some_class = NULL;
+static jmethodID LDKCOption_boolZ_Some_meth = NULL;
+static jclass LDKCOption_boolZ_None_class = NULL;
+static jmethodID LDKCOption_boolZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1boolZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_boolZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_boolZ$Some"));
+       CHECK(LDKCOption_boolZ_Some_class != NULL);
+       LDKCOption_boolZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_boolZ_Some_class, "<init>", "(Z)V");
+       CHECK(LDKCOption_boolZ_Some_meth != NULL);
+       LDKCOption_boolZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_boolZ$None"));
+       CHECK(LDKCOption_boolZ_None_class != NULL);
+       LDKCOption_boolZ_None_meth = (*env)->GetMethodID(env, LDKCOption_boolZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_boolZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1boolZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_boolZ *obj = (LDKCOption_boolZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_boolZ_Some: {
+                       jboolean some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_boolZ_Some_class, LDKCOption_boolZ_Some_meth, some_conv);
+               }
+               case LDKCOption_boolZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_boolZ_None_class, LDKCOption_boolZ_None_meth);
+               }
+               default: abort();
+       }
+}
 static inline LDKCVec_CVec_u8ZZ CVec_CVec_u8ZZ_clone(const LDKCVec_CVec_u8ZZ *orig) {
        LDKCVec_CVec_u8ZZ ret = { .data = MALLOC(sizeof(LDKCVec_u8Z) * orig->datalen, "LDKCVec_CVec_u8ZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3392,28 +3698,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        return ret_ref;
 }
 
-static inline struct LDKCVec_u8Z CResult_PartiallySignedTransactionNoneZ_get_ok(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return CVec_u8Z_clone(&*owner->contents.result);
-}
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PartiallySignedTransactionNoneZ* owner_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = CResult_PartiallySignedTransactionNoneZ_get_ok(owner_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;
-}
-
-static inline void CResult_PartiallySignedTransactionNoneZ_get_err(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PartiallySignedTransactionNoneZ* owner_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(owner);
-       CResult_PartiallySignedTransactionNoneZ_get_err(owner_conv);
-}
-
 static inline struct LDKTransaction CResult_TransactionNoneZ_get_ok(LDKCResult_TransactionNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -3435,19 +3719,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1get
        CResult_TransactionNoneZ_get_err(owner_conv);
 }
 
-typedef struct LDKScore_JCalls {
+typedef struct LDKScoreLookUp_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
        jweak o;
        jmethodID channel_penalty_msat_meth;
-       jmethodID payment_path_failed_meth;
-       jmethodID payment_path_successful_meth;
-       jmethodID probe_failed_meth;
-       jmethodID probe_successful_meth;
-       jmethodID write_meth;
-} LDKScore_JCalls;
-static void LDKScore_JCalls_free(void* this_arg) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+} LDKScoreLookUp_JCalls;
+static void LDKScoreLookUp_JCalls_free(void* this_arg) {
+       LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) this_arg;
        if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
                JNIEnv *env;
                jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -3463,8 +3742,8 @@ static void LDKScore_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t short_channel_id, const LDKNodeId * source, const LDKNodeId * target, LDKChannelUsage usage, const LDKProbabilisticScoringFeeParameters * score_params) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+uint64_t channel_penalty_msat_LDKScoreLookUp_jcall(const void* this_arg, uint64_t short_channel_id, const LDKNodeId * source, const LDKNodeId * target, LDKChannelUsage usage, const LDKProbabilisticScoringFeeParameters * score_params) {
+       LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3497,15 +3776,95 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        int64_t ret = (*env)->CallLongMethod(env, obj, j_calls->channel_penalty_msat_meth, short_channel_id_conv, source_ref, target_ref, usage_ref, score_params_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to channel_penalty_msat in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to channel_penalty_msat in LDKScoreLookUp from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret;
 }
-void payment_path_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+static void LDKScoreLookUp_JCalls_cloned(LDKScoreLookUp* new_obj) {
+       LDKScoreLookUp_JCalls *j_calls = (LDKScoreLookUp_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKScoreLookUp LDKScoreLookUp_init (JNIEnv *env, jclass clz, jobject o) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKScoreLookUp_JCalls *calls = MALLOC(sizeof(LDKScoreLookUp_JCalls), "LDKScoreLookUp_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->channel_penalty_msat_meth = (*env)->GetMethodID(env, c, "channel_penalty_msat", "(JJJJJ)J");
+       CHECK(calls->channel_penalty_msat_meth != NULL);
+
+       LDKScoreLookUp ret = {
+               .this_arg = (void*) calls,
+               .channel_penalty_msat = channel_penalty_msat_LDKScoreLookUp_jcall,
+               .free = LDKScoreLookUp_JCalls_free,
+       };
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScoreLookUp_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKScoreLookUp *res_ptr = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *res_ptr = LDKScoreLookUp_init(env, clz, o);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoreLookUp_1channel_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t source, int64_t target, int64_t usage, int64_t score_params) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKScoreLookUp* this_arg_conv = (LDKScoreLookUp*)this_arg_ptr;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKChannelUsage usage_conv;
+       usage_conv.inner = untag_ptr(usage);
+       usage_conv.is_owned = ptr_is_owned(usage);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(usage_conv);
+       usage_conv = ChannelUsage_clone(&usage_conv);
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv.is_owned = false;
+       int64_t ret_conv = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv, usage_conv, &score_params_conv);
+       return ret_conv;
+}
+
+typedef struct LDKScoreUpdate_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       jmethodID payment_path_failed_meth;
+       jmethodID payment_path_successful_meth;
+       jmethodID probe_failed_meth;
+       jmethodID probe_successful_meth;
+} LDKScoreUpdate_JCalls;
+static void LDKScoreUpdate_JCalls_free(void* this_arg) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+void payment_path_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3524,14 +3883,14 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, ui
        (*env)->CallVoidMethod(env, obj, j_calls->payment_path_failed_meth, path_ref, short_channel_id_conv);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to payment_path_failed in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to payment_path_failed in LDKScoreUpdate from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-void payment_path_successful_LDKScore_jcall(void* this_arg, const LDKPath * path) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+void payment_path_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3549,14 +3908,14 @@ void payment_path_successful_LDKScore_jcall(void* this_arg, const LDKPath * path
        (*env)->CallVoidMethod(env, obj, j_calls->payment_path_successful_meth, path_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to payment_path_successful in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to payment_path_successful in LDKScoreUpdate from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-void probe_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+void probe_failed_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path, uint64_t short_channel_id) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3575,14 +3934,14 @@ void probe_failed_LDKScore_jcall(void* this_arg, const LDKPath * path, uint64_t
        (*env)->CallVoidMethod(env, obj, j_calls->probe_failed_meth, path_ref, short_channel_id_conv);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to probe_failed in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to probe_failed in LDKScoreUpdate from rust threw an exception.");
        }
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-void probe_successful_LDKScore_jcall(void* this_arg, const LDKPath * path) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+void probe_successful_LDKScoreUpdate_jcall(void* this_arg, const LDKPath * path) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -3600,50 +3959,23 @@ void probe_successful_LDKScore_jcall(void* this_arg, const LDKPath * path) {
        (*env)->CallVoidMethod(env, obj, j_calls->probe_successful_meth, path_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to probe_successful in LDKScore from rust threw an exception.");
-       }
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-       }
-}
-LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
-       JNIEnv *env;
-       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-       } else {
-               DO_ASSERT(get_jenv_res == JNI_OK);
-       }
-       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
-       CHECK(obj != NULL);
-       int8_tArray ret = (*env)->CallObjectMethod(env, obj, j_calls->write_meth);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to write in LDKScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to probe_successful in LDKScoreUpdate from rust threw an exception.");
        }
-       LDKCVec_u8Z ret_ref;
-       ret_ref.datalen = (*env)->GetArrayLength(env, ret);
-       ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, ret, 0, ret_ref.datalen, ret_ref.data);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
-       return ret_ref;
 }
-static void LDKScore_JCalls_cloned(LDKScore* new_obj) {
-       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) new_obj->this_arg;
+static void LDKScoreUpdate_JCalls_cloned(LDKScoreUpdate* new_obj) {
+       LDKScoreUpdate_JCalls *j_calls = (LDKScoreUpdate_JCalls*) new_obj->this_arg;
        atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
 }
-static inline LDKScore LDKScore_init (JNIEnv *env, jclass clz, jobject o) {
+static inline LDKScoreUpdate LDKScoreUpdate_init (JNIEnv *env, jclass clz, jobject o) {
        jclass c = (*env)->GetObjectClass(env, o);
        CHECK(c != NULL);
-       LDKScore_JCalls *calls = MALLOC(sizeof(LDKScore_JCalls), "LDKScore_JCalls");
+       LDKScoreUpdate_JCalls *calls = MALLOC(sizeof(LDKScoreUpdate_JCalls), "LDKScoreUpdate_JCalls");
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->channel_penalty_msat_meth = (*env)->GetMethodID(env, c, "channel_penalty_msat", "(JJJJJ)J");
-       CHECK(calls->channel_penalty_msat_meth != NULL);
        calls->payment_path_failed_meth = (*env)->GetMethodID(env, c, "payment_path_failed", "(JJ)V");
        CHECK(calls->payment_path_failed_meth != NULL);
        calls->payment_path_successful_meth = (*env)->GetMethodID(env, c, "payment_path_successful", "(J)V");
@@ -3652,58 +3984,26 @@ static inline LDKScore LDKScore_init (JNIEnv *env, jclass clz, jobject o) {
        CHECK(calls->probe_failed_meth != NULL);
        calls->probe_successful_meth = (*env)->GetMethodID(env, c, "probe_successful", "(J)V");
        CHECK(calls->probe_successful_meth != NULL);
-       calls->write_meth = (*env)->GetMethodID(env, c, "write", "()[B");
-       CHECK(calls->write_meth != NULL);
 
-       LDKScore ret = {
+       LDKScoreUpdate ret = {
                .this_arg = (void*) calls,
-               .channel_penalty_msat = channel_penalty_msat_LDKScore_jcall,
-               .payment_path_failed = payment_path_failed_LDKScore_jcall,
-               .payment_path_successful = payment_path_successful_LDKScore_jcall,
-               .probe_failed = probe_failed_LDKScore_jcall,
-               .probe_successful = probe_successful_LDKScore_jcall,
-               .write = write_LDKScore_jcall,
-               .free = LDKScore_JCalls_free,
+               .payment_path_failed = payment_path_failed_LDKScoreUpdate_jcall,
+               .payment_path_successful = payment_path_successful_LDKScoreUpdate_jcall,
+               .probe_failed = probe_failed_LDKScoreUpdate_jcall,
+               .probe_successful = probe_successful_LDKScoreUpdate_jcall,
+               .free = LDKScoreUpdate_JCalls_free,
        };
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1new(JNIEnv *env, jclass clz, jobject o) {
-       LDKScore *res_ptr = MALLOC(sizeof(LDKScore), "LDKScore");
-       *res_ptr = LDKScore_init(env, clz, o);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScoreUpdate_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKScoreUpdate *res_ptr = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *res_ptr = LDKScoreUpdate_init(env, clz, o);
        return tag_ptr(res_ptr, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Score_1channel_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t source, int64_t target, int64_t usage, int64_t score_params) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1payment_1path_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKChannelUsage usage_conv;
-       usage_conv.inner = untag_ptr(usage);
-       usage_conv.is_owned = ptr_is_owned(usage);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(usage_conv);
-       usage_conv = ChannelUsage_clone(&usage_conv);
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv.is_owned = false;
-       int64_t ret_conv = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv, usage_conv, &score_params_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3712,10 +4012,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed(J
        (this_arg_conv->payment_path_failed)(this_arg_conv->this_arg, &path_conv, short_channel_id);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1payment_1path_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3724,10 +4024,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1successf
        (this_arg_conv->payment_path_successful)(this_arg_conv->this_arg, &path_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1probe_1failed(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t short_channel_id) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3736,10 +4036,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1failed(JNIEnv *e
        (this_arg_conv->probe_failed)(this_arg_conv->this_arg, &path_conv, short_channel_id);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1probe_1successful(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKScoreUpdate* this_arg_conv = (LDKScoreUpdate*)this_arg_ptr;
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -3748,22 +4048,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1successful(JNIEn
        (this_arg_conv->probe_successful)(this_arg_conv->this_arg, &path_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Score_1write(JNIEnv *env, jclass clz, int64_t this_arg) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
-       LDKCVec_u8Z ret_var = (this_arg_conv->write)(this_arg_conv->this_arg);
-       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;
-}
-
 typedef struct LDKLockableScore_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
        jweak o;
-       jmethodID lock_meth;
+       jmethodID read_lock_meth;
+       jmethodID write_lock_meth;
 } LDKLockableScore_JCalls;
 static void LDKLockableScore_JCalls_free(void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
@@ -3782,7 +4072,36 @@ static void LDKLockableScore_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKScore lock_LDKLockableScore_jcall(const void* this_arg) {
+LDKScoreLookUp read_lock_LDKLockableScore_jcall(const void* this_arg) {
+       LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->read_lock_meth);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to read_lock in LDKLockableScore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKScoreLookUp ret_conv = *(LDKScoreLookUp*)(ret_ptr);
+       if (ret_conv.free == LDKScoreLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScoreLookUp_JCalls_cloned(&ret_conv);
+       }// WARNING: we may need a move here but no clone is available for LDKScoreLookUp
+       
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKScoreUpdate write_lock_LDKLockableScore_jcall(const void* this_arg) {
        LDKLockableScore_JCalls *j_calls = (LDKLockableScore_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -3793,18 +4112,18 @@ LDKScore lock_LDKLockableScore_jcall(const void* this_arg) {
        }
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
        CHECK(obj != NULL);
-       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->lock_meth);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->write_lock_meth);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to lock in LDKLockableScore from rust threw an exception.");
+               (*env)->FatalError(env, "A call to write_lock in LDKLockableScore from rust threw an exception.");
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKScore ret_conv = *(LDKScore*)(ret_ptr);
-       if (ret_conv.free == LDKScore_JCalls_free) {
+       LDKScoreUpdate ret_conv = *(LDKScoreUpdate*)(ret_ptr);
+       if (ret_conv.free == LDKScoreUpdate_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&ret_conv);
-       }// WARNING: we may need a move here but no clone is available for LDKScore
+               LDKScoreUpdate_JCalls_cloned(&ret_conv);
+       }// WARNING: we may need a move here but no clone is available for LDKScoreUpdate
        
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -3822,12 +4141,15 @@ static inline LDKLockableScore LDKLockableScore_init (JNIEnv *env, jclass clz, j
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->lock_meth = (*env)->GetMethodID(env, c, "lock", "()J");
-       CHECK(calls->lock_meth != NULL);
+       calls->read_lock_meth = (*env)->GetMethodID(env, c, "read_lock", "()J");
+       CHECK(calls->read_lock_meth != NULL);
+       calls->write_lock_meth = (*env)->GetMethodID(env, c, "write_lock", "()J");
+       CHECK(calls->write_lock_meth != NULL);
 
        LDKLockableScore ret = {
                .this_arg = (void*) calls,
-               .lock = lock_LDKLockableScore_jcall,
+               .read_lock = read_lock_LDKLockableScore_jcall,
+               .write_lock = write_lock_LDKLockableScore_jcall,
                .free = LDKLockableScore_JCalls_free,
        };
        return ret;
@@ -3837,12 +4159,21 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKLockableScore_1new(JNIEn
        *res_ptr = LDKLockableScore_init(env, clz, o);
        return tag_ptr(res_ptr, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1lock(JNIEnv *env, jclass clz, int64_t this_arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1read_1lock(JNIEnv *env, jclass clz, int64_t this_arg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKLockableScore* this_arg_conv = (LDKLockableScore*)this_arg_ptr;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = (this_arg_conv->lock)(this_arg_conv->this_arg);
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = (this_arg_conv->read_lock)(this_arg_conv->this_arg);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1write_1lock(JNIEnv *env, jclass clz, int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKLockableScore* this_arg_conv = (LDKLockableScore*)this_arg_ptr;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = (this_arg_conv->write_lock)(this_arg_conv->this_arg);
        return tag_ptr(ret_ret, true);
 }
 
@@ -3974,22 +4305,22 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1WriteableScoreZ
                default: abort();
        }
 }
-static inline void CResult_NoneErrorZ_get_ok(LDKCResult_NoneErrorZ *NONNULL_PTR owner){
+static inline void CResult_NoneIOErrorZ_get_ok(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NoneErrorZ* owner_conv = (LDKCResult_NoneErrorZ*)untag_ptr(owner);
-       CResult_NoneErrorZ_get_ok(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_NoneIOErrorZ* owner_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(owner);
+       CResult_NoneIOErrorZ_get_ok(owner_conv);
 }
 
-static inline enum LDKIOError CResult_NoneErrorZ_get_err(LDKCResult_NoneErrorZ *NONNULL_PTR owner){
+static inline enum LDKIOError CResult_NoneIOErrorZ_get_err(LDKCResult_NoneIOErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NoneErrorZ* owner_conv = (LDKCResult_NoneErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKIOError_to_java(env, CResult_NoneErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_NoneIOErrorZ* owner_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_NoneIOErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -4120,35 +4451,6 @@ static inline LDKCVec_RouteHopZ CVec_RouteHopZ_clone(const LDKCVec_RouteHopZ *or
        }
        return ret;
 }
-static jclass LDKCOption_u32Z_Some_class = NULL;
-static jmethodID LDKCOption_u32Z_Some_meth = NULL;
-static jclass LDKCOption_u32Z_None_class = NULL;
-static jmethodID LDKCOption_u32Z_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u32Z_init (JNIEnv *env, jclass clz) {
-       LDKCOption_u32Z_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$Some"));
-       CHECK(LDKCOption_u32Z_Some_class != NULL);
-       LDKCOption_u32Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_Some_class, "<init>", "(I)V");
-       CHECK(LDKCOption_u32Z_Some_meth != NULL);
-       LDKCOption_u32Z_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u32Z$None"));
-       CHECK(LDKCOption_u32Z_None_class != NULL);
-       LDKCOption_u32Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u32Z_None_class, "<init>", "()V");
-       CHECK(LDKCOption_u32Z_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_u32Z *obj = (LDKCOption_u32Z*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_u32Z_Some: {
-                       int32_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_u32Z_Some_class, LDKCOption_u32Z_Some_meth, some_conv);
-               }
-               case LDKCOption_u32Z_None: {
-                       return (*env)->NewObject(env, LDKCOption_u32Z_None_class, LDKCOption_u32Z_None_meth);
-               }
-               default: abort();
-       }
-}
 static inline LDKCVec_PathZ CVec_PathZ_clone(const LDKCVec_PathZ *orig) {
        LDKCVec_PathZ ret = { .data = MALLOC(sizeof(LDKPath) * orig->datalen, "LDKCVec_PathZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4422,73 +4724,101 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1u64u64
                default: abort();
        }
 }
-static inline struct LDKEightU16s C2Tuple_Z_get_a(LDKC2Tuple_Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple_Z_get_a(LDKC2Tuple_Z *NONNULL_PTR owner){
        return owner->a;
 }
 JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
        LDKC2Tuple_Z* owner_conv = (LDKC2Tuple_Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple_Z_get_a(owner_conv).data);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple_Z_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKEightU16s C2Tuple_Z_get_b(LDKC2Tuple_Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple_Z_get_b(LDKC2Tuple_Z *NONNULL_PTR owner){
        return owner->b;
 }
 JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
        LDKC2Tuple_Z* owner_conv = (LDKC2Tuple_Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple_Z_get_b(owner_conv).data);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple_Z_get_b(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKEightU16s C2Tuple__u168_u168Z_get_a(LDKC2Tuple__u168_u168Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple__u1632_u1632Z_get_a(LDKC2Tuple__u1632_u1632Z *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple__u168_u168Z* owner_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple__u168_u168Z_get_a(owner_conv).data);
+JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple__u1632_u1632Z* owner_conv = (LDKC2Tuple__u1632_u1632Z*)untag_ptr(owner);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple__u1632_u1632Z_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKEightU16s C2Tuple__u168_u168Z_get_b(LDKC2Tuple__u168_u168Z *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoU16s C2Tuple__u1632_u1632Z_get_b(LDKC2Tuple__u1632_u1632Z *NONNULL_PTR owner){
        return owner->b;
 }
-JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple__u168_u168Z* owner_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(owner);
-       int16_tArray ret_arr = (*env)->NewShortArray(env, 8);
-       (*env)->SetShortArrayRegion(env, ret_arr, 0, 8, C2Tuple__u168_u168Z_get_b(owner_conv).data);
+JNIEXPORT int16_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple__u1632_u1632Z* owner_conv = (LDKC2Tuple__u1632_u1632Z*)untag_ptr(owner);
+       int16_tArray ret_arr = (*env)->NewShortArray(env, 32);
+       (*env)->SetShortArrayRegion(env, ret_arr, 0, 32, C2Tuple__u1632_u1632Z_get_b(owner_conv).data);
        return ret_arr;
 }
 
-static jclass LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class = NULL;
-static jmethodID LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth = NULL;
-static jclass LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class = NULL;
-static jmethodID LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1EightU16sEightU16sZZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_EightU16sEightU16sZZ$Some"));
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class != NULL);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth != NULL);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_EightU16sEightU16sZZ$None"));
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class != NULL);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1EightU16sEightU16sZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *obj = (LDKCOption_C2Tuple_EightU16sEightU16sZZ*)untag_ptr(ptr);
+static jclass LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class = NULL;
+static jmethodID LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth = NULL;
+static jclass LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class = NULL;
+static jmethodID LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ$Some"));
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class != NULL);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth != NULL);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ$None"));
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class != NULL);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *obj = (LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some: {
-                       LDKC2Tuple__u168_u168Z* some_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-                       *some_conv = obj->some;
-                       *some_conv = C2Tuple__u168_u168Z_clone(some_conv);
-                       return (*env)->NewObject(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_class, LDKCOption_C2Tuple_EightU16sEightU16sZZ_Some_meth, tag_ptr(some_conv, true));
+               case LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some: {
+                       LDKC2Tuple__u1632_u1632Z* some_conv = &obj->some;
+                       // WARNING: we really need to clone here, but no clone is available for LDKC2Tuple__u1632_u1632Z
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_class, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_Some_meth, tag_ptr(some_conv, false));
+               }
+               case LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_class, LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_None_meth);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_f64Z_Some_class = NULL;
+static jmethodID LDKCOption_f64Z_Some_meth = NULL;
+static jclass LDKCOption_f64Z_None_class = NULL;
+static jmethodID LDKCOption_f64Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1f64Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_f64Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_f64Z$Some"));
+       CHECK(LDKCOption_f64Z_Some_class != NULL);
+       LDKCOption_f64Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_f64Z_Some_class, "<init>", "(D)V");
+       CHECK(LDKCOption_f64Z_Some_meth != NULL);
+       LDKCOption_f64Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_f64Z$None"));
+       CHECK(LDKCOption_f64Z_None_class != NULL);
+       LDKCOption_f64Z_None_meth = (*env)->GetMethodID(env, LDKCOption_f64Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_f64Z_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1f64Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_f64Z *obj = (LDKCOption_f64Z*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_f64Z_Some: {
+                       double some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_f64Z_Some_class, LDKCOption_f64Z_Some_meth, some_conv);
                }
-               case LDKCOption_C2Tuple_EightU16sEightU16sZZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_class, LDKCOption_C2Tuple_EightU16sEightU16sZZ_None_meth);
+               case LDKCOption_f64Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_f64Z_None_class, LDKCOption_f64Z_None_meth);
                }
                default: abort();
        }
@@ -4620,93 +4950,75 @@ static inline LDKCVec_C2Tuple_usizeTransactionZZ CVec_C2Tuple_usizeTransactionZZ
        }
        return ret;
 }
-static jclass LDKCOption_BlockHashZ_Some_class = NULL;
-static jmethodID LDKCOption_BlockHashZ_Some_meth = NULL;
-static jclass LDKCOption_BlockHashZ_None_class = NULL;
-static jmethodID LDKCOption_BlockHashZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1BlockHashZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_BlockHashZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BlockHashZ$Some"));
-       CHECK(LDKCOption_BlockHashZ_Some_class != NULL);
-       LDKCOption_BlockHashZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_BlockHashZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_BlockHashZ_Some_meth != NULL);
-       LDKCOption_BlockHashZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_BlockHashZ$None"));
-       CHECK(LDKCOption_BlockHashZ_None_class != NULL);
-       LDKCOption_BlockHashZ_None_meth = (*env)->GetMethodID(env, LDKCOption_BlockHashZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_BlockHashZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1BlockHashZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_BlockHashZ *obj = (LDKCOption_BlockHashZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_BlockHashZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_BlockHashZ_Some_class, LDKCOption_BlockHashZ_Some_meth, some_arr);
-               }
-               case LDKCOption_BlockHashZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_BlockHashZ_None_class, LDKCOption_BlockHashZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline struct LDKThirtyTwoBytes C2Tuple_TxidCOption_BlockHashZZ_get_a(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* owner_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_TxidCOption_BlockHashZZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKCOption_BlockHashZ C2Tuple_TxidCOption_BlockHashZZ_get_b(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR owner){
-       return COption_BlockHashZ_clone(&owner->b);
+static inline struct LDKCOption_ThirtyTwoBytesZ C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR owner){
+       return COption_ThirtyTwoBytesZ_clone(&owner->b);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* owner_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(owner);
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = C2Tuple_TxidCOption_BlockHashZZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(owner);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ CVec_C2Tuple_TxidCOption_BlockHashZZZ_clone(const LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ *orig) {
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_TxidCOption_BlockHashZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(&orig->data[i]);
        }
        return ret;
 }
+static inline enum LDKChannelMonitorUpdateStatus CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return ChannelMonitorUpdateStatus_clone(&*owner->contents.result);
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* owner_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(owner);
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, CResult_ChannelMonitorUpdateStatusNoneZ_get_ok(owner_conv));
+       return ret_conv;
+}
+
+static inline void CResult_ChannelMonitorUpdateStatusNoneZ_get_err(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* owner_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(owner);
+       CResult_ChannelMonitorUpdateStatusNoneZ_get_err(owner_conv);
+}
+
 static jclass LDKMonitorEvent_HTLCEvent_class = NULL;
 static jmethodID LDKMonitorEvent_HTLCEvent_meth = NULL;
-static jclass LDKMonitorEvent_CommitmentTxConfirmed_class = NULL;
-static jmethodID LDKMonitorEvent_CommitmentTxConfirmed_meth = NULL;
+static jclass LDKMonitorEvent_HolderForceClosed_class = NULL;
+static jmethodID LDKMonitorEvent_HolderForceClosed_meth = NULL;
 static jclass LDKMonitorEvent_Completed_class = NULL;
 static jmethodID LDKMonitorEvent_Completed_meth = NULL;
-static jclass LDKMonitorEvent_UpdateFailed_class = NULL;
-static jmethodID LDKMonitorEvent_UpdateFailed_meth = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKMonitorEvent_init (JNIEnv *env, jclass clz) {
        LDKMonitorEvent_HTLCEvent_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$HTLCEvent"));
        CHECK(LDKMonitorEvent_HTLCEvent_class != NULL);
        LDKMonitorEvent_HTLCEvent_meth = (*env)->GetMethodID(env, LDKMonitorEvent_HTLCEvent_class, "<init>", "(J)V");
        CHECK(LDKMonitorEvent_HTLCEvent_meth != NULL);
-       LDKMonitorEvent_CommitmentTxConfirmed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$CommitmentTxConfirmed"));
-       CHECK(LDKMonitorEvent_CommitmentTxConfirmed_class != NULL);
-       LDKMonitorEvent_CommitmentTxConfirmed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_CommitmentTxConfirmed_class, "<init>", "(J)V");
-       CHECK(LDKMonitorEvent_CommitmentTxConfirmed_meth != NULL);
+       LDKMonitorEvent_HolderForceClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$HolderForceClosed"));
+       CHECK(LDKMonitorEvent_HolderForceClosed_class != NULL);
+       LDKMonitorEvent_HolderForceClosed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_HolderForceClosed_class, "<init>", "(J)V");
+       CHECK(LDKMonitorEvent_HolderForceClosed_meth != NULL);
        LDKMonitorEvent_Completed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$Completed"));
        CHECK(LDKMonitorEvent_Completed_class != NULL);
        LDKMonitorEvent_Completed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_Completed_class, "<init>", "(JJ)V");
        CHECK(LDKMonitorEvent_Completed_meth != NULL);
-       LDKMonitorEvent_UpdateFailed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKMonitorEvent$UpdateFailed"));
-       CHECK(LDKMonitorEvent_UpdateFailed_class != NULL);
-       LDKMonitorEvent_UpdateFailed_meth = (*env)->GetMethodID(env, LDKMonitorEvent_UpdateFailed_class, "<init>", "(J)V");
-       CHECK(LDKMonitorEvent_UpdateFailed_meth != NULL);
 }
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
        LDKMonitorEvent *obj = (LDKMonitorEvent*)untag_ptr(ptr);
@@ -4718,12 +5030,12 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        htlc_event_ref = tag_ptr(htlc_event_var.inner, false);
                        return (*env)->NewObject(env, LDKMonitorEvent_HTLCEvent_class, LDKMonitorEvent_HTLCEvent_meth, htlc_event_ref);
                }
-               case LDKMonitorEvent_CommitmentTxConfirmed: {
-                       LDKOutPoint commitment_tx_confirmed_var = obj->commitment_tx_confirmed;
-                       int64_t commitment_tx_confirmed_ref = 0;
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_confirmed_var);
-                       commitment_tx_confirmed_ref = tag_ptr(commitment_tx_confirmed_var.inner, false);
-                       return (*env)->NewObject(env, LDKMonitorEvent_CommitmentTxConfirmed_class, LDKMonitorEvent_CommitmentTxConfirmed_meth, commitment_tx_confirmed_ref);
+               case LDKMonitorEvent_HolderForceClosed: {
+                       LDKOutPoint holder_force_closed_var = obj->holder_force_closed;
+                       int64_t holder_force_closed_ref = 0;
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_force_closed_var);
+                       holder_force_closed_ref = tag_ptr(holder_force_closed_var.inner, false);
+                       return (*env)->NewObject(env, LDKMonitorEvent_HolderForceClosed_class, LDKMonitorEvent_HolderForceClosed_meth, holder_force_closed_ref);
                }
                case LDKMonitorEvent_Completed: {
                        LDKOutPoint funding_txo_var = obj->completed.funding_txo;
@@ -4733,13 +5045,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        int64_t monitor_update_id_conv = obj->completed.monitor_update_id;
                        return (*env)->NewObject(env, LDKMonitorEvent_Completed_class, LDKMonitorEvent_Completed_meth, funding_txo_ref, monitor_update_id_conv);
                }
-               case LDKMonitorEvent_UpdateFailed: {
-                       LDKOutPoint update_failed_var = obj->update_failed;
-                       int64_t update_failed_ref = 0;
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_failed_var);
-                       update_failed_ref = tag_ptr(update_failed_var.inner, false);
-                       return (*env)->NewObject(env, LDKMonitorEvent_UpdateFailed_class, LDKMonitorEvent_UpdateFailed_meth, update_failed_ref);
-               }
                default: abort();
        }
 }
@@ -4983,13 +5288,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTypeFeature
        return ret_ref;
 }
 
-static inline LDKCVec_ChainHashZ CVec_ChainHashZ_clone(const LDKCVec_ChainHashZ *orig) {
-       LDKCVec_ChainHashZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_ChainHashZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
-       }
-       return ret;
-}
 static inline struct LDKOffer CResult_OfferBolt12ParseErrorZ_get_ok(LDKCResult_OfferBolt12ParseErrorZ *NONNULL_PTR owner){
        LDKOffer ret = *owner->contents.result;
        ret.is_owned = false;
@@ -5018,24 +5316,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseEr
        return ret_ref;
 }
 
-static inline struct LDKPublicKey CResult_PublicKeyErrorZ_get_ok(LDKCResult_PublicKeyErrorZ *NONNULL_PTR owner){
+static inline struct LDKPublicKey CResult_PublicKeySecp256k1ErrorZ_get_ok(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PublicKeyErrorZ* owner_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, CResult_PublicKeyErrorZ_get_ok(owner_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, CResult_PublicKeySecp256k1ErrorZ_get_ok(owner_conv).compressed_form);
        return ret_arr;
 }
 
-static inline enum LDKSecp256k1Error CResult_PublicKeyErrorZ_get_err(LDKCResult_PublicKeyErrorZ *NONNULL_PTR owner){
+static inline enum LDKSecp256k1Error CResult_PublicKeySecp256k1ErrorZ_get_err(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PublicKeyErrorZ* owner_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PublicKeyErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PublicKeySecp256k1ErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -5921,7 +6219,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                case LDKMessageSendEvent_SendTxAbort: {
                        int8_tArray node_id_arr = (*env)->NewByteArray(env, 33);
                        (*env)->SetByteArrayRegion(env, node_id_arr, 0, 33, obj->send_tx_abort.node_id.compressed_form);
-                       LDKTxAddInput msg_var = obj->send_tx_abort.msg;
+                       LDKTxAbort msg_var = obj->send_tx_abort.msg;
                        int64_t msg_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = tag_ptr(msg_var.inner, false);
@@ -6167,86 +6465,86 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        return ret_ref;
 }
 
-static jclass LDKNetAddress_IPv4_class = NULL;
-static jmethodID LDKNetAddress_IPv4_meth = NULL;
-static jclass LDKNetAddress_IPv6_class = NULL;
-static jmethodID LDKNetAddress_IPv6_meth = NULL;
-static jclass LDKNetAddress_OnionV2_class = NULL;
-static jmethodID LDKNetAddress_OnionV2_meth = NULL;
-static jclass LDKNetAddress_OnionV3_class = NULL;
-static jmethodID LDKNetAddress_OnionV3_meth = NULL;
-static jclass LDKNetAddress_Hostname_class = NULL;
-static jmethodID LDKNetAddress_Hostname_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKNetAddress_init (JNIEnv *env, jclass clz) {
-       LDKNetAddress_IPv4_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$IPv4"));
-       CHECK(LDKNetAddress_IPv4_class != NULL);
-       LDKNetAddress_IPv4_meth = (*env)->GetMethodID(env, LDKNetAddress_IPv4_class, "<init>", "([BS)V");
-       CHECK(LDKNetAddress_IPv4_meth != NULL);
-       LDKNetAddress_IPv6_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$IPv6"));
-       CHECK(LDKNetAddress_IPv6_class != NULL);
-       LDKNetAddress_IPv6_meth = (*env)->GetMethodID(env, LDKNetAddress_IPv6_class, "<init>", "([BS)V");
-       CHECK(LDKNetAddress_IPv6_meth != NULL);
-       LDKNetAddress_OnionV2_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$OnionV2"));
-       CHECK(LDKNetAddress_OnionV2_class != NULL);
-       LDKNetAddress_OnionV2_meth = (*env)->GetMethodID(env, LDKNetAddress_OnionV2_class, "<init>", "([B)V");
-       CHECK(LDKNetAddress_OnionV2_meth != NULL);
-       LDKNetAddress_OnionV3_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$OnionV3"));
-       CHECK(LDKNetAddress_OnionV3_class != NULL);
-       LDKNetAddress_OnionV3_meth = (*env)->GetMethodID(env, LDKNetAddress_OnionV3_class, "<init>", "([BSBS)V");
-       CHECK(LDKNetAddress_OnionV3_meth != NULL);
-       LDKNetAddress_Hostname_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKNetAddress$Hostname"));
-       CHECK(LDKNetAddress_Hostname_class != NULL);
-       LDKNetAddress_Hostname_meth = (*env)->GetMethodID(env, LDKNetAddress_Hostname_class, "<init>", "(JS)V");
-       CHECK(LDKNetAddress_Hostname_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetAddress_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKNetAddress *obj = (LDKNetAddress*)untag_ptr(ptr);
+static jclass LDKSocketAddress_TcpIpV4_class = NULL;
+static jmethodID LDKSocketAddress_TcpIpV4_meth = NULL;
+static jclass LDKSocketAddress_TcpIpV6_class = NULL;
+static jmethodID LDKSocketAddress_TcpIpV6_meth = NULL;
+static jclass LDKSocketAddress_OnionV2_class = NULL;
+static jmethodID LDKSocketAddress_OnionV2_meth = NULL;
+static jclass LDKSocketAddress_OnionV3_class = NULL;
+static jmethodID LDKSocketAddress_OnionV3_meth = NULL;
+static jclass LDKSocketAddress_Hostname_class = NULL;
+static jmethodID LDKSocketAddress_Hostname_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKSocketAddress_init (JNIEnv *env, jclass clz) {
+       LDKSocketAddress_TcpIpV4_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$TcpIpV4"));
+       CHECK(LDKSocketAddress_TcpIpV4_class != NULL);
+       LDKSocketAddress_TcpIpV4_meth = (*env)->GetMethodID(env, LDKSocketAddress_TcpIpV4_class, "<init>", "([BS)V");
+       CHECK(LDKSocketAddress_TcpIpV4_meth != NULL);
+       LDKSocketAddress_TcpIpV6_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$TcpIpV6"));
+       CHECK(LDKSocketAddress_TcpIpV6_class != NULL);
+       LDKSocketAddress_TcpIpV6_meth = (*env)->GetMethodID(env, LDKSocketAddress_TcpIpV6_class, "<init>", "([BS)V");
+       CHECK(LDKSocketAddress_TcpIpV6_meth != NULL);
+       LDKSocketAddress_OnionV2_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$OnionV2"));
+       CHECK(LDKSocketAddress_OnionV2_class != NULL);
+       LDKSocketAddress_OnionV2_meth = (*env)->GetMethodID(env, LDKSocketAddress_OnionV2_class, "<init>", "([B)V");
+       CHECK(LDKSocketAddress_OnionV2_meth != NULL);
+       LDKSocketAddress_OnionV3_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$OnionV3"));
+       CHECK(LDKSocketAddress_OnionV3_class != NULL);
+       LDKSocketAddress_OnionV3_meth = (*env)->GetMethodID(env, LDKSocketAddress_OnionV3_class, "<init>", "([BSBS)V");
+       CHECK(LDKSocketAddress_OnionV3_meth != NULL);
+       LDKSocketAddress_Hostname_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKSocketAddress$Hostname"));
+       CHECK(LDKSocketAddress_Hostname_class != NULL);
+       LDKSocketAddress_Hostname_meth = (*env)->GetMethodID(env, LDKSocketAddress_Hostname_class, "<init>", "(JS)V");
+       CHECK(LDKSocketAddress_Hostname_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSocketAddress_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKSocketAddress *obj = (LDKSocketAddress*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKNetAddress_IPv4: {
+               case LDKSocketAddress_TcpIpV4: {
                        int8_tArray addr_arr = (*env)->NewByteArray(env, 4);
-                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 4, obj->i_pv4.addr.data);
-                       int16_t port_conv = obj->i_pv4.port;
-                       return (*env)->NewObject(env, LDKNetAddress_IPv4_class, LDKNetAddress_IPv4_meth, addr_arr, port_conv);
+                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 4, obj->tcp_ip_v4.addr.data);
+                       int16_t port_conv = obj->tcp_ip_v4.port;
+                       return (*env)->NewObject(env, LDKSocketAddress_TcpIpV4_class, LDKSocketAddress_TcpIpV4_meth, addr_arr, port_conv);
                }
-               case LDKNetAddress_IPv6: {
+               case LDKSocketAddress_TcpIpV6: {
                        int8_tArray addr_arr = (*env)->NewByteArray(env, 16);
-                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 16, obj->i_pv6.addr.data);
-                       int16_t port_conv = obj->i_pv6.port;
-                       return (*env)->NewObject(env, LDKNetAddress_IPv6_class, LDKNetAddress_IPv6_meth, addr_arr, port_conv);
+                       (*env)->SetByteArrayRegion(env, addr_arr, 0, 16, obj->tcp_ip_v6.addr.data);
+                       int16_t port_conv = obj->tcp_ip_v6.port;
+                       return (*env)->NewObject(env, LDKSocketAddress_TcpIpV6_class, LDKSocketAddress_TcpIpV6_meth, addr_arr, port_conv);
                }
-               case LDKNetAddress_OnionV2: {
+               case LDKSocketAddress_OnionV2: {
                        int8_tArray onion_v2_arr = (*env)->NewByteArray(env, 12);
                        (*env)->SetByteArrayRegion(env, onion_v2_arr, 0, 12, obj->onion_v2.data);
-                       return (*env)->NewObject(env, LDKNetAddress_OnionV2_class, LDKNetAddress_OnionV2_meth, onion_v2_arr);
+                       return (*env)->NewObject(env, LDKSocketAddress_OnionV2_class, LDKSocketAddress_OnionV2_meth, onion_v2_arr);
                }
-               case LDKNetAddress_OnionV3: {
+               case LDKSocketAddress_OnionV3: {
                        int8_tArray ed25519_pubkey_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, ed25519_pubkey_arr, 0, 32, obj->onion_v3.ed25519_pubkey.data);
                        int16_t checksum_conv = obj->onion_v3.checksum;
                        int8_t version_conv = obj->onion_v3.version;
                        int16_t port_conv = obj->onion_v3.port;
-                       return (*env)->NewObject(env, LDKNetAddress_OnionV3_class, LDKNetAddress_OnionV3_meth, ed25519_pubkey_arr, checksum_conv, version_conv, port_conv);
+                       return (*env)->NewObject(env, LDKSocketAddress_OnionV3_class, LDKSocketAddress_OnionV3_meth, ed25519_pubkey_arr, checksum_conv, version_conv, port_conv);
                }
-               case LDKNetAddress_Hostname: {
+               case LDKSocketAddress_Hostname: {
                        LDKHostname hostname_var = obj->hostname.hostname;
                        int64_t hostname_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(hostname_var);
                        hostname_ref = tag_ptr(hostname_var.inner, false);
                        int16_t port_conv = obj->hostname.port;
-                       return (*env)->NewObject(env, LDKNetAddress_Hostname_class, LDKNetAddress_Hostname_meth, hostname_ref, port_conv);
+                       return (*env)->NewObject(env, LDKSocketAddress_Hostname_class, LDKSocketAddress_Hostname_meth, hostname_ref, port_conv);
                }
                default: abort();
        }
 }
-static inline LDKCVec_NetAddressZ CVec_NetAddressZ_clone(const LDKCVec_NetAddressZ *orig) {
-       LDKCVec_NetAddressZ ret = { .data = MALLOC(sizeof(LDKNetAddress) * orig->datalen, "LDKCVec_NetAddressZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_SocketAddressZ CVec_SocketAddressZ_clone(const LDKCVec_SocketAddressZ *orig) {
+       LDKCVec_SocketAddressZ ret = { .data = MALLOC(sizeof(LDKSocketAddress) * orig->datalen, "LDKCVec_SocketAddressZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = NetAddress_clone(&orig->data[i]);
+               ret.data[i] = SocketAddress_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -6354,73 +6652,95 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode
        return ret_ref;
 }
 
-static jclass LDKCOption_CVec_NetAddressZZ_Some_class = NULL;
-static jmethodID LDKCOption_CVec_NetAddressZZ_Some_meth = NULL;
-static jclass LDKCOption_CVec_NetAddressZZ_None_class = NULL;
-static jmethodID LDKCOption_CVec_NetAddressZZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1NetAddressZZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_NetAddressZZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_NetAddressZZ$Some"));
-       CHECK(LDKCOption_CVec_NetAddressZZ_Some_class != NULL);
-       LDKCOption_CVec_NetAddressZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_NetAddressZZ_Some_class, "<init>", "([J)V");
-       CHECK(LDKCOption_CVec_NetAddressZZ_Some_meth != NULL);
-       LDKCOption_CVec_NetAddressZZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_NetAddressZZ$None"));
-       CHECK(LDKCOption_CVec_NetAddressZZ_None_class != NULL);
-       LDKCOption_CVec_NetAddressZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_NetAddressZZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_CVec_NetAddressZZ_None_meth != NULL);
+static jclass LDKCOption_CVec_SocketAddressZZ_Some_class = NULL;
+static jmethodID LDKCOption_CVec_SocketAddressZZ_Some_meth = NULL;
+static jclass LDKCOption_CVec_SocketAddressZZ_None_class = NULL;
+static jmethodID LDKCOption_CVec_SocketAddressZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1SocketAddressZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_SocketAddressZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_SocketAddressZZ$Some"));
+       CHECK(LDKCOption_CVec_SocketAddressZZ_Some_class != NULL);
+       LDKCOption_CVec_SocketAddressZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_SocketAddressZZ_Some_class, "<init>", "([J)V");
+       CHECK(LDKCOption_CVec_SocketAddressZZ_Some_meth != NULL);
+       LDKCOption_CVec_SocketAddressZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_SocketAddressZZ$None"));
+       CHECK(LDKCOption_CVec_SocketAddressZZ_None_class != NULL);
+       LDKCOption_CVec_SocketAddressZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_SocketAddressZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_CVec_SocketAddressZZ_None_meth != NULL);
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1NetAddressZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_CVec_NetAddressZZ *obj = (LDKCOption_CVec_NetAddressZZ*)untag_ptr(ptr);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1SocketAddressZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_CVec_SocketAddressZZ *obj = (LDKCOption_CVec_SocketAddressZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_CVec_NetAddressZZ_Some: {
-                       LDKCVec_NetAddressZ some_var = obj->some;
+               case LDKCOption_CVec_SocketAddressZZ_Some: {
+                       LDKCVec_SocketAddressZ some_var = obj->some;
                        int64_tArray some_arr = NULL;
                        some_arr = (*env)->NewLongArray(env, some_var.datalen);
                        int64_t *some_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, some_arr, NULL);
-                       for (size_t m = 0; m < some_var.datalen; m++) {
-                               int64_t some_conv_12_ref = tag_ptr(&some_var.data[m], false);
-                               some_arr_ptr[m] = some_conv_12_ref;
+                       for (size_t p = 0; p < some_var.datalen; p++) {
+                               int64_t some_conv_15_ref = tag_ptr(&some_var.data[p], false);
+                               some_arr_ptr[p] = some_conv_15_ref;
                        }
                        (*env)->ReleasePrimitiveArrayCritical(env, some_arr, some_arr_ptr, 0);
-                       return (*env)->NewObject(env, LDKCOption_CVec_NetAddressZZ_Some_class, LDKCOption_CVec_NetAddressZZ_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_CVec_SocketAddressZZ_Some_class, LDKCOption_CVec_SocketAddressZZ_Some_meth, some_arr);
                }
-               case LDKCOption_CVec_NetAddressZZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_CVec_NetAddressZZ_None_class, LDKCOption_CVec_NetAddressZZ_None_meth);
+               case LDKCOption_CVec_SocketAddressZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_CVec_SocketAddressZZ_None_class, LDKCOption_CVec_SocketAddressZZ_None_meth);
                }
                default: abort();
        }
 }
-static jclass LDKCOption_PaymentPreimageZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentPreimageZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentPreimageZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentPreimageZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentPreimageZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentPreimageZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentPreimageZ$Some"));
-       CHECK(LDKCOption_PaymentPreimageZ_Some_class != NULL);
-       LDKCOption_PaymentPreimageZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentPreimageZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentPreimageZ_Some_meth != NULL);
-       LDKCOption_PaymentPreimageZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentPreimageZ$None"));
-       CHECK(LDKCOption_PaymentPreimageZ_None_class != NULL);
-       LDKCOption_PaymentPreimageZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentPreimageZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentPreimageZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentPreimageZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentPreimageZ *obj = (LDKCOption_PaymentPreimageZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentPreimageZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentPreimageZ_Some_class, LDKCOption_PaymentPreimageZ_Some_meth, some_arr);
-               }
-               case LDKCOption_PaymentPreimageZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentPreimageZ_None_class, LDKCOption_PaymentPreimageZ_None_meth);
-               }
-               default: abort();
-       }
+static inline struct LDKChannelDerivationParameters CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR owner){
+       LDKChannelDerivationParameters ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* owner_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(owner);
+       LDKChannelDerivationParameters ret_var = CResult_ChannelDerivationParametersDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ChannelDerivationParametersDecodeErrorZ_get_err(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* owner_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ChannelDerivationParametersDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKHTLCDescriptor CResult_HTLCDescriptorDecodeErrorZ_get_ok(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner){
+       LDKHTLCDescriptor ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* owner_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(owner);
+       LDKHTLCDescriptor ret_var = CResult_HTLCDescriptorDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_HTLCDescriptorDecodeErrorZ_get_err(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* owner_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_HTLCDescriptorDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline LDKCVec_HTLCOutputInCommitmentZ CVec_HTLCOutputInCommitmentZ_clone(const LDKCVec_HTLCOutputInCommitmentZ *orig) {
        LDKCVec_HTLCOutputInCommitmentZ ret = { .data = MALLOC(sizeof(LDKHTLCOutputInCommitment) * orig->datalen, "LDKCVec_HTLCOutputInCommitmentZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6532,31 +6852,51 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1UtxoZNoneZ_1get
        CResult_CVec_UtxoZNoneZ_get_err(owner_conv);
 }
 
-static jclass LDKCOption_u16Z_Some_class = NULL;
-static jmethodID LDKCOption_u16Z_Some_meth = NULL;
-static jclass LDKCOption_u16Z_None_class = NULL;
-static jmethodID LDKCOption_u16Z_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u16Z_init (JNIEnv *env, jclass clz) {
-       LDKCOption_u16Z_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$Some"));
-       CHECK(LDKCOption_u16Z_Some_class != NULL);
-       LDKCOption_u16Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_Some_class, "<init>", "(S)V");
-       CHECK(LDKCOption_u16Z_Some_meth != NULL);
-       LDKCOption_u16Z_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u16Z$None"));
-       CHECK(LDKCOption_u16Z_None_class != NULL);
-       LDKCOption_u16Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u16Z_None_class, "<init>", "()V");
-       CHECK(LDKCOption_u16Z_None_meth != NULL);
+static inline uint64_t C2Tuple_u64u16Z_get_a(LDKC2Tuple_u64u16Z *NONNULL_PTR owner){
+       return owner->a;
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_u16Z *obj = (LDKCOption_u16Z*)untag_ptr(ptr);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64u16Z* owner_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(owner);
+       int64_t ret_conv = C2Tuple_u64u16Z_get_a(owner_conv);
+       return ret_conv;
+}
+
+static inline uint16_t C2Tuple_u64u16Z_get_b(LDKC2Tuple_u64u16Z *NONNULL_PTR owner){
+       return owner->b;
+}
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u64u16Z* owner_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(owner);
+       int16_t ret_conv = C2Tuple_u64u16Z_get_b(owner_conv);
+       return ret_conv;
+}
+
+static jclass LDKCOption_C2Tuple_u64u16ZZ_Some_class = NULL;
+static jmethodID LDKCOption_C2Tuple_u64u16ZZ_Some_meth = NULL;
+static jclass LDKCOption_C2Tuple_u64u16ZZ_None_class = NULL;
+static jmethodID LDKCOption_C2Tuple_u64u16ZZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1u64u16ZZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_u64u16ZZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_u64u16ZZ$Some"));
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_Some_class != NULL);
+       LDKCOption_C2Tuple_u64u16ZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_u64u16ZZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_Some_meth != NULL);
+       LDKCOption_C2Tuple_u64u16ZZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_C2Tuple_u64u16ZZ$None"));
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_None_class != NULL);
+       LDKCOption_C2Tuple_u64u16ZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_C2Tuple_u64u16ZZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_C2Tuple_u64u16ZZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1u64u16ZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_C2Tuple_u64u16ZZ *obj = (LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_u16Z_Some: {
-                       int16_t some_conv = obj->some;
-                       return (*env)->NewObject(env, LDKCOption_u16Z_Some_class, LDKCOption_u16Z_Some_meth, some_conv);
+               case LDKCOption_C2Tuple_u64u16ZZ_Some: {
+                       LDKC2Tuple_u64u16Z* some_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+                       *some_conv = obj->some;
+                       *some_conv = C2Tuple_u64u16Z_clone(some_conv);
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_u64u16ZZ_Some_class, LDKCOption_C2Tuple_u64u16ZZ_Some_meth, tag_ptr(some_conv, true));
                }
-               case LDKCOption_u16Z_None: {
-                       return (*env)->NewObject(env, LDKCOption_u16Z_None_class, LDKCOption_u16Z_None_meth);
+               case LDKCOption_C2Tuple_u64u16ZZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_C2Tuple_u64u16ZZ_None_class, LDKCOption_C2Tuple_u64u16ZZ_None_meth);
                }
                default: abort();
        }
@@ -6590,59 +6930,31 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ChannelShutdown
                default: abort();
        }
 }
-static jclass LDKCOption_PaymentHashZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentHashZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentHashZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentHashZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentHashZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentHashZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentHashZ$Some"));
-       CHECK(LDKCOption_PaymentHashZ_Some_class != NULL);
-       LDKCOption_PaymentHashZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentHashZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentHashZ_Some_meth != NULL);
-       LDKCOption_PaymentHashZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentHashZ$None"));
-       CHECK(LDKCOption_PaymentHashZ_None_class != NULL);
-       LDKCOption_PaymentHashZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentHashZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentHashZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentHashZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentHashZ *obj = (LDKCOption_PaymentHashZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentHashZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentHashZ_Some_class, LDKCOption_PaymentHashZ_Some_meth, some_arr);
-               }
-               case LDKCOption_PaymentHashZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentHashZ_None_class, LDKCOption_PaymentHashZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline struct LDKThirtyTwoBytes CResult__u832APIErrorZ_get_ok(LDKCResult__u832APIErrorZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesAPIErrorZ_get_ok(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult__u832APIErrorZ* owner_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult__u832APIErrorZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesAPIErrorZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKAPIError CResult__u832APIErrorZ_get_err(LDKCResult__u832APIErrorZ *NONNULL_PTR owner){
+static inline struct LDKAPIError CResult_ThirtyTwoBytesAPIErrorZ_get_err(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return APIError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult__u832APIErrorZ* owner_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(owner);
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
-       *ret_copy = CResult__u832APIErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_ThirtyTwoBytesAPIErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
+static jclass LDKRecentPaymentDetails_AwaitingInvoice_class = NULL;
+static jmethodID LDKRecentPaymentDetails_AwaitingInvoice_meth = NULL;
 static jclass LDKRecentPaymentDetails_Pending_class = NULL;
 static jmethodID LDKRecentPaymentDetails_Pending_meth = NULL;
 static jclass LDKRecentPaymentDetails_Fulfilled_class = NULL;
@@ -6650,39 +6962,55 @@ static jmethodID LDKRecentPaymentDetails_Fulfilled_meth = NULL;
 static jclass LDKRecentPaymentDetails_Abandoned_class = NULL;
 static jmethodID LDKRecentPaymentDetails_Abandoned_meth = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKRecentPaymentDetails_init (JNIEnv *env, jclass clz) {
+       LDKRecentPaymentDetails_AwaitingInvoice_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$AwaitingInvoice"));
+       CHECK(LDKRecentPaymentDetails_AwaitingInvoice_class != NULL);
+       LDKRecentPaymentDetails_AwaitingInvoice_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_AwaitingInvoice_class, "<init>", "([B)V");
+       CHECK(LDKRecentPaymentDetails_AwaitingInvoice_meth != NULL);
        LDKRecentPaymentDetails_Pending_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$Pending"));
        CHECK(LDKRecentPaymentDetails_Pending_class != NULL);
-       LDKRecentPaymentDetails_Pending_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Pending_class, "<init>", "([BJ)V");
+       LDKRecentPaymentDetails_Pending_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Pending_class, "<init>", "([B[BJ)V");
        CHECK(LDKRecentPaymentDetails_Pending_meth != NULL);
        LDKRecentPaymentDetails_Fulfilled_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$Fulfilled"));
        CHECK(LDKRecentPaymentDetails_Fulfilled_class != NULL);
-       LDKRecentPaymentDetails_Fulfilled_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Fulfilled_class, "<init>", "(J)V");
+       LDKRecentPaymentDetails_Fulfilled_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Fulfilled_class, "<init>", "([BJ)V");
        CHECK(LDKRecentPaymentDetails_Fulfilled_meth != NULL);
        LDKRecentPaymentDetails_Abandoned_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRecentPaymentDetails$Abandoned"));
        CHECK(LDKRecentPaymentDetails_Abandoned_class != NULL);
-       LDKRecentPaymentDetails_Abandoned_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Abandoned_class, "<init>", "([B)V");
+       LDKRecentPaymentDetails_Abandoned_meth = (*env)->GetMethodID(env, LDKRecentPaymentDetails_Abandoned_class, "<init>", "([B[B)V");
        CHECK(LDKRecentPaymentDetails_Abandoned_meth != NULL);
 }
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRecentPaymentDetails_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
        LDKRecentPaymentDetails *obj = (LDKRecentPaymentDetails*)untag_ptr(ptr);
        switch(obj->tag) {
+               case LDKRecentPaymentDetails_AwaitingInvoice: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->awaiting_invoice.payment_id.data);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_AwaitingInvoice_class, LDKRecentPaymentDetails_AwaitingInvoice_meth, payment_id_arr);
+               }
                case LDKRecentPaymentDetails_Pending: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->pending.payment_id.data);
                        int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->pending.payment_hash.data);
                        int64_t total_msat_conv = obj->pending.total_msat;
-                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Pending_class, LDKRecentPaymentDetails_Pending_meth, payment_hash_arr, total_msat_conv);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Pending_class, LDKRecentPaymentDetails_Pending_meth, payment_id_arr, payment_hash_arr, total_msat_conv);
                }
                case LDKRecentPaymentDetails_Fulfilled: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->fulfilled.payment_id.data);
                        int64_t payment_hash_ref = tag_ptr(&obj->fulfilled.payment_hash, false);
-                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Fulfilled_class, LDKRecentPaymentDetails_Fulfilled_meth, payment_hash_ref);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Fulfilled_class, LDKRecentPaymentDetails_Fulfilled_meth, payment_id_arr, payment_hash_ref);
                }
                case LDKRecentPaymentDetails_Abandoned: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->abandoned.payment_id.data);
                        int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->abandoned.payment_hash.data);
-                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Abandoned_class, LDKRecentPaymentDetails_Abandoned_meth, payment_hash_arr);
+                       return (*env)->NewObject(env, LDKRecentPaymentDetails_Abandoned_class, LDKRecentPaymentDetails_Abandoned_meth, payment_id_arr, payment_hash_arr);
                }
                default: abort();
        }
@@ -6830,221 +7158,208 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1NoneRetryableSendFa
        return ret_conv;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentHashPaymentSendFailureZ_get_ok(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* owner_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentHashPaymentSendFailureZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKPaymentSendFailure CResult_PaymentHashPaymentSendFailureZ_get_err(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKPaymentSendFailure CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return PaymentSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* owner_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(owner);
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = CResult_PaymentHashPaymentSendFailureZ_get_err(owner_conv);
+       *ret_copy = CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentHashRetryableSendFailureZ_get_ok(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* owner_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentHashRetryableSendFailureZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline enum LDKRetryableSendFailure CResult_PaymentHashRetryableSendFailureZ_get_err(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR owner){
+static inline enum LDKRetryableSendFailure CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return RetryableSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* owner_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(owner);
-       jclass ret_conv = LDKRetryableSendFailure_to_java(env, CResult_PaymentHashRetryableSendFailureZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* owner_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(owner);
+       jclass ret_conv = LDKRetryableSendFailure_to_java(env, CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err(owner_conv));
        return ret_conv;
 }
 
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_a(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentIdZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_b(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->b);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentIdZ_get_b(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKC2Tuple_PaymentHashPaymentIdZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_PaymentHashPaymentIdZ_clone(&*owner->contents.result);
+       return C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(owner);
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKPaymentSendFailure CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR owner){
+static inline struct LDKPaymentSendFailure CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return PaymentSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(owner);
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
-       *ret_copy = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(owner_conv);
+       *ret_copy = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline LDKCVec_ThirtyTwoBytesZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_ThirtyTwoBytesZ *orig) {
-       LDKCVec_ThirtyTwoBytesZ ret = { .data = MALLOC(sizeof(LDKThirtyTwoBytes) * orig->datalen, "LDKCVec_ThirtyTwoBytesZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = ThirtyTwoBytes_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(&orig->data[i]);
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_a(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR owner){
-       return ThirtyTwoBytes_clone(&owner->a);
-}
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentSecretZ_get_a(owner_conv).data);
-       return ret_arr;
-}
-
-static inline struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_b(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR owner){
-       return ThirtyTwoBytes_clone(&owner->b);
-}
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* owner_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_PaymentHashPaymentSecretZ_get_b(owner_conv).data);
-       return ret_arr;
+static jclass LDKProbeSendFailure_RouteNotFound_class = NULL;
+static jmethodID LDKProbeSendFailure_RouteNotFound_meth = NULL;
+static jclass LDKProbeSendFailure_SendingFailed_class = NULL;
+static jmethodID LDKProbeSendFailure_SendingFailed_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKProbeSendFailure_init (JNIEnv *env, jclass clz) {
+       LDKProbeSendFailure_RouteNotFound_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbeSendFailure$RouteNotFound"));
+       CHECK(LDKProbeSendFailure_RouteNotFound_class != NULL);
+       LDKProbeSendFailure_RouteNotFound_meth = (*env)->GetMethodID(env, LDKProbeSendFailure_RouteNotFound_class, "<init>", "()V");
+       CHECK(LDKProbeSendFailure_RouteNotFound_meth != NULL);
+       LDKProbeSendFailure_SendingFailed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbeSendFailure$SendingFailed"));
+       CHECK(LDKProbeSendFailure_SendingFailed_class != NULL);
+       LDKProbeSendFailure_SendingFailed_meth = (*env)->GetMethodID(env, LDKProbeSendFailure_SendingFailed_class, "<init>", "(J)V");
+       CHECK(LDKProbeSendFailure_SendingFailed_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKProbeSendFailure_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKProbeSendFailure *obj = (LDKProbeSendFailure*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKProbeSendFailure_RouteNotFound: {
+                       return (*env)->NewObject(env, LDKProbeSendFailure_RouteNotFound_class, LDKProbeSendFailure_RouteNotFound_meth);
+               }
+               case LDKProbeSendFailure_SendingFailed: {
+                       int64_t sending_failed_ref = tag_ptr(&obj->sending_failed, false);
+                       return (*env)->NewObject(env, LDKProbeSendFailure_SendingFailed_class, LDKProbeSendFailure_SendingFailed_meth, sending_failed_ref);
+               }
+               default: abort();
+       }
 }
-
-static inline struct LDKC2Tuple_PaymentHashPaymentSecretZ CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_PaymentHashPaymentSecretZ_clone(&*owner->contents.result);
+       return CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(owner);
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(owner_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ ret_var = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok(owner_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 o = 0; o < ret_var.datalen; o++) {
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+               *ret_conv_40_conv = ret_var.data[o];
+               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-static inline void CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR owner){
+static inline struct LDKProbeSendFailure CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return *owner->contents.err;
+       return ProbeSendFailure_clone(&*owner->contents.err);
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* owner_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(owner);
-       CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(owner);
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentSecretNoneZ_get_ok(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return ThirtyTwoBytes_clone(&*owner->contents.result);
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR owner){
+       return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentSecretNoneZ* owner_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentSecretNoneZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline void CResult_PaymentSecretNoneZ_get_err(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
+static inline struct LDKPublicKey C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR owner){
+       return owner->b;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentSecretNoneZ* owner_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(owner);
-       CResult_PaymentSecretNoneZ_get_err(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b(owner_conv).compressed_form);
+       return ret_arr;
 }
 
-static inline struct LDKThirtyTwoBytes CResult_PaymentPreimageAPIErrorZ_get_ok(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR owner){
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return ThirtyTwoBytes_clone(&*owner->contents.result);
+       return C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentPreimageAPIErrorZ* owner_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(owner);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentPreimageAPIErrorZ_get_ok(owner_conv).data);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKAPIError CResult_PaymentPreimageAPIErrorZ_get_err(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR owner){
+static inline void CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
-       return APIError_clone(&*owner->contents.err);
+       return *owner->contents.err;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentPreimageAPIErrorZ* owner_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(owner);
-       LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
-       *ret_copy = CResult_PaymentPreimageAPIErrorZ_get_err(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err(owner_conv);
 }
 
-static jclass LDKCOption_CVec_ChainHashZZ_Some_class = NULL;
-static jmethodID LDKCOption_CVec_ChainHashZZ_Some_meth = NULL;
-static jclass LDKCOption_CVec_ChainHashZZ_None_class = NULL;
-static jmethodID LDKCOption_CVec_ChainHashZZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1ChainHashZZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_ChainHashZZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ChainHashZZ$Some"));
-       CHECK(LDKCOption_CVec_ChainHashZZ_Some_class != NULL);
-       LDKCOption_CVec_ChainHashZZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ChainHashZZ_Some_class, "<init>", "([[B)V");
-       CHECK(LDKCOption_CVec_ChainHashZZ_Some_meth != NULL);
-       LDKCOption_CVec_ChainHashZZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_CVec_ChainHashZZ$None"));
-       CHECK(LDKCOption_CVec_ChainHashZZ_None_class != NULL);
-       LDKCOption_CVec_ChainHashZZ_None_meth = (*env)->GetMethodID(env, LDKCOption_CVec_ChainHashZZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_CVec_ChainHashZZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1ChainHashZZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_CVec_ChainHashZZ *obj = (LDKCOption_CVec_ChainHashZZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_CVec_ChainHashZZ_Some: {
-                       LDKCVec_ChainHashZ some_var = obj->some;
-                       jobjectArray some_arr = NULL;
-                       some_arr = (*env)->NewObjectArray(env, some_var.datalen, arr_of_B_clz, NULL);
-                       ;
-                       for (size_t i = 0; i < some_var.datalen; i++) {
-                               int8_tArray some_conv_8_arr = (*env)->NewByteArray(env, 32);
-                               (*env)->SetByteArrayRegion(env, some_conv_8_arr, 0, 32, some_var.data[i].data);
-                               (*env)->SetObjectArrayElement(env, some_arr, i, some_conv_8_arr);
-                       }
-                       
-                       return (*env)->NewObject(env, LDKCOption_CVec_ChainHashZZ_Some_class, LDKCOption_CVec_ChainHashZZ_Some_meth, some_arr);
-               }
-               case LDKCOption_CVec_ChainHashZZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_CVec_ChainHashZZ_None_class, LDKCOption_CVec_ChainHashZZ_None_meth);
-               }
-               default: abort();
-       }
-}
 static inline struct LDKCounterpartyForwardingInfo CResult_CounterpartyForwardingInfoDecodeErrorZ_get_ok(LDKCResult_CounterpartyForwardingInfoDecodeErrorZ *NONNULL_PTR owner){
        LDKCounterpartyForwardingInfo ret = *owner->contents.result;
        ret.is_owned = false;
@@ -7203,7 +7518,7 @@ static void LDKWatch_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKChannelMonitorUpdateStatus watch_channel_LDKWatch_jcall(const void* this_arg, LDKOutPoint funding_txo, LDKChannelMonitor monitor) {
+LDKCResult_ChannelMonitorUpdateStatusNoneZ watch_channel_LDKWatch_jcall(const void* this_arg, LDKOutPoint funding_txo, LDKChannelMonitor monitor) {
        LDKWatch_JCalls *j_calls = (LDKWatch_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -7222,12 +7537,15 @@ LDKChannelMonitorUpdateStatus watch_channel_LDKWatch_jcall(const void* this_arg,
        monitor_ref = tag_ptr(monitor_var.inner, monitor_var.is_owned);
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
        CHECK(obj != NULL);
-       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->watch_channel_meth, funding_txo_ref, monitor_ref);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->watch_channel_meth, funding_txo_ref, monitor_ref);
        if (UNLIKELY((*env)->ExceptionCheck(env))) {
                (*env)->ExceptionDescribe(env);
                (*env)->FatalError(env, "A call to watch_channel in LDKWatch from rust threw an exception.");
        }
-       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ ret_conv = *(LDKCResult_ChannelMonitorUpdateStatusNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -7312,7 +7630,7 @@ static inline LDKWatch LDKWatch_init (JNIEnv *env, jclass clz, jobject o) {
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->watch_channel_meth = (*env)->GetMethodID(env, c, "watch_channel", "(JJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       calls->watch_channel_meth = (*env)->GetMethodID(env, c, "watch_channel", "(JJ)J");
        CHECK(calls->watch_channel_meth != NULL);
        calls->update_channel_meth = (*env)->GetMethodID(env, c, "update_channel", "(JJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
        CHECK(calls->update_channel_meth != NULL);
@@ -7333,7 +7651,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKWatch_1new(JNIEnv *env,
        *res_ptr = LDKWatch_init(env, clz, o);
        return tag_ptr(res_ptr, true);
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t funding_txo, int64_t monitor) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t funding_txo, int64_t monitor) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKWatch* this_arg_conv = (LDKWatch*)this_arg_ptr;
@@ -7347,8 +7665,9 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEnv
        monitor_conv.is_owned = ptr_is_owned(monitor);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
        monitor_conv = ChannelMonitor_clone(&monitor_conv);
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv));
-       return ret_conv;
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Watch_1update_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t funding_txo, int64_t update) {
@@ -7631,6 +7950,8 @@ typedef struct LDKNodeSigner_JCalls {
        jmethodID get_node_id_meth;
        jmethodID ecdh_meth;
        jmethodID sign_invoice_meth;
+       jmethodID sign_bolt12_invoice_request_meth;
+       jmethodID sign_bolt12_invoice_meth;
        jmethodID sign_gossip_message_meth;
 } LDKNodeSigner_JCalls;
 static void LDKNodeSigner_JCalls_free(void* this_arg) {
@@ -7700,7 +8021,7 @@ LDKCResult_PublicKeyNoneZ get_node_id_LDKNodeSigner_jcall(const void* this_arg,
        }
        return ret_conv;
 }
-LDKCResult_SharedSecretNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKRecipient recipient, LDKPublicKey other_key, LDKCOption_ScalarZ tweak) {
+LDKCResult_ThirtyTwoBytesNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKRecipient recipient, LDKPublicKey other_key, LDKCOption_BigEndianScalarZ tweak) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -7712,7 +8033,7 @@ LDKCResult_SharedSecretNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKR
        jclass recipient_conv = LDKRecipient_to_java(env, recipient);
        int8_tArray other_key_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, other_key_arr, 0, 33, other_key.compressed_form);
-       LDKCOption_ScalarZ *tweak_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
+       LDKCOption_BigEndianScalarZ *tweak_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
        *tweak_copy = tweak;
        int64_t tweak_ref = tag_ptr(tweak_copy, true);
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
@@ -7724,7 +8045,7 @@ LDKCResult_SharedSecretNoneZ ecdh_LDKNodeSigner_jcall(const void* this_arg, LDKR
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SharedSecretNoneZ ret_conv = *(LDKCResult_SharedSecretNoneZ*)(ret_ptr);
+       LDKCResult_ThirtyTwoBytesNoneZ ret_conv = *(LDKCResult_ThirtyTwoBytesNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -7770,7 +8091,67 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKNodeSigner_jcall(const void
        }
        return ret_conv;
 }
-LDKCResult_SignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const void* this_arg, LDKUnsignedGossipMessage msg) {
+LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_request_LDKNodeSigner_jcall(const void* this_arg, const LDKUnsignedInvoiceRequest * invoice_request) {
+       LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKUnsignedInvoiceRequest invoice_request_var = *invoice_request;
+       int64_t invoice_request_ref = 0;
+       // WARNING: we may need a move here but no clone is available for LDKUnsignedInvoiceRequest
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_var);
+       invoice_request_ref = tag_ptr(invoice_request_var.inner, invoice_request_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->sign_bolt12_invoice_request_meth, invoice_request_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to sign_bolt12_invoice_request in LDKNodeSigner from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_SchnorrSignatureNoneZ sign_bolt12_invoice_LDKNodeSigner_jcall(const void* this_arg, const LDKUnsignedBolt12Invoice * invoice) {
+       LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKUnsignedBolt12Invoice invoice_var = *invoice;
+       int64_t invoice_ref = 0;
+       // WARNING: we may need a move here but no clone is available for LDKUnsignedBolt12Invoice
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_var);
+       invoice_ref = tag_ptr(invoice_var.inner, invoice_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->sign_bolt12_invoice_meth, invoice_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to sign_bolt12_invoice in LDKNodeSigner from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_SchnorrSignatureNoneZ ret_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_ECDSASignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const void* this_arg, LDKUnsignedGossipMessage msg) {
        LDKNodeSigner_JCalls *j_calls = (LDKNodeSigner_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -7791,7 +8172,7 @@ LDKCResult_SignatureNoneZ sign_gossip_message_LDKNodeSigner_jcall(const void* th
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
+       LDKCResult_ECDSASignatureNoneZ ret_conv = *(LDKCResult_ECDSASignatureNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -7817,6 +8198,10 @@ static inline LDKNodeSigner LDKNodeSigner_init (JNIEnv *env, jclass clz, jobject
        CHECK(calls->ecdh_meth != NULL);
        calls->sign_invoice_meth = (*env)->GetMethodID(env, c, "sign_invoice", "([B[BLorg/ldk/enums/Recipient;)J");
        CHECK(calls->sign_invoice_meth != NULL);
+       calls->sign_bolt12_invoice_request_meth = (*env)->GetMethodID(env, c, "sign_bolt12_invoice_request", "(J)J");
+       CHECK(calls->sign_bolt12_invoice_request_meth != NULL);
+       calls->sign_bolt12_invoice_meth = (*env)->GetMethodID(env, c, "sign_bolt12_invoice", "(J)J");
+       CHECK(calls->sign_bolt12_invoice_meth != NULL);
        calls->sign_gossip_message_meth = (*env)->GetMethodID(env, c, "sign_gossip_message", "(J)J");
        CHECK(calls->sign_gossip_message_meth != NULL);
 
@@ -7826,6 +8211,8 @@ static inline LDKNodeSigner LDKNodeSigner_init (JNIEnv *env, jclass clz, jobject
                .get_node_id = get_node_id_LDKNodeSigner_jcall,
                .ecdh = ecdh_LDKNodeSigner_jcall,
                .sign_invoice = sign_invoice_LDKNodeSigner_jcall,
+               .sign_bolt12_invoice_request = sign_bolt12_invoice_request_LDKNodeSigner_jcall,
+               .sign_bolt12_invoice = sign_bolt12_invoice_LDKNodeSigner_jcall,
                .sign_gossip_message = sign_gossip_message_LDKNodeSigner_jcall,
                .free = LDKNodeSigner_JCalls_free,
        };
@@ -7865,9 +8252,9 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1ecdh(JNIEnv *en
        (*env)->GetByteArrayRegion(env, other_key, 0, 33, other_key_ref.compressed_form);
        void* tweak_ptr = untag_ptr(tweak);
        CHECK_ACCESS(tweak_ptr);
-       LDKCOption_ScalarZ tweak_conv = *(LDKCOption_ScalarZ*)(tweak_ptr);
-       tweak_conv = COption_ScalarZ_clone((LDKCOption_ScalarZ*)untag_ptr(tweak));
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
+       LDKCOption_BigEndianScalarZ tweak_conv = *(LDKCOption_BigEndianScalarZ*)(tweak_ptr);
+       tweak_conv = COption_BigEndianScalarZ_clone((LDKCOption_BigEndianScalarZ*)untag_ptr(tweak));
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
        *ret_conv = (this_arg_conv->ecdh)(this_arg_conv->this_arg, recipient_conv, other_key_ref, tweak_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -7899,6 +8286,34 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1invoice(J
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1bolt12_1invoice_1request(JNIEnv *env, jclass clz, int64_t this_arg, int64_t invoice_request) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKNodeSigner* this_arg_conv = (LDKNodeSigner*)this_arg_ptr;
+       LDKUnsignedInvoiceRequest invoice_request_conv;
+       invoice_request_conv.inner = untag_ptr(invoice_request);
+       invoice_request_conv.is_owned = ptr_is_owned(invoice_request);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_request_conv);
+       invoice_request_conv.is_owned = false;
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = (this_arg_conv->sign_bolt12_invoice_request)(this_arg_conv->this_arg, &invoice_request_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1bolt12_1invoice(JNIEnv *env, jclass clz, int64_t this_arg, int64_t invoice) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKNodeSigner* this_arg_conv = (LDKNodeSigner*)this_arg_ptr;
+       LDKUnsignedBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = (this_arg_conv->sign_bolt12_invoice)(this_arg_conv->this_arg, &invoice_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1gossip_1message(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
@@ -7907,7 +8322,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1gossip_1m
        CHECK_ACCESS(msg_ptr);
        LDKUnsignedGossipMessage msg_conv = *(LDKUnsignedGossipMessage*)(msg_ptr);
        msg_conv = UnsignedGossipMessage_clone((LDKUnsignedGossipMessage*)untag_ptr(msg));
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_gossip_message)(this_arg_conv->this_arg, msg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -8023,7 +8438,7 @@ LDKCResult_WriteableEcdsaChannelSignerDecodeErrorZ read_chan_signer_LDKSignerPro
        }
        return ret_conv;
 }
-LDKCResult_ScriptNoneZ get_destination_script_LDKSignerProvider_jcall(const void* this_arg) {
+LDKCResult_CVec_u8ZNoneZ get_destination_script_LDKSignerProvider_jcall(const void* this_arg) {
        LDKSignerProvider_JCalls *j_calls = (LDKSignerProvider_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -8041,7 +8456,7 @@ LDKCResult_ScriptNoneZ get_destination_script_LDKSignerProvider_jcall(const void
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_ScriptNoneZ ret_conv = *(LDKCResult_ScriptNoneZ*)(ret_ptr);
+       LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -8152,7 +8567,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignerProvider_1get_1destin
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKSignerProvider* this_arg_conv = (LDKSignerProvider*)this_arg_ptr;
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
        *ret_conv = (this_arg_conv->get_destination_script)(this_arg_conv->this_arg);
        return tag_ptr(ret_conv, true);
 }
@@ -8499,48 +8914,48 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Router_1find_1route_1with_1
        return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelManagerZ_get_a(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelManagerZ* owner_conv = (LDKC2Tuple_BlockHashChannelManagerZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_BlockHashChannelManagerZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKChannelManager C2Tuple_BlockHashChannelManagerZ_get_b(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR owner){
+static inline struct LDKChannelManager C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *NONNULL_PTR owner){
        LDKChannelManager ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelManagerZ* owner_conv = (LDKC2Tuple_BlockHashChannelManagerZ*)untag_ptr(owner);
-       LDKChannelManager ret_var = C2Tuple_BlockHashChannelManagerZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)untag_ptr(owner);
+       LDKChannelManager ret_var = C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKC2Tuple_BlockHashChannelManagerZ *CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ThirtyTwoBytesChannelManagerZ *CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return &*owner->contents.result;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)untag_ptr(owner);
-       int64_t ret_ret = tag_ptr(CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(owner_conv), false);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)untag_ptr(owner);
+       int64_t ret_ret = tag_ptr(CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok(owner_conv), false);
        return ret_ret;
 }
 
-static inline struct LDKDecodeError CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -8812,93 +9227,100 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeEr
        return ret_ref;
 }
 
-static inline struct LDKOutPoint C2Tuple_OutPointScriptZ_get_a(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR owner){
+static inline struct LDKOutPoint C2Tuple_OutPointCVec_u8ZZ_get_a(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR owner){
        LDKOutPoint ret = owner->a;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_OutPointScriptZ* owner_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(owner);
-       LDKOutPoint ret_var = C2Tuple_OutPointScriptZ_get_a(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(owner);
+       LDKOutPoint ret_var = C2Tuple_OutPointCVec_u8ZZ_get_a(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKCVec_u8Z C2Tuple_OutPointScriptZ_get_b(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z C2Tuple_OutPointCVec_u8ZZ_get_b(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR owner){
        return CVec_u8Z_clone(&owner->b);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_OutPointScriptZ* owner_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = C2Tuple_OutPointScriptZ_get_b(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* owner_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_OutPointCVec_u8ZZ_get_b(owner_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;
 }
 
-static inline uint32_t C2Tuple_u32ScriptZ_get_a(LDKC2Tuple_u32ScriptZ *NONNULL_PTR owner){
+static inline uint32_t C2Tuple_u32CVec_u8ZZ_get_a(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_u32ScriptZ* owner_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(owner);
-       int32_t ret_conv = C2Tuple_u32ScriptZ_get_a(owner_conv);
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u32CVec_u8ZZ* owner_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(owner);
+       int32_t ret_conv = C2Tuple_u32CVec_u8ZZ_get_a(owner_conv);
        return ret_conv;
 }
 
-static inline struct LDKCVec_u8Z C2Tuple_u32ScriptZ_get_b(LDKC2Tuple_u32ScriptZ *NONNULL_PTR owner){
+static inline struct LDKCVec_u8Z C2Tuple_u32CVec_u8ZZ_get_b(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR owner){
        return CVec_u8Z_clone(&owner->b);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_u32ScriptZ* owner_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(owner);
-       LDKCVec_u8Z ret_var = C2Tuple_u32ScriptZ_get_b(owner_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_u32CVec_u8ZZ* owner_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = C2Tuple_u32CVec_u8ZZ_get_b(owner_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;
 }
 
-static inline LDKCVec_C2Tuple_u32ScriptZZ CVec_C2Tuple_u32ScriptZZ_clone(const LDKCVec_C2Tuple_u32ScriptZZ *orig) {
-       LDKCVec_C2Tuple_u32ScriptZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * orig->datalen, "LDKCVec_C2Tuple_u32ScriptZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_u32CVec_u8ZZZ CVec_C2Tuple_u32CVec_u8ZZZ_clone(const LDKCVec_C2Tuple_u32CVec_u8ZZZ *orig) {
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ) * orig->datalen, "LDKCVec_C2Tuple_u32CVec_u8ZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_u32ScriptZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_u32CVec_u8ZZ_clone(&orig->data[i]);
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKCVec_C2Tuple_u32ScriptZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR owner){
-       return CVec_C2Tuple_u32ScriptZZ_clone(&owner->b);
+static inline struct LDKCVec_C2Tuple_u32CVec_u8ZZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR owner){
+       return CVec_C2Tuple_u32CVec_u8ZZZ_clone(&owner->b);
 }
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_u32ScriptZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(owner_conv);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ ret_var = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b(owner_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 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];
-               ret_arr_ptr[v] = tag_ptr(ret_conv_21_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_u32CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+               *ret_conv_23_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
        return ret_arr;
 }
 
-static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *orig) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline LDKCVec_CommitmentTransactionZ CVec_CommitmentTransactionZ_clone(const LDKCVec_CommitmentTransactionZ *orig) {
+       LDKCVec_CommitmentTransactionZ ret = { .data = MALLOC(sizeof(LDKCommitmentTransaction) * orig->datalen, "LDKCVec_CommitmentTransactionZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = CommitmentTransaction_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -8928,22 +9350,22 @@ static inline LDKCVec_C2Tuple_u32TxOutZZ CVec_C2Tuple_u32TxOutZZ_clone(const LDK
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
+static inline struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR owner){
        return CVec_C2Tuple_u32TxOutZZ_clone(&owner->b);
 }
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_u32TxOutZZ ret_var = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(owner_conv);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_u32TxOutZZ ret_var = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b(owner_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);
@@ -8957,10 +9379,10 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2T
        return ret_arr;
 }
 
-static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -9057,49 +9479,49 @@ static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig)
        }
        return ret;
 }
-static inline struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelMonitorZ_get_a(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR owner){
        return ThirtyTwoBytes_clone(&owner->a);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* owner_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_BlockHashChannelMonitorZ_get_a(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKChannelMonitor C2Tuple_BlockHashChannelMonitorZ_get_b(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR owner){
+static inline struct LDKChannelMonitor C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR owner){
        LDKChannelMonitor ret = owner->b;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* owner_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(owner);
-       LDKChannelMonitor ret_var = C2Tuple_BlockHashChannelMonitorZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* owner_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(owner);
+       LDKChannelMonitor ret_var = C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline struct LDKC2Tuple_BlockHashChannelMonitorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return C2Tuple_BlockHashChannelMonitorZ_clone(&*owner->contents.result);
+       return C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok(owner_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline struct LDKDecodeError CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -9592,60 +10014,60 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDeco
        return ret_ref;
 }
 
-static jclass LDKCOption_NetAddressZ_Some_class = NULL;
-static jmethodID LDKCOption_NetAddressZ_Some_meth = NULL;
-static jclass LDKCOption_NetAddressZ_None_class = NULL;
-static jmethodID LDKCOption_NetAddressZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1NetAddressZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_NetAddressZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_NetAddressZ$Some"));
-       CHECK(LDKCOption_NetAddressZ_Some_class != NULL);
-       LDKCOption_NetAddressZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_NetAddressZ_Some_class, "<init>", "(J)V");
-       CHECK(LDKCOption_NetAddressZ_Some_meth != NULL);
-       LDKCOption_NetAddressZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_NetAddressZ$None"));
-       CHECK(LDKCOption_NetAddressZ_None_class != NULL);
-       LDKCOption_NetAddressZ_None_meth = (*env)->GetMethodID(env, LDKCOption_NetAddressZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_NetAddressZ_None_meth != NULL);
+static jclass LDKCOption_SocketAddressZ_Some_class = NULL;
+static jmethodID LDKCOption_SocketAddressZ_Some_meth = NULL;
+static jclass LDKCOption_SocketAddressZ_None_class = NULL;
+static jmethodID LDKCOption_SocketAddressZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1SocketAddressZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_SocketAddressZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SocketAddressZ$Some"));
+       CHECK(LDKCOption_SocketAddressZ_Some_class != NULL);
+       LDKCOption_SocketAddressZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_SocketAddressZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_SocketAddressZ_Some_meth != NULL);
+       LDKCOption_SocketAddressZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SocketAddressZ$None"));
+       CHECK(LDKCOption_SocketAddressZ_None_class != NULL);
+       LDKCOption_SocketAddressZ_None_meth = (*env)->GetMethodID(env, LDKCOption_SocketAddressZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_SocketAddressZ_None_meth != NULL);
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1NetAddressZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_NetAddressZ *obj = (LDKCOption_NetAddressZ*)untag_ptr(ptr);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1SocketAddressZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_SocketAddressZ *obj = (LDKCOption_SocketAddressZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_NetAddressZ_Some: {
+               case LDKCOption_SocketAddressZ_Some: {
                        int64_t some_ref = tag_ptr(&obj->some, false);
-                       return (*env)->NewObject(env, LDKCOption_NetAddressZ_Some_class, LDKCOption_NetAddressZ_Some_meth, some_ref);
+                       return (*env)->NewObject(env, LDKCOption_SocketAddressZ_Some_class, LDKCOption_SocketAddressZ_Some_meth, some_ref);
                }
-               case LDKCOption_NetAddressZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_NetAddressZ_None_class, LDKCOption_NetAddressZ_None_meth);
+               case LDKCOption_SocketAddressZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_SocketAddressZ_None_class, LDKCOption_SocketAddressZ_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKPublicKey C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR owner){
+static inline struct LDKPublicKey C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR owner){
        return owner->a;
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_PublicKeyCOption_NetAddressZZ_get_a(owner_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a(owner_conv).compressed_form);
        return ret_arr;
 }
 
-static inline struct LDKCOption_NetAddressZ C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR owner){
-       return COption_NetAddressZ_clone(&owner->b);
+static inline struct LDKCOption_SocketAddressZ C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR owner){
+       return COption_SocketAddressZ_clone(&owner->b);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(owner);
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = C2Tuple_PublicKeyCOption_NetAddressZZ_get_b(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* owner_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(owner);
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_clone(const LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ *orig) {
-       LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ clone bytes"), .datalen = orig->datalen };
+static inline LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_clone(const LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ *orig) {
+       LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_PublicKeyCOption_NetAddressZZ_clone(&orig->data[i]);
+               ret.data[i] = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(&orig->data[i]);
        }
        return ret;
 }
@@ -9778,88 +10200,170 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1u32GraphSyncErrorZ
        return ret_ref;
 }
 
-static jclass LDKCOption_KeyPairZ_Some_class = NULL;
-static jmethodID LDKCOption_KeyPairZ_Some_meth = NULL;
-static jclass LDKCOption_KeyPairZ_None_class = NULL;
-static jmethodID LDKCOption_KeyPairZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1KeyPairZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_KeyPairZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_KeyPairZ$Some"));
-       CHECK(LDKCOption_KeyPairZ_Some_class != NULL);
-       LDKCOption_KeyPairZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_KeyPairZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_KeyPairZ_Some_meth != NULL);
-       LDKCOption_KeyPairZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_KeyPairZ$None"));
-       CHECK(LDKCOption_KeyPairZ_None_class != NULL);
-       LDKCOption_KeyPairZ_None_meth = (*env)->GetMethodID(env, LDKCOption_KeyPairZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_KeyPairZ_None_meth != NULL);
+static inline struct LDKCVec_u8Z CResult_CVec_u8ZIOErrorZ_get_ok(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return CVec_u8Z_clone(&*owner->contents.result);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZIOErrorZ* owner_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(owner);
+       LDKCVec_u8Z ret_var = CResult_CVec_u8ZIOErrorZ_get_ok(owner_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;
+}
+
+static inline enum LDKIOError CResult_CVec_u8ZIOErrorZ_get_err(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_u8ZIOErrorZ* owner_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_u8ZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static inline struct LDKCVec_StrZ CResult_CVec_StrZIOErrorZ_get_ok(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return *owner->contents.result;
+}
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_StrZIOErrorZ* owner_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(owner);
+       LDKCVec_StrZ ret_var = CResult_CVec_StrZIOErrorZ_get_ok(owner_conv);
+       jobjectArray ret_arr = NULL;
+       ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, String_clz, NULL);
+       ;
+       jstring *ret_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, ret_arr, NULL);
+       for (size_t i = 0; i < ret_var.datalen; i++) {
+               LDKStr ret_conv_8_str = ret_var.data[i];
+               jstring ret_conv_8_conv = str_ref_to_java(env, ret_conv_8_str.chars, ret_conv_8_str.len);
+               ret_arr_ptr[i] = ret_conv_8_conv;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       return ret_arr;
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1KeyPairZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_KeyPairZ *obj = (LDKCOption_KeyPairZ*)untag_ptr(ptr);
+
+static inline enum LDKIOError CResult_CVec_StrZIOErrorZ_get_err(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_StrZIOErrorZ* owner_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_StrZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static inline LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_clone(const LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ *orig) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(&orig->data[i]);
+       }
+       return ret;
+}
+static inline struct LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ ret_var = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok(owner_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 o = 0; o < ret_var.datalen; o++) {
+               LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+               *ret_conv_40_conv = ret_var.data[o];
+               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+static inline enum LDKIOError CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static inline struct LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(owner);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline enum LDKIOError CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* owner_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKIOError_to_java(env, CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
+static jclass LDKCOption_SecretKeyZ_Some_class = NULL;
+static jmethodID LDKCOption_SecretKeyZ_Some_meth = NULL;
+static jclass LDKCOption_SecretKeyZ_None_class = NULL;
+static jmethodID LDKCOption_SecretKeyZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1SecretKeyZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_SecretKeyZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SecretKeyZ$Some"));
+       CHECK(LDKCOption_SecretKeyZ_Some_class != NULL);
+       LDKCOption_SecretKeyZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_SecretKeyZ_Some_class, "<init>", "([B)V");
+       CHECK(LDKCOption_SecretKeyZ_Some_meth != NULL);
+       LDKCOption_SecretKeyZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_SecretKeyZ$None"));
+       CHECK(LDKCOption_SecretKeyZ_None_class != NULL);
+       LDKCOption_SecretKeyZ_None_meth = (*env)->GetMethodID(env, LDKCOption_SecretKeyZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_SecretKeyZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1SecretKeyZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_SecretKeyZ *obj = (LDKCOption_SecretKeyZ*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_KeyPairZ_Some: {
+               case LDKCOption_SecretKeyZ_Some: {
                        int8_tArray some_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.bytes);
-                       return (*env)->NewObject(env, LDKCOption_KeyPairZ_Some_class, LDKCOption_KeyPairZ_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_SecretKeyZ_Some_class, LDKCOption_SecretKeyZ_Some_meth, some_arr);
                }
-               case LDKCOption_KeyPairZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_KeyPairZ_None_class, LDKCOption_KeyPairZ_None_meth);
+               case LDKCOption_SecretKeyZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_SecretKeyZ_None_class, LDKCOption_SecretKeyZ_None_meth);
                }
                default: abort();
        }
 }
-static inline struct LDKCOption_KeyPairZ CResult_COption_KeyPairZNoneZ_get_ok(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return COption_KeyPairZ_clone(&*owner->contents.result);
+static inline struct LDKVerifiedInvoiceRequest CResult_VerifiedInvoiceRequestNoneZ_get_ok(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR owner){
+       LDKVerifiedInvoiceRequest ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_COption_KeyPairZNoneZ* owner_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(owner);
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = CResult_COption_KeyPairZNoneZ_get_ok(owner_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* owner_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(owner);
+       LDKVerifiedInvoiceRequest ret_var = CResult_VerifiedInvoiceRequestNoneZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline void CResult_COption_KeyPairZNoneZ_get_err(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR owner){
+static inline void CResult_VerifiedInvoiceRequestNoneZ_get_err(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_COption_KeyPairZNoneZ* owner_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(owner);
-       CResult_COption_KeyPairZNoneZ_get_err(owner_conv);
-}
-
-static jclass LDKCOption_ScriptZ_Some_class = NULL;
-static jmethodID LDKCOption_ScriptZ_Some_meth = NULL;
-static jclass LDKCOption_ScriptZ_None_class = NULL;
-static jmethodID LDKCOption_ScriptZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ScriptZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_ScriptZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScriptZ$Some"));
-       CHECK(LDKCOption_ScriptZ_Some_class != NULL);
-       LDKCOption_ScriptZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ScriptZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_ScriptZ_Some_meth != NULL);
-       LDKCOption_ScriptZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_ScriptZ$None"));
-       CHECK(LDKCOption_ScriptZ_None_class != NULL);
-       LDKCOption_ScriptZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ScriptZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_ScriptZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ScriptZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_ScriptZ *obj = (LDKCOption_ScriptZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_ScriptZ_Some: {
-                       LDKCVec_u8Z some_var = obj->some;
-                       int8_tArray some_arr = (*env)->NewByteArray(env, some_var.datalen);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, some_var.datalen, some_var.data);
-                       return (*env)->NewObject(env, LDKCOption_ScriptZ_Some_class, LDKCOption_ScriptZ_Some_meth, some_arr);
-               }
-               case LDKCOption_ScriptZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_ScriptZ_None_class, LDKCOption_ScriptZ_None_meth);
-               }
-               default: abort();
-       }
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* owner_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(owner);
+       CResult_VerifiedInvoiceRequestNoneZ_get_err(owner_conv);
 }
+
 static inline LDKCVec_WitnessZ CVec_WitnessZ_clone(const LDKCVec_WitnessZ *orig) {
        LDKCVec_WitnessZ ret = { .data = MALLOC(sizeof(LDKWitness) * orig->datalen, "LDKCVec_WitnessZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -9896,60 +10400,52 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1i64Z_1ref_1from
                default: abort();
        }
 }
-static jclass LDKCOption_TxidZ_Some_class = NULL;
-static jmethodID LDKCOption_TxidZ_Some_meth = NULL;
-static jclass LDKCOption_TxidZ_None_class = NULL;
-static jmethodID LDKCOption_TxidZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1TxidZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_TxidZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_TxidZ$Some"));
-       CHECK(LDKCOption_TxidZ_Some_class != NULL);
-       LDKCOption_TxidZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_TxidZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_TxidZ_Some_meth != NULL);
-       LDKCOption_TxidZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_TxidZ$None"));
-       CHECK(LDKCOption_TxidZ_None_class != NULL);
-       LDKCOption_TxidZ_None_meth = (*env)->GetMethodID(env, LDKCOption_TxidZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_TxidZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1TxidZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_TxidZ *obj = (LDKCOption_TxidZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_TxidZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_TxidZ_Some_class, LDKCOption_TxidZ_Some_meth, some_arr);
-               }
-               case LDKCOption_TxidZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_TxidZ_None_class, LDKCOption_TxidZ_None_meth);
-               }
-               default: abort();
-       }
-}
-static inline struct LDKNetAddress CResult_NetAddressDecodeErrorZ_get_ok(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKSocketAddress CResult_SocketAddressDecodeErrorZ_get_ok(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
-       return NetAddress_clone(&*owner->contents.result);
+       return SocketAddress_clone(&*owner->contents.result);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NetAddressDecodeErrorZ* owner_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(owner);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = CResult_NetAddressDecodeErrorZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressDecodeErrorZ* owner_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(owner);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = CResult_SocketAddressDecodeErrorZ_get_ok(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline struct LDKDecodeError CResult_NetAddressDecodeErrorZ_get_err(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR owner){
+static inline struct LDKDecodeError CResult_SocketAddressDecodeErrorZ_get_err(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return DecodeError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_NetAddressDecodeErrorZ* owner_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressDecodeErrorZ* owner_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(owner);
        LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
-       *ret_copy = CResult_NetAddressDecodeErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_SocketAddressDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKSocketAddress CResult_SocketAddressSocketAddressParseErrorZ_get_ok(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return SocketAddress_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* owner_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(owner);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = CResult_SocketAddressSocketAddressParseErrorZ_get_ok(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
+static inline enum LDKSocketAddressParseError CResult_SocketAddressSocketAddressParseErrorZ_get_err(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return SocketAddressParseError_clone(&*owner->contents.err);
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* owner_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, CResult_SocketAddressSocketAddressParseErrorZ_get_err(owner_conv));
+       return ret_conv;
+}
+
 static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_UpdateAddHTLCZ *orig) {
        LDKCVec_UpdateAddHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateAddHTLC) * orig->datalen, "LDKCVec_UpdateAddHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -11550,13 +12046,13 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTran
        CResult_TrustedCommitmentTransactionNoneZ_get_err(owner_conv);
 }
 
-static inline struct LDKCVec_SignatureZ CResult_CVec_SignatureZNoneZ_get_ok(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR owner){
+static inline struct LDKCVec_ECDSASignatureZ CResult_CVec_ECDSASignatureZNoneZ_get_ok(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_SignatureZNoneZ* owner_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(owner);
-       LDKCVec_SignatureZ ret_var = CResult_CVec_SignatureZNoneZ_get_ok(owner_conv);
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* owner_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(owner);
+       LDKCVec_ECDSASignatureZ ret_var = CResult_CVec_ECDSASignatureZNoneZ_get_ok(owner_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
        ;
@@ -11569,15 +12065,44 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1Signatu
        return ret_arr;
 }
 
-static inline void CResult_CVec_SignatureZNoneZ_get_err(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR owner){
+static inline void CResult_CVec_ECDSASignatureZNoneZ_get_err(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_SignatureZNoneZ* owner_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(owner);
-       CResult_CVec_SignatureZNoneZ_get_err(owner_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* owner_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(owner);
+       CResult_CVec_ECDSASignatureZNoneZ_get_err(owner_conv);
+}
+
+static jclass LDKCOption_usizeZ_Some_class = NULL;
+static jmethodID LDKCOption_usizeZ_Some_meth = NULL;
+static jclass LDKCOption_usizeZ_None_class = NULL;
+static jmethodID LDKCOption_usizeZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1usizeZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_usizeZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_usizeZ$Some"));
+       CHECK(LDKCOption_usizeZ_Some_class != NULL);
+       LDKCOption_usizeZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_usizeZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_usizeZ_Some_meth != NULL);
+       LDKCOption_usizeZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_usizeZ$None"));
+       CHECK(LDKCOption_usizeZ_None_class != NULL);
+       LDKCOption_usizeZ_None_meth = (*env)->GetMethodID(env, LDKCOption_usizeZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_usizeZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1usizeZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_usizeZ *obj = (LDKCOption_usizeZ*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKCOption_usizeZ_Some: {
+                       int64_t some_conv = obj->some;
+                       return (*env)->NewObject(env, LDKCOption_usizeZ_Some_class, LDKCOption_usizeZ_Some_meth, some_conv);
+               }
+               case LDKCOption_usizeZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_usizeZ_None_class, LDKCOption_usizeZ_None_meth);
+               }
+               default: abort();
+       }
 }
-
 static inline struct LDKShutdownScript CResult_ShutdownScriptDecodeErrorZ_get_ok(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR owner){
        LDKShutdownScript ret = *owner->contents.result;
        ret.is_owned = false;
@@ -11689,6 +12214,32 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDeco
        return ret_ref;
 }
 
+static inline struct LDKClaimedHTLC CResult_ClaimedHTLCDecodeErrorZ_get_ok(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR owner){
+       LDKClaimedHTLC ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* owner_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(owner);
+       LDKClaimedHTLC ret_var = CResult_ClaimedHTLCDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ClaimedHTLCDecodeErrorZ_get_err(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* owner_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ClaimedHTLCDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static jclass LDKPathFailure_InitialSend_class = NULL;
 static jmethodID LDKPathFailure_InitialSend_meth = NULL;
 static jclass LDKPathFailure_OnPath_class = NULL;
@@ -11790,6 +12341,8 @@ static jclass LDKClosureReason_OutdatedChannelManager_class = NULL;
 static jmethodID LDKClosureReason_OutdatedChannelManager_meth = NULL;
 static jclass LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class = NULL;
 static jmethodID LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth = NULL;
+static jclass LDKClosureReason_FundingBatchClosure_class = NULL;
+static jmethodID LDKClosureReason_FundingBatchClosure_meth = NULL;
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JNIEnv *env, jclass clz) {
        LDKClosureReason_CounterpartyForceClosed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKClosureReason$CounterpartyForceClosed"));
@@ -11836,6 +12389,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JN
        CHECK(LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class != NULL);
        LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth = (*env)->GetMethodID(env, LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class, "<init>", "()V");
        CHECK(LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth != NULL);
+       LDKClosureReason_FundingBatchClosure_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKClosureReason$FundingBatchClosure"));
+       CHECK(LDKClosureReason_FundingBatchClosure_class != NULL);
+       LDKClosureReason_FundingBatchClosure_meth = (*env)->GetMethodID(env, LDKClosureReason_FundingBatchClosure_class, "<init>", "()V");
+       CHECK(LDKClosureReason_FundingBatchClosure_meth != NULL);
 }
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
        LDKClosureReason *obj = (LDKClosureReason*)untag_ptr(ptr);
@@ -11873,6 +12431,9 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from
                case LDKClosureReason_CounterpartyCoopClosedUnfundedChannel: {
                        return (*env)->NewObject(env, LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_class, LDKClosureReason_CounterpartyCoopClosedUnfundedChannel_meth);
                }
+               case LDKClosureReason_FundingBatchClosure: {
+                       return (*env)->NewObject(env, LDKClosureReason_FundingBatchClosure_class, LDKClosureReason_FundingBatchClosure_meth);
+               }
                default: abort();
        }
 }
@@ -12060,65 +12621,42 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentFailureReas
        return ret_ref;
 }
 
-static jclass LDKCOption_u128Z_Some_class = NULL;
-static jmethodID LDKCOption_u128Z_Some_meth = NULL;
-static jclass LDKCOption_u128Z_None_class = NULL;
-static jmethodID LDKCOption_u128Z_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u128Z_init (JNIEnv *env, jclass clz) {
-       LDKCOption_u128Z_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u128Z$Some"));
-       CHECK(LDKCOption_u128Z_Some_class != NULL);
-       LDKCOption_u128Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_u128Z_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_u128Z_Some_meth != NULL);
-       LDKCOption_u128Z_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_u128Z$None"));
-       CHECK(LDKCOption_u128Z_None_class != NULL);
-       LDKCOption_u128Z_None_meth = (*env)->GetMethodID(env, LDKCOption_u128Z_None_class, "<init>", "()V");
-       CHECK(LDKCOption_u128Z_None_meth != NULL);
+static jclass LDKCOption_U128Z_Some_class = NULL;
+static jmethodID LDKCOption_U128Z_Some_meth = NULL;
+static jclass LDKCOption_U128Z_None_class = NULL;
+static jmethodID LDKCOption_U128Z_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1U128Z_init (JNIEnv *env, jclass clz) {
+       LDKCOption_U128Z_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_U128Z$Some"));
+       CHECK(LDKCOption_U128Z_Some_class != NULL);
+       LDKCOption_U128Z_Some_meth = (*env)->GetMethodID(env, LDKCOption_U128Z_Some_class, "<init>", "([B)V");
+       CHECK(LDKCOption_U128Z_Some_meth != NULL);
+       LDKCOption_U128Z_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_U128Z$None"));
+       CHECK(LDKCOption_U128Z_None_class != NULL);
+       LDKCOption_U128Z_None_meth = (*env)->GetMethodID(env, LDKCOption_U128Z_None_class, "<init>", "()V");
+       CHECK(LDKCOption_U128Z_None_meth != NULL);
 }
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u128Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_u128Z *obj = (LDKCOption_u128Z*)untag_ptr(ptr);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1U128Z_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_U128Z *obj = (LDKCOption_U128Z*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKCOption_u128Z_Some: {
+               case LDKCOption_U128Z_Some: {
                        int8_tArray some_arr = (*env)->NewByteArray(env, 16);
                        (*env)->SetByteArrayRegion(env, some_arr, 0, 16, obj->some.le_bytes);
-                       return (*env)->NewObject(env, LDKCOption_u128Z_Some_class, LDKCOption_u128Z_Some_meth, some_arr);
+                       return (*env)->NewObject(env, LDKCOption_U128Z_Some_class, LDKCOption_U128Z_Some_meth, some_arr);
                }
-               case LDKCOption_u128Z_None: {
-                       return (*env)->NewObject(env, LDKCOption_u128Z_None_class, LDKCOption_u128Z_None_meth);
+               case LDKCOption_U128Z_None: {
+                       return (*env)->NewObject(env, LDKCOption_U128Z_None_class, LDKCOption_U128Z_None_meth);
                }
                default: abort();
        }
 }
-static jclass LDKCOption_PaymentIdZ_Some_class = NULL;
-static jmethodID LDKCOption_PaymentIdZ_Some_meth = NULL;
-static jclass LDKCOption_PaymentIdZ_None_class = NULL;
-static jmethodID LDKCOption_PaymentIdZ_None_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentIdZ_init (JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentIdZ_Some_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentIdZ$Some"));
-       CHECK(LDKCOption_PaymentIdZ_Some_class != NULL);
-       LDKCOption_PaymentIdZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_PaymentIdZ_Some_class, "<init>", "([B)V");
-       CHECK(LDKCOption_PaymentIdZ_Some_meth != NULL);
-       LDKCOption_PaymentIdZ_None_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKCOption_PaymentIdZ$None"));
-       CHECK(LDKCOption_PaymentIdZ_None_class != NULL);
-       LDKCOption_PaymentIdZ_None_meth = (*env)->GetMethodID(env, LDKCOption_PaymentIdZ_None_class, "<init>", "()V");
-       CHECK(LDKCOption_PaymentIdZ_None_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentIdZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKCOption_PaymentIdZ *obj = (LDKCOption_PaymentIdZ*)untag_ptr(ptr);
-       switch(obj->tag) {
-               case LDKCOption_PaymentIdZ_Some: {
-                       int8_tArray some_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, some_arr, 0, 32, obj->some.data);
-                       return (*env)->NewObject(env, LDKCOption_PaymentIdZ_Some_class, LDKCOption_PaymentIdZ_Some_meth, some_arr);
-               }
-               case LDKCOption_PaymentIdZ_None: {
-                       return (*env)->NewObject(env, LDKCOption_PaymentIdZ_None_class, LDKCOption_PaymentIdZ_None_meth);
-               }
-               default: abort();
+static inline LDKCVec_ClaimedHTLCZ CVec_ClaimedHTLCZ_clone(const LDKCVec_ClaimedHTLCZ *orig) {
+       LDKCVec_ClaimedHTLCZ ret = { .data = MALLOC(sizeof(LDKClaimedHTLC) * orig->datalen, "LDKCVec_ClaimedHTLCZ clone bytes"), .datalen = orig->datalen };
+       for (size_t i = 0; i < ret.datalen; i++) {
+               ret.data[i] = ClaimedHTLC_clone(&orig->data[i]);
        }
+       return ret;
 }
 static jclass LDKCOption_PaymentFailureReasonZ_Some_class = NULL;
 static jmethodID LDKCOption_PaymentFailureReasonZ_Some_meth = NULL;
@@ -12265,12 +12803,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *en
        LDKEvent_PaymentClaimable_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentClaimable"));
        CHECK(LDKEvent_PaymentClaimable_class != NULL);
-       LDKEvent_PaymentClaimable_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimable_class, "<init>", "([B[BJJJJ[BJJ)V");
+       LDKEvent_PaymentClaimable_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimable_class, "<init>", "([B[BJJJJJJJ)V");
        CHECK(LDKEvent_PaymentClaimable_meth != NULL);
        LDKEvent_PaymentClaimed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentClaimed"));
        CHECK(LDKEvent_PaymentClaimed_class != NULL);
-       LDKEvent_PaymentClaimed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimed_class, "<init>", "([B[BJJ)V");
+       LDKEvent_PaymentClaimed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentClaimed_class, "<init>", "([B[BJJ[JJ)V");
        CHECK(LDKEvent_PaymentClaimed_meth != NULL);
        LDKEvent_PaymentSent_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentSent"));
@@ -12315,17 +12853,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *en
        LDKEvent_SpendableOutputs_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$SpendableOutputs"));
        CHECK(LDKEvent_SpendableOutputs_class != NULL);
-       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([J)V");
+       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([JJ)V");
        CHECK(LDKEvent_SpendableOutputs_meth != NULL);
        LDKEvent_PaymentForwarded_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$PaymentForwarded"));
        CHECK(LDKEvent_PaymentForwarded_class != NULL);
-       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "([B[BJZJ)V");
+       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "(JJJZJ)V");
        CHECK(LDKEvent_PaymentForwarded_meth != NULL);
        LDKEvent_ChannelPending_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$ChannelPending"));
        CHECK(LDKEvent_ChannelPending_class != NULL);
-       LDKEvent_ChannelPending_meth = (*env)->GetMethodID(env, LDKEvent_ChannelPending_class, "<init>", "([B[B[B[BJ)V");
+       LDKEvent_ChannelPending_meth = (*env)->GetMethodID(env, LDKEvent_ChannelPending_class, "<init>", "([B[BJ[BJ)V");
        CHECK(LDKEvent_ChannelPending_meth != NULL);
        LDKEvent_ChannelReady_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$ChannelReady"));
@@ -12335,7 +12873,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *en
        LDKEvent_ChannelClosed_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$ChannelClosed"));
        CHECK(LDKEvent_ChannelClosed_class != NULL);
-       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([B[BJ)V");
+       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([B[BJ[BJ)V");
        CHECK(LDKEvent_ChannelClosed_meth != NULL);
        LDKEvent_DiscardFunding_class =
                (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKEvent$DiscardFunding"));
@@ -12386,11 +12924,10 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                        int64_t amount_msat_conv = obj->payment_claimable.amount_msat;
                        int64_t counterparty_skimmed_fee_msat_conv = obj->payment_claimable.counterparty_skimmed_fee_msat;
                        int64_t purpose_ref = tag_ptr(&obj->payment_claimable.purpose, false);
-                       int8_tArray via_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, via_channel_id_arr, 0, 32, obj->payment_claimable.via_channel_id.data);
+                       int64_t via_channel_id_ref = tag_ptr(&obj->payment_claimable.via_channel_id, false);
                        int64_t via_user_channel_id_ref = tag_ptr(&obj->payment_claimable.via_user_channel_id, false);
                        int64_t claim_deadline_ref = tag_ptr(&obj->payment_claimable.claim_deadline, false);
-                       return (*env)->NewObject(env, LDKEvent_PaymentClaimable_class, LDKEvent_PaymentClaimable_meth, receiver_node_id_arr, payment_hash_arr, onion_fields_ref, amount_msat_conv, counterparty_skimmed_fee_msat_conv, purpose_ref, via_channel_id_arr, via_user_channel_id_ref, claim_deadline_ref);
+                       return (*env)->NewObject(env, LDKEvent_PaymentClaimable_class, LDKEvent_PaymentClaimable_meth, receiver_node_id_arr, payment_hash_arr, onion_fields_ref, amount_msat_conv, counterparty_skimmed_fee_msat_conv, purpose_ref, via_channel_id_ref, via_user_channel_id_ref, claim_deadline_ref);
                }
                case LDKEvent_PaymentClaimed: {
                        int8_tArray receiver_node_id_arr = (*env)->NewByteArray(env, 33);
@@ -12399,7 +12936,20 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                        (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_claimed.payment_hash.data);
                        int64_t amount_msat_conv = obj->payment_claimed.amount_msat;
                        int64_t purpose_ref = tag_ptr(&obj->payment_claimed.purpose, false);
-                       return (*env)->NewObject(env, LDKEvent_PaymentClaimed_class, LDKEvent_PaymentClaimed_meth, receiver_node_id_arr, payment_hash_arr, amount_msat_conv, purpose_ref);
+                       LDKCVec_ClaimedHTLCZ htlcs_var = obj->payment_claimed.htlcs;
+                       int64_tArray htlcs_arr = NULL;
+                       htlcs_arr = (*env)->NewLongArray(env, htlcs_var.datalen);
+                       int64_t *htlcs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, htlcs_arr, NULL);
+                       for (size_t n = 0; n < htlcs_var.datalen; n++) {
+                               LDKClaimedHTLC htlcs_conv_13_var = htlcs_var.data[n];
+                               int64_t htlcs_conv_13_ref = 0;
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_var);
+                               htlcs_conv_13_ref = tag_ptr(htlcs_conv_13_var.inner, false);
+                               htlcs_arr_ptr[n] = htlcs_conv_13_ref;
+                       }
+                       (*env)->ReleasePrimitiveArrayCritical(env, htlcs_arr, htlcs_arr_ptr, 0);
+                       int64_t sender_intended_total_msat_ref = tag_ptr(&obj->payment_claimed.sender_intended_total_msat, false);
+                       return (*env)->NewObject(env, LDKEvent_PaymentClaimed_class, LDKEvent_PaymentClaimed_meth, receiver_node_id_arr, payment_hash_arr, amount_msat_conv, purpose_ref, htlcs_arr, sender_intended_total_msat_ref);
                }
                case LDKEvent_PaymentSent: {
                        int64_t payment_id_ref = tag_ptr(&obj->payment_sent.payment_id, false);
@@ -12488,32 +13038,30 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                                outputs_arr_ptr[b] = outputs_conv_27_ref;
                        }
                        (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0);
-                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr);
+                       int64_t channel_id_ref = tag_ptr(&obj->spendable_outputs.channel_id, false);
+                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr, channel_id_ref);
                }
                case LDKEvent_PaymentForwarded: {
-                       int8_tArray prev_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, prev_channel_id_arr, 0, 32, obj->payment_forwarded.prev_channel_id.data);
-                       int8_tArray next_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, next_channel_id_arr, 0, 32, obj->payment_forwarded.next_channel_id.data);
+                       int64_t prev_channel_id_ref = tag_ptr(&obj->payment_forwarded.prev_channel_id, false);
+                       int64_t next_channel_id_ref = tag_ptr(&obj->payment_forwarded.next_channel_id, false);
                        int64_t fee_earned_msat_ref = tag_ptr(&obj->payment_forwarded.fee_earned_msat, false);
                        jboolean claim_from_onchain_tx_conv = obj->payment_forwarded.claim_from_onchain_tx;
                        int64_t outbound_amount_forwarded_msat_ref = tag_ptr(&obj->payment_forwarded.outbound_amount_forwarded_msat, false);
-                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, prev_channel_id_arr, next_channel_id_arr, fee_earned_msat_ref, claim_from_onchain_tx_conv, outbound_amount_forwarded_msat_ref);
+                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, prev_channel_id_ref, next_channel_id_ref, fee_earned_msat_ref, claim_from_onchain_tx_conv, outbound_amount_forwarded_msat_ref);
                }
                case LDKEvent_ChannelPending: {
                        int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
                        (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->channel_pending.channel_id.data);
                        int8_tArray user_channel_id_arr = (*env)->NewByteArray(env, 16);
                        (*env)->SetByteArrayRegion(env, user_channel_id_arr, 0, 16, obj->channel_pending.user_channel_id.le_bytes);
-                       int8_tArray former_temporary_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, former_temporary_channel_id_arr, 0, 32, obj->channel_pending.former_temporary_channel_id.data);
+                       int64_t former_temporary_channel_id_ref = tag_ptr(&obj->channel_pending.former_temporary_channel_id, false);
                        int8_tArray counterparty_node_id_arr = (*env)->NewByteArray(env, 33);
                        (*env)->SetByteArrayRegion(env, counterparty_node_id_arr, 0, 33, obj->channel_pending.counterparty_node_id.compressed_form);
                        LDKOutPoint funding_txo_var = obj->channel_pending.funding_txo;
                        int64_t funding_txo_ref = 0;
                        CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
                        funding_txo_ref = tag_ptr(funding_txo_var.inner, false);
-                       return (*env)->NewObject(env, LDKEvent_ChannelPending_class, LDKEvent_ChannelPending_meth, channel_id_arr, user_channel_id_arr, former_temporary_channel_id_arr, counterparty_node_id_arr, funding_txo_ref);
+                       return (*env)->NewObject(env, LDKEvent_ChannelPending_class, LDKEvent_ChannelPending_meth, channel_id_arr, user_channel_id_arr, former_temporary_channel_id_ref, counterparty_node_id_arr, funding_txo_ref);
                }
                case LDKEvent_ChannelReady: {
                        int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
@@ -12534,7 +13082,10 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JN
                        int8_tArray user_channel_id_arr = (*env)->NewByteArray(env, 16);
                        (*env)->SetByteArrayRegion(env, user_channel_id_arr, 0, 16, obj->channel_closed.user_channel_id.le_bytes);
                        int64_t reason_ref = tag_ptr(&obj->channel_closed.reason, false);
-                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, user_channel_id_arr, reason_ref);
+                       int8_tArray counterparty_node_id_arr = (*env)->NewByteArray(env, 33);
+                       (*env)->SetByteArrayRegion(env, counterparty_node_id_arr, 0, 33, obj->channel_closed.counterparty_node_id.compressed_form);
+                       int64_t channel_capacity_sats_ref = tag_ptr(&obj->channel_closed.channel_capacity_sats, false);
+                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, user_channel_id_arr, reason_ref, counterparty_node_id_arr, channel_capacity_sats_ref);
                }
                case LDKEvent_DiscardFunding: {
                        int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
@@ -12623,43 +13174,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDec
        return ret_ref;
 }
 
-static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(const LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *orig) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
-       for (size_t i = 0; i < ret.datalen; i++) {
-               ret.data[i] = C2Tuple_BlockHashChannelMonitorZ_clone(&orig->data[i]);
-       }
-       return ret;
-}
-static inline struct LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR owner){
-CHECK(owner->result_ok);
-       return CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(&*owner->contents.result);
-}
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(owner);
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret_var = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(owner_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 j = 0; j < ret_var.datalen; j++) {
-               LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv_35_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-               *ret_conv_35_conv = ret_var.data[j];
-               ret_arr_ptr[j] = tag_ptr(ret_conv_35_conv, true);
-       }
-       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-static inline enum LDKIOError CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR owner){
-CHECK(!owner->result_ok);
-       return *owner->contents.err;
-}
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKIOError_to_java(env, CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(owner_conv));
-       return ret_conv;
-}
-
 static jclass LDKBolt11ParseError_Bech32Error_class = NULL;
 static jmethodID LDKBolt11ParseError_Bech32Error_meth = NULL;
 static jclass LDKBolt11ParseError_ParseAmountError_class = NULL;
@@ -12996,27 +13510,27 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawBolt11Invoice_1
        return ret_ref;
 }
 
-static inline struct LDKPayeePubKey CResult_PayeePubKeyErrorZ_get_ok(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR owner){
+static inline struct LDKPayeePubKey CResult_PayeePubKeySecp256k1ErrorZ_get_ok(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR owner){
        LDKPayeePubKey ret = *owner->contents.result;
        ret.is_owned = false;
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PayeePubKeyErrorZ* owner_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(owner);
-       LDKPayeePubKey ret_var = CResult_PayeePubKeyErrorZ_get_ok(owner_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(owner);
+       LDKPayeePubKey ret_var = CResult_PayeePubKeySecp256k1ErrorZ_get_ok(owner_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline enum LDKSecp256k1Error CResult_PayeePubKeyErrorZ_get_err(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR owner){
+static inline enum LDKSecp256k1Error CResult_PayeePubKeySecp256k1ErrorZ_get_err(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PayeePubKeyErrorZ* owner_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PayeePubKeyErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* owner_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_PayeePubKeySecp256k1ErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -13295,6 +13809,84 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDec
        return ret_ref;
 }
 
+static inline struct LDKReceiveTlvs CResult_ReceiveTlvsDecodeErrorZ_get_ok(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR owner){
+       LDKReceiveTlvs ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* owner_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(owner);
+       LDKReceiveTlvs ret_var = CResult_ReceiveTlvsDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_ReceiveTlvsDecodeErrorZ_get_err(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* owner_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_ReceiveTlvsDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKPaymentRelay CResult_PaymentRelayDecodeErrorZ_get_ok(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner){
+       LDKPaymentRelay ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentRelayDecodeErrorZ* owner_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(owner);
+       LDKPaymentRelay ret_var = CResult_PaymentRelayDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_PaymentRelayDecodeErrorZ_get_err(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentRelayDecodeErrorZ* owner_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_PaymentRelayDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKPaymentConstraints CResult_PaymentConstraintsDecodeErrorZ_get_ok(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR owner){
+       LDKPaymentConstraints ret = *owner->contents.result;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* owner_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(owner);
+       LDKPaymentConstraints ret_var = CResult_PaymentConstraintsDecodeErrorZ_get_ok(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline struct LDKDecodeError CResult_PaymentConstraintsDecodeErrorZ_get_err(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return DecodeError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* owner_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(owner);
+       LDKDecodeError *ret_copy = MALLOC(sizeof(LDKDecodeError), "LDKDecodeError");
+       *ret_copy = CResult_PaymentConstraintsDecodeErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static jclass LDKPaymentError_Invoice_class = NULL;
 static jmethodID LDKPaymentError_Invoice_meth = NULL;
 static jclass LDKPaymentError_Sending_class = NULL;
@@ -13326,25 +13918,25 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
                default: abort();
        }
 }
-static inline struct LDKThirtyTwoBytes CResult_PaymentIdPaymentErrorZ_get_ok(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR owner){
+static inline struct LDKThirtyTwoBytes CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return ThirtyTwoBytes_clone(&*owner->contents.result);
 }
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentIdPaymentErrorZ* owner_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(owner);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(owner);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_PaymentIdPaymentErrorZ_get_ok(owner_conv).data);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, CResult_ThirtyTwoBytesPaymentErrorZ_get_ok(owner_conv).data);
        return ret_arr;
 }
 
-static inline struct LDKPaymentError CResult_PaymentIdPaymentErrorZ_get_err(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR owner){
+static inline struct LDKPaymentError CResult_ThirtyTwoBytesPaymentErrorZ_get_err(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return PaymentError_clone(&*owner->contents.err);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_PaymentIdPaymentErrorZ* owner_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(owner);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* owner_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(owner);
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
-       *ret_copy = CResult_PaymentIdPaymentErrorZ_get_err(owner_conv);
+       *ret_copy = CResult_ThirtyTwoBytesPaymentErrorZ_get_err(owner_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -13370,24 +13962,87 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentErrorZ_
        return ret_ref;
 }
 
-static inline struct LDKStr CResult_StringErrorZ_get_ok(LDKCResult_StringErrorZ *NONNULL_PTR owner){
+static jclass LDKProbingError_Invoice_class = NULL;
+static jmethodID LDKProbingError_Invoice_meth = NULL;
+static jclass LDKProbingError_Sending_class = NULL;
+static jmethodID LDKProbingError_Sending_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKProbingError_init (JNIEnv *env, jclass clz) {
+       LDKProbingError_Invoice_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbingError$Invoice"));
+       CHECK(LDKProbingError_Invoice_class != NULL);
+       LDKProbingError_Invoice_meth = (*env)->GetMethodID(env, LDKProbingError_Invoice_class, "<init>", "(Ljava/lang/String;)V");
+       CHECK(LDKProbingError_Invoice_meth != NULL);
+       LDKProbingError_Sending_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKProbingError$Sending"));
+       CHECK(LDKProbingError_Sending_class != NULL);
+       LDKProbingError_Sending_meth = (*env)->GetMethodID(env, LDKProbingError_Sending_class, "<init>", "(J)V");
+       CHECK(LDKProbingError_Sending_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKProbingError_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKProbingError *obj = (LDKProbingError*)untag_ptr(ptr);
+       switch(obj->tag) {
+               case LDKProbingError_Invoice: {
+                       LDKStr invoice_str = obj->invoice;
+                       jstring invoice_conv = str_ref_to_java(env, invoice_str.chars, invoice_str.len);
+                       return (*env)->NewObject(env, LDKProbingError_Invoice_class, LDKProbingError_Invoice_meth, invoice_conv);
+               }
+               case LDKProbingError_Sending: {
+                       int64_t sending_ref = tag_ptr(&obj->sending, false);
+                       return (*env)->NewObject(env, LDKProbingError_Sending_class, LDKProbingError_Sending_meth, sending_ref);
+               }
+               default: abort();
+       }
+}
+static inline struct LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(owner);
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ ret_var = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok(owner_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 o = 0; o < ret_var.datalen; o++) {
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+               *ret_conv_40_conv = ret_var.data[o];
+               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+static inline struct LDKProbingError CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return ProbingError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* owner_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(owner);
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+static inline struct LDKStr CResult_StrSecp256k1ErrorZ_get_ok(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
 }
-JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_StringErrorZ* owner_conv = (LDKCResult_StringErrorZ*)untag_ptr(owner);
-       LDKStr ret_str = CResult_StringErrorZ_get_ok(owner_conv);
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
+       LDKStr ret_str = CResult_StrSecp256k1ErrorZ_get_ok(owner_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        return ret_conv;
 }
 
-static inline enum LDKSecp256k1Error CResult_StringErrorZ_get_err(LDKCResult_StringErrorZ *NONNULL_PTR owner){
+static inline enum LDKSecp256k1Error CResult_StrSecp256k1ErrorZ_get_err(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR owner){
 CHECK(!owner->result_ok);
        return *owner->contents.err;
 }
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
-       LDKCResult_StringErrorZ* owner_conv = (LDKCResult_StringErrorZ*)untag_ptr(owner);
-       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_StringErrorZ_get_err(owner_conv));
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_StrSecp256k1ErrorZ* owner_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(owner);
+       jclass ret_conv = LDKSecp256k1Error_to_java(env, CResult_StrSecp256k1ErrorZ_get_err(owner_conv));
        return ret_conv;
 }
 
@@ -13414,6 +14069,30 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNoneZ
        CResult_OnionMessagePathNoneZ_get_err(owner_conv);
 }
 
+static inline struct LDKPublicKey C2Tuple_PublicKeyOnionMessageZ_get_a(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR owner){
+       return owner->a;
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1get_1a(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* owner_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(owner);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, C2Tuple_PublicKeyOnionMessageZ_get_a(owner_conv).compressed_form);
+       return ret_arr;
+}
+
+static inline struct LDKOnionMessage C2Tuple_PublicKeyOnionMessageZ_get_b(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR owner){
+       LDKOnionMessage ret = owner->b;
+       ret.is_owned = false;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1get_1b(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* owner_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(owner);
+       LDKOnionMessage ret_var = C2Tuple_PublicKeyOnionMessageZ_get_b(owner_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static jclass LDKSendError_Secp256k1_class = NULL;
 static jmethodID LDKSendError_Secp256k1_meth = NULL;
 static jclass LDKSendError_TooBigPacket_class = NULL;
@@ -13503,6 +14182,29 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSendError_1ref_1from_1pt
                default: abort();
        }
 }
+static inline struct LDKC2Tuple_PublicKeyOnionMessageZ CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C2Tuple_PublicKeyOnionMessageZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* owner_conv = (LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)untag_ptr(owner);
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline struct LDKSendError CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return SendError_clone(&*owner->contents.err);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* owner_conv = (LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)untag_ptr(owner);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err(owner_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 static inline void CResult_NoneSendErrorZ_get_ok(LDKCResult_NoneSendErrorZ *NONNULL_PTR owner){
 CHECK(owner->result_ok);
        return *owner->contents.result;
@@ -13547,6 +14249,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1get
        CResult_BlindedPathNoneZ_get_err(owner_conv);
 }
 
+static inline struct LDKC2Tuple_BlindedPayInfoBlindedPathZ CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+CHECK(owner->result_ok);
+       return C2Tuple_BlindedPayInfoBlindedPathZ_clone(&*owner->contents.result);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
+       LDKC2Tuple_BlindedPayInfoBlindedPathZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKC2Tuple_BlindedPayInfoBlindedPathZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok(owner_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+static inline void CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR owner){
+CHECK(!owner->result_ok);
+       return *owner->contents.err;
+}
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1get_1err(JNIEnv *env, jclass clz, int64_t owner) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* owner_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(owner);
+       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err(owner_conv);
+}
+
 static inline struct LDKBlindedPath CResult_BlindedPathDecodeErrorZ_get_ok(LDKCResult_BlindedPathDecodeErrorZ *NONNULL_PTR owner){
        LDKBlindedPath ret = *owner->contents.result;
        ret.is_owned = false;
@@ -13868,6 +14590,255 @@ static inline LDKCVec_C2Tuple_OutPointCVec_MonitorUpdateIdZZZ CVec_C2Tuple_OutPo
        }
        return ret;
 }
+typedef struct LDKKVStore_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       jmethodID read_meth;
+       jmethodID write_meth;
+       jmethodID remove_meth;
+       jmethodID list_meth;
+} LDKKVStore_JCalls;
+static void LDKKVStore_JCalls_free(void* this_arg) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+LDKCResult_CVec_u8ZIOErrorZ read_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace, LDKStr key) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       LDKStr key_str = key;
+       jstring key_conv = str_ref_to_java(env, key_str.chars, key_str.len);
+       Str_free(key_str);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->read_meth, primary_namespace_conv, secondary_namespace_conv, key_conv);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to read in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_CVec_u8ZIOErrorZ ret_conv = *(LDKCResult_CVec_u8ZIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_NoneIOErrorZ write_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace, LDKStr key, LDKu8slice buf) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       LDKStr key_str = key;
+       jstring key_conv = str_ref_to_java(env, key_str.chars, key_str.len);
+       Str_free(key_str);
+       LDKu8slice buf_var = buf;
+       int8_tArray buf_arr = (*env)->NewByteArray(env, buf_var.datalen);
+       (*env)->SetByteArrayRegion(env, buf_arr, 0, buf_var.datalen, buf_var.data);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->write_meth, primary_namespace_conv, secondary_namespace_conv, key_conv, buf_arr);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to write in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_NoneIOErrorZ remove_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace, LDKStr key, bool lazy) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       LDKStr key_str = key;
+       jstring key_conv = str_ref_to_java(env, key_str.chars, key_str.len);
+       Str_free(key_str);
+       jboolean lazy_conv = lazy;
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->remove_meth, primary_namespace_conv, secondary_namespace_conv, key_conv, lazy_conv);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to remove in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKCResult_CVec_StrZIOErrorZ list_LDKKVStore_jcall(const void* this_arg, LDKStr primary_namespace, LDKStr secondary_namespace) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKStr primary_namespace_str = primary_namespace;
+       jstring primary_namespace_conv = str_ref_to_java(env, primary_namespace_str.chars, primary_namespace_str.len);
+       Str_free(primary_namespace_str);
+       LDKStr secondary_namespace_str = secondary_namespace;
+       jstring secondary_namespace_conv = str_ref_to_java(env, secondary_namespace_str.chars, secondary_namespace_str.len);
+       Str_free(secondary_namespace_str);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       uint64_t ret = (*env)->CallLongMethod(env, obj, j_calls->list_meth, primary_namespace_conv, secondary_namespace_conv);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to list in LDKKVStore from rust threw an exception.");
+       }
+       void* ret_ptr = untag_ptr(ret);
+       CHECK_ACCESS(ret_ptr);
+       LDKCResult_CVec_StrZIOErrorZ ret_conv = *(LDKCResult_CVec_StrZIOErrorZ*)(ret_ptr);
+       FREE(untag_ptr(ret));
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+static void LDKKVStore_JCalls_cloned(LDKKVStore* new_obj) {
+       LDKKVStore_JCalls *j_calls = (LDKKVStore_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKKVStore LDKKVStore_init (JNIEnv *env, jclass clz, jobject o) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKKVStore_JCalls *calls = MALLOC(sizeof(LDKKVStore_JCalls), "LDKKVStore_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->read_meth = (*env)->GetMethodID(env, c, "read", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J");
+       CHECK(calls->read_meth != NULL);
+       calls->write_meth = (*env)->GetMethodID(env, c, "write", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[B)J");
+       CHECK(calls->write_meth != NULL);
+       calls->remove_meth = (*env)->GetMethodID(env, c, "remove", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)J");
+       CHECK(calls->remove_meth != NULL);
+       calls->list_meth = (*env)->GetMethodID(env, c, "list", "(Ljava/lang/String;Ljava/lang/String;)J");
+       CHECK(calls->list_meth != NULL);
+
+       LDKKVStore ret = {
+               .this_arg = (void*) calls,
+               .read = read_LDKKVStore_jcall,
+               .write = write_LDKKVStore_jcall,
+               .remove = remove_LDKKVStore_jcall,
+               .list = list_LDKKVStore_jcall,
+               .free = LDKKVStore_JCalls_free,
+       };
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKKVStore_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKKVStore *res_ptr = MALLOC(sizeof(LDKKVStore), "LDKKVStore");
+       *res_ptr = LDKKVStore_init(env, clz, o);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1read(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace, jstring key) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKStr key_conv = java_to_owned_str(env, key);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = (this_arg_conv->read)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv, key_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1write(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace, jstring key, int8_tArray buf) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKStr key_conv = java_to_owned_str(env, key);
+       LDKu8slice buf_ref;
+       buf_ref.datalen = (*env)->GetArrayLength(env, buf);
+       buf_ref.data = (*env)->GetByteArrayElements (env, buf, NULL);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = (this_arg_conv->write)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv, key_conv, buf_ref);
+       (*env)->ReleaseByteArrayElements(env, buf, (int8_t*)buf_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1remove(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace, jstring key, jboolean lazy) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKStr key_conv = java_to_owned_str(env, key);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = (this_arg_conv->remove)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv, key_conv, lazy);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KVStore_1list(JNIEnv *env, jclass clz, int64_t this_arg, jstring primary_namespace, jstring secondary_namespace) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKKVStore* this_arg_conv = (LDKKVStore*)this_arg_ptr;
+       LDKStr primary_namespace_conv = java_to_owned_str(env, primary_namespace);
+       LDKStr secondary_namespace_conv = java_to_owned_str(env, secondary_namespace);
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = (this_arg_conv->list)(this_arg_conv->this_arg, primary_namespace_conv, secondary_namespace_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 typedef struct LDKPersister_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
@@ -13893,7 +14864,7 @@ static void LDKPersister_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-LDKCResult_NoneErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, const LDKChannelManager * channel_manager) {
+LDKCResult_NoneIOErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, const LDKChannelManager * channel_manager) {
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -13916,14 +14887,14 @@ LDKCResult_NoneErrorZ persist_manager_LDKPersister_jcall(const void* this_arg, c
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_NoneErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, const LDKNetworkGraph * network_graph) {
+LDKCResult_NoneIOErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, const LDKNetworkGraph * network_graph) {
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -13946,14 +14917,14 @@ LDKCResult_NoneErrorZ persist_graph_LDKPersister_jcall(const void* this_arg, con
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
        return ret_conv;
 }
-LDKCResult_NoneErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, const LDKWriteableScore * scorer) {
+LDKCResult_NoneIOErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, const LDKWriteableScore * scorer) {
        LDKPersister_JCalls *j_calls = (LDKPersister_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -13973,7 +14944,7 @@ LDKCResult_NoneErrorZ persist_scorer_LDKPersister_jcall(const void* this_arg, co
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
+       LDKCResult_NoneIOErrorZ ret_conv = *(LDKCResult_NoneIOErrorZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -14021,7 +14992,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1manager
        channel_manager_conv.is_owned = ptr_is_owned(channel_manager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        channel_manager_conv.is_owned = false;
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = (this_arg_conv->persist_manager)(this_arg_conv->this_arg, &channel_manager_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -14035,7 +15006,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1graph(J
        network_graph_conv.is_owned = ptr_is_owned(network_graph);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        network_graph_conv.is_owned = false;
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = (this_arg_conv->persist_graph)(this_arg_conv->this_arg, &network_graph_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -14047,11 +15018,189 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1scorer(
        void* scorer_ptr = untag_ptr(scorer);
        if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
        LDKWriteableScore* scorer_conv = (LDKWriteableScore*)scorer_ptr;
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = (this_arg_conv->persist_scorer)(this_arg_conv->this_arg, scorer_conv);
        return tag_ptr(ret_conv, true);
 }
 
+typedef struct LDKPersist_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       jmethodID persist_new_channel_meth;
+       jmethodID update_persisted_channel_meth;
+} LDKPersist_JCalls;
+static void LDKPersist_JCalls_free(void* this_arg) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKOutPoint channel_id_var = channel_id;
+       int64_t channel_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
+       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
+       LDKChannelMonitor data_var = *data;
+       int64_t data_ref = 0;
+       data_var = ChannelMonitor_clone(&data_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
+       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
+       LDKMonitorUpdateId update_id_var = update_id;
+       int64_t update_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
+       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->persist_new_channel_meth, channel_id_ref, data_ref, update_id_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to persist_new_channel in LDKPersist from rust threw an exception.");
+       }
+       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, LDKChannelMonitorUpdate update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       LDKOutPoint channel_id_var = channel_id;
+       int64_t channel_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
+       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
+       LDKChannelMonitorUpdate update_var = update;
+       int64_t update_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
+       update_ref = tag_ptr(update_var.inner, update_var.is_owned);
+       LDKChannelMonitor data_var = *data;
+       int64_t data_ref = 0;
+       data_var = ChannelMonitor_clone(&data_var);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
+       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
+       LDKMonitorUpdateId update_id_var = update_id;
+       int64_t update_id_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
+       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->update_persisted_channel_meth, channel_id_ref, update_ref, data_ref, update_id_ref);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to update_persisted_channel in LDKPersist from rust threw an exception.");
+       }
+       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_conv;
+}
+static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
+       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+}
+static inline LDKPersist LDKPersist_init (JNIEnv *env, jclass clz, jobject o) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKPersist_JCalls *calls = MALLOC(sizeof(LDKPersist_JCalls), "LDKPersist_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->persist_new_channel_meth = (*env)->GetMethodID(env, c, "persist_new_channel", "(JJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       CHECK(calls->persist_new_channel_meth != NULL);
+       calls->update_persisted_channel_meth = (*env)->GetMethodID(env, c, "update_persisted_channel", "(JJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
+       CHECK(calls->update_persisted_channel_meth != NULL);
+
+       LDKPersist ret = {
+               .this_arg = (void*) calls,
+               .persist_new_channel = persist_new_channel_LDKPersist_jcall,
+               .update_persisted_channel = update_persisted_channel_LDKPersist_jcall,
+               .free = LDKPersist_JCalls_free,
+       };
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKPersist_1new(JNIEnv *env, jclass clz, jobject o) {
+       LDKPersist *res_ptr = MALLOC(sizeof(LDKPersist), "LDKPersist");
+       *res_ptr = LDKPersist_init(env, clz, o);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t data, int64_t update_id) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
+       LDKOutPoint channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = OutPoint_clone(&channel_id_conv);
+       LDKChannelMonitor data_conv;
+       data_conv.inner = untag_ptr(data);
+       data_conv.is_owned = ptr_is_owned(data);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
+       data_conv.is_owned = false;
+       LDKMonitorUpdateId update_id_conv;
+       update_id_conv.inner = untag_ptr(update_id);
+       update_id_conv.is_owned = ptr_is_owned(update_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
+       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t update, int64_t data, int64_t update_id) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
+       LDKOutPoint channel_id_conv;
+       channel_id_conv.inner = untag_ptr(channel_id);
+       channel_id_conv.is_owned = ptr_is_owned(channel_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
+       channel_id_conv = OutPoint_clone(&channel_id_conv);
+       LDKChannelMonitorUpdate update_conv;
+       update_conv.inner = untag_ptr(update);
+       update_conv.is_owned = ptr_is_owned(update);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
+       update_conv = ChannelMonitorUpdate_clone(&update_conv);
+       LDKChannelMonitor data_conv;
+       data_conv.inner = untag_ptr(data);
+       data_conv.is_owned = ptr_is_owned(data);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
+       data_conv.is_owned = false;
+       LDKMonitorUpdateId update_id_conv;
+       update_id_conv.inner = untag_ptr(update_id);
+       update_id_conv.is_owned = ptr_is_owned(update_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
+       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, update_conv, &data_conv, update_id_conv));
+       return ret_conv;
+}
+
 typedef struct LDKFutureCallback_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
@@ -14420,7 +15569,7 @@ void best_block_updated_LDKConfirm_jcall(const void* this_arg, const uint8_t (*
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
 }
-LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
+LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ get_relevant_txids_LDKConfirm_jcall(const void* this_arg) {
        LDKConfirm_JCalls *j_calls = (LDKConfirm_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -14436,20 +15585,20 @@ LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ get_relevant_txids_LDKConfirm_jcall(con
                (*env)->ExceptionDescribe(env);
                (*env)->FatalError(env, "A call to get_relevant_txids in LDKConfirm from rust threw an exception.");
        }
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret_constr;
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret_constr;
        ret_constr.datalen = (*env)->GetArrayLength(env, ret);
        if (ret_constr.datalen > 0)
-               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ Elements");
+               ret_constr.data = MALLOC(ret_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ Elements");
        else
                ret_constr.data = NULL;
        int64_t* ret_vals = (*env)->GetLongArrayElements (env, ret, NULL);
-       for (size_t i = 0; i < ret_constr.datalen; i++) {
-               int64_t ret_conv_34 = ret_vals[i];
-               void* ret_conv_34_ptr = untag_ptr(ret_conv_34);
-               CHECK_ACCESS(ret_conv_34_ptr);
-               LDKC2Tuple_TxidCOption_BlockHashZZ ret_conv_34_conv = *(LDKC2Tuple_TxidCOption_BlockHashZZ*)(ret_conv_34_ptr);
-               FREE(untag_ptr(ret_conv_34));
-               ret_constr.data[i] = ret_conv_34_conv;
+       for (size_t x = 0; x < ret_constr.datalen; x++) {
+               int64_t ret_conv_49 = ret_vals[x];
+               void* ret_conv_49_ptr = untag_ptr(ret_conv_49);
+               CHECK_ACCESS(ret_conv_49_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ ret_conv_49_conv = *(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)(ret_conv_49_ptr);
+               FREE(untag_ptr(ret_conv_49));
+               ret_constr.data[x] = ret_conv_49_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
        if (get_jenv_res == JNI_EDETACHED) {
@@ -14545,198 +15694,20 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Confirm_1get_1relevant
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKConfirm* this_arg_conv = (LDKConfirm*)this_arg_ptr;
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret_var = (this_arg_conv->get_relevant_txids)(this_arg_conv->this_arg);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret_var = (this_arg_conv->get_relevant_txids)(this_arg_conv->this_arg);
        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++) {
-               LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv_34_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-               *ret_conv_34_conv = ret_var.data[i];
-               ret_arr_ptr[i] = tag_ptr(ret_conv_34_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
        return ret_arr;
 }
 
-typedef struct LDKPersist_JCalls {
-       atomic_size_t refcnt;
-       JavaVM *vm;
-       jweak o;
-       jmethodID persist_new_channel_meth;
-       jmethodID update_persisted_channel_meth;
-} LDKPersist_JCalls;
-static void LDKPersist_JCalls_free(void* this_arg) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
-       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
-               JNIEnv *env;
-               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-               if (get_jenv_res == JNI_EDETACHED) {
-                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-               } else {
-                       DO_ASSERT(get_jenv_res == JNI_OK);
-               }
-               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
-               if (get_jenv_res == JNI_EDETACHED) {
-                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-               }
-               FREE(j_calls);
-       }
-}
-LDKChannelMonitorUpdateStatus persist_new_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
-       JNIEnv *env;
-       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-       } else {
-               DO_ASSERT(get_jenv_res == JNI_OK);
-       }
-       LDKOutPoint channel_id_var = channel_id;
-       int64_t channel_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
-       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
-       CHECK(obj != NULL);
-       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->persist_new_channel_meth, channel_id_ref, data_ref, update_id_ref);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to persist_new_channel in LDKPersist from rust threw an exception.");
-       }
-       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-       }
-       return ret_conv;
-}
-LDKChannelMonitorUpdateStatus update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, LDKChannelMonitorUpdate update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) this_arg;
-       JNIEnv *env;
-       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
-       } else {
-               DO_ASSERT(get_jenv_res == JNI_OK);
-       }
-       LDKOutPoint channel_id_var = channel_id;
-       int64_t channel_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
-       channel_id_ref = tag_ptr(channel_id_var.inner, channel_id_var.is_owned);
-       LDKChannelMonitorUpdate update_var = update;
-       int64_t update_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
-       update_ref = tag_ptr(update_var.inner, update_var.is_owned);
-       LDKChannelMonitor data_var = *data;
-       int64_t data_ref = 0;
-       data_var = ChannelMonitor_clone(&data_var);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
-       data_ref = tag_ptr(data_var.inner, data_var.is_owned);
-       LDKMonitorUpdateId update_id_var = update_id;
-       int64_t update_id_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
-       update_id_ref = tag_ptr(update_id_var.inner, update_id_var.is_owned);
-       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
-       CHECK(obj != NULL);
-       jclass ret = (*env)->CallObjectMethod(env, obj, j_calls->update_persisted_channel_meth, channel_id_ref, update_ref, data_ref, update_id_ref);
-       if (UNLIKELY((*env)->ExceptionCheck(env))) {
-               (*env)->ExceptionDescribe(env);
-               (*env)->FatalError(env, "A call to update_persisted_channel in LDKPersist from rust threw an exception.");
-       }
-       LDKChannelMonitorUpdateStatus ret_conv = LDKChannelMonitorUpdateStatus_from_java(env, ret);
-       if (get_jenv_res == JNI_EDETACHED) {
-               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
-       }
-       return ret_conv;
-}
-static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
-       LDKPersist_JCalls *j_calls = (LDKPersist_JCalls*) new_obj->this_arg;
-       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
-}
-static inline LDKPersist LDKPersist_init (JNIEnv *env, jclass clz, jobject o) {
-       jclass c = (*env)->GetObjectClass(env, o);
-       CHECK(c != NULL);
-       LDKPersist_JCalls *calls = MALLOC(sizeof(LDKPersist_JCalls), "LDKPersist_JCalls");
-       atomic_init(&calls->refcnt, 1);
-       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
-       calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->persist_new_channel_meth = (*env)->GetMethodID(env, c, "persist_new_channel", "(JJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
-       CHECK(calls->persist_new_channel_meth != NULL);
-       calls->update_persisted_channel_meth = (*env)->GetMethodID(env, c, "update_persisted_channel", "(JJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;");
-       CHECK(calls->update_persisted_channel_meth != NULL);
-
-       LDKPersist ret = {
-               .this_arg = (void*) calls,
-               .persist_new_channel = persist_new_channel_LDKPersist_jcall,
-               .update_persisted_channel = update_persisted_channel_LDKPersist_jcall,
-               .free = LDKPersist_JCalls_free,
-       };
-       return ret;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKPersist_1new(JNIEnv *env, jclass clz, jobject o) {
-       LDKPersist *res_ptr = MALLOC(sizeof(LDKPersist), "LDKPersist");
-       *res_ptr = LDKPersist_init(env, clz, o);
-       return tag_ptr(res_ptr, true);
-}
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t data, int64_t update_id) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
-       LDKOutPoint channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = OutPoint_clone(&channel_id_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv));
-       return ret_conv;
-}
-
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_id, int64_t update, int64_t data, int64_t update_id) {
-       void* this_arg_ptr = untag_ptr(this_arg);
-       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
-       LDKPersist* this_arg_conv = (LDKPersist*)this_arg_ptr;
-       LDKOutPoint channel_id_conv;
-       channel_id_conv.inner = untag_ptr(channel_id);
-       channel_id_conv.is_owned = ptr_is_owned(channel_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
-       channel_id_conv = OutPoint_clone(&channel_id_conv);
-       LDKChannelMonitorUpdate update_conv;
-       update_conv.inner = untag_ptr(update);
-       update_conv.is_owned = ptr_is_owned(update);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
-       update_conv = ChannelMonitorUpdate_clone(&update_conv);
-       LDKChannelMonitor data_conv;
-       data_conv.inner = untag_ptr(data);
-       data_conv.is_owned = ptr_is_owned(data);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
-       data_conv.is_owned = false;
-       LDKMonitorUpdateId update_id_conv;
-       update_id_conv.inner = untag_ptr(update_id);
-       update_id_conv.is_owned = ptr_is_owned(update_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
-       update_id_conv = MonitorUpdateId_clone(&update_id_conv);
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, update_conv, &data_conv, update_id_conv));
-       return ret_conv;
-}
-
 typedef struct LDKEventHandler_JCalls {
        atomic_size_t refcnt;
        JavaVM *vm;
@@ -14905,32 +15876,51 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EventsProvider_1process_1pendi
        (this_arg_conv->process_pending_events)(this_arg_conv->this_arg, handler_conv);
 }
 
-static jclass LDKRetry_Attempts_class = NULL;
-static jmethodID LDKRetry_Attempts_meth = NULL;
-static jclass LDKRetry_Timeout_class = NULL;
-static jmethodID LDKRetry_Timeout_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKRetry_init (JNIEnv *env, jclass clz) {
-       LDKRetry_Attempts_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Attempts"));
-       CHECK(LDKRetry_Attempts_class != NULL);
-       LDKRetry_Attempts_meth = (*env)->GetMethodID(env, LDKRetry_Attempts_class, "<init>", "(J)V");
-       CHECK(LDKRetry_Attempts_meth != NULL);
-       LDKRetry_Timeout_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKRetry$Timeout"));
-       CHECK(LDKRetry_Timeout_class != NULL);
-       LDKRetry_Timeout_meth = (*env)->GetMethodID(env, LDKRetry_Timeout_class, "<init>", "(J)V");
-       CHECK(LDKRetry_Timeout_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRetry_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKRetry *obj = (LDKRetry*)untag_ptr(ptr);
+static jclass LDKFailureCode_TemporaryNodeFailure_class = NULL;
+static jmethodID LDKFailureCode_TemporaryNodeFailure_meth = NULL;
+static jclass LDKFailureCode_RequiredNodeFeatureMissing_class = NULL;
+static jmethodID LDKFailureCode_RequiredNodeFeatureMissing_meth = NULL;
+static jclass LDKFailureCode_IncorrectOrUnknownPaymentDetails_class = NULL;
+static jmethodID LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth = NULL;
+static jclass LDKFailureCode_InvalidOnionPayload_class = NULL;
+static jmethodID LDKFailureCode_InvalidOnionPayload_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKFailureCode_init (JNIEnv *env, jclass clz) {
+       LDKFailureCode_TemporaryNodeFailure_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$TemporaryNodeFailure"));
+       CHECK(LDKFailureCode_TemporaryNodeFailure_class != NULL);
+       LDKFailureCode_TemporaryNodeFailure_meth = (*env)->GetMethodID(env, LDKFailureCode_TemporaryNodeFailure_class, "<init>", "()V");
+       CHECK(LDKFailureCode_TemporaryNodeFailure_meth != NULL);
+       LDKFailureCode_RequiredNodeFeatureMissing_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$RequiredNodeFeatureMissing"));
+       CHECK(LDKFailureCode_RequiredNodeFeatureMissing_class != NULL);
+       LDKFailureCode_RequiredNodeFeatureMissing_meth = (*env)->GetMethodID(env, LDKFailureCode_RequiredNodeFeatureMissing_class, "<init>", "()V");
+       CHECK(LDKFailureCode_RequiredNodeFeatureMissing_meth != NULL);
+       LDKFailureCode_IncorrectOrUnknownPaymentDetails_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$IncorrectOrUnknownPaymentDetails"));
+       CHECK(LDKFailureCode_IncorrectOrUnknownPaymentDetails_class != NULL);
+       LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth = (*env)->GetMethodID(env, LDKFailureCode_IncorrectOrUnknownPaymentDetails_class, "<init>", "()V");
+       CHECK(LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth != NULL);
+       LDKFailureCode_InvalidOnionPayload_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/ldk/impl/bindings$LDKFailureCode$InvalidOnionPayload"));
+       CHECK(LDKFailureCode_InvalidOnionPayload_class != NULL);
+       LDKFailureCode_InvalidOnionPayload_meth = (*env)->GetMethodID(env, LDKFailureCode_InvalidOnionPayload_class, "<init>", "(J)V");
+       CHECK(LDKFailureCode_InvalidOnionPayload_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKFailureCode_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKFailureCode *obj = (LDKFailureCode*)untag_ptr(ptr);
        switch(obj->tag) {
-               case LDKRetry_Attempts: {
-                       int64_t attempts_conv = obj->attempts;
-                       return (*env)->NewObject(env, LDKRetry_Attempts_class, LDKRetry_Attempts_meth, attempts_conv);
+               case LDKFailureCode_TemporaryNodeFailure: {
+                       return (*env)->NewObject(env, LDKFailureCode_TemporaryNodeFailure_class, LDKFailureCode_TemporaryNodeFailure_meth);
                }
-               case LDKRetry_Timeout: {
-                       int64_t timeout_conv = obj->timeout;
-                       return (*env)->NewObject(env, LDKRetry_Timeout_class, LDKRetry_Timeout_meth, timeout_conv);
+               case LDKFailureCode_RequiredNodeFeatureMissing: {
+                       return (*env)->NewObject(env, LDKFailureCode_RequiredNodeFeatureMissing_class, LDKFailureCode_RequiredNodeFeatureMissing_meth);
+               }
+               case LDKFailureCode_IncorrectOrUnknownPaymentDetails: {
+                       return (*env)->NewObject(env, LDKFailureCode_IncorrectOrUnknownPaymentDetails_class, LDKFailureCode_IncorrectOrUnknownPaymentDetails_meth);
+               }
+               case LDKFailureCode_InvalidOnionPayload: {
+                       int64_t invalid_onion_payload_ref = tag_ptr(&obj->invalid_onion_payload, false);
+                       return (*env)->NewObject(env, LDKFailureCode_InvalidOnionPayload_class, LDKFailureCode_InvalidOnionPayload_meth, invalid_onion_payload_ref);
                }
                default: abort();
        }
@@ -15987,7 +16977,7 @@ LDKInitFeatures provided_init_features_LDKChannelMessageHandler_jcall(const void
        }
        return ret_conv;
 }
-LDKCOption_CVec_ChainHashZZ get_genesis_hashes_LDKChannelMessageHandler_jcall(const void* this_arg) {
+LDKCOption_CVec_ThirtyTwoBytesZZ get_genesis_hashes_LDKChannelMessageHandler_jcall(const void* this_arg) {
        LDKChannelMessageHandler_JCalls *j_calls = (LDKChannelMessageHandler_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -16005,7 +16995,7 @@ LDKCOption_CVec_ChainHashZZ get_genesis_hashes_LDKChannelMessageHandler_jcall(co
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCOption_CVec_ChainHashZZ ret_conv = *(LDKCOption_CVec_ChainHashZZ*)(ret_ptr);
+       LDKCOption_CVec_ThirtyTwoBytesZZ ret_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -16635,7 +17625,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1get_
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKChannelMessageHandler* this_arg_conv = (LDKChannelMessageHandler*)this_arg_ptr;
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
        *ret_copy = (this_arg_conv->get_genesis_hashes)(this_arg_conv->this_arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -18554,6 +19544,107 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPayee_1ref_1from_1ptr(JN
                default: abort();
        }
 }
+typedef struct LDKScore_JCalls {
+       atomic_size_t refcnt;
+       JavaVM *vm;
+       jweak o;
+       LDKScoreLookUp_JCalls* ScoreLookUp;
+       LDKScoreUpdate_JCalls* ScoreUpdate;
+       jmethodID write_meth;
+} LDKScore_JCalls;
+static void LDKScore_JCalls_free(void* this_arg) {
+       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+       if (atomic_fetch_sub_explicit(&j_calls->refcnt, 1, memory_order_acquire) == 1) {
+               JNIEnv *env;
+               jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+               } else {
+                       DO_ASSERT(get_jenv_res == JNI_OK);
+               }
+               (*env)->DeleteWeakGlobalRef(env, j_calls->o);
+               if (get_jenv_res == JNI_EDETACHED) {
+                       DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+               }
+               FREE(j_calls);
+       }
+}
+LDKCVec_u8Z write_LDKScore_jcall(const void* this_arg) {
+       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) this_arg;
+       JNIEnv *env;
+       jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);
+       } else {
+               DO_ASSERT(get_jenv_res == JNI_OK);
+       }
+       jobject obj = (*env)->NewLocalRef(env, j_calls->o);
+       CHECK(obj != NULL);
+       int8_tArray ret = (*env)->CallObjectMethod(env, obj, j_calls->write_meth);
+       if (UNLIKELY((*env)->ExceptionCheck(env))) {
+               (*env)->ExceptionDescribe(env);
+               (*env)->FatalError(env, "A call to write in LDKScore from rust threw an exception.");
+       }
+       LDKCVec_u8Z ret_ref;
+       ret_ref.datalen = (*env)->GetArrayLength(env, ret);
+       ret_ref.data = MALLOC(ret_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, ret, 0, ret_ref.datalen, ret_ref.data);
+       if (get_jenv_res == JNI_EDETACHED) {
+               DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
+       }
+       return ret_ref;
+}
+static void LDKScore_JCalls_cloned(LDKScore* new_obj) {
+       LDKScore_JCalls *j_calls = (LDKScore_JCalls*) new_obj->this_arg;
+       atomic_fetch_add_explicit(&j_calls->refcnt, 1, memory_order_release);
+       atomic_fetch_add_explicit(&j_calls->ScoreLookUp->refcnt, 1, memory_order_release);
+       atomic_fetch_add_explicit(&j_calls->ScoreUpdate->refcnt, 1, memory_order_release);
+}
+static inline LDKScore LDKScore_init (JNIEnv *env, jclass clz, jobject o, jobject ScoreLookUp, jobject ScoreUpdate) {
+       jclass c = (*env)->GetObjectClass(env, o);
+       CHECK(c != NULL);
+       LDKScore_JCalls *calls = MALLOC(sizeof(LDKScore_JCalls), "LDKScore_JCalls");
+       atomic_init(&calls->refcnt, 1);
+       DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
+       calls->o = (*env)->NewWeakGlobalRef(env, o);
+       calls->write_meth = (*env)->GetMethodID(env, c, "write", "()[B");
+       CHECK(calls->write_meth != NULL);
+
+       LDKScore ret = {
+               .this_arg = (void*) calls,
+               .write = write_LDKScore_jcall,
+               .free = LDKScore_JCalls_free,
+               .ScoreLookUp = LDKScoreLookUp_init(env, clz, ScoreLookUp),
+               .ScoreUpdate = LDKScoreUpdate_init(env, clz, ScoreUpdate),
+       };
+       calls->ScoreLookUp = ret.ScoreLookUp.this_arg;
+       calls->ScoreUpdate = ret.ScoreUpdate.this_arg;
+       return ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1new(JNIEnv *env, jclass clz, jobject o, jobject ScoreLookUp, jobject ScoreUpdate) {
+       LDKScore *res_ptr = MALLOC(sizeof(LDKScore), "LDKScore");
+       *res_ptr = LDKScore_init(env, clz, o, ScoreLookUp, ScoreUpdate);
+       return tag_ptr(res_ptr, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1get_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKScore *inp = (LDKScore *)untag_ptr(arg);
+       return tag_ptr(&inp->ScoreLookUp, false);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKScore_1get_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKScore *inp = (LDKScore *)untag_ptr(arg);
+       return tag_ptr(&inp->ScoreUpdate, false);
+}
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Score_1write(JNIEnv *env, jclass clz, int64_t this_arg) {
+       void* this_arg_ptr = untag_ptr(this_arg);
+       if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
+       LDKScore* this_arg_conv = (LDKScore*)this_arg_ptr;
+       LDKCVec_u8Z ret_var = (this_arg_conv->write)(this_arg_conv->this_arg);
+       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;
+}
+
 static jclass LDKDestination_Node_class = NULL;
 static jmethodID LDKDestination_Node_meth = NULL;
 static jclass LDKDestination_BlindedPath_class = NULL;
@@ -18981,7 +20072,7 @@ LDKCResult_CVec_UtxoZNoneZ list_confirmed_utxos_LDKWalletSource_jcall(const void
        }
        return ret_conv;
 }
-LDKCResult_ScriptNoneZ get_change_script_LDKWalletSource_jcall(const void* this_arg) {
+LDKCResult_CVec_u8ZNoneZ get_change_script_LDKWalletSource_jcall(const void* this_arg) {
        LDKWalletSource_JCalls *j_calls = (LDKWalletSource_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -18999,7 +20090,7 @@ LDKCResult_ScriptNoneZ get_change_script_LDKWalletSource_jcall(const void* this_
        }
        void* ret_ptr = untag_ptr(ret);
        CHECK_ACCESS(ret_ptr);
-       LDKCResult_ScriptNoneZ ret_conv = *(LDKCResult_ScriptNoneZ*)(ret_ptr);
+       LDKCResult_CVec_u8ZNoneZ ret_conv = *(LDKCResult_CVec_u8ZNoneZ*)(ret_ptr);
        FREE(untag_ptr(ret));
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
@@ -19080,7 +20171,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WalletSource_1get_1change_1
        void* this_arg_ptr = untag_ptr(this_arg);
        if (ptr_is_owned(this_arg)) { CHECK_ACCESS(this_arg_ptr); }
        LDKWalletSource* this_arg_conv = (LDKWalletSource*)this_arg_ptr;
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
        *ret_conv = (this_arg_conv->get_change_script)(this_arg_conv->this_arg);
        return tag_ptr(ret_conv, true);
 }
@@ -19348,45 +20439,45 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Str_1free(JNIEnv *env, jclass
        Str_free(dummy);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1some(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_some(o);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1some(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_some(o);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_DurationZ _res_conv = *(LDKCOption_DurationZ*)(_res_ptr);
+       LDKCOption_u64Z _res_conv = *(LDKCOption_u64Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_DurationZ_free(_res_conv);
+       COption_u64Z_free(_res_conv);
 }
 
-static inline uint64_t COption_DurationZ_clone_ptr(LDKCOption_DurationZ *NONNULL_PTR arg) {
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_clone(arg);
+static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_DurationZ* arg_conv = (LDKCOption_DurationZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_DurationZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_u64Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_DurationZ* orig_conv = (LDKCOption_DurationZ*)untag_ptr(orig);
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = COption_DurationZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)untag_ptr(orig);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -19411,49 +20502,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BlindedPathZ_1free(JNIEn
        CVec_BlindedPathZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1some(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_some(o);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_u64Z _res_conv = *(LDKCOption_u64Z*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_u64Z_free(_res_conv);
-}
-
-static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u64Z_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)untag_ptr(orig);
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = COption_u64Z_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKRefund o_conv;
        o_conv.inner = untag_ptr(o);
@@ -19509,6 +20557,59 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseE
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKRetry o_conv = *(LDKRetry*)(o_ptr);
+       o_conv = Retry_clone((LDKRetry*)untag_ptr(o));
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RetryDecodeErrorZ* o_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_RetryDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_RetryDecodeErrorZ _res_conv = *(LDKCResult_RetryDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_RetryDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_RetryDecodeErrorZ_clone_ptr(LDKCResult_RetryDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RetryDecodeErrorZ* arg_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_RetryDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_RetryDecodeErrorZ* orig_conv = (LDKCResult_RetryDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = CResult_RetryDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1ok(JNIEnv *env, jclass clz) {
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
        *ret_conv = CResult_NoneAPIErrorZ_ok();
@@ -19598,48 +20699,48 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1APIErrorZ_1free(JNIEnv *
        CVec_APIErrorZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_some(o_ref);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_some(o_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentSecretZ _res_conv = *(LDKCOption_PaymentSecretZ*)(_res_ptr);
+       LDKCOption_ThirtyTwoBytesZ _res_conv = *(LDKCOption_ThirtyTwoBytesZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_PaymentSecretZ_free(_res_conv);
+       COption_ThirtyTwoBytesZ_free(_res_conv);
 }
 
-static inline uint64_t COption_PaymentSecretZ_clone_ptr(LDKCOption_PaymentSecretZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_clone(arg);
+static inline uint64_t COption_ThirtyTwoBytesZ_clone_ptr(LDKCOption_ThirtyTwoBytesZ *NONNULL_PTR arg) {
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentSecretZ* arg_conv = (LDKCOption_PaymentSecretZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentSecretZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_ThirtyTwoBytesZ* arg_conv = (LDKCOption_ThirtyTwoBytesZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_ThirtyTwoBytesZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentSecretZ* orig_conv = (LDKCOption_PaymentSecretZ*)untag_ptr(orig);
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
-       *ret_copy = COption_PaymentSecretZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_ThirtyTwoBytesZ* orig_conv = (LDKCOption_ThirtyTwoBytesZ*)untag_ptr(orig);
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
+       *ret_copy = COption_ThirtyTwoBytesZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -19753,6 +20854,234 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFiel
        return tag_ptr(ret_conv, true);
 }
 
+static inline uint64_t C2Tuple_u64CVec_u8ZZ_clone_ptr(LDKC2Tuple_u64CVec_u8ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u64CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+       *ret_conv = C2Tuple_u64CVec_u8ZZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u64CVec_u8ZZ* arg_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_u64CVec_u8ZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_u64CVec_u8ZZ* orig_conv = (LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(orig);
+       LDKC2Tuple_u64CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+       *ret_conv = C2Tuple_u64CVec_u8ZZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1new(JNIEnv *env, jclass clz, int64_t a, int8_tArray b) {
+       LDKCVec_u8Z b_ref;
+       b_ref.datalen = (*env)->GetArrayLength(env, b);
+       b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data);
+       LDKC2Tuple_u64CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+       *ret_conv = C2Tuple_u64CVec_u8ZZ_new(a, b_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_u64CVec_u8ZZ _res_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_u64CVec_u8ZZ_free(_res_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u64CVec_1u8ZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_23 = _res_vals[x];
+               void* _res_conv_23_ptr = untag_ptr(_res_conv_23);
+               CHECK_ACCESS(_res_conv_23_ptr);
+               LDKC2Tuple_u64CVec_u8ZZ _res_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(_res_conv_23_ptr);
+               FREE(untag_ptr(_res_conv_23));
+               _res_constr.data[x] = _res_conv_23_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_u64CVec_u8ZZZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRecipientOnionFields o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = RecipientOnionFields_clone(&o_conv);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RecipientOnionFieldsNoneZ* o_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_RecipientOnionFieldsNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_RecipientOnionFieldsNoneZ _res_conv = *(LDKCResult_RecipientOnionFieldsNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_RecipientOnionFieldsNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_RecipientOnionFieldsNoneZ_clone_ptr(LDKCResult_RecipientOnionFieldsNoneZ *NONNULL_PTR arg) {
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RecipientOnionFieldsNoneZ* arg_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_RecipientOnionFieldsNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_RecipientOnionFieldsNoneZ* orig_conv = (LDKCResult_RecipientOnionFieldsNoneZ*)untag_ptr(orig);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = CResult_RecipientOnionFieldsNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
+       LDKCVec_ThirtyTwoBytesZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
+       else
+               _res_constr.data = NULL;
+       for (size_t i = 0; i < _res_constr.datalen; i++) {
+               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
+               LDKThirtyTwoBytes _res_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
+               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
+               _res_constr.data[i] = _res_conv_8_ref;
+       }
+       CVec_ThirtyTwoBytesZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1some(JNIEnv *env, jclass clz, jobjectArray o) {
+       LDKCVec_ThirtyTwoBytesZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
+       else
+               o_constr.data = NULL;
+       for (size_t i = 0; i < o_constr.datalen; i++) {
+               int8_tArray o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
+               LDKThirtyTwoBytes o_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, o_conv_8) == 32);
+               (*env)->GetByteArrayRegion(env, o_conv_8, 0, 32, o_conv_8_ref.data);
+               o_constr.data[i] = o_conv_8_ref;
+       }
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_some(o_constr);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_CVec_ThirtyTwoBytesZZ _res_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_CVec_ThirtyTwoBytesZZ_free(_res_conv);
+}
+
+static inline uint64_t COption_CVec_ThirtyTwoBytesZZ_clone_ptr(LDKCOption_CVec_ThirtyTwoBytesZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ* arg_conv = (LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_CVec_ThirtyTwoBytesZZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_CVec_ThirtyTwoBytesZZ* orig_conv = (LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(orig);
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = COption_CVec_ThirtyTwoBytesZZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKThirtyTwoBytes o_ref;
+       CHECK((*env)->GetArrayLength(env, o) == 32);
+       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesNoneZ* o_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ThirtyTwoBytesNoneZ _res_conv = *(LDKCResult_ThirtyTwoBytesNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ThirtyTwoBytesNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ThirtyTwoBytesNoneZ_clone_ptr(LDKCResult_ThirtyTwoBytesNoneZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesNoneZ* arg_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesNoneZ* orig_conv = (LDKCResult_ThirtyTwoBytesNoneZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = CResult_ThirtyTwoBytesNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKBlindedPayInfo o_conv;
        o_conv.inner = untag_ptr(o);
@@ -20008,152 +21337,135 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TxOutZ_1free(JNIEnv *env
        CVec_TxOutZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1some(JNIEnv *env, jclass clz, int32_t o) {
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_some(o);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1some(JNIEnv *env, jclass clz, int32_t o) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_some(o);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_PackedLockTimeZ _res_conv = *(LDKCOption_PackedLockTimeZ*)(_res_ptr);
+       LDKCOption_u32Z _res_conv = *(LDKCOption_u32Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_PackedLockTimeZ_free(_res_conv);
+       COption_u32Z_free(_res_conv);
 }
 
-static inline uint64_t COption_PackedLockTimeZ_clone_ptr(LDKCOption_PackedLockTimeZ *NONNULL_PTR arg) {
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_clone(arg);
+static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PackedLockTimeZ* arg_conv = (LDKCOption_PackedLockTimeZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PackedLockTimeZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_u32Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PackedLockTimeZ* orig_conv = (LDKCOption_PackedLockTimeZ*)untag_ptr(orig);
-       LDKCOption_PackedLockTimeZ *ret_copy = MALLOC(sizeof(LDKCOption_PackedLockTimeZ), "LDKCOption_PackedLockTimeZ");
-       *ret_copy = COption_PackedLockTimeZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)untag_ptr(orig);
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(LDKC2Tuple_PartiallySignedTransactionusizeZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone(arg);
+static inline uint64_t C2Tuple_CVec_u8ZusizeZ_clone_ptr(LDKC2Tuple_CVec_u8ZusizeZ *NONNULL_PTR arg) {
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = C2Tuple_CVec_u8ZusizeZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* arg_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_CVec_u8ZusizeZ* arg_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_CVec_u8ZusizeZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* orig_conv = (LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(orig);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_CVec_u8ZusizeZ* orig_conv = (LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(orig);
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = C2Tuple_CVec_u8ZusizeZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKCVec_u8Z a_ref;
        a_ref.datalen = (*env)->GetArrayLength(env, a);
        a_ref.data = MALLOC(a_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, a, 0, a_ref.datalen, a_ref.data);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PartiallySignedTransactionusizeZ), "LDKC2Tuple_PartiallySignedTransactionusizeZ");
-       *ret_conv = C2Tuple_PartiallySignedTransactionusizeZ_new(a_ref, b);
+       LDKC2Tuple_CVec_u8ZusizeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_CVec_u8ZusizeZ), "LDKC2Tuple_CVec_u8ZusizeZ");
+       *ret_conv = C2Tuple_CVec_u8ZusizeZ_new(a_ref, b);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ _res_conv = *(LDKC2Tuple_PartiallySignedTransactionusizeZ*)(_res_ptr);
+       LDKC2Tuple_CVec_u8ZusizeZ _res_conv = *(LDKC2Tuple_CVec_u8ZusizeZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PartiallySignedTransactionusizeZ_free(_res_conv);
+       C2Tuple_CVec_u8ZusizeZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_PartiallySignedTransactionusizeZ o_conv = *(LDKC2Tuple_PartiallySignedTransactionusizeZ*)(o_ptr);
-       o_conv = C2Tuple_PartiallySignedTransactionusizeZ_clone((LDKC2Tuple_PartiallySignedTransactionusizeZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_ok(o_conv);
+       LDKC2Tuple_CVec_u8ZusizeZ o_conv = *(LDKC2Tuple_CVec_u8ZusizeZ*)(o_ptr);
+       o_conv = C2Tuple_CVec_u8ZusizeZ_clone((LDKC2Tuple_CVec_u8ZusizeZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* o_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* o_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ _res_conv = *(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)(_res_ptr);
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ _res_conv = *(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_free(_res_conv);
+       CResult_C2Tuple_CVec_u8ZusizeZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* arg_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* arg_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* orig_conv = (LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* orig_conv = (LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PaymentPreimageZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_PaymentPreimageZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_PaymentPreimageZ Elements");
-       else
-               _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKThirtyTwoBytes _res_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
-               _res_constr.data[i] = _res_conv_8_ref;
-       }
-       CVec_PaymentPreimageZ_free(_res_constr);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1ok(JNIEnv *env, jclass clz) {
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
        *ret_conv = CResult_NoneNoneZ_ok();
@@ -20199,166 +21511,166 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone(J
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SignatureZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_SignatureZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ECDSASignatureZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
+       LDKCVec_ECDSASignatureZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                _res_constr.data = NULL;
        for (size_t i = 0; i < _res_constr.datalen; i++) {
                int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKSignature _res_conv_8_ref;
+               LDKECDSASignature _res_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, _res_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 64, _res_conv_8_ref.compact_form);
                _res_constr.data[i] = _res_conv_8_ref;
        }
-       CVec_SignatureZ_free(_res_constr);
+       CVec_ECDSASignatureZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(arg);
+static inline uint64_t C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* arg_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* arg_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(orig);
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* orig_conv = (LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(orig);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, jobjectArray b) {
-       LDKSignature a_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, jobjectArray b) {
+       LDKECDSASignature a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 64);
        (*env)->GetByteArrayRegion(env, a, 0, 64, a_ref.compact_form);
-       LDKCVec_SignatureZ b_constr;
+       LDKCVec_ECDSASignatureZ b_constr;
        b_constr.datalen = (*env)->GetArrayLength(env, b);
        if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                b_constr.data = NULL;
        for (size_t i = 0; i < b_constr.datalen; i++) {
                int8_tArray b_conv_8 = (*env)->GetObjectArrayElement(env, b, i);
-               LDKSignature b_conv_8_ref;
+               LDKECDSASignature b_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, b_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, b_conv_8, 0, 64, b_conv_8_ref.compact_form);
                b_constr.data[i] = b_conv_8_ref;
        }
-       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
-       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_new(a_ref, b_constr);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ), "LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ");
+       *ret_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_new(a_ref, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_SignatureCVec_SignatureZZ _res_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(_res_ptr);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ _res_conv = *(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_SignatureCVec_SignatureZZ_free(_res_conv);
+       C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_SignatureCVec_SignatureZZ o_conv = *(LDKC2Tuple_SignatureCVec_SignatureZZ*)(o_ptr);
-       o_conv = C2Tuple_SignatureCVec_SignatureZZ_clone((LDKC2Tuple_SignatureCVec_SignatureZZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(o_conv);
+       LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ o_conv = *(LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)(o_ptr);
+       o_conv = C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone((LDKC2Tuple_ECDSASignatureCVec_ECDSASignatureZZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ _res_conv = *(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv);
+       CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
-       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ), "LDKCResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKSignature o_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKECDSASignature o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 64);
        (*env)->GetByteArrayRegion(env, o, 0, 64, o_ref.compact_form);
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_ok(o_ref);
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_SignatureNoneZ* o_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_SignatureNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ECDSASignatureNoneZ* o_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ECDSASignatureNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_SignatureNoneZ _res_conv = *(LDKCResult_SignatureNoneZ*)(_res_ptr);
+       LDKCResult_ECDSASignatureNoneZ _res_conv = *(LDKCResult_ECDSASignatureNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_SignatureNoneZ_free(_res_conv);
+       CResult_ECDSASignatureNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg) {
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_clone(arg);
+static inline uint64_t CResult_ECDSASignatureNoneZ_clone_ptr(LDKCResult_ECDSASignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_SignatureNoneZ* arg_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_SignatureNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ECDSASignatureNoneZ* arg_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ECDSASignatureNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)untag_ptr(orig);
-       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
-       *ret_conv = CResult_SignatureNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ECDSASignatureNoneZ* orig_conv = (LDKCResult_ECDSASignatureNoneZ*)untag_ptr(orig);
+       LDKCResult_ECDSASignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ECDSASignatureNoneZ), "LDKCResult_ECDSASignatureNoneZ");
+       *ret_conv = CResult_ECDSASignatureNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -20410,101 +21722,53 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1cl
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
        LDKBigEndianScalar o_conv = *(LDKBigEndianScalar*)(o_ptr);
        // WARNING: we may need a move here but no clone is available for LDKBigEndianScalar
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_some(o_conv);
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_ScalarZ _res_conv = *(LDKCOption_ScalarZ*)(_res_ptr);
+       LDKCOption_BigEndianScalarZ _res_conv = *(LDKCOption_BigEndianScalarZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_ScalarZ_free(_res_conv);
+       COption_BigEndianScalarZ_free(_res_conv);
 }
 
-static inline uint64_t COption_ScalarZ_clone_ptr(LDKCOption_ScalarZ *NONNULL_PTR arg) {
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_clone(arg);
+static inline uint64_t COption_BigEndianScalarZ_clone_ptr(LDKCOption_BigEndianScalarZ *NONNULL_PTR arg) {
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_ScalarZ* arg_conv = (LDKCOption_ScalarZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_ScalarZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_BigEndianScalarZ* arg_conv = (LDKCOption_BigEndianScalarZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_BigEndianScalarZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_ScalarZ* orig_conv = (LDKCOption_ScalarZ*)untag_ptr(orig);
-       LDKCOption_ScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_ScalarZ), "LDKCOption_ScalarZ");
-       *ret_copy = COption_ScalarZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_BigEndianScalarZ* orig_conv = (LDKCOption_BigEndianScalarZ*)untag_ptr(orig);
+       LDKCOption_BigEndianScalarZ *ret_copy = MALLOC(sizeof(LDKCOption_BigEndianScalarZ), "LDKCOption_BigEndianScalarZ");
+       *ret_copy = COption_BigEndianScalarZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_ok(o_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_SharedSecretNoneZ* o_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_SharedSecretNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_SharedSecretNoneZ _res_conv = *(LDKCResult_SharedSecretNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_SharedSecretNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_SharedSecretNoneZ_clone_ptr(LDKCResult_SharedSecretNoneZ *NONNULL_PTR arg) {
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_SharedSecretNoneZ* arg_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_SharedSecretNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_SharedSecretNoneZ* orig_conv = (LDKCResult_SharedSecretNoneZ*)untag_ptr(orig);
-       LDKCResult_SharedSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SharedSecretNoneZ), "LDKCResult_SharedSecretNoneZ");
-       *ret_conv = CResult_SharedSecretNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1U5Z_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
        LDKCVec_U5Z _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -20570,6 +21834,54 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatu
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKSchnorrSignature o_ref;
+       CHECK((*env)->GetArrayLength(env, o) == 64);
+       (*env)->GetByteArrayRegion(env, o, 0, 64, o_ref.compact_form);
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SchnorrSignatureNoneZ* o_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SchnorrSignatureNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_SchnorrSignatureNoneZ _res_conv = *(LDKCResult_SchnorrSignatureNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_SchnorrSignatureNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_SchnorrSignatureNoneZ_clone_ptr(LDKCResult_SchnorrSignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SchnorrSignatureNoneZ* arg_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SchnorrSignatureNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_SchnorrSignatureNoneZ* orig_conv = (LDKCResult_SchnorrSignatureNoneZ*)untag_ptr(orig);
+       LDKCResult_SchnorrSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SchnorrSignatureNoneZ), "LDKCResult_SchnorrSignatureNoneZ");
+       *ret_conv = CResult_SchnorrSignatureNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChannelSignerDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -20626,52 +21938,52 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChan
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKCVec_u8Z o_ref;
        o_ref.datalen = (*env)->GetArrayLength(env, o);
        o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_ok(o_ref);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_ScriptNoneZ* o_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_ScriptNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_u8ZNoneZ* o_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_u8ZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_ScriptNoneZ _res_conv = *(LDKCResult_ScriptNoneZ*)(_res_ptr);
+       LDKCResult_CVec_u8ZNoneZ _res_conv = *(LDKCResult_CVec_u8ZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_ScriptNoneZ_free(_res_conv);
+       CResult_CVec_u8ZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_ScriptNoneZ_clone_ptr(LDKCResult_ScriptNoneZ *NONNULL_PTR arg) {
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_u8ZNoneZ_clone_ptr(LDKCResult_CVec_u8ZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_ScriptNoneZ* arg_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_ScriptNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_u8ZNoneZ* arg_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_u8ZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_ScriptNoneZ* orig_conv = (LDKCResult_ScriptNoneZ*)untag_ptr(orig);
-       LDKCResult_ScriptNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ScriptNoneZ), "LDKCResult_ScriptNoneZ");
-       *ret_conv = CResult_ScriptNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_u8ZNoneZ* orig_conv = (LDKCResult_CVec_u8ZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = CResult_CVec_u8ZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -20725,6 +22037,92 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNone
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1some(JNIEnv *env, jclass clz, int16_t o) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_some(o);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_u16Z _res_conv = *(LDKCOption_u16Z*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_u16Z_free(_res_conv);
+}
+
+static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_u16Z_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)untag_ptr(orig);
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1some(JNIEnv *env, jclass clz, jboolean o) {
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_some(o);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_boolZ _res_conv = *(LDKCOption_boolZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_boolZ_free(_res_conv);
+}
+
+static inline uint64_t COption_boolZ_clone_ptr(LDKCOption_boolZ *NONNULL_PTR arg) {
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_boolZ* arg_conv = (LDKCOption_boolZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_boolZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_boolZ* orig_conv = (LDKCOption_boolZ*)untag_ptr(orig);
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = COption_boolZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CVec_1u8ZZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
        LDKCVec_CVec_u8ZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -20856,55 +22254,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKCVec_u8Z o_ref;
-       o_ref.datalen = (*env)->GetArrayLength(env, o);
-       o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_ok(o_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_err();
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PartiallySignedTransactionNoneZ* o_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PartiallySignedTransactionNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_PartiallySignedTransactionNoneZ _res_conv = *(LDKCResult_PartiallySignedTransactionNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_PartiallySignedTransactionNoneZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_PartiallySignedTransactionNoneZ_clone_ptr(LDKCResult_PartiallySignedTransactionNoneZ *NONNULL_PTR arg) {
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PartiallySignedTransactionNoneZ* arg_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PartiallySignedTransactionNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PartiallySignedTransactionNoneZ* orig_conv = (LDKCResult_PartiallySignedTransactionNoneZ*)untag_ptr(orig);
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = CResult_PartiallySignedTransactionNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKTransaction o_ref;
        o_ref.datalen = (*env)->GetArrayLength(env, o);
@@ -20985,49 +22334,49 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1WriteableScoreZ_1free
        COption_WriteableScoreZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1ok(JNIEnv *env, jclass clz) {
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_ok();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1ok(JNIEnv *env, jclass clz) {
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_ok();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKIOError e_conv = LDKIOError_from_java(env, e);
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_err(e_conv);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_NoneErrorZ* o_conv = (LDKCResult_NoneErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_NoneErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneIOErrorZ* o_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_NoneIOErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_NoneErrorZ _res_conv = *(LDKCResult_NoneErrorZ*)(_res_ptr);
+       LDKCResult_NoneIOErrorZ _res_conv = *(LDKCResult_NoneIOErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_NoneErrorZ_free(_res_conv);
+       CResult_NoneIOErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg) {
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_clone(arg);
+static inline uint64_t CResult_NoneIOErrorZ_clone_ptr(LDKCResult_NoneIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_NoneErrorZ* arg_conv = (LDKCResult_NoneErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_NoneErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneIOErrorZ* arg_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_NoneIOErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_NoneErrorZ* orig_conv = (LDKCResult_NoneErrorZ*)untag_ptr(orig);
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
-       *ret_conv = CResult_NoneErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_NoneIOErrorZ* orig_conv = (LDKCResult_NoneIOErrorZ*)untag_ptr(orig);
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = CResult_NoneIOErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -21308,49 +22657,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHopZ_1free(JNIEnv *
        CVec_RouteHopZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1some(JNIEnv *env, jclass clz, int32_t o) {
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_some(o);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_u32Z _res_conv = *(LDKCOption_u32Z*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_u32Z_free(_res_conv);
-}
-
-static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u32Z_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)untag_ptr(orig);
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = COption_u32Z_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PathZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
        LDKCVec_PathZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -21931,31 +23237,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u64ZZ_
        return ret_ref;
 }
 
-static inline uint64_t C2Tuple_Z_clone_ptr(LDKC2Tuple_Z *NONNULL_PTR arg) {
-       LDKC2Tuple_Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_Z), "LDKC2Tuple_Z");
-       *ret_conv = C2Tuple_Z_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_Z* arg_conv = (LDKC2Tuple_Z*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_Z_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_Z* orig_conv = (LDKC2Tuple_Z*)untag_ptr(orig);
-       LDKC2Tuple_Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_Z), "LDKC2Tuple_Z");
-       *ret_conv = C2Tuple_Z_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1new(JNIEnv *env, jclass clz, int16_tArray a, int16_tArray b) {
-       LDKEightU16s a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 8);
-       (*env)->GetShortArrayRegion(env, a, 0, 8, a_ref.data);
-       LDKEightU16s b_ref;
-       CHECK((*env)->GetArrayLength(env, b) == 8);
-       (*env)->GetShortArrayRegion(env, b, 0, 8, b_ref.data);
+       LDKThirtyTwoU16s a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 32);
+       (*env)->GetShortArrayRegion(env, a, 0, 32, a_ref.data);
+       LDKThirtyTwoU16s b_ref;
+       CHECK((*env)->GetArrayLength(env, b) == 32);
+       (*env)->GetShortArrayRegion(env, b, 0, 32, b_ref.data);
        LDKC2Tuple_Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_Z), "LDKC2Tuple_Z");
        *ret_conv = C2Tuple_Z_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
@@ -21970,88 +23258,93 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1free(JNIEnv *env,
        C2Tuple_Z_free(_res_conv);
 }
 
-static inline uint64_t C2Tuple__u168_u168Z_clone_ptr(LDKC2Tuple__u168_u168Z *NONNULL_PTR arg) {
-       LDKC2Tuple__u168_u168Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-       *ret_conv = C2Tuple__u168_u168Z_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1new(JNIEnv *env, jclass clz, int16_tArray a, int16_tArray b) {
+       LDKThirtyTwoU16s a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 32);
+       (*env)->GetShortArrayRegion(env, a, 0, 32, a_ref.data);
+       LDKThirtyTwoU16s b_ref;
+       CHECK((*env)->GetArrayLength(env, b) == 32);
+       (*env)->GetShortArrayRegion(env, b, 0, 32, b_ref.data);
+       LDKC2Tuple__u1632_u1632Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u1632_u1632Z), "LDKC2Tuple__u1632_u1632Z");
+       *ret_conv = C2Tuple__u1632_u1632Z_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple__u168_u168Z* arg_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple__u168_u168Z_clone_ptr(arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple__u1632_u1632Z _res_conv = *(LDKC2Tuple__u1632_u1632Z*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple__u1632_u1632Z_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple__u168_u168Z* orig_conv = (LDKC2Tuple__u168_u168Z*)untag_ptr(orig);
-       LDKC2Tuple__u168_u168Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-       *ret_conv = C2Tuple__u168_u168Z_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple__u1632_u1632Z o_conv = *(LDKC2Tuple__u1632_u1632Z*)(o_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKC2Tuple__u1632_u1632Z
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_some(o_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1new(JNIEnv *env, jclass clz, int16_tArray a, int16_tArray b) {
-       LDKEightU16s a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 8);
-       (*env)->GetShortArrayRegion(env, a, 0, 8, a_ref.data);
-       LDKEightU16s b_ref;
-       CHECK((*env)->GetArrayLength(env, b) == 8);
-       (*env)->GetShortArrayRegion(env, b, 0, 8, b_ref.data);
-       LDKC2Tuple__u168_u168Z* ret_conv = MALLOC(sizeof(LDKC2Tuple__u168_u168Z), "LDKC2Tuple__u168_u168Z");
-       *ret_conv = C2Tuple__u168_u168Z_new(a_ref, b_ref);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple__u168_u168Z _res_conv = *(LDKC2Tuple__u168_u168Z*)(_res_ptr);
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ _res_conv = *(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple__u168_u168Z_free(_res_conv);
+       COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1some(JNIEnv *env, jclass clz, int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC2Tuple__u168_u168Z o_conv = *(LDKC2Tuple__u168_u168Z*)(o_ptr);
-       o_conv = C2Tuple__u168_u168Z_clone((LDKC2Tuple__u168_u168Z*)untag_ptr(o));
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_some(o_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1some(JNIEnv *env, jclass clz, double o) {
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_some(o);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ _res_conv = *(LDKCOption_C2Tuple_EightU16sEightU16sZZ*)(_res_ptr);
+       LDKCOption_f64Z _res_conv = *(LDKCOption_f64Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_C2Tuple_EightU16sEightU16sZZ_free(_res_conv);
+       COption_f64Z_free(_res_conv);
 }
 
-static inline uint64_t COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(LDKCOption_C2Tuple_EightU16sEightU16sZZ *NONNULL_PTR arg) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_clone(arg);
+static inline uint64_t COption_f64Z_clone_ptr(LDKCOption_f64Z *NONNULL_PTR arg) {
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ* arg_conv = (LDKCOption_C2Tuple_EightU16sEightU16sZZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_f64Z* arg_conv = (LDKCOption_f64Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_f64Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ* orig_conv = (LDKCOption_C2Tuple_EightU16sEightU16sZZ*)untag_ptr(orig);
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = COption_C2Tuple_EightU16sEightU16sZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_f64Z* orig_conv = (LDKCOption_f64Z*)untag_ptr(orig);
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = COption_f64Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -22151,110 +23444,110 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1usizeTransactio
        CVec_C2Tuple_usizeTransactionZZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_BlockHashZ _res_conv = *(LDKCOption_BlockHashZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_BlockHashZ_free(_res_conv);
-}
-
-static inline uint64_t COption_BlockHashZ_clone_ptr(LDKCOption_BlockHashZ *NONNULL_PTR arg) {
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_BlockHashZ* arg_conv = (LDKCOption_BlockHashZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_BlockHashZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_BlockHashZ* orig_conv = (LDKCOption_BlockHashZ*)untag_ptr(orig);
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
-       *ret_copy = COption_BlockHashZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-static inline uint64_t C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(LDKC2Tuple_TxidCOption_BlockHashZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-       *ret_conv = C2Tuple_TxidCOption_BlockHashZZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* arg_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_TxidCOption_BlockHashZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_TxidCOption_BlockHashZZ* orig_conv = (LDKC2Tuple_TxidCOption_BlockHashZZ*)untag_ptr(orig);
-       LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-       *ret_conv = C2Tuple_TxidCOption_BlockHashZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKCOption_BlockHashZ b_conv = *(LDKCOption_BlockHashZ*)(b_ptr);
-       b_conv = COption_BlockHashZ_clone((LDKCOption_BlockHashZ*)untag_ptr(b));
-       LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-       *ret_conv = C2Tuple_TxidCOption_BlockHashZZ_new(a_ref, b_conv);
+       LDKCOption_ThirtyTwoBytesZ b_conv = *(LDKCOption_ThirtyTwoBytesZ*)(b_ptr);
+       b_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(b));
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_TxidCOption_BlockHashZZ _res_conv = *(LDKC2Tuple_TxidCOption_BlockHashZZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_TxidCOption_BlockHashZZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCOption_1BlockHashZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int64_t _res_conv_34 = _res_vals[i];
-               void* _res_conv_34_ptr = untag_ptr(_res_conv_34);
-               CHECK_ACCESS(_res_conv_34_ptr);
-               LDKC2Tuple_TxidCOption_BlockHashZZ _res_conv_34_conv = *(LDKC2Tuple_TxidCOption_BlockHashZZ*)(_res_conv_34_ptr);
-               FREE(untag_ptr(_res_conv_34));
-               _res_constr.data[i] = _res_conv_34_conv;
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_49 = _res_vals[x];
+               void* _res_conv_49_ptr = untag_ptr(_res_conv_49);
+               CHECK_ACCESS(_res_conv_49_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ _res_conv_49_conv = *(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ*)(_res_conv_49_ptr);
+               FREE(untag_ptr(_res_conv_49));
+               _res_constr.data[x] = _res_conv_49_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_TxidCOption_BlockHashZZZ_free(_res_constr);
+       CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1ok(JNIEnv *env, jclass clz, jclass o) {
+       LDKChannelMonitorUpdateStatus o_conv = LDKChannelMonitorUpdateStatus_from_java(env, o);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* o_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ _res_conv = *(LDKCResult_ChannelMonitorUpdateStatusNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ChannelMonitorUpdateStatusNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(LDKCResult_ChannelMonitorUpdateStatusNoneZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* arg_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* orig_conv = (LDKCResult_ChannelMonitorUpdateStatusNoneZ*)untag_ptr(orig);
+       LDKCResult_ChannelMonitorUpdateStatusNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateStatusNoneZ), "LDKCResult_ChannelMonitorUpdateStatusNoneZ");
+       *ret_conv = CResult_ChannelMonitorUpdateStatusNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1MonitorEventZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
@@ -22732,23 +24025,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTypeFeature
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChainHashZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_ChainHashZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ChainHashZ Elements");
-       else
-               _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKThirtyTwoBytes _res_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
-               _res_constr.data[i] = _res_conv_8_ref;
-       }
-       CVec_ChainHashZ_free(_res_constr);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKOffer o_conv;
        o_conv.inner = untag_ptr(o);
@@ -22804,52 +24080,52 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseEr
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKPublicKey o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 33);
        (*env)->GetByteArrayRegion(env, o, 0, 33, o_ref.compressed_form);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_ok(o_ref);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_java(env, e);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_err(e_conv);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PublicKeyErrorZ* o_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PublicKeyErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* o_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PublicKeySecp256k1ErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PublicKeyErrorZ _res_conv = *(LDKCResult_PublicKeyErrorZ*)(_res_ptr);
+       LDKCResult_PublicKeySecp256k1ErrorZ _res_conv = *(LDKCResult_PublicKeySecp256k1ErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PublicKeyErrorZ_free(_res_conv);
+       CResult_PublicKeySecp256k1ErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_clone(arg);
+static inline uint64_t CResult_PublicKeySecp256k1ErrorZ_clone_ptr(LDKCResult_PublicKeySecp256k1ErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PublicKeyErrorZ* arg_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PublicKeyErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* arg_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PublicKeySecp256k1ErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PublicKeyErrorZ* orig_conv = (LDKCResult_PublicKeyErrorZ*)untag_ptr(orig);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = CResult_PublicKeyErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PublicKeySecp256k1ErrorZ* orig_conv = (LDKCResult_PublicKeySecp256k1ErrorZ*)untag_ptr(orig);
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PublicKeySecp256k1ErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -23414,24 +24690,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_NetAddressZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SocketAddressZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_SocketAddressZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t m = 0; m < _res_constr.datalen; m++) {
-               int64_t _res_conv_12 = _res_vals[m];
-               void* _res_conv_12_ptr = untag_ptr(_res_conv_12);
-               CHECK_ACCESS(_res_conv_12_ptr);
-               LDKNetAddress _res_conv_12_conv = *(LDKNetAddress*)(_res_conv_12_ptr);
-               FREE(untag_ptr(_res_conv_12));
-               _res_constr.data[m] = _res_conv_12_conv;
+       for (size_t p = 0; p < _res_constr.datalen; p++) {
+               int64_t _res_conv_15 = _res_vals[p];
+               void* _res_conv_15_ptr = untag_ptr(_res_conv_15);
+               CHECK_ACCESS(_res_conv_15_ptr);
+               LDKSocketAddress _res_conv_15_conv = *(LDKSocketAddress*)(_res_conv_15_ptr);
+               FREE(untag_ptr(_res_conv_15));
+               _res_constr.data[p] = _res_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_NetAddressZ_free(_res_constr);
+       CVec_SocketAddressZ_free(_res_constr);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
@@ -23633,109 +24909,171 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErr
        CResult_NetworkGraphDecodeErrorZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1some(JNIEnv *env, jclass clz, int64_tArray o) {
-       LDKCVec_NetAddressZ o_constr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1some(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_SocketAddressZ o_constr;
        o_constr.datalen = (*env)->GetArrayLength(env, o);
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                o_constr.data = NULL;
        int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
-       for (size_t m = 0; m < o_constr.datalen; m++) {
-               int64_t o_conv_12 = o_vals[m];
-               void* o_conv_12_ptr = untag_ptr(o_conv_12);
-               CHECK_ACCESS(o_conv_12_ptr);
-               LDKNetAddress o_conv_12_conv = *(LDKNetAddress*)(o_conv_12_ptr);
-               o_conv_12_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(o_conv_12));
-               o_constr.data[m] = o_conv_12_conv;
+       for (size_t p = 0; p < o_constr.datalen; p++) {
+               int64_t o_conv_15 = o_vals[p];
+               void* o_conv_15_ptr = untag_ptr(o_conv_15);
+               CHECK_ACCESS(o_conv_15_ptr);
+               LDKSocketAddress o_conv_15_conv = *(LDKSocketAddress*)(o_conv_15_ptr);
+               o_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o_conv_15));
+               o_constr.data[p] = o_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_some(o_constr);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_some(o_constr);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_CVec_NetAddressZZ _res_conv = *(LDKCOption_CVec_NetAddressZZ*)(_res_ptr);
+       LDKCOption_CVec_SocketAddressZZ _res_conv = *(LDKCOption_CVec_SocketAddressZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_CVec_NetAddressZZ_free(_res_conv);
+       COption_CVec_SocketAddressZZ_free(_res_conv);
 }
 
-static inline uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg) {
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_clone(arg);
+static inline uint64_t COption_CVec_SocketAddressZZ_clone_ptr(LDKCOption_CVec_SocketAddressZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_CVec_NetAddressZZ* arg_conv = (LDKCOption_CVec_NetAddressZZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_CVec_NetAddressZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_CVec_SocketAddressZZ* arg_conv = (LDKCOption_CVec_SocketAddressZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_CVec_SocketAddressZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_CVec_NetAddressZZ* orig_conv = (LDKCOption_CVec_NetAddressZZ*)untag_ptr(orig);
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = COption_CVec_NetAddressZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_CVec_SocketAddressZZ* orig_conv = (LDKCOption_CVec_SocketAddressZZ*)untag_ptr(orig);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = COption_CVec_SocketAddressZZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKChannelDerivationParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ChannelDerivationParameters_clone(&o_conv);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* o_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentPreimageZ _res_conv = *(LDKCOption_PaymentPreimageZ*)(_res_ptr);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ _res_conv = *(LDKCResult_ChannelDerivationParametersDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_PaymentPreimageZ_free(_res_conv);
+       CResult_ChannelDerivationParametersDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t COption_PaymentPreimageZ_clone_ptr(LDKCOption_PaymentPreimageZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+static inline uint64_t CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelDerivationParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentPreimageZ* arg_conv = (LDKCOption_PaymentPreimageZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentPreimageZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* arg_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentPreimageZ* orig_conv = (LDKCOption_PaymentPreimageZ*)untag_ptr(orig);
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
-       *ret_copy = COption_PaymentPreimageZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* orig_conv = (LDKCResult_ChannelDerivationParametersDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelDerivationParametersDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKHTLCDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = HTLCDescriptor_clone(&o_conv);
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* o_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_HTLCDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_HTLCDescriptorDecodeErrorZ _res_conv = *(LDKCResult_HTLCDescriptorDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_HTLCDescriptorDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(LDKCResult_HTLCDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* arg_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_HTLCDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_HTLCDescriptorDecodeErrorZ* orig_conv = (LDKCResult_HTLCDescriptorDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = CResult_HTLCDescriptorDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1HTLCOutputInCommitmentZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
@@ -23977,45 +25315,82 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1UtxoZNoneZ_1
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1some(JNIEnv *env, jclass clz, int16_t o) {
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_some(o);
+static inline uint64_t C2Tuple_u64u16Z_clone_ptr(LDKC2Tuple_u64u16Z *NONNULL_PTR arg) {
+       LDKC2Tuple_u64u16Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+       *ret_conv = C2Tuple_u64u16Z_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u64u16Z* arg_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_u64u16Z_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_u64u16Z* orig_conv = (LDKC2Tuple_u64u16Z*)untag_ptr(orig);
+       LDKC2Tuple_u64u16Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+       *ret_conv = C2Tuple_u64u16Z_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1new(JNIEnv *env, jclass clz, int64_t a, int16_t b) {
+       LDKC2Tuple_u64u16Z* ret_conv = MALLOC(sizeof(LDKC2Tuple_u64u16Z), "LDKC2Tuple_u64u16Z");
+       *ret_conv = C2Tuple_u64u16Z_new(a, b);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_u64u16Z _res_conv = *(LDKC2Tuple_u64u16Z*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_u64u16Z_free(_res_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_u64u16Z o_conv = *(LDKC2Tuple_u64u16Z*)(o_ptr);
+       o_conv = C2Tuple_u64u16Z_clone((LDKC2Tuple_u64u16Z*)untag_ptr(o));
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_u16Z _res_conv = *(LDKCOption_u16Z*)(_res_ptr);
+       LDKCOption_C2Tuple_u64u16ZZ _res_conv = *(LDKCOption_C2Tuple_u64u16ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_u16Z_free(_res_conv);
+       COption_C2Tuple_u64u16ZZ_free(_res_conv);
 }
 
-static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_clone(arg);
+static inline uint64_t COption_C2Tuple_u64u16ZZ_clone_ptr(LDKCOption_C2Tuple_u64u16ZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u16Z_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_C2Tuple_u64u16ZZ* arg_conv = (LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_C2Tuple_u64u16ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)untag_ptr(orig);
-       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
-       *ret_copy = COption_u16Z_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_C2Tuple_u64u16ZZ* orig_conv = (LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(orig);
+       LDKCOption_C2Tuple_u64u16ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u16ZZ), "LDKCOption_C2Tuple_u64u16ZZ");
+       *ret_copy = COption_C2Tuple_u64u16ZZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -24064,101 +25439,55 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownSta
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentHashZ _res_conv = *(LDKCOption_PaymentHashZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_PaymentHashZ_free(_res_conv);
-}
-
-static inline uint64_t COption_PaymentHashZ_clone_ptr(LDKCOption_PaymentHashZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentHashZ* arg_conv = (LDKCOption_PaymentHashZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentHashZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentHashZ* orig_conv = (LDKCOption_PaymentHashZ*)untag_ptr(orig);
-       LDKCOption_PaymentHashZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentHashZ), "LDKCOption_PaymentHashZ");
-       *ret_copy = COption_PaymentHashZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKAPIError e_conv = *(LDKAPIError*)(e_ptr);
        e_conv = APIError_clone((LDKAPIError*)untag_ptr(e));
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult__u832APIErrorZ* o_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult__u832APIErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* o_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult__u832APIErrorZ _res_conv = *(LDKCResult__u832APIErrorZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ _res_conv = *(LDKCResult_ThirtyTwoBytesAPIErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult__u832APIErrorZ_free(_res_conv);
+       CResult_ThirtyTwoBytesAPIErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg) {
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(LDKCResult_ThirtyTwoBytesAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult__u832APIErrorZ* arg_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult__u832APIErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* arg_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult__u832APIErrorZ* orig_conv = (LDKCResult__u832APIErrorZ*)untag_ptr(orig);
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
-       *ret_conv = CResult__u832APIErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* orig_conv = (LDKCResult_ThirtyTwoBytesAPIErrorZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesAPIErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -24277,460 +25606,392 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneRetryableSendF
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKPaymentSendFailure e_conv = *(LDKPaymentSendFailure*)(e_ptr);
        e_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(e));
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* o_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentHashPaymentSendFailureZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* o_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentHashPaymentSendFailureZ _res_conv = *(LDKCResult_PaymentHashPaymentSendFailureZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ _res_conv = *(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentHashPaymentSendFailureZ_free(_res_conv);
+       CResult_ThirtyTwoBytesPaymentSendFailureZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentHashPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentHashPaymentSendFailureZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* arg_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentHashPaymentSendFailureZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* arg_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentHashPaymentSendFailureZ* orig_conv = (LDKCResult_PaymentHashPaymentSendFailureZ*)untag_ptr(orig);
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
-       *ret_conv = CResult_PaymentHashPaymentSendFailureZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* orig_conv = (LDKCResult_ThirtyTwoBytesPaymentSendFailureZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentSendFailureZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKRetryableSendFailure e_conv = LDKRetryableSendFailure_from_java(env, e);
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* o_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentHashRetryableSendFailureZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* o_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentHashRetryableSendFailureZ _res_conv = *(LDKCResult_PaymentHashRetryableSendFailureZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ _res_conv = *(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentHashRetryableSendFailureZ_free(_res_conv);
+       CResult_ThirtyTwoBytesRetryableSendFailureZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentHashRetryableSendFailureZ_clone_ptr(LDKCResult_PaymentHashRetryableSendFailureZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* arg_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentHashRetryableSendFailureZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* arg_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentHashRetryableSendFailureZ* orig_conv = (LDKCResult_PaymentHashRetryableSendFailureZ*)untag_ptr(orig);
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
-       *ret_conv = CResult_PaymentHashRetryableSendFailureZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* orig_conv = (LDKCResult_ThirtyTwoBytesRetryableSendFailureZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
+       *ret_conv = CResult_ThirtyTwoBytesRetryableSendFailureZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PaymentHashPaymentIdZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(orig);
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
        LDKThirtyTwoBytes b_ref;
        CHECK((*env)->GetArrayLength(env, b) == 32);
        (*env)->GetByteArrayRegion(env, b, 0, 32, b_ref.data);
-       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_new(a_ref, b_ref);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PaymentHashPaymentIdZ _res_conv = *(LDKC2Tuple_PaymentHashPaymentIdZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PaymentHashPaymentIdZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_PaymentHashPaymentIdZ o_conv = *(LDKC2Tuple_PaymentHashPaymentIdZ*)(o_ptr);
-       o_conv = C2Tuple_PaymentHashPaymentIdZ_clone((LDKC2Tuple_PaymentHashPaymentIdZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKPaymentSendFailure e_conv = *(LDKPaymentSendFailure*)(e_ptr);
        e_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(e));
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(e_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ _res_conv = *(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ThirtyTwoBytesZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_ThirtyTwoBytesZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ThirtyTwoBytesZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ Elements");
        else
                _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               int8_tArray _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKThirtyTwoBytes _res_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, _res_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, _res_conv_8, 0, 32, _res_conv_8_ref.data);
-               _res_constr.data[i] = _res_conv_8_ref;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t o = 0; o < _res_constr.datalen; o++) {
+               int64_t _res_conv_40 = _res_vals[o];
+               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
+               CHECK_ACCESS(_res_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ _res_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(_res_conv_40_ptr);
+               FREE(untag_ptr(_res_conv_40));
+               _res_constr.data[o] = _res_conv_40_conv;
        }
-       CVec_ThirtyTwoBytesZ_free(_res_constr);
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ Elements");
+       else
+               o_constr.data = NULL;
+       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
+       for (size_t o = 0; o < o_constr.datalen; o++) {
+               int64_t o_conv_40 = o_vals[o];
+               void* o_conv_40_ptr = untag_ptr(o_conv_40);
+               CHECK_ACCESS(o_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_conv_40_ptr);
+               o_conv_40_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o_conv_40));
+               o_constr.data[o] = o_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PaymentHashPaymentSecretZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(orig);
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKProbeSendFailure e_conv = *(LDKProbeSendFailure*)(e_ptr);
+       e_conv = ProbeSendFailure_clone((LDKProbeSendFailure*)untag_ptr(e));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
-       LDKThirtyTwoBytes a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 32);
-       (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
-       LDKThirtyTwoBytes b_ref;
-       CHECK((*env)->GetArrayLength(env, b) == 32);
-       (*env)->GetByteArrayRegion(env, b, 0, 32, b_ref.data);
-       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
-       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_new(a_ref, b_ref);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* o_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok(o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PaymentHashPaymentSecretZ _res_conv = *(LDKC2Tuple_PaymentHashPaymentSecretZ*)(_res_ptr);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ _res_conv = *(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PaymentHashPaymentSecretZ_free(_res_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       void* o_ptr = untag_ptr(o);
-       CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_PaymentHashPaymentSecretZ o_conv = *(LDKC2Tuple_PaymentHashPaymentSecretZ*)(o_ptr);
-       o_conv = C2Tuple_PaymentHashPaymentSecretZ_clone((LDKC2Tuple_PaymentHashPaymentSecretZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_ok(o_conv);
-       return tag_ptr(ret_conv, true);
+       CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_err();
+static inline uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(o_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* arg_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ _res_conv = *(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_free(_res_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* orig_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ*)untag_ptr(orig);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKC2Tuple_ThirtyTwoBytesPublicKeyZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
-       *ret_conv = CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_ok(o_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKC2Tuple_ThirtyTwoBytesPublicKeyZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int8_tArray b) {
+       LDKThirtyTwoBytes a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 32);
+       (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
+       LDKPublicKey b_ref;
+       CHECK((*env)->GetArrayLength(env, b) == 33);
+       (*env)->GetByteArrayRegion(env, b, 0, 33, b_ref.compressed_form);
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKC2Tuple_ThirtyTwoBytesPublicKeyZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_new(a_ref, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentSecretNoneZ* o_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentSecretNoneZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentSecretNoneZ _res_conv = *(LDKCResult_PaymentSecretNoneZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesPublicKeyZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentSecretNoneZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesPublicKeyZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentSecretNoneZ_clone_ptr(LDKCResult_PaymentSecretNoneZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentSecretNoneZ* arg_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentSecretNoneZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentSecretNoneZ* orig_conv = (LDKCResult_PaymentSecretNoneZ*)untag_ptr(orig);
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
-       *ret_conv = CResult_PaymentSecretNoneZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesPublicKeyZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t j = 0; j < _res_constr.datalen; j++) {
+               int64_t _res_conv_35 = _res_vals[j];
+               void* _res_conv_35_ptr = untag_ptr(_res_conv_35);
+               CHECK_ACCESS(_res_conv_35_ptr);
+               LDKC2Tuple_ThirtyTwoBytesPublicKeyZ _res_conv_35_conv = *(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)(_res_conv_35_ptr);
+               FREE(untag_ptr(_res_conv_35));
+               _res_constr.data[j] = _res_conv_35_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_ok(o_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKAPIError e_conv = *(LDKAPIError*)(e_ptr);
-       e_conv = APIError_clone((LDKAPIError*)untag_ptr(e));
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_err(e_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentPreimageAPIErrorZ* o_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentPreimageAPIErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentPreimageAPIErrorZ _res_conv = *(LDKCResult_PaymentPreimageAPIErrorZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentPreimageAPIErrorZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentPreimageAPIErrorZ_clone_ptr(LDKCResult_PaymentPreimageAPIErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentPreimageAPIErrorZ* arg_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentPreimageAPIErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentPreimageAPIErrorZ* orig_conv = (LDKCResult_PaymentPreimageAPIErrorZ*)untag_ptr(orig);
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
-       *ret_conv = CResult_PaymentPreimageAPIErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1some(JNIEnv *env, jclass clz, jobjectArray o) {
-       LDKCVec_ChainHashZ o_constr;
-       o_constr.datalen = (*env)->GetArrayLength(env, o);
-       if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKThirtyTwoBytes), "LDKCVec_ChainHashZ Elements");
-       else
-               o_constr.data = NULL;
-       for (size_t i = 0; i < o_constr.datalen; i++) {
-               int8_tArray o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
-               LDKThirtyTwoBytes o_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, o_conv_8) == 32);
-               (*env)->GetByteArrayRegion(env, o_conv_8, 0, 32, o_conv_8_ref.data);
-               o_constr.data[i] = o_conv_8_ref;
-       }
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_some(o_constr);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_CVec_ChainHashZZ _res_conv = *(LDKCOption_CVec_ChainHashZZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_CVec_ChainHashZZ_free(_res_conv);
-}
-
-static inline uint64_t COption_CVec_ChainHashZZ_clone_ptr(LDKCOption_CVec_ChainHashZZ *NONNULL_PTR arg) {
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_CVec_ChainHashZZ* arg_conv = (LDKCOption_CVec_ChainHashZZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_CVec_ChainHashZZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_CVec_ChainHashZZ* orig_conv = (LDKCOption_CVec_ChainHashZZ*)untag_ptr(orig);
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
-       *ret_copy = COption_CVec_ChainHashZZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyForwardingInfoDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKCounterpartyForwardingInfo o_conv;
        o_conv.inner = untag_ptr(o);
@@ -25017,7 +26278,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelMonitorZ_1free(JN
        CVec_ChannelMonitorZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
@@ -25027,53 +26288,53 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        // WARNING: we need a move here but no clone is available for LDKChannelManager
        
-       LDKC2Tuple_BlockHashChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ");
-       *ret_conv = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ), "LDKC2Tuple_ThirtyTwoBytesChannelManagerZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelManagerZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_BlockHashChannelManagerZ _res_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_BlockHashChannelManagerZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesChannelManagerZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_BlockHashChannelManagerZ o_conv = *(LDKC2Tuple_BlockHashChannelManagerZ*)(o_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKC2Tuple_BlockHashChannelManagerZ
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelManagerZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelManagerZ*)(o_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKC2Tuple_ThirtyTwoBytesChannelManagerZ
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_free(_res_conv);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1MaxDustHTLCExposureDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
@@ -25538,25 +26799,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeEr
        return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg) {
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
-       *ret_conv = C2Tuple_OutPointScriptZ_clone(arg);
+static inline uint64_t C2Tuple_OutPointCVec_u8ZZ_clone_ptr(LDKC2Tuple_OutPointCVec_u8ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u8ZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_OutPointScriptZ* arg_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_OutPointScriptZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* arg_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_OutPointCVec_u8ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_OutPointScriptZ* orig_conv = (LDKC2Tuple_OutPointScriptZ*)untag_ptr(orig);
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
-       *ret_conv = C2Tuple_OutPointScriptZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_OutPointCVec_u8ZZ* orig_conv = (LDKC2Tuple_OutPointCVec_u8ZZ*)untag_ptr(orig);
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u8ZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1new(JNIEnv *env, jclass clz, int64_t a, int8_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1new(JNIEnv *env, jclass clz, int64_t a, int8_tArray b) {
        LDKOutPoint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
@@ -25566,147 +26827,167 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1n
        b_ref.datalen = (*env)->GetArrayLength(env, b);
        b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data);
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
-       *ret_conv = C2Tuple_OutPointScriptZ_new(a_conv, b_ref);
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
+       *ret_conv = C2Tuple_OutPointCVec_u8ZZ_new(a_conv, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_OutPointScriptZ _res_conv = *(LDKC2Tuple_OutPointScriptZ*)(_res_ptr);
+       LDKC2Tuple_OutPointCVec_u8ZZ _res_conv = *(LDKC2Tuple_OutPointCVec_u8ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_OutPointScriptZ_free(_res_conv);
+       C2Tuple_OutPointCVec_u8ZZ_free(_res_conv);
 }
 
-static inline uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg) {
-       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
-       *ret_conv = C2Tuple_u32ScriptZ_clone(arg);
+static inline uint64_t C2Tuple_u32CVec_u8ZZ_clone_ptr(LDKC2Tuple_u32CVec_u8ZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+       *ret_conv = C2Tuple_u32CVec_u8ZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_u32ScriptZ* arg_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_u32ScriptZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u32CVec_u8ZZ* arg_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_u32CVec_u8ZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_u32ScriptZ* orig_conv = (LDKC2Tuple_u32ScriptZ*)untag_ptr(orig);
-       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
-       *ret_conv = C2Tuple_u32ScriptZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_u32CVec_u8ZZ* orig_conv = (LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(orig);
+       LDKC2Tuple_u32CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+       *ret_conv = C2Tuple_u32CVec_u8ZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1new(JNIEnv *env, jclass clz, int32_t a, int8_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1new(JNIEnv *env, jclass clz, int32_t a, int8_tArray b) {
        LDKCVec_u8Z b_ref;
        b_ref.datalen = (*env)->GetArrayLength(env, b);
        b_ref.data = MALLOC(b_ref.datalen, "LDKCVec_u8Z Bytes");
        (*env)->GetByteArrayRegion(env, b, 0, b_ref.datalen, b_ref.data);
-       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
-       *ret_conv = C2Tuple_u32ScriptZ_new(a, b_ref);
+       LDKC2Tuple_u32CVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKC2Tuple_u32CVec_u8ZZ");
+       *ret_conv = C2Tuple_u32CVec_u8ZZ_new(a, b_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_u32ScriptZ _res_conv = *(LDKC2Tuple_u32ScriptZ*)(_res_ptr);
+       LDKC2Tuple_u32CVec_u8ZZ _res_conv = *(LDKC2Tuple_u32CVec_u8ZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_u32ScriptZ_free(_res_conv);
+       C2Tuple_u32CVec_u8ZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32ScriptZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_u32ScriptZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32CVec_1u8ZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_u32ScriptZ), "LDKCVec_C2Tuple_u32ScriptZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKCVec_C2Tuple_u32CVec_u8ZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t v = 0; v < _res_constr.datalen; v++) {
-               int64_t _res_conv_21 = _res_vals[v];
-               void* _res_conv_21_ptr = untag_ptr(_res_conv_21);
-               CHECK_ACCESS(_res_conv_21_ptr);
-               LDKC2Tuple_u32ScriptZ _res_conv_21_conv = *(LDKC2Tuple_u32ScriptZ*)(_res_conv_21_ptr);
-               FREE(untag_ptr(_res_conv_21));
-               _res_constr.data[v] = _res_conv_21_conv;
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_23 = _res_vals[x];
+               void* _res_conv_23_ptr = untag_ptr(_res_conv_23);
+               CHECK_ACCESS(_res_conv_23_ptr);
+               LDKC2Tuple_u32CVec_u8ZZ _res_conv_23_conv = *(LDKC2Tuple_u32CVec_u8ZZ*)(_res_conv_23_ptr);
+               FREE(untag_ptr(_res_conv_23));
+               _res_constr.data[x] = _res_conv_23_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_u32ScriptZZ_free(_res_constr);
+       CVec_C2Tuple_u32CVec_u8ZZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)untag_ptr(orig);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
-       LDKCVec_C2Tuple_u32ScriptZZ b_constr;
+       LDKCVec_C2Tuple_u32CVec_u8ZZZ b_constr;
        b_constr.datalen = (*env)->GetArrayLength(env, b);
        if (b_constr.datalen > 0)
-               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKC2Tuple_u32ScriptZ), "LDKCVec_C2Tuple_u32ScriptZZ Elements");
+               b_constr.data = MALLOC(b_constr.datalen * sizeof(LDKC2Tuple_u32CVec_u8ZZ), "LDKCVec_C2Tuple_u32CVec_u8ZZZ Elements");
        else
                b_constr.data = NULL;
        int64_t* b_vals = (*env)->GetLongArrayElements (env, b, NULL);
-       for (size_t v = 0; v < b_constr.datalen; v++) {
-               int64_t b_conv_21 = b_vals[v];
-               void* b_conv_21_ptr = untag_ptr(b_conv_21);
-               CHECK_ACCESS(b_conv_21_ptr);
-               LDKC2Tuple_u32ScriptZ b_conv_21_conv = *(LDKC2Tuple_u32ScriptZ*)(b_conv_21_ptr);
-               b_conv_21_conv = C2Tuple_u32ScriptZ_clone((LDKC2Tuple_u32ScriptZ*)untag_ptr(b_conv_21));
-               b_constr.data[v] = b_conv_21_conv;
+       for (size_t x = 0; x < b_constr.datalen; x++) {
+               int64_t b_conv_23 = b_vals[x];
+               void* b_conv_23_ptr = untag_ptr(b_conv_23);
+               CHECK_ACCESS(b_conv_23_ptr);
+               LDKC2Tuple_u32CVec_u8ZZ b_conv_23_conv = *(LDKC2Tuple_u32CVec_u8ZZ*)(b_conv_23_ptr);
+               b_conv_23_conv = C2Tuple_u32CVec_u8ZZ_clone((LDKC2Tuple_u32CVec_u8ZZ*)untag_ptr(b_conv_23));
+               b_constr.data[x] = b_conv_23_conv;
        }
        (*env)->ReleaseLongArrayElements(env, b, b_vals, 0);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(a_ref, b_constr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_new(a_ref, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_40 = _res_vals[o];
-               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
-               CHECK_ACCESS(_res_conv_40_ptr);
-               LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ _res_conv_40_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(_res_conv_40_ptr);
-               FREE(untag_ptr(_res_conv_40));
-               _res_constr.data[o] = _res_conv_40_conv;
+       for (size_t a = 0; a < _res_constr.datalen; a++) {
+               int64_t _res_conv_52 = _res_vals[a];
+               void* _res_conv_52_ptr = untag_ptr(_res_conv_52);
+               CHECK_ACCESS(_res_conv_52_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ _res_conv_52_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ*)(_res_conv_52_ptr);
+               FREE(untag_ptr(_res_conv_52));
+               _res_constr.data[a] = _res_conv_52_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free(_res_constr);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CommitmentTransactionZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_CommitmentTransactionZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKCommitmentTransaction), "LDKCVec_CommitmentTransactionZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_23 = _res_vals[x];
+               LDKCommitmentTransaction _res_conv_23_conv;
+               _res_conv_23_conv.inner = untag_ptr(_res_conv_23);
+               _res_conv_23_conv.is_owned = ptr_is_owned(_res_conv_23);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_23_conv);
+               _res_constr.data[x] = _res_conv_23_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_free(_res_constr);
+       CVec_CommitmentTransactionZ_free(_res_constr);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
@@ -25785,25 +27066,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre
        CVec_C2Tuple_u32TxOutZZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(orig);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_tArray b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
@@ -25823,38 +27104,38 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_
                b_constr.data[u] = b_conv_20_conv;
        }
        (*env)->ReleaseLongArrayElements(env, b, b_vals, 0);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
-       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(a_ref, b_constr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_new(a_ref, b_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t n = 0; n < _res_constr.datalen; n++) {
-               int64_t _res_conv_39 = _res_vals[n];
-               void* _res_conv_39_ptr = untag_ptr(_res_conv_39);
-               CHECK_ACCESS(_res_conv_39_ptr);
-               LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ _res_conv_39_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(_res_conv_39_ptr);
-               FREE(untag_ptr(_res_conv_39));
-               _res_constr.data[n] = _res_conv_39_conv;
+       for (size_t x = 0; x < _res_constr.datalen; x++) {
+               int64_t _res_conv_49 = _res_vals[x];
+               void* _res_conv_49_ptr = untag_ptr(_res_conv_49);
+               CHECK_ACCESS(_res_conv_49_ptr);
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ _res_conv_49_conv = *(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ*)(_res_conv_49_ptr);
+               FREE(untag_ptr(_res_conv_49));
+               _res_constr.data[x] = _res_conv_49_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free(_res_constr);
+       CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free(_res_constr);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BalanceZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
@@ -25877,25 +27158,25 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BalanceZ_1free(JNIEnv *e
        CVec_BalanceZ_free(_res_constr);
 }
 
-static inline uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(arg);
+static inline uint64_t C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ *NONNULL_PTR arg) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* arg_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* arg_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_BlockHashChannelMonitorZ* orig_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(orig);
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* orig_conv = (LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(orig);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKThirtyTwoBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 32);
        (*env)->GetByteArrayRegion(env, a, 0, 32, a_ref.data);
@@ -25904,70 +27185,70 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelMonitor_clone(&b_conv);
-       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_BlockHashChannelMonitorZ _res_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(_res_ptr);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ _res_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_BlockHashChannelMonitorZ_free(_res_conv);
+       C2Tuple_ThirtyTwoBytesChannelMonitorZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKC2Tuple_BlockHashChannelMonitorZ o_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(o_ptr);
-       o_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(o));
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone((LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
        e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -26287,111 +27568,111 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDeco
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKNetAddress o_conv = *(LDKNetAddress*)(o_ptr);
-       o_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(o));
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_some(o_conv);
+       LDKSocketAddress o_conv = *(LDKSocketAddress*)(o_ptr);
+       o_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o));
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_some(o_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_NetAddressZ _res_conv = *(LDKCOption_NetAddressZ*)(_res_ptr);
+       LDKCOption_SocketAddressZ _res_conv = *(LDKCOption_SocketAddressZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_NetAddressZ_free(_res_conv);
+       COption_SocketAddressZ_free(_res_conv);
 }
 
-static inline uint64_t COption_NetAddressZ_clone_ptr(LDKCOption_NetAddressZ *NONNULL_PTR arg) {
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_clone(arg);
+static inline uint64_t COption_SocketAddressZ_clone_ptr(LDKCOption_SocketAddressZ *NONNULL_PTR arg) {
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_NetAddressZ* arg_conv = (LDKCOption_NetAddressZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_NetAddressZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_SocketAddressZ* arg_conv = (LDKCOption_SocketAddressZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_SocketAddressZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_NetAddressZ* orig_conv = (LDKCOption_NetAddressZ*)untag_ptr(orig);
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
-       *ret_copy = COption_NetAddressZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_SocketAddressZ* orig_conv = (LDKCOption_SocketAddressZ*)untag_ptr(orig);
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
+       *ret_copy = COption_SocketAddressZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-static inline uint64_t C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCOption_NetAddressZZ *NONNULL_PTR arg) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_clone(arg);
+static inline uint64_t C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+       *ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* arg_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(arg);
-       int64_t ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* arg_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* orig_conv = (LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)untag_ptr(orig);
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* orig_conv = (LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)untag_ptr(orig);
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+       *ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
        LDKPublicKey a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 33);
        (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
        void* b_ptr = untag_ptr(b);
        CHECK_ACCESS(b_ptr);
-       LDKCOption_NetAddressZ b_conv = *(LDKCOption_NetAddressZ*)(b_ptr);
-       b_conv = COption_NetAddressZ_clone((LDKCOption_NetAddressZ*)untag_ptr(b));
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-       *ret_conv = C2Tuple_PublicKeyCOption_NetAddressZZ_new(a_ref, b_conv);
+       LDKCOption_SocketAddressZ b_conv = *(LDKCOption_SocketAddressZ*)(b_ptr);
+       b_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(b));
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+       *ret_conv = C2Tuple_PublicKeyCOption_SocketAddressZZ_new(a_ref, b_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKC2Tuple_PublicKeyCOption_NetAddressZZ _res_conv = *(LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)(_res_ptr);
+       LDKC2Tuple_PublicKeyCOption_SocketAddressZZ _res_conv = *(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       C2Tuple_PublicKeyCOption_NetAddressZZ_free(_res_conv);
+       C2Tuple_PublicKeyCOption_SocketAddressZZ_free(_res_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1PublicKeyCOption_1NetAddressZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ _res_constr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1PublicKeyCOption_1SocketAddressZZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
        if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ Elements");
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ Elements");
        else
                _res_constr.data = NULL;
        int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t o = 0; o < _res_constr.datalen; o++) {
-               int64_t _res_conv_40 = _res_vals[o];
-               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
-               CHECK_ACCESS(_res_conv_40_ptr);
-               LDKC2Tuple_PublicKeyCOption_NetAddressZZ _res_conv_40_conv = *(LDKC2Tuple_PublicKeyCOption_NetAddressZZ*)(_res_conv_40_ptr);
-               FREE(untag_ptr(_res_conv_40));
-               _res_constr.data[o] = _res_conv_40_conv;
+       for (size_t r = 0; r < _res_constr.datalen; r++) {
+               int64_t _res_conv_43 = _res_vals[r];
+               void* _res_conv_43_ptr = untag_ptr(_res_conv_43);
+               CHECK_ACCESS(_res_conv_43_ptr);
+               LDKC2Tuple_PublicKeyCOption_SocketAddressZZ _res_conv_43_conv = *(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ*)(_res_conv_43_ptr);
+               FREE(untag_ptr(_res_conv_43));
+               _res_constr.data[r] = _res_conv_43_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_free(_res_constr);
+       CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_free(_res_constr);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
@@ -26579,148 +27860,356 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1u32GraphSyncErrorZ_1f
        CResult_u32GraphSyncErrorZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKSecretKey o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.bytes);
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKCVec_u8Z o_ref;
+       o_ref.datalen = (*env)->GetArrayLength(env, o);
+       o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_ok(o_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_u8ZIOErrorZ* o_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_u8ZIOErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_KeyPairZ _res_conv = *(LDKCOption_KeyPairZ*)(_res_ptr);
+       LDKCResult_CVec_u8ZIOErrorZ _res_conv = *(LDKCResult_CVec_u8ZIOErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_KeyPairZ_free(_res_conv);
+       CResult_CVec_u8ZIOErrorZ_free(_res_conv);
 }
 
-static inline uint64_t COption_KeyPairZ_clone_ptr(LDKCOption_KeyPairZ *NONNULL_PTR arg) {
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+static inline uint64_t CResult_CVec_u8ZIOErrorZ_clone_ptr(LDKCResult_CVec_u8ZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_KeyPairZ* arg_conv = (LDKCOption_KeyPairZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_KeyPairZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_u8ZIOErrorZ* arg_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_u8ZIOErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_KeyPairZ* orig_conv = (LDKCOption_KeyPairZ*)untag_ptr(orig);
-       LDKCOption_KeyPairZ *ret_copy = MALLOC(sizeof(LDKCOption_KeyPairZ), "LDKCOption_KeyPairZ");
-       *ret_copy = COption_KeyPairZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_u8ZIOErrorZ* orig_conv = (LDKCResult_CVec_u8ZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_u8ZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZIOErrorZ), "LDKCResult_CVec_u8ZIOErrorZ");
+       *ret_conv = CResult_CVec_u8ZIOErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1StrZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
+       LDKCVec_StrZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
+       else
+               _res_constr.data = NULL;
+       for (size_t i = 0; i < _res_constr.datalen; i++) {
+               jstring _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
+               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
+               _res_constr.data[i] = dummy;
+       }
+       CVec_StrZ_free(_res_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) {
+       LDKCVec_StrZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKStr), "LDKCVec_StrZ Elements");
+       else
+               o_constr.data = NULL;
+       for (size_t i = 0; i < o_constr.datalen; i++) {
+               jstring o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
+               LDKStr o_conv_8_conv = java_to_owned_str(env, o_conv_8);
+               o_constr.data[i] = o_conv_8_conv;
+       }
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_ok(o_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_StrZIOErrorZ* o_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_StrZIOErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CVec_StrZIOErrorZ _res_conv = *(LDKCResult_CVec_StrZIOErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CVec_StrZIOErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CVec_StrZIOErrorZ_clone_ptr(LDKCResult_CVec_StrZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_StrZIOErrorZ* arg_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_StrZIOErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_StrZIOErrorZ* orig_conv = (LDKCResult_CVec_StrZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_StrZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_StrZIOErrorZ), "LDKCResult_CVec_StrZIOErrorZ");
+       *ret_conv = CResult_CVec_StrZIOErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t o = 0; o < _res_constr.datalen; o++) {
+               int64_t _res_conv_40 = _res_vals[o];
+               void* _res_conv_40_ptr = untag_ptr(_res_conv_40);
+               CHECK_ACCESS(_res_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ _res_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(_res_conv_40_ptr);
+               FREE(untag_ptr(_res_conv_40));
+               _res_constr.data[o] = _res_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_free(_res_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ), "LDKCVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ Elements");
+       else
+               o_constr.data = NULL;
+       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
+       for (size_t o = 0; o < o_constr.datalen; o++) {
+               int64_t o_conv_40 = o_vals[o];
+               void* o_conv_40_ptr = untag_ptr(o_conv_40);
+               CHECK_ACCESS(o_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(o_conv_40_ptr);
+               o_conv_40_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone((LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(o_conv_40));
+               o_constr.data[o] = o_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_ok(o_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ _res_conv = *(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKCOption_KeyPairZ o_conv = *(LDKCOption_KeyPairZ*)(o_ptr);
-       o_conv = COption_KeyPairZ_clone((LDKCOption_KeyPairZ*)untag_ptr(o));
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_ok(o_conv);
+       LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ o_conv = *(LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)(o_ptr);
+       o_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone((LDKC2Tuple_ThirtyTwoBytesChannelMonitorZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKIOError e_conv = LDKIOError_from_java(env, e);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_COption_KeyPairZNoneZ* o_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_COption_KeyPairZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* o_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_COption_KeyPairZNoneZ _res_conv = *(LDKCResult_COption_KeyPairZNoneZ*)(_res_ptr);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ _res_conv = *(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_COption_KeyPairZNoneZ_free(_res_conv);
+       CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_COption_KeyPairZNoneZ_clone_ptr(LDKCResult_COption_KeyPairZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_clone(arg);
+static inline uint64_t CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_COption_KeyPairZNoneZ* arg_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_COption_KeyPairZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* arg_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_COption_KeyPairZNoneZ* orig_conv = (LDKCResult_COption_KeyPairZNoneZ*)untag_ptr(orig);
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = CResult_COption_KeyPairZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* orig_conv = (LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKCVec_u8Z o_ref;
-       o_ref.datalen = (*env)->GetArrayLength(env, o);
-       o_ref.data = MALLOC(o_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, o, 0, o_ref.datalen, o_ref.data);
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_some(o_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
+       LDKSecretKey o_ref;
+       CHECK((*env)->GetArrayLength(env, o) == 32);
+       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.bytes);
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_some(o_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_ScriptZ _res_conv = *(LDKCOption_ScriptZ*)(_res_ptr);
+       LDKCOption_SecretKeyZ _res_conv = *(LDKCOption_SecretKeyZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_ScriptZ_free(_res_conv);
+       COption_SecretKeyZ_free(_res_conv);
 }
 
-static inline uint64_t COption_ScriptZ_clone_ptr(LDKCOption_ScriptZ *NONNULL_PTR arg) {
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_clone(arg);
+static inline uint64_t COption_SecretKeyZ_clone_ptr(LDKCOption_SecretKeyZ *NONNULL_PTR arg) {
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_ScriptZ* arg_conv = (LDKCOption_ScriptZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_ScriptZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_SecretKeyZ* arg_conv = (LDKCOption_SecretKeyZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_SecretKeyZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_ScriptZ* orig_conv = (LDKCOption_ScriptZ*)untag_ptr(orig);
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
-       *ret_copy = COption_ScriptZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_SecretKeyZ* orig_conv = (LDKCOption_SecretKeyZ*)untag_ptr(orig);
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = COption_SecretKeyZ_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKVerifiedInvoiceRequest o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = VerifiedInvoiceRequest_clone(&o_conv);
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* o_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_VerifiedInvoiceRequestNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_VerifiedInvoiceRequestNoneZ _res_conv = *(LDKCResult_VerifiedInvoiceRequestNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_VerifiedInvoiceRequestNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(LDKCResult_VerifiedInvoiceRequestNoneZ *NONNULL_PTR arg) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* arg_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_VerifiedInvoiceRequestNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_VerifiedInvoiceRequestNoneZ* orig_conv = (LDKCResult_VerifiedInvoiceRequestNoneZ*)untag_ptr(orig);
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = CResult_VerifiedInvoiceRequestNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_COption_1NoneZ_1some(JNIEnv *env, jclass clz) {
        jclass ret_conv = LDKCOption_NoneZ_to_java(env, COption_NoneZ_some());
        return ret_conv;
@@ -26798,102 +28287,106 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1i64Z_1clone(JNIEnv
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKSocketAddress o_conv = *(LDKSocketAddress*)(o_ptr);
+       o_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o));
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SocketAddressDecodeErrorZ* o_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SocketAddressDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_TxidZ _res_conv = *(LDKCOption_TxidZ*)(_res_ptr);
+       LDKCResult_SocketAddressDecodeErrorZ _res_conv = *(LDKCResult_SocketAddressDecodeErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_TxidZ_free(_res_conv);
+       CResult_SocketAddressDecodeErrorZ_free(_res_conv);
 }
 
-static inline uint64_t COption_TxidZ_clone_ptr(LDKCOption_TxidZ *NONNULL_PTR arg) {
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+static inline uint64_t CResult_SocketAddressDecodeErrorZ_clone_ptr(LDKCResult_SocketAddressDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_TxidZ* arg_conv = (LDKCOption_TxidZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_TxidZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SocketAddressDecodeErrorZ* arg_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SocketAddressDecodeErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_TxidZ* orig_conv = (LDKCOption_TxidZ*)untag_ptr(orig);
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
-       *ret_copy = COption_TxidZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_SocketAddressDecodeErrorZ* orig_conv = (LDKCResult_SocketAddressDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = CResult_SocketAddressDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
-       LDKNetAddress o_conv = *(LDKNetAddress*)(o_ptr);
-       o_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(o));
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_ok(o_conv);
+       LDKSocketAddress o_conv = *(LDKSocketAddress*)(o_ptr);
+       o_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(o));
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
-       void* e_ptr = untag_ptr(e);
-       CHECK_ACCESS(e_ptr);
-       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
-       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_err(e_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+       LDKSocketAddressParseError e_conv = LDKSocketAddressParseError_from_java(env, e);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_NetAddressDecodeErrorZ* o_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_NetAddressDecodeErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* o_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_NetAddressDecodeErrorZ _res_conv = *(LDKCResult_NetAddressDecodeErrorZ*)(_res_ptr);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ _res_conv = *(LDKCResult_SocketAddressSocketAddressParseErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_NetAddressDecodeErrorZ_free(_res_conv);
+       CResult_SocketAddressSocketAddressParseErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg) {
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(arg);
+static inline uint64_t CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(LDKCResult_SocketAddressSocketAddressParseErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_NetAddressDecodeErrorZ* arg_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_NetAddressDecodeErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* arg_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_NetAddressDecodeErrorZ* orig_conv = (LDKCResult_NetAddressDecodeErrorZ*)untag_ptr(orig);
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* orig_conv = (LDKCResult_SocketAddressSocketAddressParseErrorZ*)untag_ptr(orig);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = CResult_SocketAddressSocketAddressParseErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -30130,64 +31623,107 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTran
        CResult_TrustedCommitmentTransactionNoneZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) {
-       LDKCVec_SignatureZ o_constr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1ok(JNIEnv *env, jclass clz, jobjectArray o) {
+       LDKCVec_ECDSASignatureZ o_constr;
        o_constr.datalen = (*env)->GetArrayLength(env, o);
        if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                o_constr.data = NULL;
        for (size_t i = 0; i < o_constr.datalen; i++) {
                int8_tArray o_conv_8 = (*env)->GetObjectArrayElement(env, o, i);
-               LDKSignature o_conv_8_ref;
+               LDKECDSASignature o_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, o_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, o_conv_8, 0, 64, o_conv_8_ref.compact_form);
                o_constr.data[i] = o_conv_8_ref;
        }
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_ok(o_constr);
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_ok(o_constr);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err(JNIEnv *env, jclass clz) {
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_err();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_err();
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_CVec_SignatureZNoneZ* o_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_SignatureZNoneZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* o_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_ECDSASignatureZNoneZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_SignatureZNoneZ _res_conv = *(LDKCResult_CVec_SignatureZNoneZ*)(_res_ptr);
+       LDKCResult_CVec_ECDSASignatureZNoneZ _res_conv = *(LDKCResult_CVec_ECDSASignatureZNoneZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_CVec_SignatureZNoneZ_free(_res_conv);
+       CResult_CVec_ECDSASignatureZNoneZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(arg);
+static inline uint64_t CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(LDKCResult_CVec_ECDSASignatureZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_CVec_SignatureZNoneZ* arg_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_SignatureZNoneZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* arg_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_ECDSASignatureZNoneZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)untag_ptr(orig);
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
-       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_ECDSASignatureZNoneZ* orig_conv = (LDKCResult_CVec_ECDSASignatureZNoneZ*)untag_ptr(orig);
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
+       *ret_conv = CResult_CVec_ECDSASignatureZNoneZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_some(o);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_none();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_usizeZ _res_conv = *(LDKCOption_usizeZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       COption_usizeZ_free(_res_conv);
+}
+
+static inline uint64_t COption_usizeZ_clone_ptr(LDKCOption_usizeZ *NONNULL_PTR arg) {
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_usizeZ* arg_conv = (LDKCOption_usizeZ*)untag_ptr(arg);
+       int64_t ret_conv = COption_usizeZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_usizeZ* orig_conv = (LDKCOption_usizeZ*)untag_ptr(orig);
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = COption_usizeZ_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKShutdownScript o_conv;
        o_conv.inner = untag_ptr(o);
@@ -30350,6 +31886,60 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDeco
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKClaimedHTLC o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ClaimedHTLC_clone(&o_conv);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* o_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ClaimedHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ClaimedHTLCDecodeErrorZ _res_conv = *(LDKCResult_ClaimedHTLCDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ClaimedHTLCDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(LDKCResult_ClaimedHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* arg_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ClaimedHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ClaimedHTLCDecodeErrorZ* orig_conv = (LDKCResult_ClaimedHTLCDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = CResult_ClaimedHTLCDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PathFailureZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = untag_ptr(o);
        CHECK_ACCESS(o_ptr);
@@ -30700,96 +32290,70 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentFailureReas
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1some(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1some(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKU128 o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 16);
        (*env)->GetByteArrayRegion(env, o, 0, 16, o_ref.le_bytes);
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_some(o_ref);
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_some(o_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_none();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_none();
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCOption_u128Z _res_conv = *(LDKCOption_u128Z*)(_res_ptr);
+       LDKCOption_U128Z _res_conv = *(LDKCOption_U128Z*)(_res_ptr);
        FREE(untag_ptr(_res));
-       COption_u128Z_free(_res_conv);
+       COption_U128Z_free(_res_conv);
 }
 
-static inline uint64_t COption_u128Z_clone_ptr(LDKCOption_u128Z *NONNULL_PTR arg) {
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_clone(arg);
+static inline uint64_t COption_U128Z_clone_ptr(LDKCOption_U128Z *NONNULL_PTR arg) {
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_u128Z* arg_conv = (LDKCOption_u128Z*)untag_ptr(arg);
-       int64_t ret_conv = COption_u128Z_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_U128Z* arg_conv = (LDKCOption_U128Z*)untag_ptr(arg);
+       int64_t ret_conv = COption_U128Z_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_u128Z* orig_conv = (LDKCOption_u128Z*)untag_ptr(orig);
-       LDKCOption_u128Z *ret_copy = MALLOC(sizeof(LDKCOption_u128Z), "LDKCOption_u128Z");
-       *ret_copy = COption_u128Z_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_U128Z* orig_conv = (LDKCOption_U128Z*)untag_ptr(orig);
+       LDKCOption_U128Z *ret_copy = MALLOC(sizeof(LDKCOption_U128Z), "LDKCOption_U128Z");
+       *ret_copy = COption_U128Z_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1some(JNIEnv *env, jclass clz, int8_tArray o) {
-       LDKThirtyTwoBytes o_ref;
-       CHECK((*env)->GetArrayLength(env, o) == 32);
-       (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_some(o_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1none(JNIEnv *env, jclass clz) {
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_none();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCOption_PaymentIdZ _res_conv = *(LDKCOption_PaymentIdZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       COption_PaymentIdZ_free(_res_conv);
-}
-
-static inline uint64_t COption_PaymentIdZ_clone_ptr(LDKCOption_PaymentIdZ *NONNULL_PTR arg) {
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCOption_PaymentIdZ* arg_conv = (LDKCOption_PaymentIdZ*)untag_ptr(arg);
-       int64_t ret_conv = COption_PaymentIdZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCOption_PaymentIdZ* orig_conv = (LDKCOption_PaymentIdZ*)untag_ptr(orig);
-       LDKCOption_PaymentIdZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentIdZ), "LDKCOption_PaymentIdZ");
-       *ret_copy = COption_PaymentIdZ_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ClaimedHTLCZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
+       LDKCVec_ClaimedHTLCZ _res_constr;
+       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
+       if (_res_constr.datalen > 0)
+               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
+       else
+               _res_constr.data = NULL;
+       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
+       for (size_t n = 0; n < _res_constr.datalen; n++) {
+               int64_t _res_conv_13 = _res_vals[n];
+               LDKClaimedHTLC _res_conv_13_conv;
+               _res_conv_13_conv.inner = untag_ptr(_res_conv_13);
+               _res_conv_13_conv.is_owned = ptr_is_owned(_res_conv_13);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_13_conv);
+               _res_constr.data[n] = _res_conv_13_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
+       CVec_ClaimedHTLCZ_free(_res_constr);
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1PaymentFailureReasonZ_1some(JNIEnv *env, jclass clz, jclass o) {
@@ -30936,88 +32500,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDec
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1BlockHashChannelMonitorZZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Elements");
-       else
-               _res_constr.data = NULL;
-       int64_t* _res_vals = (*env)->GetLongArrayElements (env, _res, NULL);
-       for (size_t j = 0; j < _res_constr.datalen; j++) {
-               int64_t _res_conv_35 = _res_vals[j];
-               void* _res_conv_35_ptr = untag_ptr(_res_conv_35);
-               CHECK_ACCESS(_res_conv_35_ptr);
-               LDKC2Tuple_BlockHashChannelMonitorZ _res_conv_35_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(_res_conv_35_ptr);
-               FREE(untag_ptr(_res_conv_35));
-               _res_constr.data[j] = _res_conv_35_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
-       CVec_C2Tuple_BlockHashChannelMonitorZZ_free(_res_constr);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ o_constr;
-       o_constr.datalen = (*env)->GetArrayLength(env, o);
-       if (o_constr.datalen > 0)
-               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Elements");
-       else
-               o_constr.data = NULL;
-       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
-       for (size_t j = 0; j < o_constr.datalen; j++) {
-               int64_t o_conv_35 = o_vals[j];
-               void* o_conv_35_ptr = untag_ptr(o_conv_35);
-               CHECK_ACCESS(o_conv_35_ptr);
-               LDKC2Tuple_BlockHashChannelMonitorZ o_conv_35_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(o_conv_35_ptr);
-               o_conv_35_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)untag_ptr(o_conv_35));
-               o_constr.data[j] = o_conv_35_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok(o_constr);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
-       LDKIOError e_conv = LDKIOError_from_java(env, e);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(e_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
-       if (!ptr_is_owned(_res)) return;
-       void* _res_ptr = untag_ptr(_res);
-       CHECK_ACCESS(_res_ptr);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ _res_conv = *(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(_res_ptr);
-       FREE(untag_ptr(_res));
-       CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res_conv);
-}
-
-static inline uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(arg);
-       return tag_ptr(ret_conv, true);
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)untag_ptr(orig);
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(orig_conv);
-       return tag_ptr(ret_conv, true);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixBolt11ParseErrorZ_1ok(JNIEnv *env, jclass clz, jclass o) {
        LDKSiPrefix o_conv = LDKSiPrefix_from_java(env, o);
        LDKCResult_SiPrefixBolt11ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixBolt11ParseErrorZ), "LDKCResult_SiPrefixBolt11ParseErrorZ");
@@ -31222,54 +32704,54 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawBolt11Invoice_1u83
        C3Tuple_RawBolt11Invoice_u832Bolt11InvoiceSignatureZ_free(_res_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKPayeePubKey o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PayeePubKey_clone(&o_conv);
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_ok(o_conv);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_java(env, e);
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_err(e_conv);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PayeePubKeyErrorZ* o_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PayeePubKeyErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* o_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PayeePubKeyErrorZ _res_conv = *(LDKCResult_PayeePubKeyErrorZ*)(_res_ptr);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ _res_conv = *(LDKCResult_PayeePubKeySecp256k1ErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PayeePubKeyErrorZ_free(_res_conv);
+       CResult_PayeePubKeySecp256k1ErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_clone(arg);
+static inline uint64_t CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(LDKCResult_PayeePubKeySecp256k1ErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PayeePubKeyErrorZ* arg_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PayeePubKeyErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* arg_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PayeePubKeyErrorZ* orig_conv = (LDKCResult_PayeePubKeyErrorZ*)untag_ptr(orig);
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
-       *ret_conv = CResult_PayeePubKeyErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* orig_conv = (LDKCResult_PayeePubKeySecp256k1ErrorZ*)untag_ptr(orig);
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
+       *ret_conv = CResult_PayeePubKeySecp256k1ErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -31441,21 +32923,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1Bolt11InvoiceBolt1
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1AddressZ_1free(JNIEnv *env, jclass clz, jobjectArray _res) {
-       LDKCVec_AddressZ _res_constr;
-       _res_constr.datalen = (*env)->GetArrayLength(env, _res);
-       if (_res_constr.datalen > 0)
-               _res_constr.data = MALLOC(_res_constr.datalen * sizeof(LDKStr), "LDKCVec_AddressZ Elements");
-       else
-               _res_constr.data = NULL;
-       for (size_t i = 0; i < _res_constr.datalen; i++) {
-               jstring _res_conv_8 = (*env)->GetObjectArrayElement(env, _res, i);
-               LDKStr dummy = { .chars = NULL, .len = 0, .chars_is_owned = false };
-               _res_constr.data[i] = dummy;
-       }
-       CVec_AddressZ_free(_res_constr);
-}
-
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKDescription o_conv;
        o_conv.inner = untag_ptr(o);
@@ -31878,55 +33345,217 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDec
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKReceiveTlvs o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = ReceiveTlvs_clone(&o_conv);
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* o_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ReceiveTlvsDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_ReceiveTlvsDecodeErrorZ _res_conv = *(LDKCResult_ReceiveTlvsDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_ReceiveTlvsDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(LDKCResult_ReceiveTlvsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* arg_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ReceiveTlvsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ReceiveTlvsDecodeErrorZ* orig_conv = (LDKCResult_ReceiveTlvsDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = CResult_ReceiveTlvsDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPaymentRelay o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = PaymentRelay_clone(&o_conv);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentRelayDecodeErrorZ* o_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PaymentRelayDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_PaymentRelayDecodeErrorZ _res_conv = *(LDKCResult_PaymentRelayDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_PaymentRelayDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_PaymentRelayDecodeErrorZ_clone_ptr(LDKCResult_PaymentRelayDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentRelayDecodeErrorZ* arg_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PaymentRelayDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PaymentRelayDecodeErrorZ* orig_conv = (LDKCResult_PaymentRelayDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = CResult_PaymentRelayDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPaymentConstraints o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv = PaymentConstraints_clone(&o_conv);
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKDecodeError e_conv = *(LDKDecodeError*)(e_ptr);
+       e_conv = DecodeError_clone((LDKDecodeError*)untag_ptr(e));
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* o_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_PaymentConstraintsDecodeErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_PaymentConstraintsDecodeErrorZ _res_conv = *(LDKCResult_PaymentConstraintsDecodeErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_PaymentConstraintsDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(LDKCResult_PaymentConstraintsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* arg_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_PaymentConstraintsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_PaymentConstraintsDecodeErrorZ* orig_conv = (LDKCResult_PaymentConstraintsDecodeErrorZ*)untag_ptr(orig);
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = CResult_PaymentConstraintsDecodeErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1ok(JNIEnv *env, jclass clz, int8_tArray o) {
        LDKThirtyTwoBytes o_ref;
        CHECK((*env)->GetArrayLength(env, o) == 32);
        (*env)->GetByteArrayRegion(env, o, 0, 32, o_ref.data);
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_ok(o_ref);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_ok(o_ref);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
        void* e_ptr = untag_ptr(e);
        CHECK_ACCESS(e_ptr);
        LDKPaymentError e_conv = *(LDKPaymentError*)(e_ptr);
        e_conv = PaymentError_clone((LDKPaymentError*)untag_ptr(e));
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_err(e_conv);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_PaymentIdPaymentErrorZ* o_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_PaymentIdPaymentErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* o_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_PaymentIdPaymentErrorZ _res_conv = *(LDKCResult_PaymentIdPaymentErrorZ*)(_res_ptr);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ _res_conv = *(LDKCResult_ThirtyTwoBytesPaymentErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_PaymentIdPaymentErrorZ_free(_res_conv);
+       CResult_ThirtyTwoBytesPaymentErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg) {
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(arg);
+static inline uint64_t CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(LDKCResult_ThirtyTwoBytesPaymentErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_PaymentIdPaymentErrorZ* arg_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_PaymentIdPaymentErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* arg_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_PaymentIdPaymentErrorZ* orig_conv = (LDKCResult_PaymentIdPaymentErrorZ*)untag_ptr(orig);
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
-       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* orig_conv = (LDKCResult_ThirtyTwoBytesPaymentErrorZ*)untag_ptr(orig);
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
+       *ret_conv = CResult_ThirtyTwoBytesPaymentErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -31979,50 +33608,115 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentErrorZ_
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1ok(JNIEnv *env, jclass clz, jstring o) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1ok(JNIEnv *env, jclass clz, int64_tArray o) {
+       LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ o_constr;
+       o_constr.datalen = (*env)->GetArrayLength(env, o);
+       if (o_constr.datalen > 0)
+               o_constr.data = MALLOC(o_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ), "LDKCVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ Elements");
+       else
+               o_constr.data = NULL;
+       int64_t* o_vals = (*env)->GetLongArrayElements (env, o, NULL);
+       for (size_t o = 0; o < o_constr.datalen; o++) {
+               int64_t o_conv_40 = o_vals[o];
+               void* o_conv_40_ptr = untag_ptr(o_conv_40);
+               CHECK_ACCESS(o_conv_40_ptr);
+               LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ o_conv_40_conv = *(LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)(o_conv_40_ptr);
+               o_conv_40_conv = C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone((LDKC2Tuple_ThirtyTwoBytesThirtyTwoBytesZ*)untag_ptr(o_conv_40));
+               o_constr.data[o] = o_conv_40_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, o, o_vals, 0);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_ok(o_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKProbingError e_conv = *(LDKProbingError*)(e_ptr);
+       e_conv = ProbingError_clone((LDKProbingError*)untag_ptr(e));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ _res_conv = *(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ*)untag_ptr(orig);
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1ok(JNIEnv *env, jclass clz, jstring o) {
        LDKStr o_conv = java_to_owned_str(env, o);
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_ok(o_conv);
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_ok(o_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1err(JNIEnv *env, jclass clz, jclass e) {
        LDKSecp256k1Error e_conv = LDKSecp256k1Error_from_java(env, e);
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_err(e_conv);
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_err(e_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
-       LDKCResult_StringErrorZ* o_conv = (LDKCResult_StringErrorZ*)untag_ptr(o);
-       jboolean ret_conv = CResult_StringErrorZ_is_ok(o_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_StrSecp256k1ErrorZ* o_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_StrSecp256k1ErrorZ_is_ok(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if (!ptr_is_owned(_res)) return;
        void* _res_ptr = untag_ptr(_res);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_StringErrorZ _res_conv = *(LDKCResult_StringErrorZ*)(_res_ptr);
+       LDKCResult_StrSecp256k1ErrorZ _res_conv = *(LDKCResult_StrSecp256k1ErrorZ*)(_res_ptr);
        FREE(untag_ptr(_res));
-       CResult_StringErrorZ_free(_res_conv);
+       CResult_StrSecp256k1ErrorZ_free(_res_conv);
 }
 
-static inline uint64_t CResult_StringErrorZ_clone_ptr(LDKCResult_StringErrorZ *NONNULL_PTR arg) {
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_clone(arg);
+static inline uint64_t CResult_StrSecp256k1ErrorZ_clone_ptr(LDKCResult_StrSecp256k1ErrorZ *NONNULL_PTR arg) {
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(arg);
        return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKCResult_StringErrorZ* arg_conv = (LDKCResult_StringErrorZ*)untag_ptr(arg);
-       int64_t ret_conv = CResult_StringErrorZ_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_StrSecp256k1ErrorZ* arg_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_StrSecp256k1ErrorZ_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKCResult_StringErrorZ* orig_conv = (LDKCResult_StringErrorZ*)untag_ptr(orig);
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
-       *ret_conv = CResult_StringErrorZ_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_StrSecp256k1ErrorZ* orig_conv = (LDKCResult_StrSecp256k1ErrorZ*)untag_ptr(orig);
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
+       *ret_conv = CResult_StrSecp256k1ErrorZ_clone(orig_conv);
        return tag_ptr(ret_conv, true);
 }
 
@@ -32126,6 +33820,82 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNo
        return tag_ptr(ret_conv, true);
 }
 
+static inline uint64_t C2Tuple_PublicKeyOnionMessageZ_clone_ptr(LDKC2Tuple_PublicKeyOnionMessageZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = C2Tuple_PublicKeyOnionMessageZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* arg_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(arg);
+       int64_t ret_conv = C2Tuple_PublicKeyOnionMessageZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKC2Tuple_PublicKeyOnionMessageZ* orig_conv = (LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(orig);
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = C2Tuple_PublicKeyOnionMessageZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1new(JNIEnv *env, jclass clz, int8_tArray a, int64_t b) {
+       LDKPublicKey a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 33);
+       (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
+       LDKOnionMessage b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv = OnionMessage_clone(&b_conv);
+       LDKC2Tuple_PublicKeyOnionMessageZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyOnionMessageZ), "LDKC2Tuple_PublicKeyOnionMessageZ");
+       *ret_conv = C2Tuple_PublicKeyOnionMessageZ_new(a_ref, b_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKC2Tuple_PublicKeyOnionMessageZ _res_conv = *(LDKC2Tuple_PublicKeyOnionMessageZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       C2Tuple_PublicKeyOnionMessageZ_free(_res_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_PublicKeyOnionMessageZ o_conv = *(LDKC2Tuple_PublicKeyOnionMessageZ*)(o_ptr);
+       o_conv = C2Tuple_PublicKeyOnionMessageZ_clone((LDKC2Tuple_PublicKeyOnionMessageZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ), "LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ");
+       *ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       void* e_ptr = untag_ptr(e);
+       CHECK_ACCESS(e_ptr);
+       LDKSendError e_conv = *(LDKSendError*)(e_ptr);
+       e_conv = SendError_clone((LDKSendError*)untag_ptr(e));
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ), "LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ");
+       *ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_err(e_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* o_conv = (LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ _res_conv = *(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_free(_res_conv);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSendErrorZ_1ok(JNIEnv *env, jclass clz) {
        LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
        *ret_conv = CResult_NoneSendErrorZ_ok();
@@ -32207,6 +33977,55 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = untag_ptr(o);
+       CHECK_ACCESS(o_ptr);
+       LDKC2Tuple_BlindedPayInfoBlindedPathZ o_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(o_ptr);
+       o_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(o));
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok(o_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1err(JNIEnv *env, jclass clz) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err();
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* o_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(o);
+       jboolean ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if (!ptr_is_owned(_res)) return;
+       void* _res_ptr = untag_ptr(_res);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ _res_conv = *(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)(_res_ptr);
+       FREE(untag_ptr(_res));
+       CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(arg);
+       return tag_ptr(ret_conv, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* arg_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(arg);
+       int64_t ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* orig_conv = (LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ*)untag_ptr(orig);
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone(orig_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKBlindedPath o_conv;
        o_conv.inner = untag_ptr(o);
@@ -32960,7 +34779,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_sign(JNIEnv *env, jclass cl
        CHECK((*env)->GetArrayLength(env, sk) == 32);
        (*env)->GetByteArrayRegion(env, sk, 0, 32, sk_arr);
        uint8_t (*sk_ref)[32] = &sk_arr;
-       LDKCResult_StringErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StringErrorZ), "LDKCResult_StringErrorZ");
+       LDKCResult_StrSecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StrSecp256k1ErrorZ), "LDKCResult_StrSecp256k1ErrorZ");
        *ret_conv = sign(msg_ref, sk_ref);
        (*env)->ReleaseByteArrayElements(env, msg, (int8_t*)msg_ref.data, 0);
        return tag_ptr(ret_conv, true);
@@ -32971,7 +34790,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_recover_1pk(JNIEnv *env, jc
        msg_ref.datalen = (*env)->GetArrayLength(env, msg);
        msg_ref.data = (*env)->GetByteArrayElements (env, msg, NULL);
        LDKStr sig_conv = java_to_owned_str(env, sig);
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
        *ret_conv = recover_pk(msg_ref, sig_conv);
        (*env)->ReleaseByteArrayElements(env, msg, (int8_t*)msg_ref.data, 0);
        return tag_ptr(ret_conv, true);
@@ -33015,6 +34834,15 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_construct_1invoice_1pre
        return ret_arr;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KVStore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKKVStore this_ptr_conv = *(LDKKVStore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       KVStore_free(this_ptr_conv);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Persister_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -33024,6 +34852,134 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Persister_1free(JNIEnv *env, j
        Persister_free(this_ptr_conv);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_read_1channel_1monitors(JNIEnv *env, jclass clz, int64_t kv_store, int64_t entropy_source, int64_t signer_provider) {
+       void* kv_store_ptr = untag_ptr(kv_store);
+       CHECK_ACCESS(kv_store_ptr);
+       LDKKVStore kv_store_conv = *(LDKKVStore*)(kv_store_ptr);
+       if (kv_store_conv.free == LDKKVStore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKKVStore_JCalls_cloned(&kv_store_conv);
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       CHECK_ACCESS(signer_provider_ptr);
+       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
+       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
+       }
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = read_channel_monitors(kv_store_conv, entropy_source_conv, signer_provider_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMonitorUpdatingPersister this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MonitorUpdatingPersister_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1new(JNIEnv *env, jclass clz, int64_t kv_store, int64_t logger, int64_t maximum_pending_updates, int64_t entropy_source, int64_t signer_provider) {
+       void* kv_store_ptr = untag_ptr(kv_store);
+       CHECK_ACCESS(kv_store_ptr);
+       LDKKVStore kv_store_conv = *(LDKKVStore*)(kv_store_ptr);
+       if (kv_store_conv.free == LDKKVStore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKKVStore_JCalls_cloned(&kv_store_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* signer_provider_ptr = untag_ptr(signer_provider);
+       CHECK_ACCESS(signer_provider_ptr);
+       LDKSignerProvider signer_provider_conv = *(LDKSignerProvider*)(signer_provider_ptr);
+       if (signer_provider_conv.free == LDKSignerProvider_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKSignerProvider_JCalls_cloned(&signer_provider_conv);
+       }
+       LDKMonitorUpdatingPersister ret_var = MonitorUpdatingPersister_new(kv_store_conv, logger_conv, maximum_pending_updates, entropy_source_conv, signer_provider_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1read_1all_1channel_1monitors_1with_1updates(JNIEnv *env, jclass clz, int64_t this_arg, int64_t broadcaster, int64_t fee_estimator) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
+       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
+       void* fee_estimator_ptr = untag_ptr(fee_estimator);
+       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
+       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ");
+       *ret_conv = MonitorUpdatingPersister_read_all_channel_monitors_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1read_1channel_1monitor_1with_1updates(JNIEnv *env, jclass clz, int64_t this_arg, int64_t broadcaster, int64_t fee_estimator, jstring monitor_key) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* broadcaster_ptr = untag_ptr(broadcaster);
+       if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
+       LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
+       void* fee_estimator_ptr = untag_ptr(fee_estimator);
+       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
+       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
+       LDKStr monitor_key_conv = java_to_owned_str(env, monitor_key);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ");
+       *ret_conv = MonitorUpdatingPersister_read_channel_monitor_with_updates(&this_arg_conv, broadcaster_conv, fee_estimator_conv, monitor_key_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1cleanup_1stale_1updates(JNIEnv *env, jclass clz, int64_t this_arg, jboolean lazy) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
+       *ret_conv = MonitorUpdatingPersister_cleanup_stale_updates(&this_arg_conv, lazy);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1as_1Persist(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMonitorUpdatingPersister this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPersist* ret_ret = MALLOC(sizeof(LDKPersist), "LDKPersist");
+       *ret_ret = MonitorUpdatingPersister_as_Persist(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UntrustedString_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKUntrustedString this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -34870,8 +36826,8 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1permanent_1failure(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, ChannelMonitorUpdateStatus_permanent_failure());
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1unrecoverable_1error(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKChannelMonitorUpdateStatus_to_java(env, ChannelMonitorUpdateStatus_unrecoverable_error());
        return ret_conv;
 }
 
@@ -34914,7 +36870,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1block_1
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_BlockHashZ *ret_copy = MALLOC(sizeof(LDKCOption_BlockHashZ), "LDKCOption_BlockHashZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = WatchedOutput_get_block_hash(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -34928,8 +36884,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1block_1has
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_BlockHashZ val_conv = *(LDKCOption_BlockHashZ*)(val_ptr);
-       val_conv = COption_BlockHashZ_clone((LDKCOption_BlockHashZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        WatchedOutput_set_block_hash(&this_ptr_conv, val_conv);
 }
 
@@ -34988,8 +36944,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1script_1pu
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *env, jclass clz, int64_t block_hash_arg, int64_t outpoint_arg, int8_tArray script_pubkey_arg) {
        void* block_hash_arg_ptr = untag_ptr(block_hash_arg);
        CHECK_ACCESS(block_hash_arg_ptr);
-       LDKCOption_BlockHashZ block_hash_arg_conv = *(LDKCOption_BlockHashZ*)(block_hash_arg_ptr);
-       block_hash_arg_conv = COption_BlockHashZ_clone((LDKCOption_BlockHashZ*)untag_ptr(block_hash_arg));
+       LDKCOption_ThirtyTwoBytesZ block_hash_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(block_hash_arg_ptr);
+       block_hash_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(block_hash_arg));
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
        outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
@@ -35572,14 +37528,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1htlcevent(JNI
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1commitment_1tx_1confirmed(JNIEnv *env, jclass clz, int64_t a) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1holder_1force_1closed(JNIEnv *env, jclass clz, int64_t a) {
        LDKOutPoint a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
-       *ret_copy = MonitorEvent_commitment_tx_confirmed(a_conv);
+       *ret_copy = MonitorEvent_holder_force_closed(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -35596,18 +37552,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1completed(JNI
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1failed(JNIEnv *env, jclass clz, int64_t a) {
-       LDKOutPoint a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = OutPoint_clone(&a_conv);
-       LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
-       *ret_copy = MonitorEvent_update_failed(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKMonitorEvent* a_conv = (LDKMonitorEvent*)untag_ptr(a);
        LDKMonitorEvent* b_conv = (LDKMonitorEvent*)untag_ptr(b);
@@ -35872,12 +37816,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1update_1mon
        if (ptr_is_owned(broadcaster)) { CHECK_ACCESS(broadcaster_ptr); }
        LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
        void* fee_estimator_ptr = untag_ptr(fee_estimator);
-       CHECK_ACCESS(fee_estimator_ptr);
-       LDKFeeEstimator fee_estimator_conv = *(LDKFeeEstimator*)(fee_estimator_ptr);
-       if (fee_estimator_conv.free == LDKFeeEstimator_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKFeeEstimator_JCalls_cloned(&fee_estimator_conv);
-       }
+       if (ptr_is_owned(fee_estimator)) { CHECK_ACCESS(fee_estimator_ptr); }
+       LDKFeeEstimator* fee_estimator_conv = (LDKFeeEstimator*)fee_estimator_ptr;
        void* logger_ptr = untag_ptr(logger);
        if (ptr_is_owned(logger)) { CHECK_ACCESS(logger_ptr); }
        LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
@@ -35902,7 +37842,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1fundin
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
+       LDKC2Tuple_OutPointCVec_u8ZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointCVec_u8ZZ), "LDKC2Tuple_OutPointCVec_u8ZZ");
        *ret_conv = ChannelMonitor_get_funding_txo(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -35913,14 +37853,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1o
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&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 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];
-               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       for (size_t a = 0; a < ret_var.datalen; a++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ* ret_conv_52_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ");
+               *ret_conv_52_conv = ret_var.data[a];
+               ret_arr_ptr[a] = tag_ptr(ret_conv_52_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -35972,6 +37912,62 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1process_1pendi
        ChannelMonitor_process_pending_events(&this_arg_conv, handler_conv);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1initial_1counterparty_1commitment_1tx(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCommitmentTransaction ret_var = ChannelMonitor_initial_counterparty_commitment_tx(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1counterparty_1commitment_1txs_1from_1update(JNIEnv *env, jclass clz, int64_t this_arg, int64_t update) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelMonitorUpdate update_conv;
+       update_conv.inner = untag_ptr(update);
+       update_conv.is_owned = ptr_is_owned(update);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
+       update_conv.is_owned = false;
+       LDKCVec_CommitmentTransactionZ ret_var = ChannelMonitor_counterparty_commitment_txs_from_update(&this_arg_conv, &update_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 x = 0; x < ret_var.datalen; x++) {
+               LDKCommitmentTransaction ret_conv_23_var = ret_var.data[x];
+               int64_t ret_conv_23_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_23_var);
+               ret_conv_23_ref = tag_ptr(ret_conv_23_var.inner, ret_conv_23_var.is_owned);
+               ret_arr_ptr[x] = ret_conv_23_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_ChannelMonitor_1sign_1to_1local_1justice_1tx(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray justice_tx, int64_t input_idx, int64_t value, int64_t commitment_number) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction justice_tx_ref;
+       justice_tx_ref.datalen = (*env)->GetArrayLength(env, justice_tx);
+       justice_tx_ref.data = MALLOC(justice_tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, justice_tx, 0, justice_tx_ref.datalen, justice_tx_ref.data);
+       justice_tx_ref.data_is_owned = true;
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = ChannelMonitor_sign_to_local_justice_tx(&this_arg_conv, justice_tx_ref, input_idx, value, commitment_number);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1counterparty_1node_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -36055,14 +38051,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       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);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_block_connected(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_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 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];
-               ret_arr_ptr[n] = tag_ptr(ret_conv_39_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36150,14 +38146,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1transa
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       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);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_transactions_confirmed(&this_arg_conv, header_ref, txdata_constr, height, broadcaster_conv, fee_estimator_conv, logger_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 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];
-               ret_arr_ptr[n] = tag_ptr(ret_conv_39_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36229,14 +38225,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1best_1
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
                LDKLogger_JCalls_cloned(&logger_conv);
        }
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_best_block_updated(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_conv);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ ret_var = ChannelMonitor_best_block_updated(&this_arg_conv, header_ref, height, broadcaster_conv, fee_estimator_conv, logger_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 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];
-               ret_arr_ptr[n] = tag_ptr(ret_conv_39_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36249,14 +38245,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1r
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_TxidCOption_BlockHashZZZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
+       LDKCVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ ret_var = ChannelMonitor_get_relevant_txids(&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++) {
-               LDKC2Tuple_TxidCOption_BlockHashZZ* ret_conv_34_conv = MALLOC(sizeof(LDKC2Tuple_TxidCOption_BlockHashZZ), "LDKC2Tuple_TxidCOption_BlockHashZZ");
-               *ret_conv_34_conv = ret_var.data[i];
-               ret_arr_ptr[i] = tag_ptr(ret_conv_34_conv, true);
+       for (size_t x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ* ret_conv_49_conv = MALLOC(sizeof(LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ), "LDKC2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ");
+               *ret_conv_49_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_49_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -36306,6 +38302,32 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1rebroadcast_1p
        ChannelMonitor_rebroadcast_pending_claims(&this_arg_conv, broadcaster_conv, fee_estimator_conv, logger_conv);
 }
 
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray tx, int32_t confirmation_height) {
+       LDKChannelMonitor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction tx_ref;
+       tx_ref.datalen = (*env)->GetArrayLength(env, tx);
+       tx_ref.data = MALLOC(tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, tx, 0, tx_ref.datalen, tx_ref.data);
+       tx_ref.data_is_owned = true;
+       LDKCVec_SpendableOutputDescriptorZ ret_var = ChannelMonitor_get_spendable_outputs(&this_arg_conv, tx_ref, confirmation_height);
+       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 b = 0; b < ret_var.datalen; b++) {
+               LDKSpendableOutputDescriptor *ret_conv_27_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+               *ret_conv_27_copy = ret_var.data[b];
+               int64_t ret_conv_27_ref = tag_ptr(ret_conv_27_copy, true);
+               ret_arr_ptr[b] = ret_conv_27_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1claimable_1balances(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -36327,7 +38349,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1c
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
@@ -36337,8 +38359,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        void* arg_b_ptr = untag_ptr(arg_b);
        if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
        LDKSignerProvider* arg_b_conv = (LDKSignerProvider*)arg_b_ptr;
-       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
-       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_read(ser_ref, arg_a_conv, arg_b_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelMonitorZ_read(ser_ref, arg_a_conv, arg_b_conv);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
@@ -36493,25 +38515,65 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1read(JNIEnv *env,
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKFailureCode* orig_conv = (LDKFailureCode*)untag_ptr(orig);
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_clone(orig_conv));
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FailureCode_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKFailureCode this_ptr_conv = *(LDKFailureCode*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       FailureCode_free(this_ptr_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1temporary_1node_1failure(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_temporary_node_failure());
+static inline uint64_t FailureCode_clone_ptr(LDKFailureCode *NONNULL_PTR arg) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFailureCode* arg_conv = (LDKFailureCode*)untag_ptr(arg);
+       int64_t ret_conv = FailureCode_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1required_1node_1feature_1missing(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_required_node_feature_missing());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKFailureCode* orig_conv = (LDKFailureCode*)untag_ptr(orig);
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_FailureCode_1incorrect_1or_1unknown_1payment_1details(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKFailureCode_to_java(env, FailureCode_incorrect_or_unknown_payment_details());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1temporary_1node_1failure(JNIEnv *env, jclass clz) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_temporary_node_failure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1required_1node_1feature_1missing(JNIEnv *env, jclass clz) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_required_node_feature_missing();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1incorrect_1or_1unknown_1payment_1details(JNIEnv *env, jclass clz) {
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_incorrect_or_unknown_payment_details();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FailureCode_1invalid_1onion_1payload(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCOption_C2Tuple_u64u16ZZ a_conv = *(LDKCOption_C2Tuple_u64u16ZZ*)(a_ptr);
+       a_conv = COption_C2Tuple_u64u16ZZ_clone((LDKCOption_C2Tuple_u64u16ZZ*)untag_ptr(a));
+       LDKFailureCode *ret_copy = MALLOC(sizeof(LDKFailureCode), "LDKFailureCode");
+       *ret_copy = FailureCode_invalid_onion_payload(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
@@ -37762,33 +39824,52 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1clone
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1pending(JNIEnv *env, jclass clz, int8_tArray payment_hash, int64_t total_msat) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1awaiting_1invoice(JNIEnv *env, jclass clz, int8_tArray payment_id) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
+       LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
+       *ret_copy = RecentPaymentDetails_awaiting_invoice(payment_id_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1pending(JNIEnv *env, jclass clz, int8_tArray payment_id, int8_tArray payment_hash, int64_t total_msat) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
        LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
-       *ret_copy = RecentPaymentDetails_pending(payment_hash_ref, total_msat);
+       *ret_copy = RecentPaymentDetails_pending(payment_id_ref, payment_hash_ref, total_msat);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1fulfilled(JNIEnv *env, jclass clz, int64_t payment_hash) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1fulfilled(JNIEnv *env, jclass clz, int8_tArray payment_id, int64_t payment_hash) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
-       *ret_copy = RecentPaymentDetails_fulfilled(payment_hash_conv);
+       *ret_copy = RecentPaymentDetails_fulfilled(payment_id_ref, payment_hash_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1abandoned(JNIEnv *env, jclass clz, int8_tArray payment_hash) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1abandoned(JNIEnv *env, jclass clz, int8_tArray payment_id, int8_tArray payment_hash) {
+       LDKThirtyTwoBytes payment_id_ref;
+       CHECK((*env)->GetArrayLength(env, payment_id) == 32);
+       (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
        LDKRecentPaymentDetails *ret_copy = MALLOC(sizeof(LDKRecentPaymentDetails), "LDKRecentPaymentDetails");
-       *ret_copy = RecentPaymentDetails_abandoned(payment_hash_ref);
+       *ret_copy = RecentPaymentDetails_abandoned(payment_id_ref, payment_hash_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -38053,7 +40134,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1cha
        override_config_conv.is_owned = ptr_is_owned(override_config);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(override_config_conv);
        override_config_conv = UserConfig_clone(&override_config_conv);
-       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
        *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_channel_id_ref, override_config_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38330,8 +40411,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        route_conv.is_owned = false;
        void* payment_preimage_ptr = untag_ptr(payment_preimage);
        CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_PaymentPreimageZ payment_preimage_conv = *(LDKCOption_PaymentPreimageZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(payment_preimage));
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
        LDKRecipientOnionFields recipient_onion_conv;
        recipient_onion_conv.inner = untag_ptr(recipient_onion);
        recipient_onion_conv.is_owned = ptr_is_owned(recipient_onion);
@@ -38340,7 +40421,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
-       LDKCResult_PaymentHashPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashPaymentSendFailureZ), "LDKCResult_PaymentHashPaymentSendFailureZ");
+       LDKCResult_ThirtyTwoBytesPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentSendFailureZ), "LDKCResult_ThirtyTwoBytesPaymentSendFailureZ");
        *ret_conv = ChannelManager_send_spontaneous_payment(&this_arg_conv, &route_conv, payment_preimage_conv, recipient_onion_conv, payment_id_ref);
        return tag_ptr(ret_conv, true);
 }
@@ -38353,8 +40434,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        this_arg_conv.is_owned = false;
        void* payment_preimage_ptr = untag_ptr(payment_preimage);
        CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_PaymentPreimageZ payment_preimage_conv = *(LDKCOption_PaymentPreimageZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(payment_preimage));
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
        LDKRecipientOnionFields recipient_onion_conv;
        recipient_onion_conv.inner = untag_ptr(recipient_onion);
        recipient_onion_conv.is_owned = ptr_is_owned(recipient_onion);
@@ -38372,7 +40453,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        CHECK_ACCESS(retry_strategy_ptr);
        LDKRetry retry_strategy_conv = *(LDKRetry*)(retry_strategy_ptr);
        retry_strategy_conv = Retry_clone((LDKRetry*)untag_ptr(retry_strategy));
-       LDKCResult_PaymentHashRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentHashRetryableSendFailureZ), "LDKCResult_PaymentHashRetryableSendFailureZ");
+       LDKCResult_ThirtyTwoBytesRetryableSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesRetryableSendFailureZ), "LDKCResult_ThirtyTwoBytesRetryableSendFailureZ");
        *ret_conv = ChannelManager_send_spontaneous_payment_with_retry(&this_arg_conv, payment_preimage_conv, recipient_onion_conv, payment_id_ref, route_params_conv, retry_strategy_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38388,11 +40469,49 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1probe
        path_conv.is_owned = ptr_is_owned(path);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
        path_conv = Path_clone(&path_conv);
-       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ");
        *ret_conv = ChannelManager_send_probe(&this_arg_conv, path_conv);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spontaneous_1preflight_1probes(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray node_id, int64_t amount_msat, int32_t final_cltv_expiry_delta, int64_t liquidity_limit_multiplier) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = ChannelManager_send_spontaneous_preflight_probes(&this_arg_conv, node_id_ref, amount_msat, final_cltv_expiry_delta, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1preflight_1probes(JNIEnv *env, jclass clz, int64_t this_arg, int64_t route_params, int64_t liquidity_limit_multiplier) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv = RouteParameters_clone(&route_params_conv);
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ");
+       *ret_conv = ChannelManager_send_preflight_probes(&this_arg_conv, route_params_conv, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1transaction_1generated(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray temporary_channel_id, int8_tArray counterparty_node_id, int8_tArray funding_transaction) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -38416,6 +40535,38 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1tr
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1batch_1funding_1transaction_1generated(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray temporary_channels, int8_tArray funding_transaction) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ temporary_channels_constr;
+       temporary_channels_constr.datalen = (*env)->GetArrayLength(env, temporary_channels);
+       if (temporary_channels_constr.datalen > 0)
+               temporary_channels_constr.data = MALLOC(temporary_channels_constr.datalen * sizeof(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ), "LDKCVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ Elements");
+       else
+               temporary_channels_constr.data = NULL;
+       int64_t* temporary_channels_vals = (*env)->GetLongArrayElements (env, temporary_channels, NULL);
+       for (size_t j = 0; j < temporary_channels_constr.datalen; j++) {
+               int64_t temporary_channels_conv_35 = temporary_channels_vals[j];
+               void* temporary_channels_conv_35_ptr = untag_ptr(temporary_channels_conv_35);
+               CHECK_ACCESS(temporary_channels_conv_35_ptr);
+               LDKC2Tuple_ThirtyTwoBytesPublicKeyZ temporary_channels_conv_35_conv = *(LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)(temporary_channels_conv_35_ptr);
+               temporary_channels_conv_35_conv = C2Tuple_ThirtyTwoBytesPublicKeyZ_clone((LDKC2Tuple_ThirtyTwoBytesPublicKeyZ*)untag_ptr(temporary_channels_conv_35));
+               temporary_channels_constr.data[j] = temporary_channels_conv_35_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, temporary_channels, temporary_channels_vals, 0);
+       LDKTransaction funding_transaction_ref;
+       funding_transaction_ref.datalen = (*env)->GetArrayLength(env, funding_transaction);
+       funding_transaction_ref.data = MALLOC(funding_transaction_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, funding_transaction, 0, funding_transaction_ref.datalen, funding_transaction_ref.data);
+       funding_transaction_ref.data_is_owned = true;
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = ChannelManager_batch_funding_transaction_generated(&this_arg_conv, temporary_channels_constr, funding_transaction_ref);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1update_1partial_1channel_1config(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray counterparty_node_id, jobjectArray channel_ids, int64_t config_update) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -38546,7 +40697,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1ba
        ChannelManager_fail_htlc_backwards(&this_arg_conv, payment_hash_ref);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1backwards_1with_1reason(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray payment_hash, jclass failure_code) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1backwards_1with_1reason(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray payment_hash, int64_t failure_code) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
@@ -38556,7 +40707,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1ba
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_arr);
        uint8_t (*payment_hash_ref)[32] = &payment_hash_arr;
-       LDKFailureCode failure_code_conv = LDKFailureCode_from_java(env, failure_code);
+       void* failure_code_ptr = untag_ptr(failure_code);
+       CHECK_ACCESS(failure_code_ptr);
+       LDKFailureCode failure_code_conv = *(LDKFailureCode*)(failure_code_ptr);
+       failure_code_conv = FailureCode_clone((LDKFailureCode*)untag_ptr(failure_code));
        ChannelManager_fail_htlc_backwards_with_reason(&this_arg_conv, payment_hash_ref, failure_code_conv);
 }
 
@@ -38572,6 +40726,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1funds(J
        ChannelManager_claim_funds(&this_arg_conv, payment_preimage_ref);
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1funds_1with_1known_1custom_1tlvs(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray payment_preimage) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKThirtyTwoBytes payment_preimage_ref;
+       CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
+       (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
+       ChannelManager_claim_funds_with_known_custom_tlvs(&this_arg_conv, payment_preimage_ref);
+}
+
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1our_1node_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -38639,7 +40805,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
        min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
        *ret_conv = ChannelManager_create_inbound_payment(&this_arg_conv, min_value_msat_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_delta_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38661,7 +40827,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        CHECK_ACCESS(min_final_cltv_expiry_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_ptr);
        min_final_cltv_expiry_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry));
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
        *ret_conv = ChannelManager_create_inbound_payment_for_hash(&this_arg_conv, payment_hash_ref, min_value_msat_conv, invoice_expiry_delta_secs, min_final_cltv_expiry_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -38678,7 +40844,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1paymen
        LDKThirtyTwoBytes payment_secret_ref;
        CHECK((*env)->GetArrayLength(env, payment_secret) == 32);
        (*env)->GetByteArrayRegion(env, payment_secret, 0, 32, payment_secret_ref.data);
-       LDKCResult_PaymentPreimageAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentPreimageAPIErrorZ), "LDKCResult_PaymentPreimageAPIErrorZ");
+       LDKCResult_ThirtyTwoBytesAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesAPIErrorZ), "LDKCResult_ThirtyTwoBytesAPIErrorZ");
        *ret_conv = ChannelManager_get_payment_preimage(&this_arg_conv, payment_hash_ref, payment_secret_ref);
        return tag_ptr(ret_conv, true);
 }
@@ -38773,19 +40939,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Confirm
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1persistable_1update_1future(JNIEnv *env, jclass clz, int64_t this_arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1event_1or_1persistence_1needed_1future(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKFuture ret_var = ChannelManager_get_persistable_update_future(&this_arg_conv);
+       LDKFuture ret_var = ChannelManager_get_event_or_persistence_needed_future(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1and_1clear_1needs_1persistence(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelManager_get_and_clear_needs_persistence(&this_arg_conv);
+       return ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1current_1best_1block(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -39336,7 +41512,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
@@ -39346,8 +41522,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        // WARNING: we need a move here but no clone is available for LDKChannelManagerReadArgs
        
-       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
-       *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv);
+       LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ");
+       *ret_conv = C2Tuple_ThirtyTwoBytesChannelManagerZ_read(ser_ref, arg_conv);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
@@ -39389,7 +41565,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create(JNIEnv *env, jclass
        CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
        min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ), "LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ");
+       LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ), "LDKCResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ");
        *ret_conv = create(&keys_conv, min_value_msat_conv, invoice_expiry_delta_secs, entropy_source_conv, current_time, min_final_cltv_expiry_delta_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -39411,7 +41587,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1from_1hash(JNIEnv *
        CHECK_ACCESS(min_final_cltv_expiry_delta_ptr);
        LDKCOption_u16Z min_final_cltv_expiry_delta_conv = *(LDKCOption_u16Z*)(min_final_cltv_expiry_delta_ptr);
        min_final_cltv_expiry_delta_conv = COption_u16Z_clone((LDKCOption_u16Z*)untag_ptr(min_final_cltv_expiry_delta));
-       LDKCResult_PaymentSecretNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretNoneZ), "LDKCResult_PaymentSecretNoneZ");
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
        *ret_conv = create_from_hash(&keys_conv, min_value_msat_conv, payment_hash_ref, invoice_expiry_delta_secs, current_time, min_final_cltv_expiry_delta_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -39543,7 +41719,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1get_1networks(JNIEnv
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_CVec_ChainHashZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ChainHashZZ), "LDKCOption_CVec_ChainHashZZ");
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
        *ret_copy = Init_get_networks(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -39557,8 +41733,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1networks(JNIEnv *en
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_ChainHashZZ val_conv = *(LDKCOption_CVec_ChainHashZZ*)(val_ptr);
-       val_conv = COption_CVec_ChainHashZZ_clone((LDKCOption_CVec_ChainHashZZ*)untag_ptr(val));
+       LDKCOption_CVec_ThirtyTwoBytesZZ val_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(val_ptr);
+       val_conv = COption_CVec_ThirtyTwoBytesZZ_clone((LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(val));
        Init_set_networks(&this_ptr_conv, val_conv);
 }
 
@@ -39568,7 +41744,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1get_1remote_1network_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_NetAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_NetAddressZ), "LDKCOption_NetAddressZ");
+       LDKCOption_SocketAddressZ *ret_copy = MALLOC(sizeof(LDKCOption_SocketAddressZ), "LDKCOption_SocketAddressZ");
        *ret_copy = Init_get_remote_network_address(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -39582,8 +41758,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1remote_1network_1ad
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_NetAddressZ val_conv = *(LDKCOption_NetAddressZ*)(val_ptr);
-       val_conv = COption_NetAddressZ_clone((LDKCOption_NetAddressZ*)untag_ptr(val));
+       LDKCOption_SocketAddressZ val_conv = *(LDKCOption_SocketAddressZ*)(val_ptr);
+       val_conv = COption_SocketAddressZ_clone((LDKCOption_SocketAddressZ*)untag_ptr(val));
        Init_set_remote_network_address(&this_ptr_conv, val_conv);
 }
 
@@ -39595,11 +41771,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1new(JNIEnv *env, jcla
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        void* networks_arg_ptr = untag_ptr(networks_arg);
        CHECK_ACCESS(networks_arg_ptr);
-       LDKCOption_CVec_ChainHashZZ networks_arg_conv = *(LDKCOption_CVec_ChainHashZZ*)(networks_arg_ptr);
-       networks_arg_conv = COption_CVec_ChainHashZZ_clone((LDKCOption_CVec_ChainHashZZ*)untag_ptr(networks_arg));
+       LDKCOption_CVec_ThirtyTwoBytesZZ networks_arg_conv = *(LDKCOption_CVec_ThirtyTwoBytesZZ*)(networks_arg_ptr);
+       networks_arg_conv = COption_CVec_ThirtyTwoBytesZZ_clone((LDKCOption_CVec_ThirtyTwoBytesZZ*)untag_ptr(networks_arg));
        void* remote_network_address_arg_ptr = untag_ptr(remote_network_address_arg);
        CHECK_ACCESS(remote_network_address_arg_ptr);
-       LDKCOption_NetAddressZ remote_network_address_arg_conv = *(LDKCOption_NetAddressZ*)(remote_network_address_arg_ptr);
+       LDKCOption_SocketAddressZ remote_network_address_arg_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_arg_ptr);
        LDKInit ret_var = Init_new(features_arg_conv, networks_arg_conv, remote_network_address_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
@@ -40439,7 +42615,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1shutdown_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = OpenChannel_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -40453,8 +42629,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1shutdown_1sc
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        OpenChannel_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -40512,8 +42688,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1new(JNIEnv *en
        (*env)->GetByteArrayRegion(env, first_per_commitment_point_arg, 0, 33, first_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -40982,7 +43158,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannelV2_1get_1shutdow
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = OpenChannelV2_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -40996,8 +43172,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannelV2_1set_1shutdown_1
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        OpenChannelV2_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -41078,8 +43254,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannelV2_1new(JNIEnv *
        (*env)->GetByteArrayRegion(env, second_per_commitment_point_arg, 0, 33, second_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -41446,7 +43622,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1shutdow
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = AcceptChannel_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -41460,8 +43636,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1shutdown_1
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        AcceptChannel_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -41516,8 +43692,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1new(JNIEnv *
        (*env)->GetByteArrayRegion(env, first_per_commitment_point_arg, 0, 33, first_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -41906,7 +44082,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannelV2_1get_1shutd
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_ScriptZ *ret_copy = MALLOC(sizeof(LDKCOption_ScriptZ), "LDKCOption_ScriptZ");
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
        *ret_copy = AcceptChannelV2_get_shutdown_scriptpubkey(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -41920,8 +44096,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannelV2_1set_1shutdown
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_ScriptZ val_conv = *(LDKCOption_ScriptZ*)(val_ptr);
-       val_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(val));
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
        AcceptChannelV2_set_shutdown_scriptpubkey(&this_ptr_conv, val_conv);
 }
 
@@ -41999,8 +44175,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannelV2_1new(JNIEnv
        (*env)->GetByteArrayRegion(env, second_per_commitment_point_arg, 0, 33, second_per_commitment_point_arg_ref.compressed_form);
        void* shutdown_scriptpubkey_arg_ptr = untag_ptr(shutdown_scriptpubkey_arg);
        CHECK_ACCESS(shutdown_scriptpubkey_arg_ptr);
-       LDKCOption_ScriptZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_ScriptZ*)(shutdown_scriptpubkey_arg_ptr);
-       shutdown_scriptpubkey_arg_conv = COption_ScriptZ_clone((LDKCOption_ScriptZ*)untag_ptr(shutdown_scriptpubkey_arg));
+       LDKCOption_CVec_u8ZZ shutdown_scriptpubkey_arg_conv = *(LDKCOption_CVec_u8ZZ*)(shutdown_scriptpubkey_arg_ptr);
+       shutdown_scriptpubkey_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(shutdown_scriptpubkey_arg));
        LDKChannelTypeFeatures channel_type_arg_conv;
        channel_type_arg_conv.inner = untag_ptr(channel_type_arg);
        channel_type_arg_conv.is_owned = ptr_is_owned(channel_type_arg);
@@ -42149,7 +44325,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1signature
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        FundingCreated_set_signature(&this_ptr_conv, val_ref);
@@ -42162,7 +44338,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new(JNIEnv
        LDKThirtyTwoBytes funding_txid_arg_ref;
        CHECK((*env)->GetArrayLength(env, funding_txid_arg) == 32);
        (*env)->GetByteArrayRegion(env, funding_txid_arg, 0, 32, funding_txid_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKFundingCreated ret_var = FundingCreated_new(temporary_channel_id_arg_ref, funding_txid_arg_ref, funding_output_index_arg, signature_arg_ref);
@@ -42265,7 +44441,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1signature(
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        FundingSigned_set_signature(&this_ptr_conv, val_ref);
@@ -42275,7 +44451,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new(JNIEnv *
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKFundingSigned ret_var = FundingSigned_new(channel_id_arg_ref, signature_arg_ref);
@@ -43944,7 +46120,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1signature(
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ClosingSigned_set_signature(&this_ptr_conv, val_ref);
@@ -43981,7 +46157,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new(JNIEnv *
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKClosingSignedFeeRange fee_range_arg_conv;
@@ -44253,6 +46429,49 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessage_1set_1blinding_1p
        OnionMessage_set_blinding_point(&this_ptr_conv, val_ref);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessage_1get_1onion_1routing_1packet(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKOnionMessage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPacket ret_var = OnionMessage_get_onion_routing_packet(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessage_1set_1onion_1routing_1packet(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKOnionMessage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPacket val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = Packet_clone(&val_conv);
+       OnionMessage_set_onion_routing_packet(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessage_1new(JNIEnv *env, jclass clz, int8_tArray blinding_point_arg, int64_t onion_routing_packet_arg) {
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
+       LDKPacket onion_routing_packet_arg_conv;
+       onion_routing_packet_arg_conv.inner = untag_ptr(onion_routing_packet_arg);
+       onion_routing_packet_arg_conv.is_owned = ptr_is_owned(onion_routing_packet_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(onion_routing_packet_arg_conv);
+       onion_routing_packet_arg_conv = Packet_clone(&onion_routing_packet_arg_conv);
+       LDKOnionMessage ret_var = OnionMessage_new(blinding_point_arg_ref, onion_routing_packet_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline uint64_t OnionMessage_clone_ptr(LDKOnionMessage *NONNULL_PTR arg) {
        LDKOnionMessage ret_var = OnionMessage_clone(arg);
        int64_t ret_ref = 0;
@@ -44687,7 +46906,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signatu
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        CommitmentSigned_set_signature(&this_ptr_conv, val_ref);
@@ -44699,7 +46918,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ ret_var = CommitmentSigned_get_htlc_signatures(&this_ptr_conv);
+       LDKCVec_ECDSASignatureZ 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);
        ;
@@ -44719,15 +46938,15 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1s
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ val_constr;
+       LDKCVec_ECDSASignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                val_constr.data = NULL;
        for (size_t i = 0; i < val_constr.datalen; i++) {
                int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
-               LDKSignature val_conv_8_ref;
+               LDKECDSASignature val_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, val_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, val_conv_8, 0, 64, val_conv_8_ref.compact_form);
                val_constr.data[i] = val_conv_8_ref;
@@ -44739,18 +46958,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new(JNIEn
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
-       LDKCVec_SignatureZ htlc_signatures_arg_constr;
+       LDKCVec_ECDSASignatureZ htlc_signatures_arg_constr;
        htlc_signatures_arg_constr.datalen = (*env)->GetArrayLength(env, htlc_signatures_arg);
        if (htlc_signatures_arg_constr.datalen > 0)
-               htlc_signatures_arg_constr.data = MALLOC(htlc_signatures_arg_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               htlc_signatures_arg_constr.data = MALLOC(htlc_signatures_arg_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                htlc_signatures_arg_constr.data = NULL;
        for (size_t i = 0; i < htlc_signatures_arg_constr.datalen; i++) {
                int8_tArray htlc_signatures_arg_conv_8 = (*env)->GetObjectArrayElement(env, htlc_signatures_arg, i);
-               LDKSignature htlc_signatures_arg_conv_8_ref;
+               LDKECDSASignature htlc_signatures_arg_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, htlc_signatures_arg_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, htlc_signatures_arg_conv_8, 0, 64, htlc_signatures_arg_conv_8_ref.compact_form);
                htlc_signatures_arg_constr.data[i] = htlc_signatures_arg_conv_8_ref;
@@ -45173,7 +47392,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1ne
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_TxidZ *ret_copy = MALLOC(sizeof(LDKCOption_TxidZ), "LDKCOption_TxidZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = ChannelReestablish_get_next_funding_txid(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -45187,8 +47406,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_TxidZ val_conv = *(LDKCOption_TxidZ*)(val_ptr);
-       val_conv = COption_TxidZ_clone((LDKCOption_TxidZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        ChannelReestablish_set_next_funding_txid(&this_ptr_conv, val_conv);
 }
 
@@ -45204,8 +47423,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1new(JNI
        (*env)->GetByteArrayRegion(env, my_current_per_commitment_point_arg, 0, 33, my_current_per_commitment_point_arg_ref.compressed_form);
        void* next_funding_txid_arg_ptr = untag_ptr(next_funding_txid_arg);
        CHECK_ACCESS(next_funding_txid_arg_ptr);
-       LDKCOption_TxidZ next_funding_txid_arg_conv = *(LDKCOption_TxidZ*)(next_funding_txid_arg_ptr);
-       next_funding_txid_arg_conv = COption_TxidZ_clone((LDKCOption_TxidZ*)untag_ptr(next_funding_txid_arg));
+       LDKCOption_ThirtyTwoBytesZ next_funding_txid_arg_conv = *(LDKCOption_ThirtyTwoBytesZ*)(next_funding_txid_arg_ptr);
+       next_funding_txid_arg_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(next_funding_txid_arg));
        LDKChannelReestablish ret_var = ChannelReestablish_new(channel_id_arg_ref, next_local_commitment_number_arg, next_remote_commitment_number_arg, your_last_per_commitment_secret_arg_ref, my_current_per_commitment_point_arg_ref, next_funding_txid_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
@@ -45325,7 +47544,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1n
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        AnnouncementSignatures_set_node_signature(&this_ptr_conv, val_ref);
@@ -45348,7 +47567,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1b
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        AnnouncementSignatures_set_bitcoin_signature(&this_ptr_conv, val_ref);
@@ -45358,10 +47577,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
        LDKThirtyTwoBytes channel_id_arg_ref;
        CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
        (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
-       LDKSignature node_signature_arg_ref;
+       LDKECDSASignature node_signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, node_signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, node_signature_arg, 0, 64, node_signature_arg_ref.compact_form);
-       LDKSignature bitcoin_signature_arg_ref;
+       LDKECDSASignature bitcoin_signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, bitcoin_signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, bitcoin_signature_arg, 0, 64, bitcoin_signature_arg_ref.compact_form);
        LDKAnnouncementSignatures ret_var = AnnouncementSignatures_new(channel_id_arg_ref, short_channel_id_arg, node_signature_arg_ref, bitcoin_signature_arg_ref);
@@ -45416,113 +47635,160 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1eq
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SocketAddress_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
        CHECK_ACCESS(this_ptr_ptr);
-       LDKNetAddress this_ptr_conv = *(LDKNetAddress*)(this_ptr_ptr);
+       LDKSocketAddress this_ptr_conv = *(LDKSocketAddress*)(this_ptr_ptr);
        FREE(untag_ptr(this_ptr));
-       NetAddress_free(this_ptr_conv);
+       SocketAddress_free(this_ptr_conv);
 }
 
-static inline uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg) {
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_clone(arg);
+static inline uint64_t SocketAddress_clone_ptr(LDKSocketAddress *NONNULL_PTR arg) {
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNetAddress* arg_conv = (LDKNetAddress*)untag_ptr(arg);
-       int64_t ret_conv = NetAddress_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSocketAddress* arg_conv = (LDKSocketAddress*)untag_ptr(arg);
+       int64_t ret_conv = SocketAddress_clone_ptr(arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNetAddress* orig_conv = (LDKNetAddress*)untag_ptr(orig);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_clone(orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSocketAddress* orig_conv = (LDKSocketAddress*)untag_ptr(orig);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1ipv4(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1tcp_1ip_1v4(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
        LDKFourBytes addr_ref;
        CHECK((*env)->GetArrayLength(env, addr) == 4);
        (*env)->GetByteArrayRegion(env, addr, 0, 4, addr_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_ipv4(addr_ref, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_tcp_ip_v4(addr_ref, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1ipv6(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1tcp_1ip_1v6(JNIEnv *env, jclass clz, int8_tArray addr, int16_t port) {
        LDKSixteenBytes addr_ref;
        CHECK((*env)->GetArrayLength(env, addr) == 16);
        (*env)->GetByteArrayRegion(env, addr, 0, 16, addr_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_ipv6(addr_ref, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_tcp_ip_v6(addr_ref, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1onion_1v2(JNIEnv *env, jclass clz, int8_tArray a) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1onion_1v2(JNIEnv *env, jclass clz, int8_tArray a) {
        LDKTwelveBytes a_ref;
        CHECK((*env)->GetArrayLength(env, a) == 12);
        (*env)->GetByteArrayRegion(env, a, 0, 12, a_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_onion_v2(a_ref);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_onion_v2(a_ref);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1onion_1v3(JNIEnv *env, jclass clz, int8_tArray ed25519_pubkey, int16_t checksum, int8_t version, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1onion_1v3(JNIEnv *env, jclass clz, int8_tArray ed25519_pubkey, int16_t checksum, int8_t version, int16_t port) {
        LDKThirtyTwoBytes ed25519_pubkey_ref;
        CHECK((*env)->GetArrayLength(env, ed25519_pubkey) == 32);
        (*env)->GetByteArrayRegion(env, ed25519_pubkey, 0, 32, ed25519_pubkey_ref.data);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_onion_v3(ed25519_pubkey_ref, checksum, version, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_onion_v3(ed25519_pubkey_ref, checksum, version, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1hostname(JNIEnv *env, jclass clz, int64_t hostname, int16_t port) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1hostname(JNIEnv *env, jclass clz, int64_t hostname, int16_t port) {
        LDKHostname hostname_conv;
        hostname_conv.inner = untag_ptr(hostname);
        hostname_conv.is_owned = ptr_is_owned(hostname);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(hostname_conv);
        hostname_conv = Hostname_clone(&hostname_conv);
-       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
-       *ret_copy = NetAddress_hostname(hostname_conv, port);
+       LDKSocketAddress *ret_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+       *ret_copy = SocketAddress_hostname(hostname_conv, port);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetAddress_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNetAddress* a_conv = (LDKNetAddress*)untag_ptr(a);
-       LDKNetAddress* b_conv = (LDKNetAddress*)untag_ptr(b);
-       jboolean ret_conv = NetAddress_eq(a_conv, b_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SocketAddress_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSocketAddress* a_conv = (LDKSocketAddress*)untag_ptr(a);
+       LDKSocketAddress* b_conv = (LDKSocketAddress*)untag_ptr(b);
+       jboolean ret_conv = SocketAddress_eq(a_conv, b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetAddress_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNetAddress* obj_conv = (LDKNetAddress*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = NetAddress_write(obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SocketAddress_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKSocketAddress* obj_conv = (LDKSocketAddress*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = SocketAddress_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
-       *ret_conv = NetAddress_read(ser_ref);
+       LDKCResult_SocketAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressDecodeErrorZ), "LDKCResult_SocketAddressDecodeErrorZ");
+       *ret_conv = SocketAddress_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSocketAddressParseError* orig_conv = (LDKSocketAddressParseError*)untag_ptr(orig);
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_clone(orig_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1socket_1addr_1parse(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_socket_addr_parse());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1input(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_invalid_input());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1port(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_invalid_port());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1onion_1v3(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKSocketAddressParseError_to_java(env, SocketAddressParseError_invalid_onion_v3());
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSocketAddressParseError* a_conv = (LDKSocketAddressParseError*)untag_ptr(a);
+       LDKSocketAddressParseError* b_conv = (LDKSocketAddressParseError*)untag_ptr(b);
+       jboolean ret_conv = SocketAddressParseError_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_parse_1onion_1address(JNIEnv *env, jclass clz, jstring host, int16_t port) {
+       LDKStr host_conv = java_to_owned_str(env, host);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = parse_onion_address(host_conv, port);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketAddress_1from_1str(JNIEnv *env, jclass clz, jstring s) {
+       LDKStr s_conv = java_to_owned_str(env, s);
+       LDKCResult_SocketAddressSocketAddressParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SocketAddressSocketAddressParseErrorZ), "LDKCResult_SocketAddressSocketAddressParseErrorZ");
+       *ret_conv = SocketAddress_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedGossipMessage_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -45734,15 +48000,15 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnounceme
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_NetAddressZ ret_var = UnsignedNodeAnnouncement_get_addresses(&this_ptr_conv);
+       LDKCVec_SocketAddressZ 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 = tag_ptr(ret_conv_12_copy, true);
-               ret_arr_ptr[m] = ret_conv_12_ref;
+       for (size_t p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -45755,20 +48021,20 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_NetAddressZ val_constr;
+       LDKCVec_SocketAddressZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                val_constr.data = NULL;
        int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               void* val_conv_12_ptr = untag_ptr(val_conv_12);
-               CHECK_ACCESS(val_conv_12_ptr);
-               LDKNetAddress val_conv_12_conv = *(LDKNetAddress*)(val_conv_12_ptr);
-               val_conv_12_conv = NetAddress_clone((LDKNetAddress*)untag_ptr(val_conv_12));
-               val_constr.data[m] = val_conv_12_conv;
+       for (size_t p = 0; p < val_constr.datalen; p++) {
+               int64_t val_conv_15 = val_vals[p];
+               void* val_conv_15_ptr = untag_ptr(val_conv_15);
+               CHECK_ACCESS(val_conv_15_ptr);
+               LDKSocketAddress val_conv_15_conv = *(LDKSocketAddress*)(val_conv_15_ptr);
+               val_conv_15_conv = SocketAddress_clone((LDKSocketAddress*)untag_ptr(val_conv_15));
+               val_constr.data[p] = val_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
        UnsignedNodeAnnouncement_set_addresses(&this_ptr_conv, val_constr);
@@ -45844,7 +48110,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1signatu
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        NodeAnnouncement_set_signature(&this_ptr_conv, val_ref);
@@ -45878,7 +48144,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1content
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEnv *env, jclass clz, int8_tArray signature_arg, int64_t contents_arg) {
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKUnsignedNodeAnnouncement contents_arg_conv;
@@ -46123,6 +48389,72 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        UnsignedChannelAnnouncement_set_bitcoin_key_2(&this_ptr_conv, val_conv);
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1get_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKUnsignedChannelAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedChannelAnnouncement_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_UnsignedChannelAnnouncement_1set_1excess_1data(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKUnsignedChannelAnnouncement this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = (*env)->GetArrayLength(env, val);
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, val, 0, val_ref.datalen, val_ref.data);
+       UnsignedChannelAnnouncement_set_excess_data(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1new(JNIEnv *env, jclass clz, int64_t features_arg, int8_tArray chain_hash_arg, int64_t short_channel_id_arg, int64_t node_id_1_arg, int64_t node_id_2_arg, int64_t bitcoin_key_1_arg, int64_t bitcoin_key_2_arg, int8_tArray excess_data_arg) {
+       LDKChannelFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = ChannelFeatures_clone(&features_arg_conv);
+       LDKThirtyTwoBytes chain_hash_arg_ref;
+       CHECK((*env)->GetArrayLength(env, chain_hash_arg) == 32);
+       (*env)->GetByteArrayRegion(env, chain_hash_arg, 0, 32, chain_hash_arg_ref.data);
+       LDKNodeId node_id_1_arg_conv;
+       node_id_1_arg_conv.inner = untag_ptr(node_id_1_arg);
+       node_id_1_arg_conv.is_owned = ptr_is_owned(node_id_1_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_1_arg_conv);
+       node_id_1_arg_conv = NodeId_clone(&node_id_1_arg_conv);
+       LDKNodeId node_id_2_arg_conv;
+       node_id_2_arg_conv.inner = untag_ptr(node_id_2_arg);
+       node_id_2_arg_conv.is_owned = ptr_is_owned(node_id_2_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_2_arg_conv);
+       node_id_2_arg_conv = NodeId_clone(&node_id_2_arg_conv);
+       LDKNodeId bitcoin_key_1_arg_conv;
+       bitcoin_key_1_arg_conv.inner = untag_ptr(bitcoin_key_1_arg);
+       bitcoin_key_1_arg_conv.is_owned = ptr_is_owned(bitcoin_key_1_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(bitcoin_key_1_arg_conv);
+       bitcoin_key_1_arg_conv = NodeId_clone(&bitcoin_key_1_arg_conv);
+       LDKNodeId bitcoin_key_2_arg_conv;
+       bitcoin_key_2_arg_conv.inner = untag_ptr(bitcoin_key_2_arg);
+       bitcoin_key_2_arg_conv.is_owned = ptr_is_owned(bitcoin_key_2_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(bitcoin_key_2_arg_conv);
+       bitcoin_key_2_arg_conv = NodeId_clone(&bitcoin_key_2_arg_conv);
+       LDKCVec_u8Z excess_data_arg_ref;
+       excess_data_arg_ref.datalen = (*env)->GetArrayLength(env, excess_data_arg);
+       excess_data_arg_ref.data = MALLOC(excess_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, excess_data_arg, 0, excess_data_arg_ref.datalen, excess_data_arg_ref.data);
+       LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_new(features_arg_conv, chain_hash_arg_ref, short_channel_id_arg, node_id_1_arg_conv, node_id_2_arg_conv, bitcoin_key_1_arg_conv, bitcoin_key_2_arg_conv, excess_data_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
 static inline uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg) {
        LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(arg);
        int64_t ret_ref = 0;
@@ -46193,7 +48525,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_node_signature_1(&this_ptr_conv, val_ref);
@@ -46216,7 +48548,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_node_signature_2(&this_ptr_conv, val_ref);
@@ -46239,7 +48571,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_bitcoin_signature_1(&this_ptr_conv, val_ref);
@@ -46262,7 +48594,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelAnnouncement_set_bitcoin_signature_2(&this_ptr_conv, val_ref);
@@ -46296,16 +48628,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1cont
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JNIEnv *env, jclass clz, int8_tArray node_signature_1_arg, int8_tArray node_signature_2_arg, int8_tArray bitcoin_signature_1_arg, int8_tArray bitcoin_signature_2_arg, int64_t contents_arg) {
-       LDKSignature node_signature_1_arg_ref;
+       LDKECDSASignature node_signature_1_arg_ref;
        CHECK((*env)->GetArrayLength(env, node_signature_1_arg) == 64);
        (*env)->GetByteArrayRegion(env, node_signature_1_arg, 0, 64, node_signature_1_arg_ref.compact_form);
-       LDKSignature node_signature_2_arg_ref;
+       LDKECDSASignature node_signature_2_arg_ref;
        CHECK((*env)->GetArrayLength(env, node_signature_2_arg) == 64);
        (*env)->GetByteArrayRegion(env, node_signature_2_arg, 0, 64, node_signature_2_arg_ref.compact_form);
-       LDKSignature bitcoin_signature_1_arg_ref;
+       LDKECDSASignature bitcoin_signature_1_arg_ref;
        CHECK((*env)->GetArrayLength(env, bitcoin_signature_1_arg) == 64);
        (*env)->GetByteArrayRegion(env, bitcoin_signature_1_arg, 0, 64, bitcoin_signature_1_arg_ref.compact_form);
-       LDKSignature bitcoin_signature_2_arg_ref;
+       LDKECDSASignature bitcoin_signature_2_arg_ref;
        CHECK((*env)->GetArrayLength(env, bitcoin_signature_2_arg) == 64);
        (*env)->GetByteArrayRegion(env, bitcoin_signature_2_arg, 0, 64, bitcoin_signature_2_arg_ref.compact_form);
        LDKUnsignedChannelAnnouncement contents_arg_conv;
@@ -46659,7 +48991,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1signature(
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        ChannelUpdate_set_signature(&this_ptr_conv, val_ref);
@@ -46693,7 +49025,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1contents(J
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv *env, jclass clz, int8_tArray signature_arg, int64_t contents_arg) {
-       LDKSignature signature_arg_ref;
+       LDKECDSASignature signature_arg_ref;
        CHECK((*env)->GetArrayLength(env, signature_arg) == 64);
        (*env)->GetByteArrayRegion(env, signature_arg, 0, 64, signature_arg_ref.compact_form);
        LDKUnsignedChannelUpdate contents_arg_conv;
@@ -49525,14 +51857,14 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_PeerManager_1get_1peer
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_C2Tuple_PublicKeyCOption_NetAddressZZZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
+       LDKCVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ ret_var = PeerManager_get_peer_node_ids(&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 o = 0; o < ret_var.datalen; o++) {
-               LDKC2Tuple_PublicKeyCOption_NetAddressZZ* ret_conv_40_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_NetAddressZZ), "LDKC2Tuple_PublicKeyCOption_NetAddressZZ");
-               *ret_conv_40_conv = ret_var.data[o];
-               ret_arr_ptr[o] = tag_ptr(ret_conv_40_conv, true);
+       for (size_t r = 0; r < ret_var.datalen; r++) {
+               LDKC2Tuple_PublicKeyCOption_SocketAddressZZ* ret_conv_43_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyCOption_SocketAddressZZ), "LDKC2Tuple_PublicKeyCOption_SocketAddressZZ");
+               *ret_conv_43_conv = ret_var.data[r];
+               ret_arr_ptr[r] = tag_ptr(ret_conv_43_conv, true);
        }
        (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
        FREE(ret_var.data);
@@ -49557,7 +51889,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1outbound_
        }
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
-       LDKCOption_NetAddressZ remote_network_address_conv = *(LDKCOption_NetAddressZ*)(remote_network_address_ptr);
+       LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = PeerManager_new_outbound_connection(&this_arg_conv, their_node_id_ref, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -49578,7 +51910,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1inbound_1
        }
        void* remote_network_address_ptr = untag_ptr(remote_network_address);
        CHECK_ACCESS(remote_network_address_ptr);
-       LDKCOption_NetAddressZ remote_network_address_conv = *(LDKCOption_NetAddressZ*)(remote_network_address_ptr);
+       LDKCOption_SocketAddressZ remote_network_address_conv = *(LDKCOption_SocketAddressZ*)(remote_network_address_ptr);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = PeerManager_new_inbound_connection(&this_arg_conv, descriptor_conv, remote_network_address_conv);
        return tag_ptr(ret_conv, true);
@@ -49679,19 +52011,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1broadcast_1node_1
        LDKThirtyTwoBytes alias_ref;
        CHECK((*env)->GetArrayLength(env, alias) == 32);
        (*env)->GetByteArrayRegion(env, alias, 0, 32, alias_ref.data);
-       LDKCVec_NetAddressZ addresses_constr;
+       LDKCVec_SocketAddressZ addresses_constr;
        addresses_constr.datalen = (*env)->GetArrayLength(env, addresses);
        if (addresses_constr.datalen > 0)
-               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKNetAddress), "LDKCVec_NetAddressZ Elements");
+               addresses_constr.data = MALLOC(addresses_constr.datalen * sizeof(LDKSocketAddress), "LDKCVec_SocketAddressZ Elements");
        else
                addresses_constr.data = NULL;
        int64_t* addresses_vals = (*env)->GetLongArrayElements (env, addresses, NULL);
-       for (size_t m = 0; m < addresses_constr.datalen; m++) {
-               int64_t addresses_conv_12 = addresses_vals[m];
-               void* addresses_conv_12_ptr = untag_ptr(addresses_conv_12);
-               CHECK_ACCESS(addresses_conv_12_ptr);
-               LDKNetAddress addresses_conv_12_conv = *(LDKNetAddress*)(addresses_conv_12_ptr);
-               addresses_constr.data[m] = addresses_conv_12_conv;
+       for (size_t p = 0; p < addresses_constr.datalen; p++) {
+               int64_t addresses_conv_15 = addresses_vals[p];
+               void* addresses_conv_15_ptr = untag_ptr(addresses_conv_15);
+               CHECK_ACCESS(addresses_conv_15_ptr);
+               LDKSocketAddress addresses_conv_15_conv = *(LDKSocketAddress*)(addresses_conv_15_ptr);
+               addresses_constr.data[p] = addresses_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, addresses, addresses_vals, 0);
        PeerManager_broadcast_node_announcement(&this_arg_conv, rgb_ref, alias_ref, addresses_constr);
@@ -50343,6 +52675,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone(JN
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKChannelPublicKeys o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelPublicKeys_hash(&o_conv);
+       return ret_conv;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKChannelPublicKeys a_conv;
        a_conv.inner = untag_ptr(a);
@@ -50439,6 +52781,22 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_get_1revokeable_1redeem
        return ret_arr;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_get_1counterparty_1payment_1script(JNIEnv *env, jclass clz, int64_t channel_type_features, int8_tArray payment_key) {
+       LDKChannelTypeFeatures channel_type_features_conv;
+       channel_type_features_conv.inner = untag_ptr(channel_type_features);
+       channel_type_features_conv.is_owned = ptr_is_owned(channel_type_features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_type_features_conv);
+       channel_type_features_conv.is_owned = false;
+       LDKPublicKey payment_key_ref;
+       CHECK((*env)->GetArrayLength(env, payment_key) == 33);
+       (*env)->GetByteArrayRegion(env, payment_key, 0, 33, payment_key_ref.compressed_form);
+       LDKCVec_u8Z ret_var = get_counterparty_payment_script(&channel_type_features_conv, payment_key_ref);
+       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_HTLCOutputInCommitment_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKHTLCOutputInCommitment this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -50701,16 +53059,16 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1htlc_1transactio
 }
 
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1htlc_1input_1witness(JNIEnv *env, jclass clz, int8_tArray local_sig, int8_tArray remote_sig, int64_t preimage, int8_tArray redeem_script, int64_t channel_type_features) {
-       LDKSignature local_sig_ref;
+       LDKECDSASignature local_sig_ref;
        CHECK((*env)->GetArrayLength(env, local_sig) == 64);
        (*env)->GetByteArrayRegion(env, local_sig, 0, 64, local_sig_ref.compact_form);
-       LDKSignature remote_sig_ref;
+       LDKECDSASignature remote_sig_ref;
        CHECK((*env)->GetArrayLength(env, remote_sig) == 64);
        (*env)->GetByteArrayRegion(env, remote_sig, 0, 64, remote_sig_ref.compact_form);
        void* preimage_ptr = untag_ptr(preimage);
        CHECK_ACCESS(preimage_ptr);
-       LDKCOption_PaymentPreimageZ preimage_conv = *(LDKCOption_PaymentPreimageZ*)(preimage_ptr);
-       preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(preimage));
+       LDKCOption_ThirtyTwoBytesZ preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(preimage_ptr);
+       preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(preimage));
        LDKu8slice redeem_script_ref;
        redeem_script_ref.datalen = (*env)->GetArrayLength(env, redeem_script);
        redeem_script_ref.data = (*env)->GetByteArrayElements (env, redeem_script, NULL);
@@ -50753,7 +53111,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1anchor_1input_1w
        LDKPublicKey funding_key_ref;
        CHECK((*env)->GetArrayLength(env, funding_key) == 33);
        (*env)->GetByteArrayRegion(env, funding_key, 0, 33, funding_key_ref.compressed_form);
-       LDKSignature funding_sig_ref;
+       LDKECDSASignature funding_sig_ref;
        CHECK((*env)->GetArrayLength(env, funding_sig) == 64);
        (*env)->GetByteArrayRegion(env, funding_sig, 0, 64, funding_sig_ref.compact_form);
        LDKWitness ret_var = build_anchor_input_witness(funding_key_ref, funding_sig_ref);
@@ -50975,6 +53333,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKChannelTransactionParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = ChannelTransactionParameters_hash(&o_conv);
+       return ret_conv;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKChannelTransactionParameters a_conv;
        a_conv.inner = untag_ptr(a);
@@ -51087,6 +53455,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCounterpartyChannelTransactionParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = CounterpartyChannelTransactionParameters_hash(&o_conv);
+       return ret_conv;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKCounterpartyChannelTransactionParameters a_conv;
        a_conv.inner = untag_ptr(a);
@@ -51289,7 +53667,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        HolderCommitmentTransaction_set_counterparty_sig(&this_ptr_conv, val_ref);
@@ -51301,7 +53679,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransa
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ ret_var = HolderCommitmentTransaction_get_counterparty_htlc_sigs(&this_ptr_conv);
+       LDKCVec_ECDSASignatureZ 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);
        ;
@@ -51321,15 +53699,15 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_SignatureZ val_constr;
+       LDKCVec_ECDSASignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                val_constr.data = NULL;
        for (size_t i = 0; i < val_constr.datalen; i++) {
                int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
-               LDKSignature val_conv_8_ref;
+               LDKECDSASignature val_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, val_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, val_conv_8, 0, 64, val_conv_8_ref.compact_form);
                val_constr.data[i] = val_conv_8_ref;
@@ -51396,18 +53774,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction
        commitment_tx_conv.is_owned = ptr_is_owned(commitment_tx);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv);
-       LDKSignature counterparty_sig_ref;
+       LDKECDSASignature counterparty_sig_ref;
        CHECK((*env)->GetArrayLength(env, counterparty_sig) == 64);
        (*env)->GetByteArrayRegion(env, counterparty_sig, 0, 64, counterparty_sig_ref.compact_form);
-       LDKCVec_SignatureZ counterparty_htlc_sigs_constr;
+       LDKCVec_ECDSASignatureZ counterparty_htlc_sigs_constr;
        counterparty_htlc_sigs_constr.datalen = (*env)->GetArrayLength(env, counterparty_htlc_sigs);
        if (counterparty_htlc_sigs_constr.datalen > 0)
-               counterparty_htlc_sigs_constr.data = MALLOC(counterparty_htlc_sigs_constr.datalen * sizeof(LDKSignature), "LDKCVec_SignatureZ Elements");
+               counterparty_htlc_sigs_constr.data = MALLOC(counterparty_htlc_sigs_constr.datalen * sizeof(LDKECDSASignature), "LDKCVec_ECDSASignatureZ Elements");
        else
                counterparty_htlc_sigs_constr.data = NULL;
        for (size_t i = 0; i < counterparty_htlc_sigs_constr.datalen; i++) {
                int8_tArray counterparty_htlc_sigs_conv_8 = (*env)->GetObjectArrayElement(env, counterparty_htlc_sigs, i);
-               LDKSignature counterparty_htlc_sigs_conv_8_ref;
+               LDKECDSASignature counterparty_htlc_sigs_conv_8_ref;
                CHECK((*env)->GetArrayLength(env, counterparty_htlc_sigs_conv_8) == 64);
                (*env)->GetByteArrayRegion(env, counterparty_htlc_sigs_conv_8, 0, 64, counterparty_htlc_sigs_conv_8_ref.compact_form);
                counterparty_htlc_sigs_constr.data[i] = counterparty_htlc_sigs_conv_8_ref;
@@ -52036,11 +54414,38 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        void* entropy_source_ptr = untag_ptr(entropy_source);
        if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
        LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
+       LDKCResult_CVec_ECDSASignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_ECDSASignatureZNoneZ), "LDKCResult_CVec_ECDSASignatureZNoneZ");
        *ret_conv = TrustedCommitmentTransaction_get_htlc_sigs(&this_arg_conv, htlc_base_key_ref, &channel_parameters_conv, entropy_source_conv);
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1revokeable_1output_1index(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKTrustedCommitmentTransaction this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_usizeZ *ret_copy = MALLOC(sizeof(LDKCOption_usizeZ), "LDKCOption_usizeZ");
+       *ret_copy = TrustedCommitmentTransaction_revokeable_output_index(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1build_1to_1local_1justice_1tx(JNIEnv *env, jclass clz, int64_t this_arg, int64_t feerate_per_kw, int8_tArray destination_script) {
+       LDKTrustedCommitmentTransaction this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_u8Z destination_script_ref;
+       destination_script_ref.datalen = (*env)->GetArrayLength(env, destination_script);
+       destination_script_ref.data = MALLOC(destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, destination_script, 0, destination_script_ref.datalen, destination_script_ref.data);
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = TrustedCommitmentTransaction_build_to_local_justice_tx(&this_arg_conv, feerate_per_kw, destination_script_ref);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_get_1commitment_1transaction_1number_1obscure_1factor(JNIEnv *env, jclass clz, int8_tArray broadcaster_payment_basepoint, int8_tArray countersignatory_payment_basepoint, jboolean outbound_from_broadcaster) {
        LDKPublicKey broadcaster_payment_basepoint_ref;
        CHECK((*env)->GetArrayLength(env, broadcaster_payment_basepoint) == 33);
@@ -52562,6 +54967,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1un
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InitFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52617,6 +55044,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1un
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = NodeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52672,6 +55121,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1requires_
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKChannelFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52727,6 +55198,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1req
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt11InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt11InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKBolt11InvoiceFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52782,6 +55275,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1requires_1u
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKOfferFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = OfferFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKOfferFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52837,6 +55352,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1re
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKInvoiceRequestFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = InvoiceRequestFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKInvoiceRequestFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52892,6 +55429,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1req
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBolt12InvoiceFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = Bolt12InvoiceFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKBolt12InvoiceFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -52947,6 +55506,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1requir
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKBlindedHopFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = BlindedHopFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKBlindedHopFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -53002,6 +55583,28 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requi
        return ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1required_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_required_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1optional_1feature_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = ChannelTypeFeatures_set_optional_feature_bit(&this_arg_conv, bit);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1required_1custom_1bit(JNIEnv *env, jclass clz, int64_t this_arg, int64_t bit) {
        LDKChannelTypeFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -54315,6 +56918,120 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1sh
        return ret_conv;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1taproot_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_optional(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1taproot_1required(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       InitFeatures_set_taproot_required(&this_arg_conv);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1supports_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1taproot_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_optional(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1taproot_1required(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NodeFeatures_set_taproot_required(&this_arg_conv);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1supports_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1taproot_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_optional(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1taproot_1required(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       ChannelTypeFeatures_set_taproot_required(&this_arg_conv);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1supports_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_supports_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInitFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = InitFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = NodeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requires_1taproot(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKChannelTypeFeatures this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = ChannelTypeFeatures_requires_taproot(&this_arg_conv);
+       return ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1onion_1messages_1optional(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -55025,7 +57742,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1clone(JNIEnv *env, j
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1attempts(JNIEnv *env, jclass clz, int64_t a) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1attempts(JNIEnv *env, jclass clz, int32_t a) {
        LDKRetry *ret_copy = MALLOC(sizeof(LDKRetry), "LDKRetry");
        *ret_copy = Retry_attempts(a);
        int64_t ret_ref = tag_ptr(ret_copy, true);
@@ -55052,6 +57769,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1hash(JNIEnv *env, jc
        return ret_conv;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Retry_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRetry* obj_conv = (LDKRetry*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = Retry_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Retry_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_RetryDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RetryDecodeErrorZ), "LDKCResult_RetryDecodeErrorZ");
+       *ret_conv = Retry_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_RetryableSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRetryableSendFailure* orig_conv = (LDKRetryableSendFailure*)untag_ptr(orig);
        jclass ret_conv = LDKRetryableSendFailure_to_java(env, RetryableSendFailure_clone(orig_conv));
@@ -55203,6 +57939,67 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1partial
        return ret_ref;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPaymentSendFailure* a_conv = (LDKPaymentSendFailure*)untag_ptr(a);
+       LDKPaymentSendFailure* b_conv = (LDKPaymentSendFailure*)untag_ptr(b);
+       jboolean ret_conv = PaymentSendFailure_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKProbeSendFailure this_ptr_conv = *(LDKProbeSendFailure*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ProbeSendFailure_free(this_ptr_conv);
+}
+
+static inline uint64_t ProbeSendFailure_clone_ptr(LDKProbeSendFailure *NONNULL_PTR arg) {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbeSendFailure* arg_conv = (LDKProbeSendFailure*)untag_ptr(arg);
+       int64_t ret_conv = ProbeSendFailure_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbeSendFailure* orig_conv = (LDKProbeSendFailure*)untag_ptr(orig);
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1route_1not_1found(JNIEnv *env, jclass clz) {
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_route_not_found();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1sending_1failed(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKPaymentSendFailure a_conv = *(LDKPaymentSendFailure*)(a_ptr);
+       a_conv = PaymentSendFailure_clone((LDKPaymentSendFailure*)untag_ptr(a));
+       LDKProbeSendFailure *ret_copy = MALLOC(sizeof(LDKProbeSendFailure), "LDKProbeSendFailure");
+       *ret_copy = ProbeSendFailure_sending_failed(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKProbeSendFailure* a_conv = (LDKProbeSendFailure*)untag_ptr(a);
+       LDKProbeSendFailure* b_conv = (LDKProbeSendFailure*)untag_ptr(b);
+       jboolean ret_conv = ProbeSendFailure_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKRecipientOnionFields this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -55217,7 +58014,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1get_1
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = RecipientOnionFields_get_payment_secret(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -55231,8 +58028,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1set_1pay
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_PaymentSecretZ val_conv = *(LDKCOption_PaymentSecretZ*)(val_ptr);
-       val_conv = COption_PaymentSecretZ_clone((LDKCOption_PaymentSecretZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        RecipientOnionFields_set_payment_secret(&this_ptr_conv, val_conv);
 }
 
@@ -55261,22 +58058,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1set_1pay
        RecipientOnionFields_set_payment_metadata(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1new(JNIEnv *env, jclass clz, int64_t payment_secret_arg, int64_t payment_metadata_arg) {
-       void* payment_secret_arg_ptr = untag_ptr(payment_secret_arg);
-       CHECK_ACCESS(payment_secret_arg_ptr);
-       LDKCOption_PaymentSecretZ payment_secret_arg_conv = *(LDKCOption_PaymentSecretZ*)(payment_secret_arg_ptr);
-       payment_secret_arg_conv = COption_PaymentSecretZ_clone((LDKCOption_PaymentSecretZ*)untag_ptr(payment_secret_arg));
-       void* payment_metadata_arg_ptr = untag_ptr(payment_metadata_arg);
-       CHECK_ACCESS(payment_metadata_arg_ptr);
-       LDKCOption_CVec_u8ZZ payment_metadata_arg_conv = *(LDKCOption_CVec_u8ZZ*)(payment_metadata_arg_ptr);
-       payment_metadata_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(payment_metadata_arg));
-       LDKRecipientOnionFields ret_var = RecipientOnionFields_new(payment_secret_arg_conv, payment_metadata_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
 static inline uint64_t RecipientOnionFields_clone_ptr(LDKRecipientOnionFields *NONNULL_PTR arg) {
        LDKRecipientOnionFields ret_var = RecipientOnionFields_clone(arg);
        int64_t ret_ref = 0;
@@ -55364,6 +58145,53 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1spont
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1with_1custom_1tlvs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray custom_tlvs) {
+       LDKRecipientOnionFields this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = RecipientOnionFields_clone(&this_arg_conv);
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ custom_tlvs_constr;
+       custom_tlvs_constr.datalen = (*env)->GetArrayLength(env, custom_tlvs);
+       if (custom_tlvs_constr.datalen > 0)
+               custom_tlvs_constr.data = MALLOC(custom_tlvs_constr.datalen * sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKCVec_C2Tuple_u64CVec_u8ZZZ Elements");
+       else
+               custom_tlvs_constr.data = NULL;
+       int64_t* custom_tlvs_vals = (*env)->GetLongArrayElements (env, custom_tlvs, NULL);
+       for (size_t x = 0; x < custom_tlvs_constr.datalen; x++) {
+               int64_t custom_tlvs_conv_23 = custom_tlvs_vals[x];
+               void* custom_tlvs_conv_23_ptr = untag_ptr(custom_tlvs_conv_23);
+               CHECK_ACCESS(custom_tlvs_conv_23_ptr);
+               LDKC2Tuple_u64CVec_u8ZZ custom_tlvs_conv_23_conv = *(LDKC2Tuple_u64CVec_u8ZZ*)(custom_tlvs_conv_23_ptr);
+               custom_tlvs_conv_23_conv = C2Tuple_u64CVec_u8ZZ_clone((LDKC2Tuple_u64CVec_u8ZZ*)untag_ptr(custom_tlvs_conv_23));
+               custom_tlvs_constr.data[x] = custom_tlvs_conv_23_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, custom_tlvs, custom_tlvs_vals, 0);
+       LDKCResult_RecipientOnionFieldsNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecipientOnionFieldsNoneZ), "LDKCResult_RecipientOnionFieldsNoneZ");
+       *ret_conv = RecipientOnionFields_with_custom_tlvs(this_arg_conv, custom_tlvs_constr);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1custom_1tlvs(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRecipientOnionFields this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_C2Tuple_u64CVec_u8ZZZ ret_var = RecipientOnionFields_custom_tlvs(&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 x = 0; x < ret_var.datalen; x++) {
+               LDKC2Tuple_u64CVec_u8ZZ* ret_conv_23_conv = MALLOC(sizeof(LDKC2Tuple_u64CVec_u8ZZ), "LDKC2Tuple_u64CVec_u8ZZ");
+               *ret_conv_23_conv = ret_var.data[x];
+               ret_arr_ptr[x] = tag_ptr(ret_conv_23_conv, true);
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomMessageReader_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -55404,961 +58232,760 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Type_1free(JNIEnv *env, jclass
        Type_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKUnsignedBolt12Invoice this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedBolt12Invoice_free(this_obj_conv);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKUnsignedBolt12Invoice this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
-       return ret_arr;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBolt12Invoice this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Offer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKOffer this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12Invoice_free(this_obj_conv);
+       Offer_free(this_obj_conv);
 }
 
-static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
+static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
+       LDKOffer ret_var = Offer_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBolt12Invoice arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOffer arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBolt12Invoice orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOffer orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
+       LDKOffer ret_var = Offer_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = Offer_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = Offer_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = Offer_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1created_1at(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
-       return ret_conv;
+       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1relative_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
-       return ret_conv;
+       LDKOfferFeatures ret_var = Offer_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payment_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_payment_hash(&this_arg_conv).data);
-       return ret_arr;
+       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_BlindedPathZ ret_var = Offer_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_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_Bolt12Invoice_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_features(&this_arg_conv);
+       LDKQuantity ret_var = Offer_supported_quantity(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Offer_signing_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signable_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1supports_1chain(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray chain) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_signable_hash(&this_arg_conv).data);
-       return ret_arr;
+       LDKThirtyTwoBytes chain_ref;
+       CHECK((*env)->GetArrayLength(env, chain) == 32);
+       (*env)->GetByteArrayRegion(env, chain, 0, 32, chain_ref.data);
+       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
+       return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
-       LDKBolt12Invoice this_arg_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       jboolean ret_conv = Bolt12Invoice_verify(&this_arg_conv, &key_conv);
+       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBolt12Invoice obj_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1valid_1quantity(JNIEnv *env, jclass clz, int64_t this_arg, int64_t quantity) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1expects_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKOffer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Offer_write(&obj_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_BlindedPayInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedPayInfo this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Amount_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKAmount this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPayInfo_free(this_obj_conv);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
-}
-
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+       Amount_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
+static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
+       LDKAmount ret_var = Amount_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedPayInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKBlindedHopFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedHopFeatures_clone(&val_conv);
-       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAmount arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Amount_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1new(JNIEnv *env, jclass clz, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
-       LDKBlindedHopFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKAmount orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKAmount ret_var = Amount_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Quantity_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKQuantity this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Quantity_free(this_obj_conv);
+}
+
+static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
+       LDKQuantity ret_var = Quantity_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedPayInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKQuantity arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = Quantity_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedPayInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKQuantity orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
+       LDKQuantity ret_var = Quantity_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedPayInfo o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedPayInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedPayInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1from_1str(JNIEnv *env, jclass clz, jstring s) {
+       LDKStr s_conv = java_to_owned_str(env, s);
+       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
+       *ret_conv = Offer_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedPayInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_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_UnsignedBolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKUnsignedBolt12Invoice this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedBolt12Invoice_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
-       *ret_conv = BlindedPayInfo_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1tagged_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTaggedHash ret_var = UnsignedBolt12Invoice_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInvoiceError this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBolt12Invoice this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceError_free(this_obj_conv);
+       Bolt12Invoice_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
+static inline uint64_t Bolt12Invoice_clone_ptr(LDKBolt12Invoice *NONNULL_PTR arg) {
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKErroneousField val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ErroneousField_clone(&val_conv);
-       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBolt12Invoice arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBolt12Invoice orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12Invoice ret_var = Bolt12Invoice_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKInvoiceError this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKUntrustedString val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = UntrustedString_clone(&val_conv);
-       InvoiceError_set_message(&this_ptr_conv, val_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1new(JNIEnv *env, jclass clz, int64_t erroneous_field_arg, int64_t message_arg) {
-       LDKErroneousField erroneous_field_arg_conv;
-       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
-       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
-       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
-       LDKUntrustedString message_arg_conv;
-       message_arg_conv.inner = untag_ptr(message_arg);
-       message_arg_conv.is_owned = ptr_is_owned(message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
-       message_arg_conv = UntrustedString_clone(&message_arg_conv);
-       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
-       LDKInvoiceError ret_var = InvoiceError_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInvoiceError arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInvoiceError orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = UnsignedBolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKErroneousField this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ErroneousField_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, UnsignedBolt12Invoice_chain(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
        LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
+       *ret_copy = UnsignedBolt12Invoice_metadata(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKErroneousField this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
-       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
-       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1new(JNIEnv *env, jclass clz, int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
-       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
-       CHECK_ACCESS(suggested_value_arg_ptr);
-       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
-       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
-       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = UnsignedBolt12Invoice_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
-       LDKErroneousField ret_var = ErroneousField_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = UnsignedBolt12Invoice_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKErroneousField arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKErroneousField orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceError_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInvoiceError obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
-       *ret_conv = InvoiceError_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKUnsignedInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UnsignedInvoiceRequest_free(this_obj_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInvoiceRequest this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InvoiceRequest_free(this_obj_conv);
-}
-
-static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedBolt12Invoice_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInvoiceRequest arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInvoiceRequest orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1message_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = InvoiceRequest_metadata(&this_arg_conv);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       LDKCVec_BlindedPathZ ret_var = UnsignedBolt12Invoice_message_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
        return ret_arr;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, InvoiceRequest_chain(&this_arg_conv).data);
-       return ret_arr;
+       LDKQuantity ret_var = UnsignedBolt12Invoice_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKu8slice ret_var = UnsignedBolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_features(&this_arg_conv);
+       LDKInvoiceRequestFeatures ret_var = UnsignedBolt12Invoice_invoice_request_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
+       *ret_copy = UnsignedBolt12Invoice_quantity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, InvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedBolt12Invoice_payer_id(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+       LDKPrintableString ret_var = UnsignedBolt12Invoice_payer_note(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
-       LDKInvoiceRequest this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1created_1at(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKExpandedKey key_conv;
-       key_conv.inner = untag_ptr(key);
-       key_conv.is_owned = ptr_is_owned(key);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
-       key_conv.is_owned = false;
-       LDKCResult_COption_KeyPairZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_KeyPairZNoneZ), "LDKCResult_COption_KeyPairZNoneZ");
-       *ret_conv = InvoiceRequest_verify(&this_arg_conv, &key_conv);
-       return tag_ptr(ret_conv, true);
+       int64_t ret_conv = UnsignedBolt12Invoice_created_at(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInvoiceRequest obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1relative_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedBolt12Invoice_relative_expiry(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Offer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKOffer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Offer_free(this_obj_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = UnsignedBolt12Invoice_is_expired(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Offer_clone_ptr(LDKOffer *NONNULL_PTR arg) {
-       LDKOffer ret_var = Offer_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payment_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, UnsignedBolt12Invoice_payment_hash(&this_arg_conv).data);
+       return ret_arr;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOffer arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Offer_clone_ptr(&arg_conv);
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = UnsignedBolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOffer orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKOffer ret_var = Offer_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1invoice_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures ret_var = UnsignedBolt12Invoice_invoice_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_ChainHashZ ret_var = Offer_chains(&this_arg_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, 32);
-               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
-               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
-       }
-       
-       FREE(ret_var.data);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedBolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1supports_1chain(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray chain) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1offer_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKThirtyTwoBytes chain_ref;
-       CHECK((*env)->GetArrayLength(env, chain) == 32);
-       (*env)->GetByteArrayRegion(env, chain, 0, 32, chain_ref.data);
-       jboolean ret_conv = Offer_supports_chain(&this_arg_conv, chain_ref);
-       return ret_conv;
+       LDKCOption_CVec_ThirtyTwoBytesZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_ThirtyTwoBytesZZ), "LDKCOption_CVec_ThirtyTwoBytesZZ");
+       *ret_copy = Bolt12Invoice_offer_chains(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_chain(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
-       *ret_copy = Offer_metadata(&this_arg_conv);
+       *ret_copy = Bolt12Invoice_metadata(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKAmount ret_var = Offer_amount(&this_arg_conv);
+       LDKAmount ret_var = Bolt12Invoice_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_description(&this_arg_conv);
+       LDKOfferFeatures ret_var = Bolt12Invoice_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOfferFeatures ret_var = Offer_features(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = Offer_absolute_expiry(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_absolute_expiry(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_expired(&this_arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Offer_issuer(&this_arg_conv);
+       LDKPrintableString ret_var = Bolt12Invoice_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1message_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Offer_paths(&this_arg_conv);
+       LDKCVec_BlindedPathZ ret_var = Bolt12Invoice_message_paths(&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);
@@ -56374,2996 +59001,3227 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths(JNIEnv *e
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKQuantity ret_var = Offer_supported_quantity(&this_arg_conv);
+       LDKQuantity ret_var = Bolt12Invoice_supported_quantity(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1valid_1quantity(JNIEnv *env, jclass clz, int64_t this_arg, int64_t quantity) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_is_valid_quantity(&this_arg_conv, quantity);
-       return ret_conv;
+       LDKu8slice ret_var = Bolt12Invoice_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1expects_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = Offer_expects_quantity(&this_arg_conv);
-       return ret_conv;
+       LDKInvoiceRequestFeatures ret_var = Bolt12Invoice_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffer this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Offer_signing_pubkey(&this_arg_conv).compressed_form);
-       return ret_arr;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Bolt12Invoice_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Offer_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKOffer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Offer_write(&obj_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);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Bolt12Invoice_payer_id(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Amount_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKAmount this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Amount_free(this_obj_conv);
-}
-
-static inline uint64_t Amount_clone_ptr(LDKAmount *NONNULL_PTR arg) {
-       LDKAmount ret_var = Amount_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Bolt12Invoice_payer_note(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKAmount arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Amount_clone_ptr(&arg_conv);
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1created_1at(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_created_at(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Amount_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKAmount orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKAmount ret_var = Amount_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1relative_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_relative_expiry(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Quantity_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKQuantity this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Quantity_free(this_obj_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Bolt12Invoice_is_expired(&this_arg_conv);
+       return ret_conv;
 }
 
-static inline uint64_t Quantity_clone_ptr(LDKQuantity *NONNULL_PTR arg) {
-       LDKQuantity ret_var = Quantity_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payment_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_payment_hash(&this_arg_conv).data);
+       return ret_arr;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKQuantity arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Quantity_clone_ptr(&arg_conv);
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12Invoice_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Quantity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKQuantity orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKQuantity ret_var = Quantity_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1invoice_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKBolt12InvoiceFeatures ret_var = Bolt12Invoice_invoice_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Offer_1from_1str(JNIEnv *env, jclass clz, jstring s) {
-       LDKStr s_conv = java_to_owned_str(env, s);
-       LDKCResult_OfferBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OfferBolt12ParseErrorZ), "LDKCResult_OfferBolt12ParseErrorZ");
-       *ret_conv = Offer_from_str(s_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Bolt12Invoice_signing_pubkey(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBolt12ParseError this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Bolt12ParseError_free(this_obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signature(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, Bolt12Invoice_signature(&this_arg_conv).compact_form);
+       return ret_arr;
 }
 
-static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBolt12ParseError arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signable_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Bolt12Invoice_signable_hash(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBolt12ParseError orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
+       LDKBolt12Invoice this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_ThirtyTwoBytesNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesNoneZ), "LDKCResult_ThirtyTwoBytesNoneZ");
+       *ret_conv = Bolt12Invoice_verify(&this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_clone(orig_conv));
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKUnsignedBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = UnsignedBolt12Invoice_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1already_1expired(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_already_expired());
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBolt12Invoice obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Bolt12Invoice_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1chain(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_chain());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedPayInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       BlindedPayInfo_free(this_obj_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1chain(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_chain());
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_base_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_amount());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_base_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_amount());
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedPayInfo_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1insufficient_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_insufficient_amount());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1amount(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_amount());
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = BlindedPayInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1currency(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_currency());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unknown_1required_1features(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unknown_required_features());
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1features(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_features());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1description(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_description());
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_get_htlc_maximum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signing_1pubkey(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signing_pubkey());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedPayInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1signing_1pubkey(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_signing_pubkey());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = BlindedPayInfo_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1signing_1pubkey(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_signing_pubkey());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedPayInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       BlindedPayInfo_set_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1quantity(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_quantity());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1new(JNIEnv *env, jclass clz, int32_t fee_base_msat_arg, int32_t fee_proportional_millionths_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t features_arg) {
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, features_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1quantity(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_quantity());
+static inline uint64_t BlindedPayInfo_clone_ptr(LDKBlindedPayInfo *NONNULL_PTR arg) {
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedPayInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1quantity(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_quantity());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedPayInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedPayInfo ret_var = BlindedPayInfo_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1metadata(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_metadata());
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedPayInfo o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPayInfo_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1metadata(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_metadata());
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedPayInfo a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedPayInfo b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPayInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1metadata(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_metadata());
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedPayInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedPayInfo_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1id(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_id());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPayInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_BlindedPayInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPayInfoDecodeErrorZ), "LDKCResult_BlindedPayInfoDecodeErrorZ");
+       *ret_conv = BlindedPayInfo_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1paths(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_paths());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInvoiceError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceError_free(this_obj_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1pay_1info(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_pay_info());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField ret_var = InvoiceError_get_erroneous_field(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1creation_1time(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_creation_time());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1erroneous_1field(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKErroneousField val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ErroneousField_clone(&val_conv);
+       InvoiceError_set_erroneous_field(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payment_1hash(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payment_hash());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1get_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString ret_var = InvoiceError_get_message(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signature(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signature());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceError_1set_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKInvoiceError this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKUntrustedString val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = UntrustedString_clone(&val_conv);
+       InvoiceError_set_message(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Refund_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRefund this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Refund_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1new(JNIEnv *env, jclass clz, int64_t erroneous_field_arg, int64_t message_arg) {
+       LDKErroneousField erroneous_field_arg_conv;
+       erroneous_field_arg_conv.inner = untag_ptr(erroneous_field_arg);
+       erroneous_field_arg_conv.is_owned = ptr_is_owned(erroneous_field_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(erroneous_field_arg_conv);
+       erroneous_field_arg_conv = ErroneousField_clone(&erroneous_field_arg_conv);
+       LDKUntrustedString message_arg_conv;
+       message_arg_conv.inner = untag_ptr(message_arg);
+       message_arg_conv.is_owned = ptr_is_owned(message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_arg_conv);
+       message_arg_conv = UntrustedString_clone(&message_arg_conv);
+       LDKInvoiceError ret_var = InvoiceError_new(erroneous_field_arg_conv, message_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
-       LDKRefund ret_var = Refund_clone(arg);
+static inline uint64_t InvoiceError_clone_ptr(LDKInvoiceError *NONNULL_PTR arg) {
+       LDKInvoiceError ret_var = InvoiceError_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRefund arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceError arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
+       int64_t ret_conv = InvoiceError_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRefund orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInvoiceError orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRefund ret_var = Refund_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
+       LDKInvoiceError ret_var = InvoiceError_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
-       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKErroneousField this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ErroneousField_free(this_obj_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Refund_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_get_tlv_fieldnum(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_BlindedPathZ ret_var = Refund_paths(&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 n = 0; n < ret_var.datalen; n++) {
-               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
-               int64_t ret_conv_13_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
-               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
-               ret_arr_ptr[n] = ret_conv_13_ref;
-       }
-       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
-       FREE(ret_var.data);
-       return ret_arr;
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = Refund_metadata(&this_arg_conv);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
-       return ret_arr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1tlv_1fieldnum(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ErroneousField_set_tlv_fieldnum(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Refund_chain(&this_arg_conv).data);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1get_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = ErroneousField_get_suggested_value(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroneousField_1set_1suggested_1value(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKErroneousField this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_CVec_u8ZZ val_conv = *(LDKCOption_CVec_u8ZZ*)(val_ptr);
+       val_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(val));
+       ErroneousField_set_suggested_value(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1new(JNIEnv *env, jclass clz, int64_t tlv_fieldnum_arg, int64_t suggested_value_arg) {
+       void* suggested_value_arg_ptr = untag_ptr(suggested_value_arg);
+       CHECK_ACCESS(suggested_value_arg_ptr);
+       LDKCOption_CVec_u8ZZ suggested_value_arg_conv = *(LDKCOption_CVec_u8ZZ*)(suggested_value_arg_ptr);
+       suggested_value_arg_conv = COption_CVec_u8ZZ_clone((LDKCOption_CVec_u8ZZ*)untag_ptr(suggested_value_arg));
+       LDKErroneousField ret_var = ErroneousField_new(tlv_fieldnum_arg, suggested_value_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = Refund_quantity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ErroneousField_clone_ptr(LDKErroneousField *NONNULL_PTR arg) {
+       LDKErroneousField ret_var = ErroneousField_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Refund_payer_id(&this_arg_conv).compressed_form);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKErroneousField arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ErroneousField_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRefund this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroneousField_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKErroneousField orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKErroneousField ret_var = ErroneousField_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRefund obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceError_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInvoiceError obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Refund_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InvoiceError_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1from_1str(JNIEnv *env, jclass clz, jstring s) {
-       LDKStr s_conv = java_to_owned_str(env, s);
-       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
-       *ret_conv = Refund_from_str(s_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceError_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_InvoiceErrorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceErrorDecodeErrorZ), "LDKCResult_InvoiceErrorDecodeErrorZ");
+       *ret_conv = InvoiceError_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
-       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_clone(orig_conv));
-       return ret_conv;
-}
-
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1chain(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_chain());
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKUnsignedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       UnsignedInvoiceRequest_free(this_obj_conv);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1tx(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_tx());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1tagged_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTaggedHash ret_var = UnsignedInvoiceRequest_tagged_hash(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoResult_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       UtxoResult_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InvoiceRequest_free(this_obj_conv);
 }
 
-static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t InvoiceRequest_clone_ptr(LDKInvoiceRequest *NONNULL_PTR arg) {
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
-       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceRequest arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInvoiceRequest orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInvoiceRequest ret_var = InvoiceRequest_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1sync(JNIEnv *env, jclass clz, int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
-       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_sync(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKVerifiedInvoiceRequest this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       VerifiedInvoiceRequest_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1async(JNIEnv *env, jclass clz, int64_t a) {
-       LDKUtxoFuture a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = UtxoFuture_clone(&a_conv);
-       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
-       *ret_copy = UtxoResult_async(a_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1get_1keys(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCOption_SecretKeyZ *ret_copy = MALLOC(sizeof(LDKCOption_SecretKeyZ), "LDKCOption_SecretKeyZ");
+       *ret_copy = VerifiedInvoiceRequest_get_keys(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoLookup_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       UtxoLookup_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKUtxoFuture this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       UtxoFuture_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1set_1keys(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKVerifiedInvoiceRequest this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_SecretKeyZ val_conv = *(LDKCOption_SecretKeyZ*)(val_ptr);
+       val_conv = COption_SecretKeyZ_clone((LDKCOption_SecretKeyZ*)untag_ptr(val));
+       VerifiedInvoiceRequest_set_keys(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
-       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
+static inline uint64_t VerifiedInvoiceRequest_clone_ptr(LDKVerifiedInvoiceRequest *NONNULL_PTR arg) {
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKUtxoFuture arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKVerifiedInvoiceRequest arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
+       int64_t ret_conv = VerifiedInvoiceRequest_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKUtxoFuture orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKVerifiedInvoiceRequest orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1new(JNIEnv *env, jclass clz) {
-       LDKUtxoFuture ret_var = UtxoFuture_new();
+       LDKVerifiedInvoiceRequest ret_var = VerifiedInvoiceRequest_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1resolve_1without_1forwarding(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
+       LDKCVec_ThirtyTwoBytesZ ret_var = UnsignedInvoiceRequest_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*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_UtxoFuture_1resolve(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
-       LDKUtxoFuture this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNetworkGraph graph_conv;
-       graph_conv.inner = untag_ptr(graph);
-       graph_conv.is_owned = ptr_is_owned(graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
-       graph_conv.is_owned = false;
-       LDKP2PGossipSync gossip_conv;
-       gossip_conv.inner = untag_ptr(gossip);
-       gossip_conv.is_owned = ptr_is_owned(gossip);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
-       gossip_conv.is_owned = false;
-       void* result_ptr = untag_ptr(result);
-       CHECK_ACCESS(result_ptr);
-       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
-       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = UnsignedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeId this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeId_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = UnsignedInvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
-       LDKNodeId ret_var = NodeId_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeId arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeId orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKNodeId ret_var = NodeId_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = UnsignedInvoiceRequest_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1from_1pubkey(JNIEnv *env, jclass clz, int8_tArray pubkey) {
-       LDKPublicKey pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
-       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1slice(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNodeId this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
-       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       LDKCVec_BlindedPathZ ret_var = UnsignedInvoiceRequest_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_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_NodeId_1as_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNodeId this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
-       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
-       return tag_ptr(ret_conv, true);
+       LDKQuantity ret_var = UnsignedInvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKNodeId o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = NodeId_hash(&o_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeId obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = UnsignedInvoiceRequest_payer_metadata(&this_arg_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 int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = NodeId_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNetworkGraph this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NetworkGraph_free(this_obj_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, UnsignedInvoiceRequest_chain(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKReadOnlyNetworkGraph this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ReadOnlyNetworkGraph_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NetworkUpdate_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = UnsignedInvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = UnsignedInvoiceRequest_quantity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
-       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
-       return ret_conv;
-}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedInvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1update_1message(JNIEnv *env, jclass clz, int64_t msg) {
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = ChannelUpdate_clone(&msg_conv);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKUnsignedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = UnsignedInvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1failure(JNIEnv *env, jclass clz, int64_t short_channel_id, jboolean is_permanent) {
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_ThirtyTwoBytesZ ret_var = InvoiceRequest_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
+       }
+       
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1node_1failure(JNIEnv *env, jclass clz, int8_tArray node_id, jboolean is_permanent) {
-       LDKPublicKey node_id_ref;
-       CHECK((*env)->GetArrayLength(env, node_id) == 33);
-       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
-       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = InvoiceRequest_metadata(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
-       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
-       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = InvoiceRequest_amount(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = InvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
-       *ret_conv = NetworkUpdate_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = InvoiceRequest_offer_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKP2PGossipSync this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       P2PGossipSync_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = InvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1add_1utxo_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t utxo_lookup) {
-       LDKP2PGossipSync this_arg_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
+       LDKCVec_BlindedPathZ ret_var = InvoiceRequest_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_ref;
        }
-       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_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_NetworkGraph_1handle_1network_1update(JNIEnv *env, jclass clz, int64_t this_arg, int64_t network_update) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
-       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
+       LDKQuantity ret_var = InvoiceRequest_supported_quantity(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1genesis_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, NetworkGraph_get_genesis_hash(&this_arg_conv).data);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, InvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1node_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_node_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1channel_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = verify_channel_announcement(&msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1RoutingMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
-       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+       LDKu8slice ret_var = InvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1MessageSendEventsProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKP2PGossipSync this_arg_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
-       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKChannelUpdateInfo this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUpdateInfo_free(this_obj_conv);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
-       return ret_conv;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, InvoiceRequest_chain(&this_arg_conv).data);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = InvoiceRequest_invoice_request_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, InvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = InvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1signature(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, InvoiceRequest_signature(&this_arg_conv).compact_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1verify(JNIEnv *env, jclass clz, int64_t this_arg, int64_t key) {
+       LDKInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv = InvoiceRequest_clone(&this_arg_conv);
+       LDKExpandedKey key_conv;
+       key_conv.inner = untag_ptr(key);
+       key_conv.is_owned = ptr_is_owned(key);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(key_conv);
+       key_conv.is_owned = false;
+       LDKCResult_VerifiedInvoiceRequestNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_VerifiedInvoiceRequestNoneZ), "LDKCResult_VerifiedInvoiceRequestNoneZ");
+       *ret_conv = InvoiceRequest_verify(this_arg_conv, &key_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1chains(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_ThirtyTwoBytesZ ret_var = VerifiedInvoiceRequest_chains(&this_arg_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, 32);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 32, ret_var.data[i].data);
+               (*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_ChannelUpdateInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = VerifiedInvoiceRequest_metadata(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKAmount ret_var = VerifiedInvoiceRequest_amount(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_description(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1offer_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOfferFeatures ret_var = VerifiedInvoiceRequest_offer_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUpdateInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdate val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdate_clone(&val_conv);
-       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1new(JNIEnv *env, jclass clz, int32_t last_update_arg, jboolean enabled_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int64_t last_update_message_arg) {
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       LDKChannelUpdate last_update_message_arg_conv;
-       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
-       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
-       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_message_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_issuer(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPathZ ret_var = VerifiedInvoiceRequest_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_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_VerifiedInvoiceRequest_1supported_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKQuantity ret_var = VerifiedInvoiceRequest_supported_quantity(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKChannelUpdateInfo arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1signing_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, VerifiedInvoiceRequest_signing_pubkey(&this_arg_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKChannelUpdateInfo orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = VerifiedInvoiceRequest_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, VerifiedInvoiceRequest_chain(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_amount_msats(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1invoice_1request_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = VerifiedInvoiceRequest_invoice_request_features(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKChannelUpdateInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelUpdateInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = VerifiedInvoiceRequest_quantity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKChannelUpdateInfo obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, VerifiedInvoiceRequest_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKVerifiedInvoiceRequest this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = VerifiedInvoiceRequest_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKUnsignedInvoiceRequest obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = UnsignedInvoiceRequest_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
-       *ret_conv = ChannelUpdateInfo_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInvoiceRequest obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InvoiceRequest_write(&obj_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_ChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKChannelInfo this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TaggedHash_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKTaggedHash this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelInfo_free(this_obj_conv);
+       TaggedHash_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBolt12ParseError this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Bolt12ParseError_free(this_obj_conv);
+}
+
+static inline uint64_t Bolt12ParseError_clone_ptr(LDKBolt12ParseError *NONNULL_PTR arg) {
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       ChannelInfo_set_features(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBolt12ParseError arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Bolt12ParseError_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt12ParseError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBolt12ParseError orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBolt12ParseError ret_var = Bolt12ParseError_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBolt12SemanticError* orig_conv = (LDKBolt12SemanticError*)untag_ptr(orig);
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_clone(orig_conv));
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1already_1expired(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_already_expired());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1chain(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_chain());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1chain(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_chain());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeId val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeId_clone(&val_conv);
-       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_amount());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_amount());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelUpdateInfo val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelUpdateInfo_clone(&val_conv);
-       ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1insufficient_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_insufficient_amount());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1amount(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_amount());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unsupported_1currency(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unsupported_currency());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unknown_1required_1features(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unknown_required_features());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKChannelAnnouncement val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelAnnouncement_clone(&val_conv);
-       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1features(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_features());
+       return ret_conv;
 }
 
-static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
-       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1description(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_description());
+       return ret_conv;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKChannelInfo arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signing_1pubkey(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signing_pubkey());
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKChannelInfo orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1signing_1pubkey(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_signing_pubkey());
+       return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKChannelInfo a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKChannelInfo b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1signing_1pubkey(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_signing_pubkey());
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1directional_1info(JNIEnv *env, jclass clz, int64_t this_arg, int8_t channel_flags) {
-       LDKChannelInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1quantity(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_quantity());
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKChannelInfo obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_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 jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1quantity(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_quantity());
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
-       *ret_conv = ChannelInfo_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1quantity(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_quantity());
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDirectedChannelInfo this_obj_conv;
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1metadata(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_metadata());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1unexpected_1metadata(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_unexpected_metadata());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1metadata(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_metadata());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payer_1id(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payer_id());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1paths(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_paths());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1invalid_1pay_1info(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_invalid_pay_info());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1creation_1time(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_creation_time());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1payment_1hash(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_payment_hash());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Bolt12SemanticError_1missing_1signature(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKBolt12SemanticError_to_java(env, Bolt12SemanticError_missing_signature());
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Refund_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRefund this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DirectedChannelInfo_free(this_obj_conv);
+       Refund_free(this_obj_conv);
 }
 
-static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+static inline uint64_t Refund_clone_ptr(LDKRefund *NONNULL_PTR arg) {
+       LDKRefund ret_var = Refund_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKDirectedChannelInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRefund arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = Refund_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKDirectedChannelInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRefund orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
+       LDKRefund ret_var = Refund_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1channel(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1description(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
+       LDKPrintableString ret_var = Refund_description(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1absolute_1expiry(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = DirectedChannelInfo_htlc_maximum_msat(&this_arg_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_absolute_expiry(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Refund_1is_1expired(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       jboolean ret_conv = Refund_is_expired(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDirectedChannelInfo this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1issuer(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKPrintableString ret_var = Refund_issuer(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EffectiveCapacity_free(this_ptr_conv);
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1paths(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_BlindedPathZ ret_var = Refund_paths(&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 n = 0; n < ret_var.datalen; n++) {
+               LDKBlindedPath ret_conv_13_var = ret_var.data[n];
+               int64_t ret_conv_13_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_13_var);
+               ret_conv_13_ref = tag_ptr(ret_conv_13_var.inner, ret_conv_13_var.is_owned);
+               ret_arr_ptr[n] = ret_conv_13_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
 }
 
-static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1metadata(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = Refund_payer_metadata(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
-       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1chain(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, Refund_chain(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1amount_1msats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Refund_amount_msats(&this_arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKInvoiceRequestFeatures ret_var = Refund_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1exact_1liquidity(JNIEnv *env, jclass clz, int64_t liquidity_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1quantity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = Refund_quantity(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1advertised_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1id(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Refund_payer_id(&this_arg_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1note(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRefund this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPrintableString ret_var = Refund_payer_note(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1total(JNIEnv *env, jclass clz, int64_t capacity_msat, int64_t htlc_maximum_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Refund_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRefund obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Refund_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Refund_1from_1str(JNIEnv *env, jclass clz, jstring s) {
+       LDKStr s_conv = java_to_owned_str(env, s);
+       LDKCResult_RefundBolt12ParseErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RefundBolt12ParseErrorZ), "LDKCResult_RefundBolt12ParseErrorZ");
+       *ret_conv = Refund_from_str(s_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKUtxoLookupError* orig_conv = (LDKUtxoLookupError*)untag_ptr(orig);
+       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_clone(orig_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1chain(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_chain());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_UtxoLookupError_1unknown_1tx(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKUtxoLookupError_to_java(env, UtxoLookupError_unknown_tx());
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoResult_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoResult this_ptr_conv = *(LDKUtxoResult*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoResult_free(this_ptr_conv);
+}
+
+static inline uint64_t UtxoResult_clone_ptr(LDKUtxoResult *NONNULL_PTR arg) {
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(arg);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUtxoResult* arg_conv = (LDKUtxoResult*)untag_ptr(arg);
+       int64_t ret_conv = UtxoResult_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1infinite(JNIEnv *env, jclass clz) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_infinite();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKUtxoResult* orig_conv = (LDKUtxoResult*)untag_ptr(orig);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_clone(orig_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1hint_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1sync(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ a_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(a_ptr);
+       a_conv = CResult_TxOutUtxoLookupErrorZ_clone((LDKCResult_TxOutUtxoLookupErrorZ*)untag_ptr(a));
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_sync(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1unknown(JNIEnv *env, jclass clz) {
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = EffectiveCapacity_unknown();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoResult_1async(JNIEnv *env, jclass clz, int64_t a) {
+       LDKUtxoFuture a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = UtxoFuture_clone(&a_conv);
+       LDKUtxoResult *ret_copy = MALLOC(sizeof(LDKUtxoResult), "LDKUtxoResult");
+       *ret_copy = UtxoResult_async(a_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1as_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
-       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoLookup_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKUtxoLookup this_ptr_conv = *(LDKUtxoLookup*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       UtxoLookup_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRoutingFees this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKUtxoFuture this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RoutingFees_free(this_obj_conv);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
-       return ret_conv;
+       UtxoFuture_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RoutingFees_set_base_msat(&this_ptr_conv, val);
+static inline uint64_t UtxoFuture_clone_ptr(LDKUtxoFuture *NONNULL_PTR arg) {
+       LDKUtxoFuture ret_var = UtxoFuture_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUtxoFuture arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = UtxoFuture_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKRoutingFees this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKUtxoFuture orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKUtxoFuture ret_var = UtxoFuture_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new(JNIEnv *env, jclass clz, int32_t base_msat_arg, int32_t proportional_millionths_arg) {
-       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1new(JNIEnv *env, jclass clz) {
+       LDKUtxoFuture ret_var = UtxoFuture_new();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRoutingFees a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoutingFees b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1resolve_1without_1forwarding(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       UtxoFuture_resolve_without_forwarding(&this_arg_conv, &graph_conv, result_conv);
 }
 
-static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
-       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UtxoFuture_1resolve(JNIEnv *env, jclass clz, int64_t this_arg, int64_t graph, int64_t gossip, int64_t result) {
+       LDKUtxoFuture this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNetworkGraph graph_conv;
+       graph_conv.inner = untag_ptr(graph);
+       graph_conv.is_owned = ptr_is_owned(graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(graph_conv);
+       graph_conv.is_owned = false;
+       LDKP2PGossipSync gossip_conv;
+       gossip_conv.inner = untag_ptr(gossip);
+       gossip_conv.is_owned = ptr_is_owned(gossip);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(gossip_conv);
+       gossip_conv.is_owned = false;
+       void* result_ptr = untag_ptr(result);
+       CHECK_ACCESS(result_ptr);
+       LDKCResult_TxOutUtxoLookupErrorZ result_conv = *(LDKCResult_TxOutUtxoLookupErrorZ*)(result_ptr);
+       UtxoFuture_resolve(&this_arg_conv, &graph_conv, &gossip_conv, result_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeId this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       NodeId_free(this_obj_conv);
+}
+
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRoutingFees arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeId arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeId_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRoutingFees orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeId orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
+       LDKNodeId ret_var = NodeId_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRoutingFees o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1from_1pubkey(JNIEnv *env, jclass clz, int8_tArray pubkey) {
+       LDKPublicKey pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
+       LDKNodeId ret_var = NodeId_from_pubkey(pubkey_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1slice(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeId this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1pubkey(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeId this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCResult_PublicKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeySecp256k1ErrorZ), "LDKCResult_PublicKeySecp256k1ErrorZ");
+       *ret_conv = NodeId_as_pubkey(&this_arg_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKNodeId o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RoutingFees_hash(&o_conv);
+       int64_t ret_conv = NodeId_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRoutingFees obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeId obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeId_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
-       *ret_conv = RoutingFees_read(ser_ref);
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = NodeId_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeAnnouncementInfo this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNetworkGraph this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAnnouncementInfo_free(this_obj_conv);
+       NetworkGraph_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKReadOnlyNetworkGraph this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKNodeFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeFeatures_clone(&val_conv);
-       NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNetworkUpdate this_ptr_conv = *(LDKNetworkUpdate*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NetworkUpdate_free(this_ptr_conv);
 }
 
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
-       return ret_conv;
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)untag_ptr(arg);
+       int64_t ret_conv = NetworkUpdate_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv));
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)untag_ptr(orig);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThreeBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 3);
-       (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
-       NodeAnnouncementInfo_set_rgb(&this_ptr_conv, val_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1update_1message(JNIEnv *env, jclass clz, int64_t msg) {
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv = ChannelUpdate_clone(&msg_conv);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1alias(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1failure(JNIEnv *env, jclass clz, int64_t short_channel_id, jboolean is_permanent) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_channel_failure(short_channel_id, is_permanent);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1node_1failure(JNIEnv *env, jclass clz, int8_tArray node_id, jboolean is_permanent) {
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_node_failure(node_id_ref, is_permanent);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNetworkUpdate* a_conv = (LDKNetworkUpdate*)untag_ptr(a);
+       LDKNetworkUpdate* b_conv = (LDKNetworkUpdate*)untag_ptr(b);
+       jboolean ret_conv = NetworkUpdate_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNetworkUpdate* obj_conv = (LDKNetworkUpdate*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = NetworkUpdate_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKP2PGossipSync this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       P2PGossipSync_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t utxo_lookup, int64_t logger) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKP2PGossipSync ret_var = P2PGossipSync_new(&network_graph_conv, utxo_lookup_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1add_1utxo_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t utxo_lookup) {
+       LDKP2PGossipSync this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       P2PGossipSync_add_utxo_lookup(&this_arg_conv, utxo_lookup_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1handle_1network_1update(JNIEnv *env, jclass clz, int64_t this_arg, int64_t network_update) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNetworkUpdate* network_update_conv = (LDKNetworkUpdate*)untag_ptr(network_update);
+       NetworkGraph_handle_network_update(&this_arg_conv, network_update_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1genesis_1hash(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, NetworkGraph_get_genesis_hash(&this_arg_conv).data);
+       return ret_arr;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1node_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_node_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_verify_1channel_1announcement(JNIEnv *env, jclass clz, int64_t msg) {
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = verify_channel_announcement(&msg_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1RoutingMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
+       *ret_ret = P2PGossipSync_as_RoutingMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_P2PGossipSync_1as_1MessageSendEventsProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKP2PGossipSync this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
+       *ret_ret = P2PGossipSync_as_MessageSendEventsProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKChannelUpdateInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUpdateInfo_free(this_obj_conv);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAnnouncementInfo_get_alias(&this_ptr_conv);
+       int32_t ret_conv = ChannelUpdateInfo_get_last_update(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_last_update(&this_ptr_conv, val);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ChannelUpdateInfo_get_enabled(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1enabled(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_enabled(&this_ptr_conv, val);
+}
+
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = ChannelUpdateInfo_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_minimum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUpdateInfo_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUpdateInfo_set_htlc_maximum_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKRoutingFees ret_var = ChannelUpdateInfo_get_fees(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1alias(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAlias val_conv;
+       LDKRoutingFees val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAlias_clone(&val_conv);
-       NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       ChannelUpdateInfo_set_fees(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1get_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
+       LDKChannelUpdate ret_var = ChannelUpdateInfo_get_last_update_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeAnnouncementInfo this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1set_1last_1update_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUpdateInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncement val_conv;
+       LDKChannelUpdate val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncement_clone(&val_conv);
-       NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
+       val_conv = ChannelUpdate_clone(&val_conv);
+       ChannelUpdateInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(JNIEnv *env, jclass clz, int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_t announcement_message_arg) {
-       LDKNodeFeatures features_arg_conv;
-       features_arg_conv.inner = untag_ptr(features_arg);
-       features_arg_conv.is_owned = ptr_is_owned(features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
-       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
-       LDKThreeBytes rgb_arg_ref;
-       CHECK((*env)->GetArrayLength(env, rgb_arg) == 3);
-       (*env)->GetByteArrayRegion(env, rgb_arg, 0, 3, rgb_arg_ref.data);
-       LDKNodeAlias alias_arg_conv;
-       alias_arg_conv.inner = untag_ptr(alias_arg);
-       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
-       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
-       LDKNodeAnnouncement announcement_message_arg_conv;
-       announcement_message_arg_conv.inner = untag_ptr(announcement_message_arg);
-       announcement_message_arg_conv.is_owned = ptr_is_owned(announcement_message_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
-       announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, announcement_message_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1new(JNIEnv *env, jclass clz, int32_t last_update_arg, jboolean enabled_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg, int64_t fees_arg, int64_t last_update_message_arg) {
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       LDKChannelUpdate last_update_message_arg_conv;
+       last_update_message_arg_conv.inner = untag_ptr(last_update_message_arg);
+       last_update_message_arg_conv.is_owned = ptr_is_owned(last_update_message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
+       last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg_conv, last_update_message_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+static inline uint64_t ChannelUpdateInfo_clone_ptr(LDKChannelUpdateInfo *NONNULL_PTR arg) {
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeAnnouncementInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelUpdateInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelUpdateInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeAnnouncementInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKChannelUpdateInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
+       LDKChannelUpdateInfo ret_var = ChannelUpdateInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNodeAnnouncementInfo a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKChannelUpdateInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeAnnouncementInfo b_conv;
+       LDKChannelUpdateInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeAnnouncementInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = ChannelUpdateInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1addresses(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNodeAnnouncementInfo this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NetAddressZ ret_var = NodeAnnouncementInfo_addresses(&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 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 = tag_ptr(ret_conv_12_copy, true);
-               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 int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeAnnouncementInfo obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKChannelUpdateInfo obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ChannelUpdateInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdateInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
-       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
+       LDKCResult_ChannelUpdateInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateInfoDecodeErrorZ), "LDKCResult_ChannelUpdateInfoDecodeErrorZ");
+       *ret_conv = ChannelUpdateInfo_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeAlias this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKChannelInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeAlias_free(this_obj_conv);
+       ChannelInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeAlias this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *NodeAlias_get_a(&this_ptr_conv));
-       return ret_arr;
+       LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKNodeAlias this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       NodeAlias_set_a(&this_ptr_conv, val_ref);
+       LDKChannelFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       ChannelInfo_set_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1new(JNIEnv *env, jclass clz, int8_tArray a_arg) {
-       LDKThirtyTwoBytes a_arg_ref;
-       CHECK((*env)->GetArrayLength(env, a_arg) == 32);
-       (*env)->GetByteArrayRegion(env, a_arg, 0, 32, a_arg_ref.data);
-       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
-       LDKNodeAlias ret_var = NodeAlias_clone(arg);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeAlias arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeAlias orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAlias_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNodeAlias a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKNodeAlias b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeAlias obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_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_ChannelInfo_1set_1node_1two(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKNodeId val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeId_clone(&val_conv);
+       ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
-       *ret_conv = NodeAlias_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKNodeInfo this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       NodeInfo_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelUpdateInfo val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelUpdateInfo_clone(&val_conv);
+       ChannelInfo_set_two_to_one(&this_ptr_conv, val_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;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       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;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-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;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1capacity_1sats(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       NodeInfo_set_channels(&this_ptr_conv, val_constr);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       ChannelInfo_set_capacity_sats(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKNodeInfo this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
+       LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKNodeInfo this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeAnnouncementInfo val_conv;
+       LDKChannelAnnouncement val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = NodeAnnouncementInfo_clone(&val_conv);
-       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env, jclass clz, int64_tArray channels_arg, int64_t announcement_info_arg) {
-       LDKCVec_u64Z channels_arg_constr;
-       channels_arg_constr.datalen = (*env)->GetArrayLength(env, channels_arg);
-       if (channels_arg_constr.datalen > 0)
-               channels_arg_constr.data = MALLOC(channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               channels_arg_constr.data = NULL;
-       int64_t* channels_arg_vals = (*env)->GetLongArrayElements (env, channels_arg, NULL);
-       for (size_t g = 0; g < channels_arg_constr.datalen; g++) {
-               int64_t channels_arg_conv_6 = channels_arg_vals[g];
-               channels_arg_constr.data[g] = channels_arg_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, channels_arg, channels_arg_vals, 0);
-       LDKNodeAnnouncementInfo announcement_info_arg_conv;
-       announcement_info_arg_conv.inner = untag_ptr(announcement_info_arg);
-       announcement_info_arg_conv.is_owned = ptr_is_owned(announcement_info_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
-       announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
-       LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, announcement_info_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       val_conv = ChannelAnnouncement_clone(&val_conv);
+       ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
 
-static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
-       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKNodeInfo arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
+       int64_t ret_conv = ChannelInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKNodeInfo orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKChannelInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
+       LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKNodeInfo a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKChannelInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKNodeInfo b_conv;
+       LDKChannelInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
+       jboolean ret_conv = ChannelInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNodeInfo obj_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1directional_1info(JNIEnv *env, jclass clz, int64_t this_arg, int8_t channel_flags) {
+       LDKChannelInfo this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelUpdateInfo ret_var = ChannelInfo_get_directional_info(&this_arg_conv, channel_flags);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKChannelInfo obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
-       *ret_conv = NodeInfo_read(ser_ref);
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = ChannelInfo_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKNetworkGraph obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_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_DirectedChannelInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDirectedChannelInfo this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DirectedChannelInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
-       if (arg_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_conv);
-       }
-       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
-       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t DirectedChannelInfo_clone_ptr(LDKDirectedChannelInfo *NONNULL_PTR arg) {
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDirectedChannelInfo arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = DirectedChannelInfo_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1new(JNIEnv *env, jclass clz, jclass network, int64_t logger) {
-       LDKNetwork network_conv = LDKNetwork_from_java(env, network);
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKDirectedChannelInfo orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKDirectedChannelInfo ret_var = DirectedChannelInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read_1only(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1channel(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
+       LDKChannelInfo ret_var = DirectedChannelInfo_channel(&this_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int64_t ret_conv = DirectedChannelInfo_htlc_maximum_msat(&this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1set_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
-       LDKNetworkGraph this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelInfo_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDirectedChannelInfo this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = DirectedChannelInfo_effective_capacity(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEffectiveCapacity this_ptr_conv = *(LDKEffectiveCapacity*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EffectiveCapacity_free(this_ptr_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedNodeAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t EffectiveCapacity_clone_ptr(LDKEffectiveCapacity *NONNULL_PTR arg) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKEffectiveCapacity* arg_conv = (LDKEffectiveCapacity*)untag_ptr(arg);
+       int64_t ret_conv = EffectiveCapacity_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKEffectiveCapacity* orig_conv = (LDKEffectiveCapacity*)untag_ptr(orig);
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement_1no_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1exact_1liquidity(JNIEnv *env, jclass clz, int64_t liquidity_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_exact_liquidity(liquidity_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedChannelAnnouncement msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
-       CHECK_ACCESS(utxo_lookup_ptr);
-       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
-       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
-       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
-               // Manually implement clone for Java trait instances
-               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
-                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
-               }
-       }
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1advertised_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_advertised_max_htlc(amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1add_1channel_1from_1partial_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = ChannelFeatures_clone(&features_conv);
-       LDKPublicKey node_id_1_ref;
-       CHECK((*env)->GetArrayLength(env, node_id_1) == 33);
-       (*env)->GetByteArrayRegion(env, node_id_1, 0, 33, node_id_1_ref.compressed_form);
-       LDKPublicKey node_id_2_ref;
-       CHECK((*env)->GetArrayLength(env, node_id_2) == 33);
-       (*env)->GetByteArrayRegion(env, node_id_2, 0, 33, node_id_2_ref.compressed_form);
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1total(JNIEnv *env, jclass clz, int64_t capacity_msat, int64_t htlc_maximum_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_total(capacity_msat, htlc_maximum_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1channel_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1infinite(JNIEnv *env, jclass clz) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_infinite();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1node_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray node_id) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPublicKey node_id_ref;
-       CHECK((*env)->GetArrayLength(env, node_id) == 33);
-       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1hint_1max_1htlc(JNIEnv *env, jclass clz, int64_t amount_msat) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_hint_max_htlc(amount_msat);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1unknown(JNIEnv *env, jclass clz) {
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = EffectiveCapacity_unknown();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking_1with_1time(JNIEnv *env, jclass clz, int64_t this_arg, int64_t current_time_unix) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_EffectiveCapacity_1as_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKEffectiveCapacity* this_arg_conv = (LDKEffectiveCapacity*)untag_ptr(this_arg);
+       int64_t ret_conv = EffectiveCapacity_as_msat(this_arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRoutingFees this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RoutingFees_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1unsigned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
-       LDKNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKUnsignedChannelUpdate msg_conv;
-       msg_conv.inner = untag_ptr(msg);
-       msg_conv.is_owned = ptr_is_owned(msg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv.is_owned = false;
-       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
-       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
-       LDKReadOnlyNetworkGraph this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       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_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
-               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
-               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 = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPublicKey pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
-       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
-       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDefaultRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultRouter_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes, int64_t scorer, int64_t score_params) {
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKThirtyTwoBytes random_seed_bytes_ref;
-       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
-       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_ref.data);
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
-       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLockableScore_JCalls_cloned(&scorer_conv);
-       }
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
-       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, random_seed_bytes_ref, scorer_conv, score_params_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = RoutingFees_get_base_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1as_1Router(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDefaultRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
-       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Router_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Router_free(this_ptr_conv);
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = RoutingFees_get_proportional_millionths(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRoutingFees this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1new(JNIEnv *env, jclass clz, int64_t scorer, int64_t inflight_htlcs) {
-       void* scorer_ptr = untag_ptr(scorer);
-       CHECK_ACCESS(scorer_ptr);
-       LDKScore scorer_conv = *(LDKScore*)(scorer_ptr);
-       if (scorer_conv.free == LDKScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&scorer_conv);
-       }
-       LDKInFlightHtlcs inflight_htlcs_conv;
-       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
-       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
-       inflight_htlcs_conv.is_owned = false;
-       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new(JNIEnv *env, jclass clz, int32_t base_msat_arg, int32_t proportional_millionths_arg) {
+       LDKRoutingFees ret_var = RoutingFees_new(base_msat_arg, proportional_millionths_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKScorerAccountingForInFlightHtlcs obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ScorerAccountingForInFlightHtlcs_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = ScorerAccountingForInFlightHtlcs_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInFlightHtlcs this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InFlightHtlcs_free(this_obj_conv);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRoutingFees a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRoutingFees b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RoutingFees_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInFlightHtlcs arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoutingFees arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
+       int64_t ret_conv = RoutingFees_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInFlightHtlcs orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRoutingFees orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1new(JNIEnv *env, jclass clz) {
-       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
+       LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1process_1path(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKPath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv.is_owned = false;
-       LDKPublicKey payer_node_id_ref;
-       CHECK((*env)->GetArrayLength(env, payer_node_id) == 33);
-       (*env)->GetByteArrayRegion(env, payer_node_id, 0, 33, payer_node_id_ref.compressed_form);
-       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1add_1inflight_1htlc(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1used_1liquidity_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
-       LDKInFlightHtlcs this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId source_conv;
-       source_conv.inner = untag_ptr(source);
-       source_conv.is_owned = ptr_is_owned(source);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
-       source_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRoutingFees o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RoutingFees_hash(&o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInFlightHtlcs obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRoutingFees obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RoutingFees_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
-       *ret_conv = InFlightHtlcs_read(ser_ref);
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = RoutingFees_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteHop this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeAnnouncementInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHop_free(this_obj_conv);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHop_get_pubkey(&this_ptr_conv).compressed_form);
-       return ret_arr;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKRouteHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
+       NodeAnnouncementInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
+       LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -59373,2735 +62231,2772 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
-       RouteHop_set_node_features(&this_ptr_conv, val_conv);
+       NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
+       int32_t ret_conv = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1last_1update(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_short_channel_id(&this_ptr_conv, val);
+       NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv));
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1rgb(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKChannelFeatures val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = ChannelFeatures_clone(&val_conv);
-       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
+       LDKThreeBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 3);
+       (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
+       NodeAnnouncementInfo_set_rgb(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1alias(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeAlias ret_var = NodeAnnouncementInfo_get_alias(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1alias(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_fee_msat(&this_ptr_conv, val);
+       LDKNodeAlias val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeAlias_clone(&val_conv);
+       NodeAnnouncementInfo_set_alias(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
+       LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKRouteHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1announcement_1message(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+       LDKNodeAnnouncement val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeAnnouncement_clone(&val_conv);
+       NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env, jclass clz, int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg) {
-       LDKPublicKey pubkey_arg_ref;
-       CHECK((*env)->GetArrayLength(env, pubkey_arg) == 33);
-       (*env)->GetByteArrayRegion(env, pubkey_arg, 0, 33, pubkey_arg_ref.compressed_form);
-       LDKNodeFeatures node_features_arg_conv;
-       node_features_arg_conv.inner = untag_ptr(node_features_arg);
-       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
-       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
-       LDKChannelFeatures channel_features_arg_conv;
-       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
-       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
-       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
-       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(JNIEnv *env, jclass clz, int64_t features_arg, int32_t last_update_arg, int8_tArray rgb_arg, int64_t alias_arg, int64_t announcement_message_arg) {
+       LDKNodeFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = NodeFeatures_clone(&features_arg_conv);
+       LDKThreeBytes rgb_arg_ref;
+       CHECK((*env)->GetArrayLength(env, rgb_arg) == 3);
+       (*env)->GetByteArrayRegion(env, rgb_arg, 0, 3, rgb_arg_ref.data);
+       LDKNodeAlias alias_arg_conv;
+       alias_arg_conv.inner = untag_ptr(alias_arg);
+       alias_arg_conv.is_owned = ptr_is_owned(alias_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(alias_arg_conv);
+       alias_arg_conv = NodeAlias_clone(&alias_arg_conv);
+       LDKNodeAnnouncement announcement_message_arg_conv;
+       announcement_message_arg_conv.inner = untag_ptr(announcement_message_arg);
+       announcement_message_arg_conv.is_owned = ptr_is_owned(announcement_message_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
+       announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_conv, announcement_message_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
-       LDKRouteHop ret_var = RouteHop_clone(arg);
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteHop arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAnnouncementInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAnnouncementInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteHop orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeAnnouncementInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRouteHop o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = RouteHop_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteHop a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNodeAnnouncementInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHop b_conv;
+       LDKNodeAnnouncementInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeAnnouncementInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteHop obj_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1addresses(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNodeAnnouncementInfo this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SocketAddressZ ret_var = NodeAnnouncementInfo_addresses(&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 p = 0; p < ret_var.datalen; p++) {
+               LDKSocketAddress *ret_conv_15_copy = MALLOC(sizeof(LDKSocketAddress), "LDKSocketAddress");
+               *ret_conv_15_copy = ret_var.data[p];
+               int64_t ret_conv_15_ref = tag_ptr(ret_conv_15_copy, true);
+               ret_arr_ptr[p] = ret_conv_15_ref;
+       }
+       (*env)->ReleasePrimitiveArrayCritical(env, ret_arr, ret_arr_ptr, 0);
+       FREE(ret_var.data);
+       return ret_arr;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeAnnouncementInfo obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
-       *ret_conv = RouteHop_read(ser_ref);
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = NodeAnnouncementInfo_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedTail this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeAlias this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedTail_free(this_obj_conv);
-}
-
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&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++) {
-               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
-               int64_t ret_conv_12_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
-               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
-               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_BlindedTail_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_BlindedHopZ val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t m = 0; m < val_constr.datalen; m++) {
-               int64_t val_conv_12 = val_vals[m];
-               LDKBlindedHop val_conv_12_conv;
-               val_conv_12_conv.inner = untag_ptr(val_conv_12);
-               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
-               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
-               val_constr.data[m] = val_conv_12_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       BlindedTail_set_hops(&this_ptr_conv, val_constr);
+       NodeAlias_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form);
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *NodeAlias_get_a(&this_ptr_conv));
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
-}
-
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKBlindedTail this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKBlindedTail this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAlias_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKNodeAlias this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       NodeAlias_set_a(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
-       LDKCVec_BlindedHopZ hops_arg_constr;
-       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
-       else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
-       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
-               int64_t hops_arg_conv_12 = hops_arg_vals[m];
-               LDKBlindedHop hops_arg_conv_12_conv;
-               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
-               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
-               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
-               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
-       LDKPublicKey blinding_point_arg_ref;
-       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
-       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
-       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1new(JNIEnv *env, jclass clz, int8_tArray a_arg) {
+       LDKThirtyTwoBytes a_arg_ref;
+       CHECK((*env)->GetArrayLength(env, a_arg) == 32);
+       (*env)->GetByteArrayRegion(env, a_arg, 0, 32, a_arg_ref.data);
+       LDKNodeAlias ret_var = NodeAlias_new(a_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
-       LDKBlindedTail ret_var = BlindedTail_clone(arg);
+static inline uint64_t NodeAlias_clone_ptr(LDKNodeAlias *NONNULL_PTR arg) {
+       LDKNodeAlias ret_var = NodeAlias_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedTail arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAlias arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeAlias_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedTail orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeAlias orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
+       LDKNodeAlias ret_var = NodeAlias_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedTail o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedTail_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedTail_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedTail a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeAlias_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNodeAlias a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKBlindedTail b_conv;
+       LDKNodeAlias b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeAlias_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedTail obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAlias_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeAlias obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_conv);
+       LDKCVec_u8Z ret_var = NodeAlias_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAlias_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
-       *ret_conv = BlindedTail_read(ser_ref);
+       LDKCResult_NodeAliasDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAliasDecodeErrorZ), "LDKCResult_NodeAliasDecodeErrorZ");
+       *ret_conv = NodeAlias_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKPath this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Path_free(this_obj_conv);
+       NodeInfo_free(this_obj_conv);
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Path_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPath this_ptr_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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ ret_var = Path_get_hops(&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 k = 0; k < ret_var.datalen; k++) {
-               LDKRouteHop ret_conv_10_var = ret_var.data[k];
-               int64_t ret_conv_10_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
-               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
-               ret_arr_ptr[k] = ret_conv_10_ref;
+       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_Path_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKPath this_ptr_conv;
+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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHopZ val_constr;
+       LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
        else
                val_constr.data = NULL;
        int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t k = 0; k < val_constr.datalen; k++) {
-               int64_t val_conv_10 = val_vals[k];
-               LDKRouteHop val_conv_10_conv;
-               val_conv_10_conv.inner = untag_ptr(val_conv_10);
-               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
-               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
-               val_constr.data[k] = val_conv_10_conv;
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
        }
        (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       Path_set_hops(&this_ptr_conv, val_constr);
+       NodeInfo_set_channels(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1get_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPath this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+       LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1set_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKPath this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1info(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKBlindedTail val_conv;
+       LDKNodeAnnouncementInfo val_conv;
        val_conv.inner = untag_ptr(val);
        val_conv.is_owned = ptr_is_owned(val);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = BlindedTail_clone(&val_conv);
-       Path_set_blinded_tail(&this_ptr_conv, val_conv);
+       val_conv = NodeAnnouncementInfo_clone(&val_conv);
+       NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int64_t blinded_tail_arg) {
-       LDKCVec_RouteHopZ hops_arg_constr;
-       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
-       if (hops_arg_constr.datalen > 0)
-               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env, jclass clz, int64_tArray channels_arg, int64_t announcement_info_arg) {
+       LDKCVec_u64Z channels_arg_constr;
+       channels_arg_constr.datalen = (*env)->GetArrayLength(env, channels_arg);
+       if (channels_arg_constr.datalen > 0)
+               channels_arg_constr.data = MALLOC(channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
        else
-               hops_arg_constr.data = NULL;
-       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
-       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
-               int64_t hops_arg_conv_10 = hops_arg_vals[k];
-               LDKRouteHop hops_arg_conv_10_conv;
-               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
-               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
-               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
-               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+               channels_arg_constr.data = NULL;
+       int64_t* channels_arg_vals = (*env)->GetLongArrayElements (env, channels_arg, NULL);
+       for (size_t g = 0; g < channels_arg_constr.datalen; g++) {
+               int64_t channels_arg_conv_6 = channels_arg_vals[g];
+               channels_arg_constr.data[g] = channels_arg_conv_6;
        }
-       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
-       LDKBlindedTail blinded_tail_arg_conv;
-       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
-       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
-       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
-       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
+       (*env)->ReleaseLongArrayElements(env, channels_arg, channels_arg_vals, 0);
+       LDKNodeAnnouncementInfo announcement_info_arg_conv;
+       announcement_info_arg_conv.inner = untag_ptr(announcement_info_arg);
+       announcement_info_arg_conv.is_owned = ptr_is_owned(announcement_info_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
+       announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
+       LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, announcement_info_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
-       LDKPath ret_var = Path_clone(arg);
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKPath arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeInfo arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = Path_clone_ptr(&arg_conv);
+       int64_t ret_conv = NodeInfo_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKPath orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKNodeInfo orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPath ret_var = Path_clone(&orig_conv);
+       LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Path_hash(&o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Path_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKPath a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeInfo_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKNodeInfo a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKPath b_conv;
+       LDKNodeInfo b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
+       jboolean ret_conv = NodeInfo_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPath this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNodeInfo obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NodeInfo_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPath this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = NodeInfo_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKNetworkGraph obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKLogger arg_conv = *(LDKLogger*)(arg_ptr);
+       if (arg_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = NetworkGraph_read(ser_ref, arg_conv);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1new(JNIEnv *env, jclass clz, jclass network, int64_t logger) {
+       LDKNetwork network_conv = LDKNetwork_from_java(env, network);
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKNetworkGraph ret_var = NetworkGraph_new(network_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read_1only(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
-       return ret_conv;
+       LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPath this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1get_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
-       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       *ret_copy = NetworkGraph_get_last_rapid_gossip_sync_timestamp(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRoute this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       Route_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1set_1last_1rapid_1gossip_1sync_1timestamp(JNIEnv *env, jclass clz, int64_t this_arg, int32_t last_rapid_gossip_sync_timestamp) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_set_last_rapid_gossip_sync_timestamp(&this_arg_conv, last_rapid_gossip_sync_timestamp);
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ ret_var = Route_get_paths(&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++) {
-               LDKPath ret_conv_6_var = ret_var.data[g];
-               int64_t ret_conv_6_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
-               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
-               ret_arr_ptr[g] = ret_conv_6_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_NetworkGraph_1update_1node_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKCVec_PathZ val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               LDKPath val_conv_6_conv;
-               val_conv_6_conv.inner = untag_ptr(val_conv_6);
-               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
-               val_conv_6_conv = Path_clone(&val_conv_6_conv);
-               val_constr.data[g] = val_conv_6_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       Route_set_paths(&this_ptr_conv, val_constr);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKUnsignedNodeAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters ret_var = Route_get_payment_params(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
+       }
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRoute this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentParameters_clone(&val_conv);
-       Route_set_payment_params(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1announcement_1no_1lookup(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_announcement_no_lookup(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jclass clz, int64_tArray paths_arg, int64_t payment_params_arg) {
-       LDKCVec_PathZ paths_arg_constr;
-       paths_arg_constr.datalen = (*env)->GetArrayLength(env, paths_arg);
-       if (paths_arg_constr.datalen > 0)
-               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
-       else
-               paths_arg_constr.data = NULL;
-       int64_t* paths_arg_vals = (*env)->GetLongArrayElements (env, paths_arg, NULL);
-       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
-               int64_t paths_arg_conv_6 = paths_arg_vals[g];
-               LDKPath paths_arg_conv_6_conv;
-               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
-               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
-               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
-               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1from_1unsigned_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg, int64_t utxo_lookup) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKUnsignedChannelAnnouncement msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       void* utxo_lookup_ptr = untag_ptr(utxo_lookup);
+       CHECK_ACCESS(utxo_lookup_ptr);
+       LDKCOption_UtxoLookupZ utxo_lookup_conv = *(LDKCOption_UtxoLookupZ*)(utxo_lookup_ptr);
+       // WARNING: we may need a move here but no clone is available for LDKCOption_UtxoLookupZ
+       if (utxo_lookup_conv.tag == LDKCOption_UtxoLookupZ_Some) {
+               // Manually implement clone for Java trait instances
+               if (utxo_lookup_conv.some.free == LDKUtxoLookup_JCalls_free) {
+                       // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+                       LDKUtxoLookup_JCalls_cloned(&utxo_lookup_conv.some);
+               }
        }
-       (*env)->ReleaseLongArrayElements(env, paths_arg, paths_arg_vals, 0);
-       LDKPaymentParameters payment_params_arg_conv;
-       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
-       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
-       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
-       LDKRoute ret_var = Route_new(paths_arg_constr, payment_params_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_from_unsigned_announcement(&this_arg_conv, &msg_conv, utxo_lookup_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
-       LDKRoute ret_var = Route_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1add_1channel_1from_1partial_1announcement(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id, int64_t timestamp, int64_t features, int8_tArray node_id_1, int8_tArray node_id_2) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = ChannelFeatures_clone(&features_conv);
+       LDKPublicKey node_id_1_ref;
+       CHECK((*env)->GetArrayLength(env, node_id_1) == 33);
+       (*env)->GetByteArrayRegion(env, node_id_1, 0, 33, node_id_1_ref.compressed_form);
+       LDKPublicKey node_id_2_ref;
+       CHECK((*env)->GetArrayLength(env, node_id_2) == 33);
+       (*env)->GetByteArrayRegion(env, node_id_2, 0, 33, node_id_2_ref.compressed_form);
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_add_channel_from_partial_announcement(&this_arg_conv, short_channel_id, timestamp, features_conv, node_id_1_ref, node_id_2_ref);
+       return tag_ptr(ret_conv, true);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRoute arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = Route_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1channel_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_channel_failed_permanent(&this_arg_conv, short_channel_id);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRoute orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKRoute ret_var = Route_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1node_1failed_1permanent(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray node_id) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       NetworkGraph_node_failed_permanent(&this_arg_conv, node_id_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRoute o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = Route_hash(&o_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_remove_stale_channels_and_tracking(&this_arg_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Route_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRoute a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRoute b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1remove_1stale_1channels_1and_1tracking_1with_1time(JNIEnv *env, jclass clz, int64_t this_arg, int64_t current_time_unix) {
+       LDKNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       NetworkGraph_remove_stale_channels_and_tracking_with_time(&this_arg_conv, current_time_unix);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1fees(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRoute this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
-       return ret_conv;
+       LDKChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKRoute this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1channel_1unsigned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t msg) {
+       LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
-       return ret_conv;
+       LDKUnsignedChannelUpdate msg_conv;
+       msg_conv.inner = untag_ptr(msg);
+       msg_conv.is_owned = ptr_is_owned(msg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
+       msg_conv.is_owned = false;
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRoute obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = Route_write(&obj_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);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1channel(JNIEnv *env, jclass clz, int64_t this_arg, int64_t short_channel_id) {
+       LDKReadOnlyNetworkGraph this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelInfo ret_var = ReadOnlyNetworkGraph_channel(&this_arg_conv, short_channel_id);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       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_Route_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
-       *ret_conv = Route_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       LDKNodeInfo ret_var = ReadOnlyNetworkGraph_node(&this_arg_conv, &node_id_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteParameters this_obj_conv;
+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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       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_INNER_FIELD_ACCESS_OR_NULL(ret_conv_8_var);
+               ret_conv_8_ref = tag_ptr(ret_conv_8_var.inner, ret_conv_8_var.is_owned);
+               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 = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPublicKey pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
+       LDKCOption_CVec_SocketAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_SocketAddressZZ), "LDKCOption_CVec_SocketAddressZZ");
+       *ret_copy = ReadOnlyNetworkGraph_get_addresses(&this_arg_conv, pubkey_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDefaultRouter this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteParameters_free(this_obj_conv);
+       DefaultRouter_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *env, jclass clz, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes, int64_t scorer, int64_t score_params) {
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKThirtyTwoBytes random_seed_bytes_ref;
+       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
+       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_ref.data);
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKLockableScore scorer_conv = *(LDKLockableScore*)(scorer_ptr);
+       if (scorer_conv.free == LDKLockableScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLockableScore_JCalls_cloned(&scorer_conv);
+       }
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv = ProbabilisticScoringFeeParameters_clone(&score_params_conv);
+       LDKDefaultRouter ret_var = DefaultRouter_new(&network_graph_conv, logger_conv, random_seed_bytes_ref, scorer_conv, score_params_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKPaymentParameters val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = PaymentParameters_clone(&val_conv);
-       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1as_1Router(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDefaultRouter this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
+       *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Router_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKRouter this_ptr_conv = *(LDKRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Router_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKScorerAccountingForInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ScorerAccountingForInFlightHtlcs_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv *env, jclass clz, int64_t payment_params_arg, int64_t final_value_msat_arg) {
-       LDKPaymentParameters payment_params_arg_conv;
-       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
-       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
-       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
-       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1new(JNIEnv *env, jclass clz, int64_t scorer, int64_t inflight_htlcs) {
+       void* scorer_ptr = untag_ptr(scorer);
+       CHECK_ACCESS(scorer_ptr);
+       LDKScoreLookUp scorer_conv = *(LDKScoreLookUp*)(scorer_ptr);
+       if (scorer_conv.free == LDKScoreLookUp_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScoreLookUp_JCalls_cloned(&scorer_conv);
+       }
+       LDKInFlightHtlcs inflight_htlcs_conv;
+       inflight_htlcs_conv.inner = untag_ptr(inflight_htlcs);
+       inflight_htlcs_conv.is_owned = ptr_is_owned(inflight_htlcs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(inflight_htlcs_conv);
+       inflight_htlcs_conv.is_owned = false;
+       LDKScorerAccountingForInFlightHtlcs ret_var = ScorerAccountingForInFlightHtlcs_new(scorer_conv, &inflight_htlcs_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
-       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKScorerAccountingForInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ScorerAccountingForInFlightHtlcs_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInFlightHtlcs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InFlightHtlcs_free(this_obj_conv);
+}
+
+static inline uint64_t InFlightHtlcs_clone_ptr(LDKInFlightHtlcs *NONNULL_PTR arg) {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInFlightHtlcs arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = InFlightHtlcs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInFlightHtlcs orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteParameters a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKRouteParameters b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1new(JNIEnv *env, jclass clz) {
+       LDKInFlightHtlcs ret_var = InFlightHtlcs_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteParameters obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1process_1path(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int8_tArray payer_node_id) {
+       LDKInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKPath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv.is_owned = false;
+       LDKPublicKey payer_node_id_ref;
+       CHECK((*env)->GetArrayLength(env, payer_node_id) == 33);
+       (*env)->GetByteArrayRegion(env, payer_node_id, 0, 33, payer_node_id_ref.compressed_form);
+       InFlightHtlcs_process_path(&this_arg_conv, &path_conv, payer_node_id_ref);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1add_1inflight_1htlc(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid, int64_t used_msat) {
+       LDKInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       InFlightHtlcs_add_inflight_htlc(&this_arg_conv, &source_conv, &target_conv, channel_scid, used_msat);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1used_1liquidity_1msat(JNIEnv *env, jclass clz, int64_t this_arg, int64_t source, int64_t target, int64_t channel_scid) {
+       LDKInFlightHtlcs this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeId source_conv;
+       source_conv.inner = untag_ptr(source);
+       source_conv.is_owned = ptr_is_owned(source);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
+       source_conv.is_owned = false;
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = InFlightHtlcs_used_liquidity_msat(&this_arg_conv, &source_conv, &target_conv, channel_scid);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInFlightHtlcs obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
+       LDKCVec_u8Z ret_var = InFlightHtlcs_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InFlightHtlcs_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
-       *ret_conv = RouteParameters_read(ser_ref);
+       LDKCResult_InFlightHtlcsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InFlightHtlcsDecodeErrorZ), "LDKCResult_InFlightHtlcsDecodeErrorZ");
+       *ret_conv = InFlightHtlcs_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKPaymentParameters this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PaymentParameters_free(this_obj_conv);
+       RouteHop_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1payee(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHop_get_pubkey(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1payee(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
-       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
-       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       RouteHop_set_pubkey(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
+       LDKNodeFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = NodeFeatures_clone(&val_conv);
+       RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
+       int64_t ret_conv = RouteHop_get_short_channel_id(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
+       RouteHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
+       LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelFeatures_clone(&val_conv);
+       RouteHop_set_channel_features(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = RouteHop_get_fee_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
+       RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
+       int32_t ret_conv = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
-       LDKPaymentParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
+       RouteHop_set_cltv_expiry_delta(&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;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1maybe_1announced_1channel(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       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;
+       jboolean ret_conv = RouteHop_get_maybe_announced_channel(&this_ptr_conv);
+       return ret_conv;
 }
 
-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;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1maybe_1announced_1channel(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
+       LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_u64Z val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               val_constr.data = NULL;
-       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t g = 0; g < val_constr.datalen; g++) {
-               int64_t val_conv_6 = val_vals[g];
-               val_constr.data[g] = val_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
+       RouteHop_set_maybe_announced_channel(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1new(JNIEnv *env, jclass clz, int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg) {
-       void* payee_arg_ptr = untag_ptr(payee_arg);
-       CHECK_ACCESS(payee_arg_ptr);
-       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
-       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
-       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
-       CHECK_ACCESS(expiry_time_arg_ptr);
-       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
-       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
-       LDKCVec_u64Z previously_failed_channels_arg_constr;
-       previously_failed_channels_arg_constr.datalen = (*env)->GetArrayLength(env, previously_failed_channels_arg);
-       if (previously_failed_channels_arg_constr.datalen > 0)
-               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
-       else
-               previously_failed_channels_arg_constr.data = NULL;
-       int64_t* previously_failed_channels_arg_vals = (*env)->GetLongArrayElements (env, previously_failed_channels_arg, NULL);
-       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
-               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
-               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
-       }
-       (*env)->ReleaseLongArrayElements(env, previously_failed_channels_arg, previously_failed_channels_arg_vals, 0);
-       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env, jclass clz, int8_tArray pubkey_arg, int64_t node_features_arg, int64_t short_channel_id_arg, int64_t channel_features_arg, int64_t fee_msat_arg, int32_t cltv_expiry_delta_arg, jboolean maybe_announced_channel_arg) {
+       LDKPublicKey pubkey_arg_ref;
+       CHECK((*env)->GetArrayLength(env, pubkey_arg) == 33);
+       (*env)->GetByteArrayRegion(env, pubkey_arg, 0, 33, pubkey_arg_ref.compressed_form);
+       LDKNodeFeatures node_features_arg_conv;
+       node_features_arg_conv.inner = untag_ptr(node_features_arg);
+       node_features_arg_conv.is_owned = ptr_is_owned(node_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
+       node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
+       LDKChannelFeatures channel_features_arg_conv;
+       channel_features_arg_conv.inner = untag_ptr(channel_features_arg);
+       channel_features_arg_conv.is_owned = ptr_is_owned(channel_features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
+       channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
+       LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg, maybe_announced_channel_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
-       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKPaymentParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKPaymentParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
+       LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKPaymentParameters o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteHop o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = PaymentParameters_hash(&o_conv);
+       int64_t ret_conv = RouteHop_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKPaymentParameters a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKPaymentParameters b_conv;
+       LDKRouteHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKPaymentParameters obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteHop obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteHop_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser, int32_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
-       *ret_conv = PaymentParameters_read(ser_ref, arg);
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = RouteHop_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1node_1id(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
-       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1for_1keysend(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
-       LDKPublicKey payee_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
-       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1bolt12_1invoice(JNIEnv *env, jclass clz, int64_t invoice) {
-       LDKBolt12Invoice invoice_conv;
-       invoice_conv.inner = untag_ptr(invoice);
-       invoice_conv.is_owned = ptr_is_owned(invoice);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
-       invoice_conv.is_owned = false;
-       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Payee_free(this_ptr_conv);
-}
-
-static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
-       int64_t ret_conv = Payee_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1blinded(JNIEnv *env, jclass clz, int64_tArray route_hints, int64_t features) {
-       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_constr;
-       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_37 = route_hints_vals[l];
-               void* route_hints_conv_37_ptr = untag_ptr(route_hints_conv_37);
-               CHECK_ACCESS(route_hints_conv_37_ptr);
-               LDKC2Tuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(route_hints_conv_37_ptr);
-               route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(route_hints_conv_37));
-               route_hints_constr.data[l] = route_hints_conv_37_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
-       LDKBolt12InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clear(JNIEnv *env, jclass clz, int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
-       LDKPublicKey node_id_ref;
-       CHECK((*env)->GetArrayLength(env, node_id) == 33);
-       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       LDKCVec_RouteHintZ route_hints_constr;
-       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
-       if (route_hints_constr.datalen > 0)
-               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
-       else
-               route_hints_constr.data = NULL;
-       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
-       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
-               int64_t route_hints_conv_11 = route_hints_vals[l];
-               LDKRouteHint route_hints_conv_11_conv;
-               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
-               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
-               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
-               route_hints_constr.data[l] = route_hints_conv_11_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
-       LDKBolt11InvoiceFeatures features_conv;
-       features_conv.inner = untag_ptr(features);
-       features_conv.is_owned = ptr_is_owned(features);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
-       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
-       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
-       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
-       int64_t ret_conv = Payee_hash(o_conv);
-       return ret_conv;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Payee_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
-       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
-       jboolean ret_conv = Payee_eq(a_conv, b_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteHint this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedTail this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHint_free(this_obj_conv);
+       BlindedTail_free(this_obj_conv);
 }
 
-JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHint this_ptr_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
+       LDKCVec_BlindedHopZ ret_var = BlindedTail_get_hops(&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 o = 0; o < ret_var.datalen; o++) {
-               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
-               int64_t ret_conv_14_ref = 0;
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
-               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
-               ret_arr_ptr[o] = ret_conv_14_ref;
+       for (size_t m = 0; m < ret_var.datalen; m++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               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_RouteHint_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
-       LDKRouteHint this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKBlindedTail this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_RouteHintHopZ val_constr;
+       LDKCVec_BlindedHopZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
        else
                val_constr.data = NULL;
        int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
-       for (size_t o = 0; o < val_constr.datalen; o++) {
-               int64_t val_conv_14 = val_vals[o];
-               LDKRouteHintHop val_conv_14_conv;
-               val_conv_14_conv.inner = untag_ptr(val_conv_14);
-               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
-               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
-               val_constr.data[o] = val_conv_14_conv;
+       for (size_t m = 0; m < val_constr.datalen; m++) {
+               int64_t val_conv_12 = val_vals[m];
+               LDKBlindedHop val_conv_12_conv;
+               val_conv_12_conv.inner = untag_ptr(val_conv_12);
+               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
+               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
+               val_constr.data[m] = val_conv_12_conv;
        }
        (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
-       RouteHint_set_a(&this_ptr_conv, val_constr);
+       BlindedTail_set_hops(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env, jclass clz, int64_tArray a_arg) {
-       LDKCVec_RouteHintHopZ a_arg_constr;
-       a_arg_constr.datalen = (*env)->GetArrayLength(env, a_arg);
-       if (a_arg_constr.datalen > 0)
-               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
-       else
-               a_arg_constr.data = NULL;
-       int64_t* a_arg_vals = (*env)->GetLongArrayElements (env, a_arg, NULL);
-       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
-               int64_t a_arg_conv_14 = a_arg_vals[o];
-               LDKRouteHintHop a_arg_conv_14_conv;
-               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
-               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
-               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
-               a_arg_constr.data[o] = a_arg_conv_14_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, a_arg, a_arg_vals, 0);
-       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedTail_get_blinding_point(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedTail_set_blinding_point(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = BlindedTail_get_excess_final_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1excess_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_excess_final_cltv_expiry_delta(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = BlindedTail_get_final_value_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedTail_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKBlindedTail this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       BlindedTail_set_final_value_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int8_tArray blinding_point_arg, int32_t excess_final_cltv_expiry_delta_arg, int64_t final_value_msat_arg) {
+       LDKCVec_BlindedHopZ hops_arg_constr;
+       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
+       for (size_t m = 0; m < hops_arg_constr.datalen; m++) {
+               int64_t hops_arg_conv_12 = hops_arg_vals[m];
+               LDKBlindedHop hops_arg_conv_12_conv;
+               hops_arg_conv_12_conv.inner = untag_ptr(hops_arg_conv_12);
+               hops_arg_conv_12_conv.is_owned = ptr_is_owned(hops_arg_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_12_conv);
+               hops_arg_conv_12_conv = BlindedHop_clone(&hops_arg_conv_12_conv);
+               hops_arg_constr.data[m] = hops_arg_conv_12_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
+       LDKBlindedTail ret_var = BlindedTail_new(hops_arg_constr, blinding_point_arg_ref, excess_final_cltv_expiry_delta_arg, final_value_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
-       LDKRouteHint ret_var = RouteHint_clone(arg);
+static inline uint64_t BlindedTail_clone_ptr(LDKBlindedTail *NONNULL_PTR arg) {
+       LDKBlindedTail ret_var = BlindedTail_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteHint arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedTail arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
+       int64_t ret_conv = BlindedTail_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteHint orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedTail orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
+       LDKBlindedTail ret_var = BlindedTail_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRouteHint o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedTail o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RouteHint_hash(&o_conv);
+       int64_t ret_conv = BlindedTail_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHint_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteHint a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedTail_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedTail a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHint b_conv;
+       LDKBlindedTail b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
+       jboolean ret_conv = BlindedTail_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteHint obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedTail_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedTail obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
+       LDKCVec_u8Z ret_var = BlindedTail_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedTail_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
-       *ret_conv = RouteHint_read(ser_ref);
+       LDKCResult_BlindedTailDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedTailDecodeErrorZ), "LDKCResult_BlindedTailDecodeErrorZ");
+       *ret_conv = BlindedTail_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKRouteHintHop this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPath this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       RouteHintHop_free(this_obj_conv);
+       Path_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Path_1get_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form);
+       LDKCVec_RouteHopZ ret_var = Path_get_hops(&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 k = 0; k < ret_var.datalen; k++) {
+               LDKRouteHop ret_conv_10_var = ret_var.data[k];
+               int64_t ret_conv_10_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
+               ret_conv_10_ref = tag_ptr(ret_conv_10_var.inner, ret_conv_10_var.is_owned);
+               ret_arr_ptr[k] = ret_conv_10_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_RouteHintHop_1set_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1set_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
+       LDKCVec_RouteHopZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t k = 0; k < val_constr.datalen; k++) {
+               int64_t val_conv_10 = val_vals[k];
+               LDKRouteHop val_conv_10_conv;
+               val_conv_10_conv.inner = untag_ptr(val_conv_10);
+               val_conv_10_conv.is_owned = ptr_is_owned(val_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_10_conv);
+               val_conv_10_conv = RouteHop_clone(&val_conv_10_conv);
+               val_constr.data[k] = val_conv_10_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       Path_set_hops(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1get_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
-       return ret_conv;
+       LDKBlindedTail ret_var = Path_get_blinded_tail(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Path_1set_1blinded_1tail(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPath this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
+       LDKBlindedTail val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedTail_clone(&val_conv);
+       Path_set_blinded_tail(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1new(JNIEnv *env, jclass clz, int64_tArray hops_arg, int64_t blinded_tail_arg) {
+       LDKCVec_RouteHopZ hops_arg_constr;
+       hops_arg_constr.datalen = (*env)->GetArrayLength(env, hops_arg);
+       if (hops_arg_constr.datalen > 0)
+               hops_arg_constr.data = MALLOC(hops_arg_constr.datalen * sizeof(LDKRouteHop), "LDKCVec_RouteHopZ Elements");
+       else
+               hops_arg_constr.data = NULL;
+       int64_t* hops_arg_vals = (*env)->GetLongArrayElements (env, hops_arg, NULL);
+       for (size_t k = 0; k < hops_arg_constr.datalen; k++) {
+               int64_t hops_arg_conv_10 = hops_arg_vals[k];
+               LDKRouteHop hops_arg_conv_10_conv;
+               hops_arg_conv_10_conv.inner = untag_ptr(hops_arg_conv_10);
+               hops_arg_conv_10_conv.is_owned = ptr_is_owned(hops_arg_conv_10);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_arg_conv_10_conv);
+               hops_arg_conv_10_conv = RouteHop_clone(&hops_arg_conv_10_conv);
+               hops_arg_constr.data[k] = hops_arg_conv_10_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, hops_arg, hops_arg_vals, 0);
+       LDKBlindedTail blinded_tail_arg_conv;
+       blinded_tail_arg_conv.inner = untag_ptr(blinded_tail_arg);
+       blinded_tail_arg_conv.is_owned = ptr_is_owned(blinded_tail_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_tail_arg_conv);
+       blinded_tail_arg_conv = BlindedTail_clone(&blinded_tail_arg_conv);
+       LDKPath ret_var = Path_new(hops_arg_constr, blinded_tail_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKRoutingFees val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = RoutingFees_clone(&val_conv);
-       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
+static inline uint64_t Path_clone_ptr(LDKPath *NONNULL_PTR arg) {
+       LDKPath ret_var = Path_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPath arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Path_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPath orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPath ret_var = Path_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = Path_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKRouteHintHop this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Path_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Path_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_fee_msat(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Path_final_value_msat(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Path_1final_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPath this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = Path_final_cltv_expiry_delta(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRoute this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Route_free(this_obj_conv);
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       LDKCVec_PathZ ret_var = Route_get_paths(&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++) {
+               LDKPath ret_conv_6_var = ret_var.data[g];
+               int64_t ret_conv_6_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_6_var);
+               ret_conv_6_ref = tag_ptr(ret_conv_6_var.inner, ret_conv_6_var.is_owned);
+               ret_arr_ptr[g] = ret_conv_6_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_RouteHintHop_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
+       LDKCVec_PathZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               LDKPath val_conv_6_conv;
+               val_conv_6_conv.inner = untag_ptr(val_conv_6);
+               val_conv_6_conv.is_owned = ptr_is_owned(val_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_6_conv);
+               val_conv_6_conv = Path_clone(&val_conv_6_conv);
+               val_constr.data[g] = val_conv_6_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       Route_set_paths(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1route_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
-       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+       LDKRouteParameters ret_var = Route_get_route_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKRouteHintHop this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1route_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRoute this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
-       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
-       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
+       LDKRouteParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RouteParameters_clone(&val_conv);
+       Route_set_route_params(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *env, jclass clz, int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
-       LDKPublicKey src_node_id_arg_ref;
-       CHECK((*env)->GetArrayLength(env, src_node_id_arg) == 33);
-       (*env)->GetByteArrayRegion(env, src_node_id_arg, 0, 33, src_node_id_arg_ref.compressed_form);
-       LDKRoutingFees fees_arg_conv;
-       fees_arg_conv.inner = untag_ptr(fees_arg);
-       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
-       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
-       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
-       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
-       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
-       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
-       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
-       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
-       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
-       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jclass clz, int64_tArray paths_arg, int64_t route_params_arg) {
+       LDKCVec_PathZ paths_arg_constr;
+       paths_arg_constr.datalen = (*env)->GetArrayLength(env, paths_arg);
+       if (paths_arg_constr.datalen > 0)
+               paths_arg_constr.data = MALLOC(paths_arg_constr.datalen * sizeof(LDKPath), "LDKCVec_PathZ Elements");
+       else
+               paths_arg_constr.data = NULL;
+       int64_t* paths_arg_vals = (*env)->GetLongArrayElements (env, paths_arg, NULL);
+       for (size_t g = 0; g < paths_arg_constr.datalen; g++) {
+               int64_t paths_arg_conv_6 = paths_arg_vals[g];
+               LDKPath paths_arg_conv_6_conv;
+               paths_arg_conv_6_conv.inner = untag_ptr(paths_arg_conv_6);
+               paths_arg_conv_6_conv.is_owned = ptr_is_owned(paths_arg_conv_6);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_6_conv);
+               paths_arg_conv_6_conv = Path_clone(&paths_arg_conv_6_conv);
+               paths_arg_constr.data[g] = paths_arg_conv_6_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, paths_arg, paths_arg_vals, 0);
+       LDKRouteParameters route_params_arg_conv;
+       route_params_arg_conv.inner = untag_ptr(route_params_arg);
+       route_params_arg_conv.is_owned = ptr_is_owned(route_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_arg_conv);
+       route_params_arg_conv = RouteParameters_clone(&route_params_arg_conv);
+       LDKRoute ret_var = Route_new(paths_arg_constr, route_params_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
-       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKRouteHintHop arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoute arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = Route_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRouteHintHop orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRoute orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
+       LDKRoute ret_var = Route_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKRouteHintHop o_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRoute o_conv;
        o_conv.inner = untag_ptr(o);
        o_conv.is_owned = ptr_is_owned(o);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv.is_owned = false;
-       int64_t ret_conv = RouteHintHop_hash(&o_conv);
+       int64_t ret_conv = Route_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKRouteHintHop a_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Route_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRoute a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKRouteHintHop b_conv;
+       LDKRoute b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
+       jboolean ret_conv = Route_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKRouteHintHop obj_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1fees(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_fees(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1amount(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKRoute this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = Route_get_total_amount(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRoute obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = Route_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
-       *ret_conv = RouteHintHop_read(ser_ref);
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = Route_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       LDKCVec_ChannelDetailsZ first_hops_constr;
-       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
-       if (first_hops != NULL) {
-               first_hops_constr.datalen = (*env)->GetArrayLength(env, first_hops);
-               if (first_hops_constr.datalen > 0)
-                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
-               else
-                       first_hops_constr.data = NULL;
-               int64_t* first_hops_vals = (*env)->GetLongArrayElements (env, first_hops, NULL);
-               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
-                       int64_t first_hops_conv_16 = first_hops_vals[q];
-                       LDKChannelDetails first_hops_conv_16_conv;
-                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
-                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
-                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
-                       first_hops_conv_16_conv.is_owned = false;
-                       first_hops_constr.data[q] = first_hops_conv_16_conv;
-               }
-               (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
-               first_hops_ptr = &first_hops_constr;
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* scorer_ptr = untag_ptr(scorer);
-       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
-       LDKScore* scorer_conv = (LDKScore*)scorer_ptr;
-       LDKProbabilisticScoringFeeParameters score_params_conv;
-       score_params_conv.inner = untag_ptr(score_params);
-       score_params_conv.is_owned = ptr_is_owned(score_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
-       score_params_conv.is_owned = false;
-       uint8_t random_seed_bytes_arr[32];
-       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
-       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
-       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_build_1route_1from_1hops(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, jobjectArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
-       LDKPublicKey our_node_pubkey_ref;
-       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
-       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
-       LDKCVec_PublicKeyZ hops_constr;
-       hops_constr.datalen = (*env)->GetArrayLength(env, hops);
-       if (hops_constr.datalen > 0)
-               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               hops_constr.data = NULL;
-       for (size_t i = 0; i < hops_constr.datalen; i++) {
-               int8_tArray hops_conv_8 = (*env)->GetObjectArrayElement(env, hops, i);
-               LDKPublicKey hops_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, hops_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, hops_conv_8, 0, 33, hops_conv_8_ref.compressed_form);
-               hops_constr.data[i] = hops_conv_8_ref;
-       }
-       LDKRouteParameters route_params_conv;
-       route_params_conv.inner = untag_ptr(route_params);
-       route_params_conv.is_owned = ptr_is_owned(route_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
-       route_params_conv.is_owned = false;
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       uint8_t random_seed_bytes_arr[32];
-       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
-       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
-       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
-       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
-       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Score_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       LockableScore_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableScore_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKMultiThreadedLockableScore this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedLockableScore_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1LockableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
-       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKMultiThreadedLockableScore obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1WriteableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKMultiThreadedLockableScore this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
-       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1new(JNIEnv *env, jclass clz, int64_t score) {
-       void* score_ptr = untag_ptr(score);
-       CHECK_ACCESS(score_ptr);
-       LDKScore score_conv = *(LDKScore*)(score_ptr);
-       if (score_conv.free == LDKScore_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKScore_JCalls_cloned(&score_conv);
-       }
-       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKMultiThreadedScoreLock this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       MultiThreadedScoreLock_free(this_obj_conv);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKMultiThreadedScoreLock obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = MultiThreadedScoreLock_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKMultiThreadedScoreLock this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = MultiThreadedScoreLock_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKChannelUsage this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ChannelUsage_free(this_obj_conv);
+       RouteParameters_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKPaymentParameters ret_var = RouteParameters_get_payment_params(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1payment_1params(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
+       LDKPaymentParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentParameters_clone(&val_conv);
+       RouteParameters_set_payment_params(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
+       int64_t ret_conv = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
+       RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1max_1total_1routing_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
-       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteParameters_get_max_total_routing_fee_msat(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKChannelUsage this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1max_1total_1routing_1fee_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
-       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
-       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteParameters_set_max_total_routing_fee_msat(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1new(JNIEnv *env, jclass clz, int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
-       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
-       CHECK_ACCESS(effective_capacity_arg_ptr);
-       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
-       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
-       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv *env, jclass clz, int64_t payment_params_arg, int64_t final_value_msat_arg, int64_t max_total_routing_fee_msat_arg) {
+       LDKPaymentParameters payment_params_arg_conv;
+       payment_params_arg_conv.inner = untag_ptr(payment_params_arg);
+       payment_params_arg_conv.is_owned = ptr_is_owned(payment_params_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_arg_conv);
+       payment_params_arg_conv = PaymentParameters_clone(&payment_params_arg_conv);
+       void* max_total_routing_fee_msat_arg_ptr = untag_ptr(max_total_routing_fee_msat_arg);
+       CHECK_ACCESS(max_total_routing_fee_msat_arg_ptr);
+       LDKCOption_u64Z max_total_routing_fee_msat_arg_conv = *(LDKCOption_u64Z*)(max_total_routing_fee_msat_arg_ptr);
+       max_total_routing_fee_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(max_total_routing_fee_msat_arg));
+       LDKRouteParameters ret_var = RouteParameters_new(payment_params_arg_conv, final_value_msat_arg, max_total_routing_fee_msat_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
-       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKChannelUsage arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKChannelUsage orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
+       LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKFixedPenaltyScorer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FixedPenaltyScorer_free(this_obj_conv);
-}
-
-static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKFixedPenaltyScorer arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteParameters_hash(&o_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKFixedPenaltyScorer orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRouteParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RouteParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1with_1penalty(JNIEnv *env, jclass clz, int64_t penalty_msat) {
-       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1from_1payment_1params_1and_1value(JNIEnv *env, jclass clz, int64_t payment_params, int64_t final_value_msat) {
+       LDKPaymentParameters payment_params_conv;
+       payment_params_conv.inner = untag_ptr(payment_params);
+       payment_params_conv.is_owned = ptr_is_owned(payment_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_params_conv);
+       payment_params_conv = PaymentParameters_clone(&payment_params_conv);
+       LDKRouteParameters ret_var = RouteParameters_from_payment_params_and_value(payment_params_conv, final_value_msat);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKFixedPenaltyScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = FixedPenaltyScorer_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKFixedPenaltyScorer obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteParameters obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteParameters_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
-       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = RouteParameters_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKProbabilisticScorer this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScorer_free(this_obj_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKProbabilisticScoringFeeParameters this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPaymentParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringFeeParameters_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
+       PaymentParameters_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1payee(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = PaymentParameters_get_payee(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1payee(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKPayee val_conv = *(LDKPayee*)(val_ptr);
+       val_conv = Payee_clone((LDKPayee*)untag_ptr(val));
+       PaymentParameters_set_payee(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = PaymentParameters_get_expiry_time(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1expiry_1time(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       PaymentParameters_set_expiry_time(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       int32_t ret_conv = PaymentParameters_get_max_total_cltv_expiry_delta(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1total_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       PaymentParameters_set_max_total_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       int8_t ret_conv = PaymentParameters_get_max_path_count(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1path_1count(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
+       PaymentParameters_set_max_path_count(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1get_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       int8_t ret_conv = PaymentParameters_get_max_channel_saturation_power_of_half(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1set_1max_1channel_1saturation_1power_1of_1half(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
+       LDKPaymentParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
+       PaymentParameters_set_max_channel_saturation_power_of_half(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
-       return ret_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_ProbabilisticScoringFeeParameters_1set_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+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 = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
+       LDKCVec_u64Z val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t g = 0; g < val_constr.datalen; g++) {
+               int64_t val_conv_6 = val_vals[g];
+               val_constr.data[g] = val_conv_6;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       PaymentParameters_set_previously_failed_channels(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
-       return ret_conv;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringFeeParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1new(JNIEnv *env, jclass clz, int64_t payee_arg, int64_t expiry_time_arg, int32_t max_total_cltv_expiry_delta_arg, int8_t max_path_count_arg, int8_t max_channel_saturation_power_of_half_arg, int64_tArray previously_failed_channels_arg) {
+       void* payee_arg_ptr = untag_ptr(payee_arg);
+       CHECK_ACCESS(payee_arg_ptr);
+       LDKPayee payee_arg_conv = *(LDKPayee*)(payee_arg_ptr);
+       payee_arg_conv = Payee_clone((LDKPayee*)untag_ptr(payee_arg));
+       void* expiry_time_arg_ptr = untag_ptr(expiry_time_arg);
+       CHECK_ACCESS(expiry_time_arg_ptr);
+       LDKCOption_u64Z expiry_time_arg_conv = *(LDKCOption_u64Z*)(expiry_time_arg_ptr);
+       expiry_time_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(expiry_time_arg));
+       LDKCVec_u64Z previously_failed_channels_arg_constr;
+       previously_failed_channels_arg_constr.datalen = (*env)->GetArrayLength(env, previously_failed_channels_arg);
+       if (previously_failed_channels_arg_constr.datalen > 0)
+               previously_failed_channels_arg_constr.data = MALLOC(previously_failed_channels_arg_constr.datalen * sizeof(int64_t), "LDKCVec_u64Z Elements");
+       else
+               previously_failed_channels_arg_constr.data = NULL;
+       int64_t* previously_failed_channels_arg_vals = (*env)->GetLongArrayElements (env, previously_failed_channels_arg, NULL);
+       for (size_t g = 0; g < previously_failed_channels_arg_constr.datalen; g++) {
+               int64_t previously_failed_channels_arg_conv_6 = previously_failed_channels_arg_vals[g];
+               previously_failed_channels_arg_constr.data[g] = previously_failed_channels_arg_conv_6;
+       }
+       (*env)->ReleaseLongArrayElements(env, previously_failed_channels_arg, previously_failed_channels_arg_vals, 0);
+       LDKPaymentParameters ret_var = PaymentParameters_new(payee_arg_conv, expiry_time_arg_conv, max_total_cltv_expiry_delta_arg, max_path_count_arg, max_channel_saturation_power_of_half_arg, previously_failed_channels_arg_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
+static inline uint64_t PaymentParameters_clone_ptr(LDKPaymentParameters *NONNULL_PTR arg) {
+       LDKPaymentParameters ret_var = PaymentParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKProbabilisticScoringFeeParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKProbabilisticScoringFeeParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPaymentParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
+       LDKPaymentParameters ret_var = PaymentParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1default(JNIEnv *env, jclass clz) {
-       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPaymentParameters o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = PaymentParameters_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPaymentParameters a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPaymentParameters b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = PaymentParameters_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPaymentParameters obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = PaymentParameters_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser, int32_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_PaymentParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentParametersDecodeErrorZ), "LDKCResult_PaymentParametersDecodeErrorZ");
+       *ret_conv = PaymentParameters_read(ser_ref, arg);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1node_1id(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
+       LDKPaymentParameters ret_var = PaymentParameters_from_node_id(payee_pubkey_ref, final_cltv_expiry_delta);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1for_1keysend(JNIEnv *env, jclass clz, int8_tArray payee_pubkey, int32_t final_cltv_expiry_delta, jboolean allow_mpp) {
+       LDKPublicKey payee_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, payee_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, payee_pubkey, 0, 33, payee_pubkey_ref.compressed_form);
+       LDKPaymentParameters ret_var = PaymentParameters_for_keysend(payee_pubkey_ref, final_cltv_expiry_delta, allow_mpp);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned_1from_1list(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray node_ids) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_NodeIdZ node_ids_constr;
-       node_ids_constr.datalen = (*env)->GetArrayLength(env, node_ids);
-       if (node_ids_constr.datalen > 0)
-               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1bolt12_1invoice(JNIEnv *env, jclass clz, int64_t invoice) {
+       LDKBolt12Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKPaymentParameters ret_var = PaymentParameters_from_bolt12_invoice(&invoice_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1blinded(JNIEnv *env, jclass clz, int64_tArray blinded_route_hints) {
+       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ blinded_route_hints_constr;
+       blinded_route_hints_constr.datalen = (*env)->GetArrayLength(env, blinded_route_hints);
+       if (blinded_route_hints_constr.datalen > 0)
+               blinded_route_hints_constr.data = MALLOC(blinded_route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
        else
-               node_ids_constr.data = NULL;
-       int64_t* node_ids_vals = (*env)->GetLongArrayElements (env, node_ids, NULL);
-       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
-               int64_t node_ids_conv_8 = node_ids_vals[i];
-               LDKNodeId node_ids_conv_8_conv;
-               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
-               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
-               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
-               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
-               node_ids_constr.data[i] = node_ids_conv_8_conv;
+               blinded_route_hints_constr.data = NULL;
+       int64_t* blinded_route_hints_vals = (*env)->GetLongArrayElements (env, blinded_route_hints, NULL);
+       for (size_t l = 0; l < blinded_route_hints_constr.datalen; l++) {
+               int64_t blinded_route_hints_conv_37 = blinded_route_hints_vals[l];
+               void* blinded_route_hints_conv_37_ptr = untag_ptr(blinded_route_hints_conv_37);
+               CHECK_ACCESS(blinded_route_hints_conv_37_ptr);
+               LDKC2Tuple_BlindedPayInfoBlindedPathZ blinded_route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(blinded_route_hints_conv_37_ptr);
+               blinded_route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(blinded_route_hints_conv_37));
+               blinded_route_hints_constr.data[l] = blinded_route_hints_conv_37_conv;
        }
-       (*env)->ReleaseLongArrayElements(env, node_ids, node_ids_vals, 0);
-       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
+       (*env)->ReleaseLongArrayElements(env, blinded_route_hints, blinded_route_hints_vals, 0);
+       LDKPaymentParameters ret_var = PaymentParameters_blinded(blinded_route_hints_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKPayee this_ptr_conv = *(LDKPayee*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Payee_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id, int64_t penalty) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPayee* arg_conv = (LDKPayee*)untag_ptr(arg);
+       int64_t ret_conv = Payee_clone_ptr(arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId node_id_conv;
-       node_id_conv.inner = untag_ptr(node_id);
-       node_id_conv.is_owned = ptr_is_owned(node_id);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
-       node_id_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPayee* orig_conv = (LDKPayee*)untag_ptr(orig);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clear_1manual_1penalties(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKProbabilisticScoringFeeParameters this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1blinded(JNIEnv *env, jclass clz, int64_tArray route_hints, int64_t features) {
+       LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ route_hints_constr;
+       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKC2Tuple_BlindedPayInfoBlindedPathZ), "LDKCVec_C2Tuple_BlindedPayInfoBlindedPathZZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
+       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
+               int64_t route_hints_conv_37 = route_hints_vals[l];
+               void* route_hints_conv_37_ptr = untag_ptr(route_hints_conv_37);
+               CHECK_ACCESS(route_hints_conv_37_ptr);
+               LDKC2Tuple_BlindedPayInfoBlindedPathZ route_hints_conv_37_conv = *(LDKC2Tuple_BlindedPayInfoBlindedPathZ*)(route_hints_conv_37_ptr);
+               route_hints_conv_37_conv = C2Tuple_BlindedPayInfoBlindedPathZ_clone((LDKC2Tuple_BlindedPayInfoBlindedPathZ*)untag_ptr(route_hints_conv_37));
+               route_hints_constr.data[l] = route_hints_conv_37_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
+       LDKBolt12InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt12InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_blinded(route_hints_constr, features_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKProbabilisticScoringDecayParameters this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       ProbabilisticScoringDecayParameters_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clear(JNIEnv *env, jclass clz, int8_tArray node_id, int64_tArray route_hints, int64_t features, int32_t final_cltv_expiry_delta) {
+       LDKPublicKey node_id_ref;
+       CHECK((*env)->GetArrayLength(env, node_id) == 33);
+       (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
+       LDKCVec_RouteHintZ route_hints_constr;
+       route_hints_constr.datalen = (*env)->GetArrayLength(env, route_hints);
+       if (route_hints_constr.datalen > 0)
+               route_hints_constr.data = MALLOC(route_hints_constr.datalen * sizeof(LDKRouteHint), "LDKCVec_RouteHintZ Elements");
+       else
+               route_hints_constr.data = NULL;
+       int64_t* route_hints_vals = (*env)->GetLongArrayElements (env, route_hints, NULL);
+       for (size_t l = 0; l < route_hints_constr.datalen; l++) {
+               int64_t route_hints_conv_11 = route_hints_vals[l];
+               LDKRouteHint route_hints_conv_11_conv;
+               route_hints_conv_11_conv.inner = untag_ptr(route_hints_conv_11);
+               route_hints_conv_11_conv.is_owned = ptr_is_owned(route_hints_conv_11);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_conv_11_conv);
+               route_hints_conv_11_conv = RouteHint_clone(&route_hints_conv_11_conv);
+               route_hints_constr.data[l] = route_hints_conv_11_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, route_hints, route_hints_vals, 0);
+       LDKBolt11InvoiceFeatures features_conv;
+       features_conv.inner = untag_ptr(features);
+       features_conv.is_owned = ptr_is_owned(features);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
+       features_conv = Bolt11InvoiceFeatures_clone(&features_conv);
+       LDKPayee *ret_copy = MALLOC(sizeof(LDKPayee), "LDKPayee");
+       *ret_copy = Payee_clear(node_id_ref, route_hints_constr, features_conv, final_cltv_expiry_delta);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKPayee* o_conv = (LDKPayee*)untag_ptr(o);
+       int64_t ret_conv = Payee_hash(o_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1set_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Payee_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPayee* a_conv = (LDKPayee*)untag_ptr(a);
+       LDKPayee* b_conv = (LDKPayee*)untag_ptr(b);
+       jboolean ret_conv = Payee_eq(a_conv, b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteHint this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       RouteHint_free(this_obj_conv);
+}
+
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
-       return ret_conv;
+       LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&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 o = 0; o < ret_var.datalen; o++) {
+               LDKRouteHintHop ret_conv_14_var = ret_var.data[o];
+               int64_t ret_conv_14_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
+               ret_conv_14_ref = tag_ptr(ret_conv_14_var.inner, ret_conv_14_var.is_owned);
+               ret_arr_ptr[o] = ret_conv_14_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_ProbabilisticScoringDecayParameters_1set_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
+       LDKCVec_RouteHintHopZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t o = 0; o < val_constr.datalen; o++) {
+               int64_t val_conv_14 = val_vals[o];
+               LDKRouteHintHop val_conv_14_conv;
+               val_conv_14_conv.inner = untag_ptr(val_conv_14);
+               val_conv_14_conv.is_owned = ptr_is_owned(val_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
+               val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
+               val_constr.data[o] = val_conv_14_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       RouteHint_set_a(&this_ptr_conv, val_constr);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1new(JNIEnv *env, jclass clz, int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env, jclass clz, int64_tArray a_arg) {
+       LDKCVec_RouteHintHopZ a_arg_constr;
+       a_arg_constr.datalen = (*env)->GetArrayLength(env, a_arg);
+       if (a_arg_constr.datalen > 0)
+               a_arg_constr.data = MALLOC(a_arg_constr.datalen * sizeof(LDKRouteHintHop), "LDKCVec_RouteHintHopZ Elements");
+       else
+               a_arg_constr.data = NULL;
+       int64_t* a_arg_vals = (*env)->GetLongArrayElements (env, a_arg, NULL);
+       for (size_t o = 0; o < a_arg_constr.datalen; o++) {
+               int64_t a_arg_conv_14 = a_arg_vals[o];
+               LDKRouteHintHop a_arg_conv_14_conv;
+               a_arg_conv_14_conv.inner = untag_ptr(a_arg_conv_14);
+               a_arg_conv_14_conv.is_owned = ptr_is_owned(a_arg_conv_14);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
+               a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
+               a_arg_constr.data[o] = a_arg_conv_14_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, a_arg, a_arg_vals, 0);
+       LDKRouteHint ret_var = RouteHint_new(a_arg_constr);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKProbabilisticScoringDecayParameters arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHint arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHint_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKProbabilisticScoringDecayParameters orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteHint orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
+       LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1default(JNIEnv *env, jclass clz) {
-       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteHint o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteHint_hash(&o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1new(JNIEnv *env, jclass clz, int64_t decay_params, int64_t network_graph, int64_t logger) {
-       LDKProbabilisticScoringDecayParameters decay_params_conv;
-       decay_params_conv.inner = untag_ptr(decay_params);
-       decay_params_conv.is_owned = ptr_is_owned(decay_params);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
-       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
-       LDKNetworkGraph network_graph_conv;
-       network_graph_conv.inner = untag_ptr(network_graph);
-       network_graph_conv.is_owned = ptr_is_owned(network_graph);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
-       network_graph_conv.is_owned = false;
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHint_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteHint a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKRouteHint b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = RouteHint_eq(&a_conv, &b_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1debug_1log_1liquidity_1stats(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteHint obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = RouteHint_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1estimated_1channel_1liquidity_1range(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
-       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = RouteHint_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1channel_1liquidity_1probabilities(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeId target_conv;
-       target_conv.inner = untag_ptr(target);
-       target_conv.is_owned = ptr_is_owned(target);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
-       target_conv.is_owned = false;
-       LDKCOption_C2Tuple_EightU16sEightU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_EightU16sEightU16sZZ), "LDKCOption_C2Tuple_EightU16sEightU16sZZ");
-       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKProbabilisticScorer this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
-       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKProbabilisticScorer obj_conv;
-       obj_conv.inner = untag_ptr(obj);
-       obj_conv.is_owned = ptr_is_owned(obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
-       obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKProbabilisticScoringDecayParameters arg_a_conv;
-       arg_a_conv.inner = untag_ptr(arg_a);
-       arg_a_conv.is_owned = ptr_is_owned(arg_a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
-       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
-       LDKNetworkGraph arg_b_conv;
-       arg_b_conv.inner = untag_ptr(arg_b);
-       arg_b_conv.is_owned = ptr_is_owned(arg_b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
-       arg_b_conv.is_owned = false;
-       void* arg_c_ptr = untag_ptr(arg_c);
-       CHECK_ACCESS(arg_c_ptr);
-       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
-       if (arg_c_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&arg_c_conv);
-       }
-       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
-       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDelayedPaymentOutputDescriptor this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DelayedPaymentOutputDescriptor_free(this_obj_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+       RouteHintHop_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1src_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
@@ -62109,1068 +65004,2461 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+       RouteHintHop_set_src_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
+       int64_t ret_conv = RouteHintHop_get_short_channel_id(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
+       RouteHintHop_set_short_channel_id(&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;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1fees(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+       LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return 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;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1fees(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+       LDKRoutingFees val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = RoutingFees_clone(&val_conv);
+       RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form);
-       return ret_arr;
+       int16_t ret_conv = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKPublicKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 33);
-       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
-       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_ref);
+       RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
-       return ret_arr;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_minimum_msat(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
+       val_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(val));
+       RouteHintHop_set_htlc_maximum_msat(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int8_tArray revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       LDKPublicKey per_commitment_point_arg_ref;
-       CHECK((*env)->GetArrayLength(env, per_commitment_point_arg) == 33);
-       (*env)->GetByteArrayRegion(env, per_commitment_point_arg, 0, 33, per_commitment_point_arg_ref.compressed_form);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKPublicKey revocation_pubkey_arg_ref;
-       CHECK((*env)->GetArrayLength(env, revocation_pubkey_arg) == 33);
-       (*env)->GetByteArrayRegion(env, revocation_pubkey_arg, 0, 33, revocation_pubkey_arg_ref.compressed_form);
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
-       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_ref, channel_keys_id_arg_ref, channel_value_satoshis_arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *env, jclass clz, int8_tArray src_node_id_arg, int64_t short_channel_id_arg, int64_t fees_arg, int16_t cltv_expiry_delta_arg, int64_t htlc_minimum_msat_arg, int64_t htlc_maximum_msat_arg) {
+       LDKPublicKey src_node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, src_node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, src_node_id_arg, 0, 33, src_node_id_arg_ref.compressed_form);
+       LDKRoutingFees fees_arg_conv;
+       fees_arg_conv.inner = untag_ptr(fees_arg);
+       fees_arg_conv.is_owned = ptr_is_owned(fees_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
+       fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
+       void* htlc_minimum_msat_arg_ptr = untag_ptr(htlc_minimum_msat_arg);
+       CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_minimum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_minimum_msat_arg_ptr);
+       htlc_minimum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_minimum_msat_arg));
+       void* htlc_maximum_msat_arg_ptr = untag_ptr(htlc_maximum_msat_arg);
+       CHECK_ACCESS(htlc_maximum_msat_arg_ptr);
+       LDKCOption_u64Z htlc_maximum_msat_arg_conv = *(LDKCOption_u64Z*)(htlc_maximum_msat_arg_ptr);
+       htlc_maximum_msat_arg_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(htlc_maximum_msat_arg));
+       LDKRouteHintHop ret_var = RouteHintHop_new(src_node_id_arg_ref, short_channel_id_arg, fees_arg_conv, cltv_expiry_delta_arg, htlc_minimum_msat_arg_conv, htlc_maximum_msat_arg_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKDelayedPaymentOutputDescriptor arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHintHop arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       int64_t ret_conv = RouteHintHop_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKDelayedPaymentOutputDescriptor orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRouteHintHop orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
+       LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKRouteHintHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = RouteHintHop_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKRouteHintHop a_conv;
        a_conv.inner = untag_ptr(a);
        a_conv.is_owned = ptr_is_owned(a);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv.is_owned = false;
-       LDKDelayedPaymentOutputDescriptor b_conv;
+       LDKRouteHintHop b_conv;
        b_conv.inner = untag_ptr(b);
        b_conv.is_owned = ptr_is_owned(b);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv.is_owned = false;
-       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       jboolean ret_conv = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_conv;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKDelayedPaymentOutputDescriptor obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKRouteHintHop obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = RouteHintHop_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKStaticPaymentOutputDescriptor this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       StaticPaymentOutputDescriptor_free(this_obj_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, int64_t route_params, int64_t network_graph, int64_tArray first_hops, int64_t logger, int64_t scorer, int64_t score_params, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       LDKCVec_ChannelDetailsZ first_hops_constr;
+       LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
+       if (first_hops != NULL) {
+               first_hops_constr.datalen = (*env)->GetArrayLength(env, first_hops);
+               if (first_hops_constr.datalen > 0)
+                       first_hops_constr.data = MALLOC(first_hops_constr.datalen * sizeof(LDKChannelDetails), "LDKCVec_ChannelDetailsZ Elements");
+               else
+                       first_hops_constr.data = NULL;
+               int64_t* first_hops_vals = (*env)->GetLongArrayElements (env, first_hops, NULL);
+               for (size_t q = 0; q < first_hops_constr.datalen; q++) {
+                       int64_t first_hops_conv_16 = first_hops_vals[q];
+                       LDKChannelDetails first_hops_conv_16_conv;
+                       first_hops_conv_16_conv.inner = untag_ptr(first_hops_conv_16);
+                       first_hops_conv_16_conv.is_owned = ptr_is_owned(first_hops_conv_16);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
+                       first_hops_conv_16_conv.is_owned = false;
+                       first_hops_constr.data[q] = first_hops_conv_16_conv;
+               }
+               (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
+               first_hops_ptr = &first_hops_constr;
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* scorer_ptr = untag_ptr(scorer);
+       if (ptr_is_owned(scorer)) { CHECK_ACCESS(scorer_ptr); }
+       LDKScoreLookUp* scorer_conv = (LDKScoreLookUp*)scorer_ptr;
+       LDKProbabilisticScoringFeeParameters score_params_conv;
+       score_params_conv.inner = untag_ptr(score_params);
+       score_params_conv.is_owned = ptr_is_owned(score_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(score_params_conv);
+       score_params_conv.is_owned = false;
+       uint8_t random_seed_bytes_arr[32];
+       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
+       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = find_route(our_node_pubkey_ref, &route_params_conv, &network_graph_conv, first_hops_ptr, logger_conv, scorer_conv, &score_params_conv, random_seed_bytes_ref);
+       if (first_hops_ptr != NULL) { FREE(first_hops_constr.data); }
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_build_1route_1from_1hops(JNIEnv *env, jclass clz, int8_tArray our_node_pubkey, jobjectArray hops, int64_t route_params, int64_t network_graph, int64_t logger, int8_tArray random_seed_bytes) {
+       LDKPublicKey our_node_pubkey_ref;
+       CHECK((*env)->GetArrayLength(env, our_node_pubkey) == 33);
+       (*env)->GetByteArrayRegion(env, our_node_pubkey, 0, 33, our_node_pubkey_ref.compressed_form);
+       LDKCVec_PublicKeyZ hops_constr;
+       hops_constr.datalen = (*env)->GetArrayLength(env, hops);
+       if (hops_constr.datalen > 0)
+               hops_constr.data = MALLOC(hops_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               hops_constr.data = NULL;
+       for (size_t i = 0; i < hops_constr.datalen; i++) {
+               int8_tArray hops_conv_8 = (*env)->GetObjectArrayElement(env, hops, i);
+               LDKPublicKey hops_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, hops_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, hops_conv_8, 0, 33, hops_conv_8_ref.compressed_form);
+               hops_constr.data[i] = hops_conv_8_ref;
+       }
+       LDKRouteParameters route_params_conv;
+       route_params_conv.inner = untag_ptr(route_params);
+       route_params_conv.is_owned = ptr_is_owned(route_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_params_conv);
+       route_params_conv.is_owned = false;
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       uint8_t random_seed_bytes_arr[32];
+       CHECK((*env)->GetArrayLength(env, random_seed_bytes) == 32);
+       (*env)->GetByteArrayRegion(env, random_seed_bytes, 0, 32, random_seed_bytes_arr);
+       uint8_t (*random_seed_bytes_ref)[32] = &random_seed_bytes_arr;
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = build_route_from_hops(our_node_pubkey_ref, hops_constr, &route_params_conv, &network_graph_conv, logger_conv, random_seed_bytes_ref);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKOutPoint val_conv;
-       val_conv.inner = untag_ptr(val);
-       val_conv.is_owned = ptr_is_owned(val);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
-       val_conv = OutPoint_clone(&val_conv);
-       StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreLookUp_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreLookUp this_ptr_conv = *(LDKScoreLookUp*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreLookUp_free(this_ptr_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 = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
-       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
-       return tag_ptr(ret_ref, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScoreUpdate this_ptr_conv = *(LDKScoreUpdate*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ScoreUpdate_free(this_ptr_conv);
 }
 
-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 = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
-       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
-       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKScore this_ptr_conv = *(LDKScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Score_free(this_ptr_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
-       return ret_arr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKLockableScore this_ptr_conv = *(LDKLockableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       LockableScore_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableScore_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWriteableScore this_ptr_conv = *(LDKWriteableScore*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WriteableScore_free(this_ptr_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMultiThreadedLockableScore this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedLockableScore_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKStaticPaymentOutputDescriptor this_ptr_conv;
-       this_ptr_conv.inner = untag_ptr(this_ptr);
-       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
-       this_ptr_conv.is_owned = false;
-       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1LockableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKLockableScore* ret_ret = MALLOC(sizeof(LDKLockableScore), "LDKLockableScore");
+       *ret_ret = MultiThreadedLockableScore_as_LockableScore(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg) {
-       LDKOutPoint outpoint_arg_conv;
-       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
-       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
-       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
-       void* output_arg_ptr = untag_ptr(output_arg);
-       CHECK_ACCESS(output_arg_ptr);
-       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
-       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
-       LDKThirtyTwoBytes channel_keys_id_arg_ref;
-       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
-       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKMultiThreadedLockableScore obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = MultiThreadedLockableScore_write(&obj_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;
 }
 
-static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1as_1WriteableScore(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedLockableScore this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKWriteableScore* ret_ret = MALLOC(sizeof(LDKWriteableScore), "LDKWriteableScore");
+       *ret_ret = MultiThreadedLockableScore_as_WriteableScore(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1new(JNIEnv *env, jclass clz, int64_t score) {
+       void* score_ptr = untag_ptr(score);
+       CHECK_ACCESS(score_ptr);
+       LDKScore score_conv = *(LDKScore*)(score_ptr);
+       if (score_conv.free == LDKScore_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKScore_JCalls_cloned(&score_conv);
+       }
+       LDKMultiThreadedLockableScore ret_var = MultiThreadedLockableScore_new(score_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKStaticPaymentOutputDescriptor arg_conv;
-       arg_conv.inner = untag_ptr(arg);
-       arg_conv.is_owned = ptr_is_owned(arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
-       arg_conv.is_owned = false;
-       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
-       return ret_conv;
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockRead_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMultiThreadedScoreLockRead this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedScoreLockRead_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKStaticPaymentOutputDescriptor orig_conv;
-       orig_conv.inner = untag_ptr(orig);
-       orig_conv.is_owned = ptr_is_owned(orig);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
-       orig_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKMultiThreadedScoreLockWrite this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       MultiThreadedScoreLockWrite_free(this_obj_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKStaticPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKStaticPaymentOutputDescriptor b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockRead_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedScoreLockRead this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = MultiThreadedScoreLockRead_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKStaticPaymentOutputDescriptor obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKMultiThreadedScoreLockWrite obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
+       LDKCVec_u8Z ret_var = MultiThreadedScoreLockWrite_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
-       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1as_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKMultiThreadedScoreLockWrite this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = MultiThreadedScoreLockWrite_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SpendableOutputDescriptor_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKChannelUsage this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ChannelUsage_free(this_obj_conv);
 }
 
-static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
-       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUsage_get_amount_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1amount_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUsage_set_amount_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1output(JNIEnv *env, jclass clz, int64_t outpoint, int64_t output) {
-       LDKOutPoint outpoint_conv;
-       outpoint_conv.inner = untag_ptr(outpoint);
-       outpoint_conv.is_owned = ptr_is_owned(outpoint);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
-       outpoint_conv = OutPoint_clone(&outpoint_conv);
-       void* output_ptr = untag_ptr(output);
-       CHECK_ACCESS(output_ptr);
-       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
-       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ChannelUsage_get_inflight_htlc_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1delayed_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
-       LDKDelayedPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1inflight_1htlc_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ChannelUsage_set_inflight_htlc_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
-       LDKStaticPaymentOutputDescriptor a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
-       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
-       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1get_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKEffectiveCapacity *ret_copy = MALLOC(sizeof(LDKEffectiveCapacity), "LDKEffectiveCapacity");
+       *ret_copy = ChannelUsage_get_effective_capacity(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
-       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
-       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
-       return ret_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1set_1effective_1capacity(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKChannelUsage this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKEffectiveCapacity val_conv = *(LDKEffectiveCapacity*)(val_ptr);
+       val_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(val));
+       ChannelUsage_set_effective_capacity(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1new(JNIEnv *env, jclass clz, int64_t amount_msat_arg, int64_t inflight_htlc_msat_arg, int64_t effective_capacity_arg) {
+       void* effective_capacity_arg_ptr = untag_ptr(effective_capacity_arg);
+       CHECK_ACCESS(effective_capacity_arg_ptr);
+       LDKEffectiveCapacity effective_capacity_arg_conv = *(LDKEffectiveCapacity*)(effective_capacity_arg_ptr);
+       effective_capacity_arg_conv = EffectiveCapacity_clone((LDKEffectiveCapacity*)untag_ptr(effective_capacity_arg));
+       LDKChannelUsage ret_var = ChannelUsage_new(amount_msat_arg, inflight_htlc_msat_arg, effective_capacity_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
-       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+static inline uint64_t ChannelUsage_clone_ptr(LDKChannelUsage *NONNULL_PTR arg) {
+       LDKChannelUsage ret_var = ChannelUsage_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1create_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_PackedLockTimeZ locktime_conv = *(LDKCOption_PackedLockTimeZ*)(locktime_ptr);
-       locktime_conv = COption_PackedLockTimeZ_clone((LDKCOption_PackedLockTimeZ*)untag_ptr(locktime));
-       LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ), "LDKCResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ");
-       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelUsage arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ChannelUsage_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       ChannelSigner_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUsage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKChannelUsage orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKChannelUsage ret_var = ChannelUsage_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EcdsaChannelSigner_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKFixedPenaltyScorer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       FixedPenaltyScorer_free(this_obj_conv);
 }
 
-static inline uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg) {
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(arg);
-       return tag_ptr(ret_ret, true);
+static inline uint64_t FixedPenaltyScorer_clone_ptr(LDKFixedPenaltyScorer *NONNULL_PTR arg) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKWriteableEcdsaChannelSigner* arg_conv = (LDKWriteableEcdsaChannelSigner*)arg_ptr;
-       int64_t ret_conv = WriteableEcdsaChannelSigner_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFixedPenaltyScorer arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = FixedPenaltyScorer_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKWriteableEcdsaChannelSigner* orig_conv = (LDKWriteableEcdsaChannelSigner*)orig_ptr;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = WriteableEcdsaChannelSigner_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKWriteableEcdsaChannelSigner this_ptr_conv = *(LDKWriteableEcdsaChannelSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       WriteableEcdsaChannelSigner_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKFixedPenaltyScorer orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
-       jclass ret_conv = LDKRecipient_to_java(env, Recipient_clone(orig_conv));
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1with_1penalty(JNIEnv *env, jclass clz, int64_t penalty_msat) {
+       LDKFixedPenaltyScorer ret_var = FixedPenaltyScorer_with_penalty(penalty_msat);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1node(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKRecipient_to_java(env, Recipient_node());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = FixedPenaltyScorer_as_ScoreLookUp(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1phantom_1node(JNIEnv *env, jclass clz) {
-       jclass ret_conv = LDKRecipient_to_java(env, Recipient_phantom_node());
-       return ret_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFixedPenaltyScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = FixedPenaltyScorer_as_ScoreUpdate(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EntropySource_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       EntropySource_free(this_ptr_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKFixedPenaltyScorer obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = FixedPenaltyScorer_write(&obj_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_NodeSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       NodeSigner_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_FixedPenaltyScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FixedPenaltyScorerDecodeErrorZ), "LDKCResult_FixedPenaltyScorerDecodeErrorZ");
+       *ret_conv = FixedPenaltyScorer_read(ser_ref, arg);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignerProvider_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SignerProvider_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKProbabilisticScorer this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ProbabilisticScorer_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKInMemorySigner this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKProbabilisticScoringFeeParameters this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       InMemorySigner_free(this_obj_conv);
+       ProbabilisticScoringFeeParameters_free(this_obj_conv);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_funding_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_revocation_base_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_base_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1base_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_base_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_payment_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_htlc_base_key(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSecretKey val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
-       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_multiplier_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_commitment_seed(&this_ptr_conv));
-       return ret_arr;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
-       LDKInMemorySigner this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1historical_1liquidity_1penalty_1amount_1multiplier_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKThirtyTwoBytes val_ref;
-       CHECK((*env)->GetArrayLength(env, val) == 32);
-       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
-       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
+       ProbabilisticScoringFeeParameters_set_historical_liquidity_penalty_amount_multiplier_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
-       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_anti_probing_penalty_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1anti_1probing_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_anti_probing_penalty_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_get_considered_impossible_penalty_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1considered_1impossible_1penalty_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_considered_impossible_penalty_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1linear_1success_1probability(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       jboolean ret_conv = ProbabilisticScoringFeeParameters_get_linear_success_probability(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1linear_1success_1probability(JNIEnv *env, jclass clz, int64_t this_ptr, jboolean val) {
+       LDKProbabilisticScoringFeeParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_linear_success_probability(&this_ptr_conv, val);
+}
+
+static inline uint64_t ProbabilisticScoringFeeParameters_clone_ptr(LDKProbabilisticScoringFeeParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKInMemorySigner arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbabilisticScoringFeeParameters arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
+       int64_t ret_conv = ProbabilisticScoringFeeParameters_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKInMemorySigner orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbabilisticScoringFeeParameters orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1new(JNIEnv *env, jclass clz, int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
-       LDKSecretKey funding_key_ref;
-       CHECK((*env)->GetArrayLength(env, funding_key) == 32);
-       (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_ref.bytes);
-       LDKSecretKey revocation_base_key_ref;
-       CHECK((*env)->GetArrayLength(env, revocation_base_key) == 32);
-       (*env)->GetByteArrayRegion(env, revocation_base_key, 0, 32, revocation_base_key_ref.bytes);
-       LDKSecretKey payment_key_ref;
-       CHECK((*env)->GetArrayLength(env, payment_key) == 32);
-       (*env)->GetByteArrayRegion(env, payment_key, 0, 32, payment_key_ref.bytes);
-       LDKSecretKey delayed_payment_base_key_ref;
-       CHECK((*env)->GetArrayLength(env, delayed_payment_base_key) == 32);
-       (*env)->GetByteArrayRegion(env, delayed_payment_base_key, 0, 32, delayed_payment_base_key_ref.bytes);
-       LDKSecretKey htlc_base_key_ref;
-       CHECK((*env)->GetArrayLength(env, htlc_base_key) == 32);
-       (*env)->GetByteArrayRegion(env, htlc_base_key, 0, 32, htlc_base_key_ref.bytes);
-       LDKThirtyTwoBytes commitment_seed_ref;
-       CHECK((*env)->GetArrayLength(env, commitment_seed) == 32);
-       (*env)->GetByteArrayRegion(env, commitment_seed, 0, 32, commitment_seed_ref.data);
-       LDKThirtyTwoBytes channel_keys_id_ref;
-       CHECK((*env)->GetArrayLength(env, channel_keys_id) == 32);
-       (*env)->GetByteArrayRegion(env, channel_keys_id, 0, 32, channel_keys_id_ref.data);
-       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
-       CHECK((*env)->GetArrayLength(env, rand_bytes_unique_start) == 32);
-       (*env)->GetByteArrayRegion(env, rand_bytes_unique_start, 0, 32, rand_bytes_unique_start_ref.data);
-       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1default(JNIEnv *env, jclass clz) {
+       LDKProbabilisticScoringFeeParameters ret_var = ProbabilisticScoringFeeParameters_default();
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1pubkeys(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_add_banned(&this_arg_conv, &node_id_conv);
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1add_1banned_1from_1list(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray node_ids) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int16_t ret_conv = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
-       return ret_conv;
+       LDKCVec_NodeIdZ node_ids_constr;
+       node_ids_constr.datalen = (*env)->GetArrayLength(env, node_ids);
+       if (node_ids_constr.datalen > 0)
+               node_ids_constr.data = MALLOC(node_ids_constr.datalen * sizeof(LDKNodeId), "LDKCVec_NodeIdZ Elements");
+       else
+               node_ids_constr.data = NULL;
+       int64_t* node_ids_vals = (*env)->GetLongArrayElements (env, node_ids, NULL);
+       for (size_t i = 0; i < node_ids_constr.datalen; i++) {
+               int64_t node_ids_conv_8 = node_ids_vals[i];
+               LDKNodeId node_ids_conv_8_conv;
+               node_ids_conv_8_conv.inner = untag_ptr(node_ids_conv_8);
+               node_ids_conv_8_conv.is_owned = ptr_is_owned(node_ids_conv_8);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(node_ids_conv_8_conv);
+               node_ids_conv_8_conv = NodeId_clone(&node_ids_conv_8_conv);
+               node_ids_constr.data[i] = node_ids_conv_8_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, node_ids, node_ids_vals, 0);
+       ProbabilisticScoringFeeParameters_add_banned_from_list(&this_arg_conv, node_ids_constr);
 }
 
-JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1banned(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       int16_t ret_conv = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
-       return ret_conv;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_banned(&this_arg_conv, &node_id_conv);
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbound(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id, int64_t penalty) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       jboolean ret_conv = InMemorySigner_is_outbound(&this_arg_conv);
-       return ret_conv;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_set_manual_penalty(&this_arg_conv, &node_id_conv, penalty);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1funding_1outpoint(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1remove_1manual_1penalty(JNIEnv *env, jclass clz, int64_t this_arg, int64_t node_id) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+       LDKNodeId node_id_conv;
+       node_id_conv.inner = untag_ptr(node_id);
+       node_id_conv.is_owned = ptr_is_owned(node_id);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_id_conv);
+       node_id_conv.is_owned = false;
+       ProbabilisticScoringFeeParameters_remove_manual_penalty(&this_arg_conv, &node_id_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1channel_1parameters(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1clear_1manual_1penalties(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScoringFeeParameters this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
+       ProbabilisticScoringFeeParameters_clear_manual_penalties(&this_arg_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKProbabilisticScoringDecayParameters this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ProbabilisticScoringDecayParameters_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_historical_no_updates_half_life(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1set_1historical_1no_1updates_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringDecayParameters_set_historical_no_updates_half_life(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1get_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_get_liquidity_offset_half_life(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1set_1liquidity_1offset_1half_1life(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKProbabilisticScoringDecayParameters this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ProbabilisticScoringDecayParameters_set_liquidity_offset_half_life(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1new(JNIEnv *env, jclass clz, int64_t historical_no_updates_half_life_arg, int64_t liquidity_offset_half_life_arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_new(historical_no_updates_half_life_arg, liquidity_offset_half_life_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1channel_1type_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
+static inline uint64_t ProbabilisticScoringDecayParameters_clone_ptr(LDKProbabilisticScoringDecayParameters *NONNULL_PTR arg) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbabilisticScoringDecayParameters arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ProbabilisticScoringDecayParameters_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1counterparty_1payment_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbabilisticScoringDecayParameters orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringDecayParameters_1default(JNIEnv *env, jclass clz) {
+       LDKProbabilisticScoringDecayParameters ret_var = ProbabilisticScoringDecayParameters_default();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1new(JNIEnv *env, jclass clz, int64_t decay_params, int64_t network_graph, int64_t logger) {
+       LDKProbabilisticScoringDecayParameters decay_params_conv;
+       decay_params_conv.inner = untag_ptr(decay_params);
+       decay_params_conv.is_owned = ptr_is_owned(decay_params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(decay_params_conv);
+       decay_params_conv = ProbabilisticScoringDecayParameters_clone(&decay_params_conv);
+       LDKNetworkGraph network_graph_conv;
+       network_graph_conv.inner = untag_ptr(network_graph);
+       network_graph_conv.is_owned = ptr_is_owned(network_graph);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
+       network_graph_conv.is_owned = false;
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       LDKProbabilisticScorer ret_var = ProbabilisticScorer_new(decay_params_conv, &network_graph_conv, logger_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1debug_1log_1liquidity_1stats(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
-       spend_tx_ref.data_is_owned = true;
-       LDKStaticPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
-       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
+       ProbabilisticScorer_debug_log_liquidity_stats(&this_arg_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynamic_1p2wsh_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1estimated_1channel_1liquidity_1range(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKTransaction spend_tx_ref;
-       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
-       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
-       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
-       spend_tx_ref.data_is_owned = true;
-       LDKDelayedPaymentOutputDescriptor descriptor_conv;
-       descriptor_conv.inner = untag_ptr(descriptor);
-       descriptor_conv.is_owned = ptr_is_owned(descriptor);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
-       descriptor_conv.is_owned = false;
-       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
-       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
-       return tag_ptr(ret_conv, true);
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_u64u64ZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_u64u64ZZ), "LDKCOption_C2Tuple_u64u64ZZ");
+       *ret_copy = ProbabilisticScorer_estimated_channel_liquidity_range(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1channel_1liquidity_1probabilities(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ), "LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ");
+       *ret_copy = ProbabilisticScorer_historical_estimated_channel_liquidity_probabilities(&this_arg_conv, scid, &target_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1ChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1payment_1success_1probability(JNIEnv *env, jclass clz, int64_t this_arg, int64_t scid, int64_t target, int64_t amount_msat, int64_t params) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
-       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
+       LDKNodeId target_conv;
+       target_conv.inner = untag_ptr(target);
+       target_conv.is_owned = ptr_is_owned(target);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
+       target_conv.is_owned = false;
+       LDKProbabilisticScoringFeeParameters params_conv;
+       params_conv.inner = untag_ptr(params);
+       params_conv.is_owned = ptr_is_owned(params);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
+       params_conv.is_owned = false;
+       LDKCOption_f64Z *ret_copy = MALLOC(sizeof(LDKCOption_f64Z), "LDKCOption_f64Z");
+       *ret_copy = ProbabilisticScorer_historical_estimated_payment_success_probability(&this_arg_conv, scid, &target_conv, amount_msat, &params_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1ScoreLookUp(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKScoreLookUp* ret_ret = MALLOC(sizeof(LDKScoreLookUp), "LDKScoreLookUp");
+       *ret_ret = ProbabilisticScorer_as_ScoreLookUp(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1ScoreUpdate(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
+       LDKScoreUpdate* ret_ret = MALLOC(sizeof(LDKScoreUpdate), "LDKScoreUpdate");
+       *ret_ret = ProbabilisticScorer_as_ScoreUpdate(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1WriteableEcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKInMemorySigner this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1Score(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKProbabilisticScorer this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
-       *ret_ret = InMemorySigner_as_WriteableEcdsaChannelSigner(&this_arg_conv);
+       LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
+       *ret_ret = ProbabilisticScorer_as_Score(&this_arg_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKInMemorySigner obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKProbabilisticScorer obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
+       LDKCVec_u8Z ret_var = ProbabilisticScorer_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b, int64_t arg_c) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       void* arg_ptr = untag_ptr(arg);
-       CHECK_ACCESS(arg_ptr);
-       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
-       if (arg_conv.free == LDKEntropySource_JCalls_free) {
+       LDKProbabilisticScoringDecayParameters arg_a_conv;
+       arg_a_conv.inner = untag_ptr(arg_a);
+       arg_a_conv.is_owned = ptr_is_owned(arg_a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_a_conv);
+       arg_a_conv = ProbabilisticScoringDecayParameters_clone(&arg_a_conv);
+       LDKNetworkGraph arg_b_conv;
+       arg_b_conv.inner = untag_ptr(arg_b);
+       arg_b_conv.is_owned = ptr_is_owned(arg_b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_b_conv);
+       arg_b_conv.is_owned = false;
+       void* arg_c_ptr = untag_ptr(arg_c);
+       CHECK_ACCESS(arg_c_ptr);
+       LDKLogger arg_c_conv = *(LDKLogger*)(arg_c_ptr);
+       if (arg_c_conv.free == LDKLogger_JCalls_free) {
                // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&arg_conv);
+               LDKLogger_JCalls_cloned(&arg_c_conv);
        }
-       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
-       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
+       LDKCResult_ProbabilisticScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ProbabilisticScorerDecodeErrorZ), "LDKCResult_ProbabilisticScorerDecodeErrorZ");
+       *ret_conv = ProbabilisticScorer_read(ser_ref, arg_a_conv, &arg_b_conv, arg_c_conv);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKKeysManager this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       KeysManager_free(this_obj_conv);
+       DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
-       uint8_t seed_arr[32];
-       CHECK((*env)->GetArrayLength(env, seed) == 32);
-       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_KeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, KeysManager_get_node_secret_key(&this_arg_conv).bytes);
-       return ret_arr;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1per_1commitment_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       DelayedPaymentOutputDescriptor_set_per_commitment_point(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1to_1self_1delay(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = DelayedPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       DelayedPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1revocation_1pubkey(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       DelayedPaymentOutputDescriptor_set_revocation_pubkey(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       DelayedPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKDelayedPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int8_tArray per_commitment_point_arg, int16_t to_self_delay_arg, int64_t output_arg, int8_tArray revocation_pubkey_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       LDKPublicKey per_commitment_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, per_commitment_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, per_commitment_point_arg, 0, 33, per_commitment_point_arg_ref.compressed_form);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKPublicKey revocation_pubkey_arg_ref;
+       CHECK((*env)->GetArrayLength(env, revocation_pubkey_arg) == 33);
+       (*env)->GetByteArrayRegion(env, revocation_pubkey_arg, 0, 33, revocation_pubkey_arg_ref.compressed_form);
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
+       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_new(outpoint_arg_conv, per_commitment_point_arg_ref, to_self_delay_arg, output_arg_conv, revocation_pubkey_arg_ref, channel_keys_id_arg_ref, channel_value_satoshis_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKDelayedPaymentOutputDescriptor orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKDelayedPaymentOutputDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = DelayedPaymentOutputDescriptor_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKDelayedPaymentOutputDescriptor b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = DelayedPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKDelayedPaymentOutputDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = DelayedPaymentOutputDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKStaticPaymentOutputDescriptor this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       StaticPaymentOutputDescriptor_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1outpoint(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKOutPoint val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = OutPoint_clone(&val_conv);
+       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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = StaticPaymentOutputDescriptor_get_output(&this_ptr_conv);
+       return tag_ptr(ret_ref, true);
+}
+
+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 = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
+       val_conv = TxOut_clone((LDKTxOut*)untag_ptr(val));
+       StaticPaymentOutputDescriptor_set_output(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1keys_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       StaticPaymentOutputDescriptor_set_channel_keys_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1value_1satoshis(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1transaction_1parameters(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = StaticPaymentOutputDescriptor_get_channel_transaction_parameters(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1transaction_1parameters(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKStaticPaymentOutputDescriptor this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKChannelTransactionParameters val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ChannelTransactionParameters_clone(&val_conv);
+       StaticPaymentOutputDescriptor_set_channel_transaction_parameters(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1new(JNIEnv *env, jclass clz, int64_t outpoint_arg, int64_t output_arg, int8_tArray channel_keys_id_arg, int64_t channel_value_satoshis_arg, int64_t channel_transaction_parameters_arg) {
+       LDKOutPoint outpoint_arg_conv;
+       outpoint_arg_conv.inner = untag_ptr(outpoint_arg);
+       outpoint_arg_conv.is_owned = ptr_is_owned(outpoint_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
+       outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
+       void* output_arg_ptr = untag_ptr(output_arg);
+       CHECK_ACCESS(output_arg_ptr);
+       LDKTxOut output_arg_conv = *(LDKTxOut*)(output_arg_ptr);
+       output_arg_conv = TxOut_clone((LDKTxOut*)untag_ptr(output_arg));
+       LDKThirtyTwoBytes channel_keys_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, channel_keys_id_arg) == 32);
+       (*env)->GetByteArrayRegion(env, channel_keys_id_arg, 0, 32, channel_keys_id_arg_ref.data);
+       LDKChannelTransactionParameters channel_transaction_parameters_arg_conv;
+       channel_transaction_parameters_arg_conv.inner = untag_ptr(channel_transaction_parameters_arg);
+       channel_transaction_parameters_arg_conv.is_owned = ptr_is_owned(channel_transaction_parameters_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_transaction_parameters_arg_conv);
+       channel_transaction_parameters_arg_conv = ChannelTransactionParameters_clone(&channel_transaction_parameters_arg_conv);
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_new(outpoint_arg_conv, output_arg_conv, channel_keys_id_arg_ref, channel_value_satoshis_arg, channel_transaction_parameters_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKStaticPaymentOutputDescriptor orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKStaticPaymentOutputDescriptor o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKStaticPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKStaticPaymentOutputDescriptor b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = StaticPaymentOutputDescriptor_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1witness_1script(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_CVec_u8ZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_u8ZZ), "LDKCOption_CVec_u8ZZ");
+       *ret_copy = StaticPaymentOutputDescriptor_witness_script(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1max_1witness_1length(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKStaticPaymentOutputDescriptor this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int64_t ret_conv = StaticPaymentOutputDescriptor_max_witness_length(&this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKStaticPaymentOutputDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = StaticPaymentOutputDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSpendableOutputDescriptor this_ptr_conv = *(LDKSpendableOutputDescriptor*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SpendableOutputDescriptor_free(this_ptr_conv);
+}
+
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)untag_ptr(arg);
+       int64_t ret_conv = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)untag_ptr(orig);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1output(JNIEnv *env, jclass clz, int64_t outpoint, int64_t output) {
+       LDKOutPoint outpoint_conv;
+       outpoint_conv.inner = untag_ptr(outpoint);
+       outpoint_conv.is_owned = ptr_is_owned(outpoint);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
+       outpoint_conv = OutPoint_clone(&outpoint_conv);
+       void* output_ptr = untag_ptr(output);
+       CHECK_ACCESS(output_ptr);
+       LDKTxOut output_conv = *(LDKTxOut*)(output_ptr);
+       output_conv = TxOut_clone((LDKTxOut*)untag_ptr(output));
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_output(outpoint_conv, output_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1delayed_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
+       LDKDelayedPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1payment_1output(JNIEnv *env, jclass clz, int64_t a) {
+       LDKStaticPaymentOutputDescriptor a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKSpendableOutputDescriptor* o_conv = (LDKSpendableOutputDescriptor*)untag_ptr(o);
+       int64_t ret_conv = SpendableOutputDescriptor_hash(o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSpendableOutputDescriptor* a_conv = (LDKSpendableOutputDescriptor*)untag_ptr(a);
+       LDKSpendableOutputDescriptor* b_conv = (LDKSpendableOutputDescriptor*)untag_ptr(b);
+       jboolean ret_conv = SpendableOutputDescriptor_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKSpendableOutputDescriptor* obj_conv = (LDKSpendableOutputDescriptor*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = SpendableOutputDescriptor_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = SpendableOutputDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1create_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ), "LDKCResult_C2Tuple_CVec_u8ZusizeZNoneZ");
+       *ret_conv = SpendableOutputDescriptor_create_spendable_outputs_psbt(descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKChannelSigner this_ptr_conv = *(LDKChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ChannelSigner_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEcdsaChannelSigner this_ptr_conv = *(LDKEcdsaChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EcdsaChannelSigner_free(this_ptr_conv);
+}
+
+static inline uint64_t WriteableEcdsaChannelSigner_clone_ptr(LDKWriteableEcdsaChannelSigner *NONNULL_PTR arg) {
+       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       *ret_ret = WriteableEcdsaChannelSigner_clone(arg);
+       return tag_ptr(ret_ret, true);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKWriteableEcdsaChannelSigner* arg_conv = (LDKWriteableEcdsaChannelSigner*)arg_ptr;
+       int64_t ret_conv = WriteableEcdsaChannelSigner_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKWriteableEcdsaChannelSigner* orig_conv = (LDKWriteableEcdsaChannelSigner*)orig_ptr;
+       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       *ret_ret = WriteableEcdsaChannelSigner_clone(orig_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WriteableEcdsaChannelSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKWriteableEcdsaChannelSigner this_ptr_conv = *(LDKWriteableEcdsaChannelSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       WriteableEcdsaChannelSigner_free(this_ptr_conv);
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRecipient* orig_conv = (LDKRecipient*)untag_ptr(orig);
+       jclass ret_conv = LDKRecipient_to_java(env, Recipient_clone(orig_conv));
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1node(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKRecipient_to_java(env, Recipient_node());
+       return ret_conv;
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Recipient_1phantom_1node(JNIEnv *env, jclass clz) {
+       jclass ret_conv = LDKRecipient_to_java(env, Recipient_phantom_node());
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EntropySource_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKEntropySource this_ptr_conv = *(LDKEntropySource*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       EntropySource_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeSigner_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKNodeSigner this_ptr_conv = *(LDKNodeSigner*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       NodeSigner_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignerProvider_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSignerProvider this_ptr_conv = *(LDKSignerProvider*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SignerProvider_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKInMemorySigner this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       InMemorySigner_free(this_obj_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_funding_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1funding_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_funding_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_revocation_base_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1revocation_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_revocation_base_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_payment_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1payment_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_payment_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1delayed_1payment_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_delayed_payment_base_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_htlc_base_key(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1htlc_1base_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKSecretKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
+       InMemorySigner_set_htlc_base_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_commitment_seed(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitment_1seed(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKInMemorySigner this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
+}
+
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInMemorySigner arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = InMemorySigner_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKInMemorySigner orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1new(JNIEnv *env, jclass clz, int8_tArray funding_key, int8_tArray revocation_base_key, int8_tArray payment_key, int8_tArray delayed_payment_base_key, int8_tArray htlc_base_key, int8_tArray commitment_seed, int64_t channel_value_satoshis, int8_tArray channel_keys_id, int8_tArray rand_bytes_unique_start) {
+       LDKSecretKey funding_key_ref;
+       CHECK((*env)->GetArrayLength(env, funding_key) == 32);
+       (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_ref.bytes);
+       LDKSecretKey revocation_base_key_ref;
+       CHECK((*env)->GetArrayLength(env, revocation_base_key) == 32);
+       (*env)->GetByteArrayRegion(env, revocation_base_key, 0, 32, revocation_base_key_ref.bytes);
+       LDKSecretKey payment_key_ref;
+       CHECK((*env)->GetArrayLength(env, payment_key) == 32);
+       (*env)->GetByteArrayRegion(env, payment_key, 0, 32, payment_key_ref.bytes);
+       LDKSecretKey delayed_payment_base_key_ref;
+       CHECK((*env)->GetArrayLength(env, delayed_payment_base_key) == 32);
+       (*env)->GetByteArrayRegion(env, delayed_payment_base_key, 0, 32, delayed_payment_base_key_ref.bytes);
+       LDKSecretKey htlc_base_key_ref;
+       CHECK((*env)->GetArrayLength(env, htlc_base_key) == 32);
+       (*env)->GetByteArrayRegion(env, htlc_base_key, 0, 32, htlc_base_key_ref.bytes);
+       LDKThirtyTwoBytes commitment_seed_ref;
+       CHECK((*env)->GetArrayLength(env, commitment_seed) == 32);
+       (*env)->GetByteArrayRegion(env, commitment_seed, 0, 32, commitment_seed_ref.data);
+       LDKThirtyTwoBytes channel_keys_id_ref;
+       CHECK((*env)->GetArrayLength(env, channel_keys_id) == 32);
+       (*env)->GetByteArrayRegion(env, channel_keys_id, 0, 32, channel_keys_id_ref.data);
+       LDKThirtyTwoBytes rand_bytes_unique_start_ref;
+       CHECK((*env)->GetArrayLength(env, rand_bytes_unique_start) == 32);
+       (*env)->GetByteArrayRegion(env, rand_bytes_unique_start, 0, 32, rand_bytes_unique_start_ref.data);
+       LDKInMemorySigner ret_var = InMemorySigner_new(funding_key_ref, revocation_base_key_ref, payment_key_ref, delayed_payment_base_key_ref, htlc_base_key_ref, commitment_seed_ref, channel_value_satoshis, channel_keys_id_ref, rand_bytes_unique_start_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1pubkeys(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1selected_1contest_1delay(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbound(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCOption_boolZ *ret_copy = MALLOC(sizeof(LDKCOption_boolZ), "LDKCOption_boolZ");
+       *ret_copy = InMemorySigner_is_outbound(&this_arg_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1funding_1outpoint(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1channel_1parameters(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1channel_1type_1features(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelTypeFeatures ret_var = InMemorySigner_channel_type_features(&this_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1counterparty_1payment_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
+       spend_tx_ref.data_is_owned = true;
+       LDKStaticPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynamic_1p2wsh_1input(JNIEnv *env, jclass clz, int64_t this_arg, int8_tArray spend_tx, int64_t input_idx, int64_t descriptor) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKTransaction spend_tx_ref;
+       spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
+       spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
+       (*env)->GetByteArrayRegion(env, spend_tx, 0, spend_tx_ref.datalen, spend_tx_ref.data);
+       spend_tx_ref.data_is_owned = true;
+       LDKDelayedPaymentOutputDescriptor descriptor_conv;
+       descriptor_conv.inner = untag_ptr(descriptor);
+       descriptor_conv.is_owned = ptr_is_owned(descriptor);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
+       descriptor_conv.is_owned = false;
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = InMemorySigner_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1ChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKChannelSigner* ret_ret = MALLOC(sizeof(LDKChannelSigner), "LDKChannelSigner");
+       *ret_ret = InMemorySigner_as_ChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1EcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKEcdsaChannelSigner), "LDKEcdsaChannelSigner");
+       *ret_ret = InMemorySigner_as_EcdsaChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1WriteableEcdsaChannelSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKInMemorySigner this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKWriteableEcdsaChannelSigner* ret_ret = MALLOC(sizeof(LDKWriteableEcdsaChannelSigner), "LDKWriteableEcdsaChannelSigner");
+       *ret_ret = InMemorySigner_as_WriteableEcdsaChannelSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKInMemorySigner obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       void* arg_ptr = untag_ptr(arg);
+       CHECK_ACCESS(arg_ptr);
+       LDKEntropySource arg_conv = *(LDKEntropySource*)(arg_ptr);
+       if (arg_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&arg_conv);
+       }
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = InMemorySigner_read(ser_ref, arg_conv);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKKeysManager this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       KeysManager_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos) {
+       uint8_t seed_arr[32];
+       CHECK((*env)->GetArrayLength(env, seed) == 32);
+       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       LDKKeysManager ret_var = KeysManager_new(seed_ref, starting_time_secs, starting_time_nanos);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_KeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, KeysManager_get_node_secret_key(&this_arg_conv).bytes);
+       return ret_arr;
 }
 
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channel_1keys(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
@@ -63190,1074 +67478,2138 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channe
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1sign_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
-       LDKKeysManager this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1sign_1spendable_1outputs_1psbt(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int8_tArray psbt) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_u8Z psbt_ref;
+       psbt_ref.datalen = (*env)->GetArrayLength(env, psbt);
+       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, psbt, 0, psbt_ref.datalen, psbt_ref.data);
+       LDKCResult_CVec_u8ZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZNoneZ), "LDKCResult_CVec_u8ZNoneZ");
+       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = KeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPhantomKeysManager this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PhantomKeysManager_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
+       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
+       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
+       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
+       uint8_t seed_arr[32];
+       CHECK((*env)->GetArrayLength(env, seed) == 32);
+       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
+       uint8_t (*seed_ref)[32] = &seed_arr;
+       uint8_t cross_node_seed_arr[32];
+       CHECK((*env)->GetArrayLength(env, cross_node_seed) == 32);
+       (*env)->GetByteArrayRegion(env, cross_node_seed, 0, 32, cross_node_seed_arr);
+       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
+       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
+       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
+       if (descriptors_constr.datalen > 0)
+               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+       else
+               descriptors_constr.data = NULL;
+       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
+       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
+               int64_t descriptors_conv_27 = descriptors_vals[b];
+               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
+               CHECK_ACCESS(descriptors_conv_27_ptr);
+               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
+               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
+               descriptors_constr.data[b] = descriptors_conv_27_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
+       LDKCVec_TxOutZ outputs_constr;
+       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
+       if (outputs_constr.datalen > 0)
+               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       else
+               outputs_constr.data = NULL;
+       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
+       for (size_t h = 0; h < outputs_constr.datalen; h++) {
+               int64_t outputs_conv_7 = outputs_vals[h];
+               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
+               CHECK_ACCESS(outputs_conv_7_ptr);
+               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
+               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
+               outputs_constr.data[h] = outputs_conv_7_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       LDKCVec_u8Z change_destination_script_ref;
+       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
+       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
+       void* locktime_ptr = untag_ptr(locktime);
+       CHECK_ACCESS(locktime_ptr);
+       LDKCOption_u32Z locktime_conv = *(LDKCOption_u32Z*)(locktime_ptr);
+       locktime_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(locktime));
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = PhantomKeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1derive_1channel_1keys(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       uint8_t params_arr[32];
+       CHECK((*env)->GetArrayLength(env, params) == 32);
+       (*env)->GetByteArrayRegion(env, params, 0, 32, params_arr);
+       uint8_t (*params_ref)[32] = &params_arr;
+       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes);
+       return ret_arr;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1phantom_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKPhantomKeysManager this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKOnionMessenger this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessenger_free(this_obj_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       MessageRouter_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKDefaultMessageRouter this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       DefaultMessageRouter_free(this_obj_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1new(JNIEnv *env, jclass clz) {
+       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new();
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1as_1MessageRouter(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKDefaultMessageRouter this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
+       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKOnionMessagePath this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       OnionMessagePath_free(this_obj_conv);
+}
+
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&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, 33);
+               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 33, ret_var.data[i].compressed_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_OnionMessagePath_1set_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_PublicKeyZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               val_constr.data = NULL;
+       for (size_t i = 0; i < val_constr.datalen; i++) {
+               int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
+               LDKPublicKey val_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, val_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, val_conv_8, 0, 33, val_conv_8_ref.compressed_form);
+               val_constr.data[i] = val_conv_8_ref;
+       }
+       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1destination(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1set_1destination(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKOnionMessagePath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       void* val_ptr = untag_ptr(val);
+       CHECK_ACCESS(val_ptr);
+       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
+       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
+       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1new(JNIEnv *env, jclass clz, jobjectArray intermediate_nodes_arg, int64_t destination_arg) {
+       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
+       intermediate_nodes_arg_constr.datalen = (*env)->GetArrayLength(env, intermediate_nodes_arg);
+       if (intermediate_nodes_arg_constr.datalen > 0)
+               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               intermediate_nodes_arg_constr.data = NULL;
+       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
+               int8_tArray intermediate_nodes_arg_conv_8 = (*env)->GetObjectArrayElement(env, intermediate_nodes_arg, i);
+               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, intermediate_nodes_arg_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, intermediate_nodes_arg_conv_8, 0, 33, intermediate_nodes_arg_conv_8_ref.compressed_form);
+               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
+       }
+       void* destination_arg_ptr = untag_ptr(destination_arg);
+       CHECK_ACCESS(destination_arg_ptr);
+       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
+       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
+       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOnionMessagePath arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOnionMessagePath orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Destination_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       Destination_free(this_ptr_conv);
+}
+
+static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
+       int64_t ret_conv = Destination_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1node(JNIEnv *env, jclass clz, int8_tArray a) {
+       LDKPublicKey a_ref;
+       CHECK((*env)->GetArrayLength(env, a) == 33);
+       (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_node(a_ref);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1blinded_1path(JNIEnv *env, jclass clz, int64_t a) {
+       LDKBlindedPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = BlindedPath_clone(&a_conv);
+       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
+       *ret_copy = Destination_blinded_path(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SendError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       SendError_free(this_ptr_conv);
+}
+
+static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
+       int64_t ret_conv = SendError_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1secp256k1(JNIEnv *env, jclass clz, jclass a) {
+       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_java(env, a);
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_secp256k1(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1big_1packet(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_big_packet();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1few_1blinded_1hops(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_too_few_blinded_hops();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1first_1hop(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_first_hop();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1message(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_invalid_message();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1buffer_1full(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_buffer_full();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1get_1node_1id_1failed(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_get_node_id_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1blinded_1path_1advance_1failed(JNIEnv *env, jclass clz) {
+       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
+       *ret_copy = SendError_blinded_path_advance_failed();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SendError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
+       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
+       jboolean ret_conv = SendError_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomOnionMessageHandler_free(this_ptr_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1onion_1message(JNIEnv *env, jclass clz, int64_t entropy_source, int64_t node_signer, int64_t path, int64_t message, int64_t reply_path) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       void* node_signer_ptr = untag_ptr(node_signer);
+       if (ptr_is_owned(node_signer)) { CHECK_ACCESS(node_signer_ptr); }
+       LDKNodeSigner* node_signer_conv = (LDKNodeSigner*)node_signer_ptr;
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* message_ptr = untag_ptr(message);
+       CHECK_ACCESS(message_ptr);
+       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
+       message_conv = OnionMessageContents_clone((LDKOnionMessageContents*)untag_ptr(message));
+       LDKBlindedPath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedPath_clone(&reply_path_conv);
+       LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ), "LDKCResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ");
+       *ret_conv = create_onion_message(entropy_source_conv, node_signer_conv, path_conv, message_conv, reply_path_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1new(JNIEnv *env, jclass clz, int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t message_router, int64_t offers_handler, int64_t custom_handler) {
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       CHECK_ACCESS(entropy_source_ptr);
+       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
+       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
+       }
+       void* node_signer_ptr = untag_ptr(node_signer);
+       CHECK_ACCESS(node_signer_ptr);
+       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
+       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
+       }
+       void* logger_ptr = untag_ptr(logger);
+       CHECK_ACCESS(logger_ptr);
+       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
+       if (logger_conv.free == LDKLogger_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKLogger_JCalls_cloned(&logger_conv);
+       }
+       void* message_router_ptr = untag_ptr(message_router);
+       CHECK_ACCESS(message_router_ptr);
+       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
+       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKMessageRouter_JCalls_cloned(&message_router_conv);
+       }
+       void* offers_handler_ptr = untag_ptr(offers_handler);
+       CHECK_ACCESS(offers_handler_ptr);
+       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
+       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
+       }
+       void* custom_handler_ptr = untag_ptr(custom_handler);
+       CHECK_ACCESS(custom_handler_ptr);
+       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
+       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
+       }
+       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, message_router_conv, offers_handler_conv, custom_handler_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1send_1onion_1message(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t message, int64_t reply_path) {
+       LDKOnionMessenger this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_u8Z psbt_ref;
-       psbt_ref.datalen = (*env)->GetArrayLength(env, psbt);
-       psbt_ref.data = MALLOC(psbt_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, psbt, 0, psbt_ref.datalen, psbt_ref.data);
-       LDKCResult_PartiallySignedTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_PartiallySignedTransactionNoneZ), "LDKCResult_PartiallySignedTransactionNoneZ");
-       *ret_conv = KeysManager_sign_spendable_outputs_psbt(&this_arg_conv, descriptors_constr, psbt_ref);
+       LDKOnionMessagePath path_conv;
+       path_conv.inner = untag_ptr(path);
+       path_conv.is_owned = ptr_is_owned(path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
+       path_conv = OnionMessagePath_clone(&path_conv);
+       void* message_ptr = untag_ptr(message);
+       CHECK_ACCESS(message_ptr);
+       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
+       message_conv = OnionMessageContents_clone((LDKOnionMessageContents*)untag_ptr(message));
+       LDKBlindedPath reply_path_conv;
+       reply_path_conv.inner = untag_ptr(reply_path);
+       reply_path_conv.is_owned = ptr_is_owned(reply_path);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
+       reply_path_conv = BlindedPath_clone(&reply_path_conv);
+       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
+       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, path_conv, message_conv, reply_path_conv);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKKeysManager this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
-       else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
-       }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
-       else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
+       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
+       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOnionMessenger this_arg_conv;
+       this_arg_conv.inner = untag_ptr(this_arg);
+       this_arg_conv.is_owned = ptr_is_owned(this_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
+       this_arg_conv.is_owned = false;
+       LDKOnionMessageProvider* ret_ret = MALLOC(sizeof(LDKOnionMessageProvider), "LDKOnionMessageProvider");
+       *ret_ret = OnionMessenger_as_OnionMessageProvider(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessageHandler_free(this_ptr_conv);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessage_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OffersMessage_free(this_ptr_conv);
+}
+
+static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
+       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1request(JNIEnv *env, jclass clz, int64_t a) {
+       LDKInvoiceRequest a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceRequest_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_request(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice(JNIEnv *env, jclass clz, int64_t a) {
+       LDKBolt12Invoice a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = Bolt12Invoice_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1error(JNIEnv *env, jclass clz, int64_t a) {
+       LDKInvoiceError a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv = InvoiceError_clone(&a_conv);
+       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
+       *ret_copy = OffersMessage_invoice_error(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OffersMessage_1is_1known_1type(JNIEnv *env, jclass clz, int64_t tlv_type) {
+       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1tlv_1type(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
+       int64_t ret_conv = OffersMessage_tlv_type(this_arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OffersMessage_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
+       LDKCVec_u8Z ret_var = OffersMessage_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       void* arg_b_ptr = untag_ptr(arg_b);
+       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
+       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
+       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
+       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPacket this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Packet_free(this_obj_conv);
+}
+
+JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_Packet_1get_1version(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_t ret_conv = Packet_get_version(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1version(JNIEnv *env, jclass clz, int64_t this_ptr, int8_t val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       Packet_set_version(&this_ptr_conv, val);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1public_1key(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Packet_get_public_key(&this_ptr_conv).compressed_form);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1public_1key(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       Packet_set_public_key(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1hop_1data(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Packet_get_hop_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_Packet_1set_1hop_1data(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = (*env)->GetArrayLength(env, val);
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, val, 0, val_ref.datalen, val_ref.data);
+       Packet_set_hop_data(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1hmac(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Packet_get_hmac(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1hmac(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKPacket this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       Packet_set_hmac(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Packet_1new(JNIEnv *env, jclass clz, int8_t version_arg, int8_tArray public_key_arg, int8_tArray hop_data_arg, int8_tArray hmac_arg) {
+       LDKPublicKey public_key_arg_ref;
+       CHECK((*env)->GetArrayLength(env, public_key_arg) == 33);
+       (*env)->GetByteArrayRegion(env, public_key_arg, 0, 33, public_key_arg_ref.compressed_form);
+       LDKCVec_u8Z hop_data_arg_ref;
+       hop_data_arg_ref.datalen = (*env)->GetArrayLength(env, hop_data_arg);
+       hop_data_arg_ref.data = MALLOC(hop_data_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, hop_data_arg, 0, hop_data_arg_ref.datalen, hop_data_arg_ref.data);
+       LDKThirtyTwoBytes hmac_arg_ref;
+       CHECK((*env)->GetArrayLength(env, hmac_arg) == 32);
+       (*env)->GetByteArrayRegion(env, hmac_arg, 0, 32, hmac_arg_ref.data);
+       LDKPacket ret_var = Packet_new(version_arg, public_key_arg_ref, hop_data_arg_ref, hmac_arg_ref);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t Packet_clone_ptr(LDKPacket *NONNULL_PTR arg) {
+       LDKPacket ret_var = Packet_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Packet_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPacket arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = Packet_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Packet_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPacket orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKPacket ret_var = Packet_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Packet_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKPacket a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKPacket b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = Packet_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Packet_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPacket obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = Packet_write(&obj_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_OnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       OnionMessageContents_free(this_ptr_conv);
+}
+
+static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)untag_ptr(arg);
+       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)untag_ptr(orig);
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1offers(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
+       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_offers(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1custom(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKCustomOnionMessageContents a_conv = *(LDKCustomOnionMessageContents*)(a_ptr);
+       if (a_conv.free == LDKCustomOnionMessageContents_JCalls_free) {
+               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
+               LDKCustomOnionMessageContents_JCalls_cloned(&a_conv);
        }
-       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_PackedLockTimeZ locktime_conv = *(LDKCOption_PackedLockTimeZ*)(locktime_ptr);
-       locktime_conv = COption_PackedLockTimeZ_clone((LDKCOption_PackedLockTimeZ*)untag_ptr(locktime));
-       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
-       *ret_conv = KeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
+       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
+       *ret_copy = OnionMessageContents_custom(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = KeysManager_as_EntropySource(&this_arg_conv);
+static inline uint64_t CustomOnionMessageContents_clone_ptr(LDKCustomOnionMessageContents *NONNULL_PTR arg) {
+       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
+       *ret_ret = CustomOnionMessageContents_clone(arg);
        return tag_ptr(ret_ret, true);
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = untag_ptr(arg);
+       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
+       LDKCustomOnionMessageContents* arg_conv = (LDKCustomOnionMessageContents*)arg_ptr;
+       int64_t ret_conv = CustomOnionMessageContents_clone_ptr(arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = KeysManager_as_NodeSigner(&this_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       void* orig_ptr = untag_ptr(orig);
+       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
+       LDKCustomOnionMessageContents* orig_conv = (LDKCustomOnionMessageContents*)orig_ptr;
+       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
+       *ret_ret = CustomOnionMessageContents_clone(orig_conv);
        return tag_ptr(ret_ret, true);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = KeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKCustomOnionMessageContents this_ptr_conv = *(LDKCustomOnionMessageContents*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       CustomOnionMessageContents_free(this_ptr_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKPhantomKeysManager this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedPath this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       PhantomKeysManager_free(this_obj_conv);
+       BlindedPath_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1EntropySource(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKEntropySource* ret_ret = MALLOC(sizeof(LDKEntropySource), "LDKEntropySource");
-       *ret_ret = PhantomKeysManager_as_EntropySource(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1introduction_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedPath_get_introduction_node_id(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1NodeSigner(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKNodeSigner* ret_ret = MALLOC(sizeof(LDKNodeSigner), "LDKNodeSigner");
-       *ret_ret = PhantomKeysManager_as_NodeSigner(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1introduction_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedPath_set_introduction_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1as_1SignerProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKSignerProvider* ret_ret = MALLOC(sizeof(LDKSignerProvider), "LDKSignerProvider");
-       *ret_ret = PhantomKeysManager_as_SignerProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedPath_get_blinding_point(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1new(JNIEnv *env, jclass clz, int8_tArray seed, int64_t starting_time_secs, int32_t starting_time_nanos, int8_tArray cross_node_seed) {
-       uint8_t seed_arr[32];
-       CHECK((*env)->GetArrayLength(env, seed) == 32);
-       (*env)->GetByteArrayRegion(env, seed, 0, 32, seed_arr);
-       uint8_t (*seed_ref)[32] = &seed_arr;
-       uint8_t cross_node_seed_arr[32];
-       CHECK((*env)->GetArrayLength(env, cross_node_seed) == 32);
-       (*env)->GetByteArrayRegion(env, cross_node_seed, 0, 32, cross_node_seed_arr);
-       uint8_t (*cross_node_seed_ref)[32] = &cross_node_seed_arr;
-       LDKPhantomKeysManager ret_var = PhantomKeysManager_new(seed_ref, starting_time_secs, starting_time_nanos, cross_node_seed_ref);
-       int64_t ret_ref = 0;
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
-       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1blinding_1point(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedPath_set_blinding_point(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1spend_1spendable_1outputs(JNIEnv *env, jclass clz, int64_t this_arg, int64_tArray descriptors, int64_tArray outputs, int8_tArray change_destination_script, int32_t feerate_sat_per_1000_weight, int64_t locktime) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
-       descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
-       if (descriptors_constr.datalen > 0)
-               descriptors_constr.data = MALLOC(descriptors_constr.datalen * sizeof(LDKSpendableOutputDescriptor), "LDKCVec_SpendableOutputDescriptorZ Elements");
+JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1blinded_1hops(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ ret_var = BlindedPath_get_blinded_hops(&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++) {
+               LDKBlindedHop ret_conv_12_var = ret_var.data[m];
+               int64_t ret_conv_12_ref = 0;
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_var);
+               ret_conv_12_ref = tag_ptr(ret_conv_12_var.inner, ret_conv_12_var.is_owned);
+               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_BlindedPath_1set_1blinded_1hops(JNIEnv *env, jclass clz, int64_t this_ptr, int64_tArray val) {
+       LDKBlindedPath this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_BlindedHopZ val_constr;
+       val_constr.datalen = (*env)->GetArrayLength(env, val);
+       if (val_constr.datalen > 0)
+               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
        else
-               descriptors_constr.data = NULL;
-       int64_t* descriptors_vals = (*env)->GetLongArrayElements (env, descriptors, NULL);
-       for (size_t b = 0; b < descriptors_constr.datalen; b++) {
-               int64_t descriptors_conv_27 = descriptors_vals[b];
-               void* descriptors_conv_27_ptr = untag_ptr(descriptors_conv_27);
-               CHECK_ACCESS(descriptors_conv_27_ptr);
-               LDKSpendableOutputDescriptor descriptors_conv_27_conv = *(LDKSpendableOutputDescriptor*)(descriptors_conv_27_ptr);
-               descriptors_conv_27_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)untag_ptr(descriptors_conv_27));
-               descriptors_constr.data[b] = descriptors_conv_27_conv;
+               val_constr.data = NULL;
+       int64_t* val_vals = (*env)->GetLongArrayElements (env, val, NULL);
+       for (size_t m = 0; m < val_constr.datalen; m++) {
+               int64_t val_conv_12 = val_vals[m];
+               LDKBlindedHop val_conv_12_conv;
+               val_conv_12_conv.inner = untag_ptr(val_conv_12);
+               val_conv_12_conv.is_owned = ptr_is_owned(val_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv);
+               val_conv_12_conv = BlindedHop_clone(&val_conv_12_conv);
+               val_constr.data[m] = val_conv_12_conv;
        }
-       (*env)->ReleaseLongArrayElements(env, descriptors, descriptors_vals, 0);
-       LDKCVec_TxOutZ outputs_constr;
-       outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
-       if (outputs_constr.datalen > 0)
-               outputs_constr.data = MALLOC(outputs_constr.datalen * sizeof(LDKTxOut), "LDKCVec_TxOutZ Elements");
+       (*env)->ReleaseLongArrayElements(env, val, val_vals, 0);
+       BlindedPath_set_blinded_hops(&this_ptr_conv, val_constr);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new(JNIEnv *env, jclass clz, int8_tArray introduction_node_id_arg, int8_tArray blinding_point_arg, int64_tArray blinded_hops_arg) {
+       LDKPublicKey introduction_node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, introduction_node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, introduction_node_id_arg, 0, 33, introduction_node_id_arg_ref.compressed_form);
+       LDKPublicKey blinding_point_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinding_point_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinding_point_arg, 0, 33, blinding_point_arg_ref.compressed_form);
+       LDKCVec_BlindedHopZ blinded_hops_arg_constr;
+       blinded_hops_arg_constr.datalen = (*env)->GetArrayLength(env, blinded_hops_arg);
+       if (blinded_hops_arg_constr.datalen > 0)
+               blinded_hops_arg_constr.data = MALLOC(blinded_hops_arg_constr.datalen * sizeof(LDKBlindedHop), "LDKCVec_BlindedHopZ Elements");
        else
-               outputs_constr.data = NULL;
-       int64_t* outputs_vals = (*env)->GetLongArrayElements (env, outputs, NULL);
-       for (size_t h = 0; h < outputs_constr.datalen; h++) {
-               int64_t outputs_conv_7 = outputs_vals[h];
-               void* outputs_conv_7_ptr = untag_ptr(outputs_conv_7);
-               CHECK_ACCESS(outputs_conv_7_ptr);
-               LDKTxOut outputs_conv_7_conv = *(LDKTxOut*)(outputs_conv_7_ptr);
-               outputs_conv_7_conv = TxOut_clone((LDKTxOut*)untag_ptr(outputs_conv_7));
-               outputs_constr.data[h] = outputs_conv_7_conv;
+               blinded_hops_arg_constr.data = NULL;
+       int64_t* blinded_hops_arg_vals = (*env)->GetLongArrayElements (env, blinded_hops_arg, NULL);
+       for (size_t m = 0; m < blinded_hops_arg_constr.datalen; m++) {
+               int64_t blinded_hops_arg_conv_12 = blinded_hops_arg_vals[m];
+               LDKBlindedHop blinded_hops_arg_conv_12_conv;
+               blinded_hops_arg_conv_12_conv.inner = untag_ptr(blinded_hops_arg_conv_12);
+               blinded_hops_arg_conv_12_conv.is_owned = ptr_is_owned(blinded_hops_arg_conv_12);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(blinded_hops_arg_conv_12_conv);
+               blinded_hops_arg_conv_12_conv = BlindedHop_clone(&blinded_hops_arg_conv_12_conv);
+               blinded_hops_arg_constr.data[m] = blinded_hops_arg_conv_12_conv;
        }
-       (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
-       LDKCVec_u8Z change_destination_script_ref;
-       change_destination_script_ref.datalen = (*env)->GetArrayLength(env, change_destination_script);
-       change_destination_script_ref.data = MALLOC(change_destination_script_ref.datalen, "LDKCVec_u8Z Bytes");
-       (*env)->GetByteArrayRegion(env, change_destination_script, 0, change_destination_script_ref.datalen, change_destination_script_ref.data);
-       void* locktime_ptr = untag_ptr(locktime);
-       CHECK_ACCESS(locktime_ptr);
-       LDKCOption_PackedLockTimeZ locktime_conv = *(LDKCOption_PackedLockTimeZ*)(locktime_ptr);
-       locktime_conv = COption_PackedLockTimeZ_clone((LDKCOption_PackedLockTimeZ*)untag_ptr(locktime));
-       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
-       *ret_conv = PhantomKeysManager_spend_spendable_outputs(&this_arg_conv, descriptors_constr, outputs_constr, change_destination_script_ref, feerate_sat_per_1000_weight, locktime_conv);
-       return tag_ptr(ret_conv, true);
+       (*env)->ReleaseLongArrayElements(env, blinded_hops_arg, blinded_hops_arg_vals, 0);
+       LDKBlindedPath ret_var = BlindedPath_new(introduction_node_id_arg_ref, blinding_point_arg_ref, blinded_hops_arg_constr);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1derive_1channel_1keys(JNIEnv *env, jclass clz, int64_t this_arg, int64_t channel_value_satoshis, int8_tArray params) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       uint8_t params_arr[32];
-       CHECK((*env)->GetArrayLength(env, params) == 32);
-       (*env)->GetByteArrayRegion(env, params, 0, 32, params_arr);
-       uint8_t (*params_ref)[32] = &params_arr;
-       LDKInMemorySigner ret_var = PhantomKeysManager_derive_channel_keys(&this_arg_conv, channel_value_satoshis, params_ref);
+static inline uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg) {
+       LDKBlindedPath ret_var = BlindedPath_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedPath arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedPath_clone_ptr(&arg_conv);
+       return ret_conv;
+}
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_node_secret_key(&this_arg_conv).bytes);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedPath orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedPath ret_var = BlindedPath_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PhantomKeysManager_1get_1phantom_1node_1secret_1key(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKPhantomKeysManager this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
-       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, PhantomKeysManager_get_phantom_node_secret_key(&this_arg_conv).bytes);
-       return ret_arr;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedPath o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedPath_hash(&o_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKOnionMessenger this_obj_conv;
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPath_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedPath a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedPath b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedPath_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKBlindedHop this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessenger_free(this_obj_conv);
+       BlindedHop_free(this_obj_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKMessageRouter this_ptr_conv = *(LDKMessageRouter*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       MessageRouter_free(this_ptr_conv);
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1get_1blinded_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, BlindedHop_get_blinded_node_id(&this_ptr_conv).compressed_form);
+       return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKDefaultMessageRouter this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       DefaultMessageRouter_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1set_1blinded_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       BlindedHop_set_blinded_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1new(JNIEnv *env, jclass clz) {
-       LDKDefaultMessageRouter ret_var = DefaultMessageRouter_new();
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1get_1encrypted_1payload(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_get_encrypted_payload(&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_BlindedHop_1set_1encrypted_1payload(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKBlindedHop this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKCVec_u8Z val_ref;
+       val_ref.datalen = (*env)->GetArrayLength(env, val);
+       val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, val, 0, val_ref.datalen, val_ref.data);
+       BlindedHop_set_encrypted_payload(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1new(JNIEnv *env, jclass clz, int8_tArray blinded_node_id_arg, int8_tArray encrypted_payload_arg) {
+       LDKPublicKey blinded_node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, blinded_node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, blinded_node_id_arg, 0, 33, blinded_node_id_arg_ref.compressed_form);
+       LDKCVec_u8Z encrypted_payload_arg_ref;
+       encrypted_payload_arg_ref.datalen = (*env)->GetArrayLength(env, encrypted_payload_arg);
+       encrypted_payload_arg_ref.data = MALLOC(encrypted_payload_arg_ref.datalen, "LDKCVec_u8Z Bytes");
+       (*env)->GetByteArrayRegion(env, encrypted_payload_arg, 0, encrypted_payload_arg_ref.datalen, encrypted_payload_arg_ref.data);
+       LDKBlindedHop ret_var = BlindedHop_new(blinded_node_id_arg_ref, encrypted_payload_arg_ref);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultMessageRouter_1as_1MessageRouter(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKDefaultMessageRouter this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKMessageRouter* ret_ret = MALLOC(sizeof(LDKMessageRouter), "LDKMessageRouter");
-       *ret_ret = DefaultMessageRouter_as_MessageRouter(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
+static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
+       LDKBlindedHop ret_var = BlindedHop_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBlindedHop arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKOnionMessagePath this_obj_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKBlindedHop orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
+       LDKBlindedHop o_conv;
+       o_conv.inner = untag_ptr(o);
+       o_conv.is_owned = ptr_is_owned(o);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
+       o_conv.is_owned = false;
+       int64_t ret_conv = BlindedHop_hash(&o_conv);
+       return ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKBlindedHop a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKBlindedHop b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new_1for_1message(JNIEnv *env, jclass clz, jobjectArray node_pks, int64_t entropy_source) {
+       LDKCVec_PublicKeyZ node_pks_constr;
+       node_pks_constr.datalen = (*env)->GetArrayLength(env, node_pks);
+       if (node_pks_constr.datalen > 0)
+               node_pks_constr.data = MALLOC(node_pks_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
+       else
+               node_pks_constr.data = NULL;
+       for (size_t i = 0; i < node_pks_constr.datalen; i++) {
+               int8_tArray node_pks_conv_8 = (*env)->GetObjectArrayElement(env, node_pks, i);
+               LDKPublicKey node_pks_conv_8_ref;
+               CHECK((*env)->GetArrayLength(env, node_pks_conv_8) == 33);
+               (*env)->GetByteArrayRegion(env, node_pks_conv_8, 0, 33, node_pks_conv_8_ref.compressed_form);
+               node_pks_constr.data[i] = node_pks_conv_8_ref;
+       }
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
+       *ret_conv = BlindedPath_new_for_message(node_pks_constr, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1one_1hop_1for_1payment(JNIEnv *env, jclass clz, int8_tArray payee_node_id, int64_t payee_tlvs, int64_t entropy_source) {
+       LDKPublicKey payee_node_id_ref;
+       CHECK((*env)->GetArrayLength(env, payee_node_id) == 33);
+       (*env)->GetByteArrayRegion(env, payee_node_id, 0, 33, payee_node_id_ref.compressed_form);
+       LDKReceiveTlvs payee_tlvs_conv;
+       payee_tlvs_conv.inner = untag_ptr(payee_tlvs);
+       payee_tlvs_conv.is_owned = ptr_is_owned(payee_tlvs);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_tlvs_conv);
+       payee_tlvs_conv = ReceiveTlvs_clone(&payee_tlvs_conv);
+       void* entropy_source_ptr = untag_ptr(entropy_source);
+       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
+       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
+       LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ), "LDKCResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ");
+       *ret_conv = BlindedPath_one_hop_for_payment(payee_node_id_ref, payee_tlvs_conv, entropy_source_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedPath obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedPath_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
+       *ret_conv = BlindedPath_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKBlindedHop obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
+       *ret_conv = BlindedHop_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKForwardNode this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       OnionMessagePath_free(this_obj_conv);
+       ForwardNode_free(this_obj_conv);
 }
 
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1tlvs(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ ret_var = OnionMessagePath_get_intermediate_nodes(&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, 33);
-               (*env)->SetByteArrayRegion(env, ret_conv_8_arr, 0, 33, ret_var.data[i].compressed_form);
-               (*env)->SetObjectArrayElement(env, ret_arr, i, ret_conv_8_arr);
-       }
-       
-       FREE(ret_var.data);
+       LDKForwardTlvs ret_var = ForwardNode_get_tlvs(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1tlvs(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKForwardTlvs val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = ForwardTlvs_clone(&val_conv);
+       ForwardNode_set_tlvs(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardNode this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ForwardNode_get_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1set_1intermediate_1nodes(JNIEnv *env, jclass clz, int64_t this_ptr, jobjectArray val) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1node_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCVec_PublicKeyZ val_constr;
-       val_constr.datalen = (*env)->GetArrayLength(env, val);
-       if (val_constr.datalen > 0)
-               val_constr.data = MALLOC(val_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               val_constr.data = NULL;
-       for (size_t i = 0; i < val_constr.datalen; i++) {
-               int8_tArray val_conv_8 = (*env)->GetObjectArrayElement(env, val, i);
-               LDKPublicKey val_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, val_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, val_conv_8, 0, 33, val_conv_8_ref.compressed_form);
-               val_constr.data[i] = val_conv_8_ref;
-       }
-       OnionMessagePath_set_intermediate_nodes(&this_ptr_conv, val_constr);
+       LDKPublicKey val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 33);
+       (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
+       ForwardNode_set_node_id(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1get_1destination(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = OnionMessagePath_get_destination(&this_ptr_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+       int64_t ret_conv = ForwardNode_get_htlc_maximum_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1set_1destination(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
-       LDKOnionMessagePath this_ptr_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1htlc_1maximum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardNode this_ptr_conv;
        this_ptr_conv.inner = untag_ptr(this_ptr);
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       void* val_ptr = untag_ptr(val);
-       CHECK_ACCESS(val_ptr);
-       LDKDestination val_conv = *(LDKDestination*)(val_ptr);
-       val_conv = Destination_clone((LDKDestination*)untag_ptr(val));
-       OnionMessagePath_set_destination(&this_ptr_conv, val_conv);
+       ForwardNode_set_htlc_maximum_msat(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1new(JNIEnv *env, jclass clz, jobjectArray intermediate_nodes_arg, int64_t destination_arg) {
-       LDKCVec_PublicKeyZ intermediate_nodes_arg_constr;
-       intermediate_nodes_arg_constr.datalen = (*env)->GetArrayLength(env, intermediate_nodes_arg);
-       if (intermediate_nodes_arg_constr.datalen > 0)
-               intermediate_nodes_arg_constr.data = MALLOC(intermediate_nodes_arg_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               intermediate_nodes_arg_constr.data = NULL;
-       for (size_t i = 0; i < intermediate_nodes_arg_constr.datalen; i++) {
-               int8_tArray intermediate_nodes_arg_conv_8 = (*env)->GetObjectArrayElement(env, intermediate_nodes_arg, i);
-               LDKPublicKey intermediate_nodes_arg_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, intermediate_nodes_arg_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, intermediate_nodes_arg_conv_8, 0, 33, intermediate_nodes_arg_conv_8_ref.compressed_form);
-               intermediate_nodes_arg_constr.data[i] = intermediate_nodes_arg_conv_8_ref;
-       }
-       void* destination_arg_ptr = untag_ptr(destination_arg);
-       CHECK_ACCESS(destination_arg_ptr);
-       LDKDestination destination_arg_conv = *(LDKDestination*)(destination_arg_ptr);
-       destination_arg_conv = Destination_clone((LDKDestination*)untag_ptr(destination_arg));
-       LDKOnionMessagePath ret_var = OnionMessagePath_new(intermediate_nodes_arg_constr, destination_arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1new(JNIEnv *env, jclass clz, int64_t tlvs_arg, int8_tArray node_id_arg, int64_t htlc_maximum_msat_arg) {
+       LDKForwardTlvs tlvs_arg_conv;
+       tlvs_arg_conv.inner = untag_ptr(tlvs_arg);
+       tlvs_arg_conv.is_owned = ptr_is_owned(tlvs_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(tlvs_arg_conv);
+       tlvs_arg_conv = ForwardTlvs_clone(&tlvs_arg_conv);
+       LDKPublicKey node_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, node_id_arg) == 33);
+       (*env)->GetByteArrayRegion(env, node_id_arg, 0, 33, node_id_arg_ref.compressed_form);
+       LDKForwardNode ret_var = ForwardNode_new(tlvs_arg_conv, node_id_arg_ref, htlc_maximum_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-static inline uint64_t OnionMessagePath_clone_ptr(LDKOnionMessagePath *NONNULL_PTR arg) {
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(arg);
+static inline uint64_t ForwardNode_clone_ptr(LDKForwardNode *NONNULL_PTR arg) {
+       LDKForwardNode ret_var = ForwardNode_clone(arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOnionMessagePath arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKForwardNode arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = OnionMessagePath_clone_ptr(&arg_conv);
+       int64_t ret_conv = ForwardNode_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessagePath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOnionMessagePath orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardNode_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKForwardNode orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKOnionMessagePath ret_var = OnionMessagePath_clone(&orig_conv);
+       LDKForwardNode ret_var = ForwardNode_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Destination_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKDestination this_ptr_conv = *(LDKDestination*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       Destination_free(this_ptr_conv);
-}
-
-static inline uint64_t Destination_clone_ptr(LDKDestination *NONNULL_PTR arg) {
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKDestination* arg_conv = (LDKDestination*)untag_ptr(arg);
-       int64_t ret_conv = Destination_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKDestination* orig_conv = (LDKDestination*)untag_ptr(orig);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1node(JNIEnv *env, jclass clz, int8_tArray a) {
-       LDKPublicKey a_ref;
-       CHECK((*env)->GetArrayLength(env, a) == 33);
-       (*env)->GetByteArrayRegion(env, a, 0, 33, a_ref.compressed_form);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_node(a_ref);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Destination_1blinded_1path(JNIEnv *env, jclass clz, int64_t a) {
-       LDKBlindedPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = BlindedPath_clone(&a_conv);
-       LDKDestination *ret_copy = MALLOC(sizeof(LDKDestination), "LDKDestination");
-       *ret_copy = Destination_blinded_path(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SendError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKSendError this_ptr_conv = *(LDKSendError*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       SendError_free(this_ptr_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKForwardTlvs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ForwardTlvs_free(this_obj_conv);
 }
 
-static inline uint64_t SendError_clone_ptr(LDKSendError *NONNULL_PTR arg) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKSendError* arg_conv = (LDKSendError*)untag_ptr(arg);
-       int64_t ret_conv = SendError_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_get_short_channel_id(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKSendError* orig_conv = (LDKSendError*)untag_ptr(orig);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1secp256k1(JNIEnv *env, jclass clz, jclass a) {
-       LDKSecp256k1Error a_conv = LDKSecp256k1Error_from_java(env, a);
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_secp256k1(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1short_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ForwardTlvs_set_short_channel_id(&this_ptr_conv, val);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1big_1packet(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_big_packet();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1payment_1relay(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay ret_var = ForwardTlvs_get_payment_relay(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1too_1few_1blinded_1hops(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_too_few_blinded_hops();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1payment_1relay(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentRelay val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentRelay_clone(&val_conv);
+       ForwardTlvs_set_payment_relay(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1first_1hop(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_first_hop();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints ret_var = ForwardTlvs_get_payment_constraints(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1invalid_1message(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_invalid_message();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ForwardTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1buffer_1full(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_buffer_full();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1features(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures ret_var = ForwardTlvs_get_features(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1get_1node_1id_1failed(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_get_node_id_failed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1features(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKForwardTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKBlindedHopFeatures val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = BlindedHopFeatures_clone(&val_conv);
+       ForwardTlvs_set_features(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1new(JNIEnv *env, jclass clz, int64_t short_channel_id_arg, int64_t payment_relay_arg, int64_t payment_constraints_arg, int64_t features_arg) {
+       LDKPaymentRelay payment_relay_arg_conv;
+       payment_relay_arg_conv.inner = untag_ptr(payment_relay_arg);
+       payment_relay_arg_conv.is_owned = ptr_is_owned(payment_relay_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_relay_arg_conv);
+       payment_relay_arg_conv = PaymentRelay_clone(&payment_relay_arg_conv);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       LDKBlindedHopFeatures features_arg_conv;
+       features_arg_conv.inner = untag_ptr(features_arg);
+       features_arg_conv.is_owned = ptr_is_owned(features_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
+       features_arg_conv = BlindedHopFeatures_clone(&features_arg_conv);
+       LDKForwardTlvs ret_var = ForwardTlvs_new(short_channel_id_arg, payment_relay_arg_conv, payment_constraints_arg_conv, features_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SendError_1blinded_1path_1advance_1failed(JNIEnv *env, jclass clz) {
-       LDKSendError *ret_copy = MALLOC(sizeof(LDKSendError), "LDKSendError");
-       *ret_copy = SendError_blinded_path_advance_failed();
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ForwardTlvs_clone_ptr(LDKForwardTlvs *NONNULL_PTR arg) {
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SendError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKSendError* a_conv = (LDKSendError*)untag_ptr(a);
-       LDKSendError* b_conv = (LDKSendError*)untag_ptr(b);
-       jboolean ret_conv = SendError_eq(a_conv, b_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKForwardTlvs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ForwardTlvs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomOnionMessageHandler this_ptr_conv = *(LDKCustomOnionMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomOnionMessageHandler_free(this_ptr_conv);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1new(JNIEnv *env, jclass clz, int64_t entropy_source, int64_t node_signer, int64_t logger, int64_t message_router, int64_t offers_handler, int64_t custom_handler) {
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* node_signer_ptr = untag_ptr(node_signer);
-       CHECK_ACCESS(node_signer_ptr);
-       LDKNodeSigner node_signer_conv = *(LDKNodeSigner*)(node_signer_ptr);
-       if (node_signer_conv.free == LDKNodeSigner_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKNodeSigner_JCalls_cloned(&node_signer_conv);
-       }
-       void* logger_ptr = untag_ptr(logger);
-       CHECK_ACCESS(logger_ptr);
-       LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
-       if (logger_conv.free == LDKLogger_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKLogger_JCalls_cloned(&logger_conv);
-       }
-       void* message_router_ptr = untag_ptr(message_router);
-       CHECK_ACCESS(message_router_ptr);
-       LDKMessageRouter message_router_conv = *(LDKMessageRouter*)(message_router_ptr);
-       if (message_router_conv.free == LDKMessageRouter_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKMessageRouter_JCalls_cloned(&message_router_conv);
-       }
-       void* offers_handler_ptr = untag_ptr(offers_handler);
-       CHECK_ACCESS(offers_handler_ptr);
-       LDKOffersMessageHandler offers_handler_conv = *(LDKOffersMessageHandler*)(offers_handler_ptr);
-       if (offers_handler_conv.free == LDKOffersMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKOffersMessageHandler_JCalls_cloned(&offers_handler_conv);
-       }
-       void* custom_handler_ptr = untag_ptr(custom_handler);
-       CHECK_ACCESS(custom_handler_ptr);
-       LDKCustomOnionMessageHandler custom_handler_conv = *(LDKCustomOnionMessageHandler*)(custom_handler_ptr);
-       if (custom_handler_conv.free == LDKCustomOnionMessageHandler_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageHandler_JCalls_cloned(&custom_handler_conv);
-       }
-       LDKOnionMessenger ret_var = OnionMessenger_new(entropy_source_conv, node_signer_conv, logger_conv, message_router_conv, offers_handler_conv, custom_handler_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKForwardTlvs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKForwardTlvs ret_var = ForwardTlvs_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1send_1onion_1message(JNIEnv *env, jclass clz, int64_t this_arg, int64_t path, int64_t message, int64_t reply_path) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessagePath path_conv;
-       path_conv.inner = untag_ptr(path);
-       path_conv.is_owned = ptr_is_owned(path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv);
-       path_conv = OnionMessagePath_clone(&path_conv);
-       void* message_ptr = untag_ptr(message);
-       CHECK_ACCESS(message_ptr);
-       LDKOnionMessageContents message_conv = *(LDKOnionMessageContents*)(message_ptr);
-       message_conv = OnionMessageContents_clone((LDKOnionMessageContents*)untag_ptr(message));
-       LDKBlindedPath reply_path_conv;
-       reply_path_conv.inner = untag_ptr(reply_path);
-       reply_path_conv.is_owned = ptr_is_owned(reply_path);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(reply_path_conv);
-       reply_path_conv = BlindedPath_clone(&reply_path_conv);
-       LDKCResult_NoneSendErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSendErrorZ), "LDKCResult_NoneSendErrorZ");
-       *ret_conv = OnionMessenger_send_onion_message(&this_arg_conv, path_conv, message_conv, reply_path_conv);
-       return tag_ptr(ret_conv, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessageHandler* ret_ret = MALLOC(sizeof(LDKOnionMessageHandler), "LDKOnionMessageHandler");
-       *ret_ret = OnionMessenger_as_OnionMessageHandler(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessenger_1as_1OnionMessageProvider(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOnionMessenger this_arg_conv;
-       this_arg_conv.inner = untag_ptr(this_arg);
-       this_arg_conv.is_owned = ptr_is_owned(this_arg);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
-       this_arg_conv.is_owned = false;
-       LDKOnionMessageProvider* ret_ret = MALLOC(sizeof(LDKOnionMessageProvider), "LDKOnionMessageProvider");
-       *ret_ret = OnionMessenger_as_OnionMessageProvider(&this_arg_conv);
-       return tag_ptr(ret_ret, true);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessageHandler_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessageHandler this_ptr_conv = *(LDKOffersMessageHandler*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessageHandler_free(this_ptr_conv);
-}
-
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OffersMessage_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOffersMessage this_ptr_conv = *(LDKOffersMessage*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OffersMessage_free(this_ptr_conv);
-}
-
-static inline uint64_t OffersMessage_clone_ptr(LDKOffersMessage *NONNULL_PTR arg) {
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOffersMessage* arg_conv = (LDKOffersMessage*)untag_ptr(arg);
-       int64_t ret_conv = OffersMessage_clone_ptr(arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOffersMessage* orig_conv = (LDKOffersMessage*)untag_ptr(orig);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKReceiveTlvs this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ReceiveTlvs_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1request(JNIEnv *env, jclass clz, int64_t a) {
-       LDKInvoiceRequest a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceRequest_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_request(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1get_1payment_1secret(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ReceiveTlvs_get_payment_secret(&this_ptr_conv));
+       return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice(JNIEnv *env, jclass clz, int64_t a) {
-       LDKBolt12Invoice a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = Bolt12Invoice_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1set_1payment_1secret(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       ReceiveTlvs_set_payment_secret(&this_ptr_conv, val_ref);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1invoice_1error(JNIEnv *env, jclass clz, int64_t a) {
-       LDKInvoiceError a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv = InvoiceError_clone(&a_conv);
-       LDKOffersMessage *ret_copy = MALLOC(sizeof(LDKOffersMessage), "LDKOffersMessage");
-       *ret_copy = OffersMessage_invoice_error(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1get_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints ret_var = ReceiveTlvs_get_payment_constraints(&this_ptr_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OffersMessage_1is_1known_1type(JNIEnv *env, jclass clz, int64_t tlv_type) {
-       jboolean ret_conv = OffersMessage_is_known_type(tlv_type);
-       return ret_conv;
-}
-
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1tlv_1type(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKOffersMessage* this_arg_conv = (LDKOffersMessage*)untag_ptr(this_arg);
-       int64_t ret_conv = OffersMessage_tlv_type(this_arg_conv);
-       return ret_conv;
-}
-
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OffersMessage_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKOffersMessage* obj_conv = (LDKOffersMessage*)untag_ptr(obj);
-       LDKCVec_u8Z ret_var = OffersMessage_write(obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_OffersMessage_1read(JNIEnv *env, jclass clz, int8_tArray ser, int64_t arg_a, int64_t arg_b) {
-       LDKu8slice ser_ref;
-       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
-       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       void* arg_b_ptr = untag_ptr(arg_b);
-       if (ptr_is_owned(arg_b)) { CHECK_ACCESS(arg_b_ptr); }
-       LDKLogger* arg_b_conv = (LDKLogger*)arg_b_ptr;
-       LDKCResult_OffersMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OffersMessageDecodeErrorZ), "LDKCResult_OffersMessageDecodeErrorZ");
-       *ret_conv = OffersMessage_read(ser_ref, arg_a, arg_b_conv);
-       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
-       return tag_ptr(ret_conv, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1set_1payment_1constraints(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKReceiveTlvs this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKPaymentConstraints val_conv;
+       val_conv.inner = untag_ptr(val);
+       val_conv.is_owned = ptr_is_owned(val);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
+       val_conv = PaymentConstraints_clone(&val_conv);
+       ReceiveTlvs_set_payment_constraints(&this_ptr_conv, val_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKOnionMessageContents this_ptr_conv = *(LDKOnionMessageContents*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       OnionMessageContents_free(this_ptr_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1new(JNIEnv *env, jclass clz, int8_tArray payment_secret_arg, int64_t payment_constraints_arg) {
+       LDKThirtyTwoBytes payment_secret_arg_ref;
+       CHECK((*env)->GetArrayLength(env, payment_secret_arg) == 32);
+       (*env)->GetByteArrayRegion(env, payment_secret_arg, 0, 32, payment_secret_arg_ref.data);
+       LDKPaymentConstraints payment_constraints_arg_conv;
+       payment_constraints_arg_conv.inner = untag_ptr(payment_constraints_arg);
+       payment_constraints_arg_conv.is_owned = ptr_is_owned(payment_constraints_arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payment_constraints_arg_conv);
+       payment_constraints_arg_conv = PaymentConstraints_clone(&payment_constraints_arg_conv);
+       LDKReceiveTlvs ret_var = ReceiveTlvs_new(payment_secret_arg_ref, payment_constraints_arg_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
 }
 
-static inline uint64_t OnionMessageContents_clone_ptr(LDKOnionMessageContents *NONNULL_PTR arg) {
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_clone(arg);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+static inline uint64_t ReceiveTlvs_clone_ptr(LDKReceiveTlvs *NONNULL_PTR arg) {
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKOnionMessageContents* arg_conv = (LDKOnionMessageContents*)untag_ptr(arg);
-       int64_t ret_conv = OnionMessageContents_clone_ptr(arg_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKReceiveTlvs arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ReceiveTlvs_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKOnionMessageContents* orig_conv = (LDKOnionMessageContents*)untag_ptr(orig);
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_clone(orig_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKReceiveTlvs orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKReceiveTlvs ret_var = ReceiveTlvs_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1offers(JNIEnv *env, jclass clz, int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKOffersMessage a_conv = *(LDKOffersMessage*)(a_ptr);
-       a_conv = OffersMessage_clone((LDKOffersMessage*)untag_ptr(a));
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_offers(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPaymentRelay this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentRelay_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OnionMessageContents_1custom(JNIEnv *env, jclass clz, int64_t a) {
-       void* a_ptr = untag_ptr(a);
-       CHECK_ACCESS(a_ptr);
-       LDKCustomOnionMessageContents a_conv = *(LDKCustomOnionMessageContents*)(a_ptr);
-       if (a_conv.free == LDKCustomOnionMessageContents_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKCustomOnionMessageContents_JCalls_cloned(&a_conv);
-       }
-       LDKOnionMessageContents *ret_copy = MALLOC(sizeof(LDKOnionMessageContents), "LDKOnionMessageContents");
-       *ret_copy = OnionMessageContents_custom(a_conv);
-       int64_t ret_ref = tag_ptr(ret_copy, true);
-       return ret_ref;
+JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int16_t ret_conv = PaymentRelay_get_cltv_expiry_delta(&this_ptr_conv);
+       return ret_conv;
 }
 
-static inline uint64_t CustomOnionMessageContents_clone_ptr(LDKCustomOnionMessageContents *NONNULL_PTR arg) {
-       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
-       *ret_ret = CustomOnionMessageContents_clone(arg);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1cltv_1expiry_1delta(JNIEnv *env, jclass clz, int64_t this_ptr, int16_t val) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentRelay_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       void* arg_ptr = untag_ptr(arg);
-       if (ptr_is_owned(arg)) { CHECK_ACCESS(arg_ptr); }
-       LDKCustomOnionMessageContents* arg_conv = (LDKCustomOnionMessageContents*)arg_ptr;
-       int64_t ret_conv = CustomOnionMessageContents_clone_ptr(arg_conv);
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentRelay_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       void* orig_ptr = untag_ptr(orig);
-       if (ptr_is_owned(orig)) { CHECK_ACCESS(orig_ptr); }
-       LDKCustomOnionMessageContents* orig_conv = (LDKCustomOnionMessageContents*)orig_ptr;
-       LDKCustomOnionMessageContents* ret_ret = MALLOC(sizeof(LDKCustomOnionMessageContents), "LDKCustomOnionMessageContents");
-       *ret_ret = CustomOnionMessageContents_clone(orig_conv);
-       return tag_ptr(ret_ret, true);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1fee_1proportional_1millionths(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentRelay_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
-       if (!ptr_is_owned(this_ptr)) return;
-       void* this_ptr_ptr = untag_ptr(this_ptr);
-       CHECK_ACCESS(this_ptr_ptr);
-       LDKCustomOnionMessageContents this_ptr_conv = *(LDKCustomOnionMessageContents*)(this_ptr_ptr);
-       FREE(untag_ptr(this_ptr));
-       CustomOnionMessageContents_free(this_ptr_conv);
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentRelay_get_fee_base_msat(&this_ptr_conv);
+       return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedPath this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedPath_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1fee_1base_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentRelay this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentRelay_set_fee_base_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t BlindedPath_clone_ptr(LDKBlindedPath *NONNULL_PTR arg) {
-       LDKBlindedPath ret_var = BlindedPath_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1new(JNIEnv *env, jclass clz, int16_t cltv_expiry_delta_arg, int32_t fee_proportional_millionths_arg, int32_t fee_base_msat_arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_new(cltv_expiry_delta_arg, fee_proportional_millionths_arg, fee_base_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedPath arg_conv;
+
+static inline uint64_t PaymentRelay_clone_ptr(LDKPaymentRelay *NONNULL_PTR arg) {
+       LDKPaymentRelay ret_var = PaymentRelay_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentRelay arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentRelay_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedPath orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPaymentRelay orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedPath ret_var = BlindedPath_clone(&orig_conv);
+       LDKPaymentRelay ret_var = PaymentRelay_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedPath o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedPath_hash(&o_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKPaymentConstraints this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       PaymentConstraints_free(this_obj_conv);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1get_1max_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = PaymentConstraints_get_max_cltv_expiry(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPath_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedPath a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedPath b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedPath_eq(&a_conv, &b_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1set_1max_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentConstraints_set_max_cltv_expiry(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1get_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = PaymentConstraints_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_conv;
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKBlindedHop this_obj_conv;
-       this_obj_conv.inner = untag_ptr(this_obj);
-       this_obj_conv.is_owned = ptr_is_owned(this_obj);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       BlindedHop_free(this_obj_conv);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1set_1htlc_1minimum_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKPaymentConstraints this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       PaymentConstraints_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
-static inline uint64_t BlindedHop_clone_ptr(LDKBlindedHop *NONNULL_PTR arg) {
-       LDKBlindedHop ret_var = BlindedHop_clone(arg);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1new(JNIEnv *env, jclass clz, int32_t max_cltv_expiry_arg, int64_t htlc_minimum_msat_arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_new(max_cltv_expiry_arg, htlc_minimum_msat_arg);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
-       LDKBlindedHop arg_conv;
+
+static inline uint64_t PaymentConstraints_clone_ptr(LDKPaymentConstraints *NONNULL_PTR arg) {
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentConstraints arg_conv;
        arg_conv.inner = untag_ptr(arg);
        arg_conv.is_owned = ptr_is_owned(arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        arg_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_clone_ptr(&arg_conv);
+       int64_t ret_conv = PaymentConstraints_clone_ptr(&arg_conv);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
-       LDKBlindedHop orig_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKPaymentConstraints orig_conv;
        orig_conv.inner = untag_ptr(orig);
        orig_conv.is_owned = ptr_is_owned(orig);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        orig_conv.is_owned = false;
-       LDKBlindedHop ret_var = BlindedHop_clone(&orig_conv);
+       LDKPaymentConstraints ret_var = PaymentConstraints_clone(&orig_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1hash(JNIEnv *env, jclass clz, int64_t o) {
-       LDKBlindedHop o_conv;
-       o_conv.inner = untag_ptr(o);
-       o_conv.is_owned = ptr_is_owned(o);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
-       o_conv.is_owned = false;
-       int64_t ret_conv = BlindedHop_hash(&o_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKForwardTlvs obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ForwardTlvs_write(&obj_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 jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHop_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
-       LDKBlindedHop a_conv;
-       a_conv.inner = untag_ptr(a);
-       a_conv.is_owned = ptr_is_owned(a);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
-       a_conv.is_owned = false;
-       LDKBlindedHop b_conv;
-       b_conv.inner = untag_ptr(b);
-       b_conv.is_owned = ptr_is_owned(b);
-       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
-       b_conv.is_owned = false;
-       jboolean ret_conv = BlindedHop_eq(&a_conv, &b_conv);
-       return ret_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKReceiveTlvs obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ReceiveTlvs_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new_1for_1message(JNIEnv *env, jclass clz, jobjectArray node_pks, int64_t entropy_source) {
-       LDKCVec_PublicKeyZ node_pks_constr;
-       node_pks_constr.datalen = (*env)->GetArrayLength(env, node_pks);
-       if (node_pks_constr.datalen > 0)
-               node_pks_constr.data = MALLOC(node_pks_constr.datalen * sizeof(LDKPublicKey), "LDKCVec_PublicKeyZ Elements");
-       else
-               node_pks_constr.data = NULL;
-       for (size_t i = 0; i < node_pks_constr.datalen; i++) {
-               int8_tArray node_pks_conv_8 = (*env)->GetObjectArrayElement(env, node_pks, i);
-               LDKPublicKey node_pks_conv_8_ref;
-               CHECK((*env)->GetArrayLength(env, node_pks_conv_8) == 33);
-               (*env)->GetByteArrayRegion(env, node_pks_conv_8, 0, 33, node_pks_conv_8_ref.compressed_form);
-               node_pks_constr.data[i] = node_pks_conv_8_ref;
-       }
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       if (ptr_is_owned(entropy_source)) { CHECK_ACCESS(entropy_source_ptr); }
-       LDKEntropySource* entropy_source_conv = (LDKEntropySource*)entropy_source_ptr;
-       LDKCResult_BlindedPathNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathNoneZ), "LDKCResult_BlindedPathNoneZ");
-       *ret_conv = BlindedPath_new_for_message(node_pks_constr, entropy_source_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_ReceiveTlvsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReceiveTlvsDecodeErrorZ), "LDKCResult_ReceiveTlvsDecodeErrorZ");
+       *ret_conv = ReceiveTlvs_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedPath obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPaymentRelay obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedPath_write(&obj_conv);
+       LDKCVec_u8Z ret_var = PaymentRelay_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedPath_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedPathDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedPathDecodeErrorZ), "LDKCResult_BlindedPathDecodeErrorZ");
-       *ret_conv = BlindedPath_read(ser_ref);
+       LDKCResult_PaymentRelayDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentRelayDecodeErrorZ), "LDKCResult_PaymentRelayDecodeErrorZ");
+       *ret_conv = PaymentRelay_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
 
-JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1write(JNIEnv *env, jclass clz, int64_t obj) {
-       LDKBlindedHop obj_conv;
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKPaymentConstraints obj_conv;
        obj_conv.inner = untag_ptr(obj);
        obj_conv.is_owned = ptr_is_owned(obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        obj_conv.is_owned = false;
-       LDKCVec_u8Z ret_var = BlindedHop_write(&obj_conv);
+       LDKCVec_u8Z ret_var = PaymentConstraints_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_BlindedHop_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
        LDKu8slice ser_ref;
        ser_ref.datalen = (*env)->GetArrayLength(env, ser);
        ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
-       LDKCResult_BlindedHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BlindedHopDecodeErrorZ), "LDKCResult_BlindedHopDecodeErrorZ");
-       *ret_conv = BlindedHop_read(ser_ref);
+       LDKCResult_PaymentConstraintsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentConstraintsDecodeErrorZ), "LDKCResult_PaymentConstraintsDecodeErrorZ");
+       *ret_conv = PaymentConstraints_read(ser_ref);
        (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
        return tag_ptr(ret_conv, true);
 }
@@ -64294,8 +69646,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone(JNIEn
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1invoice_1payment(JNIEnv *env, jclass clz, int64_t payment_preimage, int8_tArray payment_secret) {
        void* payment_preimage_ptr = untag_ptr(payment_preimage);
        CHECK_ACCESS(payment_preimage_ptr);
-       LDKCOption_PaymentPreimageZ payment_preimage_conv = *(LDKCOption_PaymentPreimageZ*)(payment_preimage_ptr);
-       payment_preimage_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(payment_preimage));
+       LDKCOption_ThirtyTwoBytesZ payment_preimage_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_preimage_ptr);
+       payment_preimage_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_preimage));
        LDKThirtyTwoBytes payment_secret_ref;
        CHECK((*env)->GetArrayLength(env, payment_secret) == 32);
        (*env)->GetByteArrayRegion(env, payment_secret, 0, 32, payment_secret_ref.data);
@@ -64341,6 +69693,180 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1read(JNIEnv
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKClaimedHTLC this_obj_conv;
+       this_obj_conv.inner = untag_ptr(this_obj);
+       this_obj_conv.is_owned = ptr_is_owned(this_obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       ClaimedHTLC_free(this_obj_conv);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ClaimedHTLC_get_channel_id(&this_ptr_conv));
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKThirtyTwoBytes val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 32);
+       (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
+       ClaimedHTLC_set_channel_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1user_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int8_tArray ret_arr = (*env)->NewByteArray(env, 16);
+       (*env)->SetByteArrayRegion(env, ret_arr, 0, 16, ClaimedHTLC_get_user_channel_id(&this_ptr_conv).le_bytes);
+       return ret_arr;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1user_1channel_1id(JNIEnv *env, jclass clz, int64_t this_ptr, int8_tArray val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       LDKU128 val_ref;
+       CHECK((*env)->GetArrayLength(env, val) == 16);
+       (*env)->GetByteArrayRegion(env, val, 0, 16, val_ref.le_bytes);
+       ClaimedHTLC_set_user_channel_id(&this_ptr_conv, val_ref);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int32_t ret_conv = ClaimedHTLC_get_cltv_expiry(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1cltv_1expiry(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ClaimedHTLC_set_cltv_expiry(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       int64_t ret_conv = ClaimedHTLC_get_value_msat(&this_ptr_conv);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1value_1msat(JNIEnv *env, jclass clz, int64_t this_ptr, int64_t val) {
+       LDKClaimedHTLC this_ptr_conv;
+       this_ptr_conv.inner = untag_ptr(this_ptr);
+       this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       this_ptr_conv.is_owned = false;
+       ClaimedHTLC_set_value_msat(&this_ptr_conv, val);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1new(JNIEnv *env, jclass clz, int8_tArray channel_id_arg, int8_tArray user_channel_id_arg, int32_t cltv_expiry_arg, int64_t value_msat_arg) {
+       LDKThirtyTwoBytes channel_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, channel_id_arg) == 32);
+       (*env)->GetByteArrayRegion(env, channel_id_arg, 0, 32, channel_id_arg_ref.data);
+       LDKU128 user_channel_id_arg_ref;
+       CHECK((*env)->GetArrayLength(env, user_channel_id_arg) == 16);
+       (*env)->GetByteArrayRegion(env, user_channel_id_arg, 0, 16, user_channel_id_arg_ref.le_bytes);
+       LDKClaimedHTLC ret_var = ClaimedHTLC_new(channel_id_arg_ref, user_channel_id_arg_ref, cltv_expiry_arg, value_msat_arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+static inline uint64_t ClaimedHTLC_clone_ptr(LDKClaimedHTLC *NONNULL_PTR arg) {
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(arg);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClaimedHTLC arg_conv;
+       arg_conv.inner = untag_ptr(arg);
+       arg_conv.is_owned = ptr_is_owned(arg);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       arg_conv.is_owned = false;
+       int64_t ret_conv = ClaimedHTLC_clone_ptr(&arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKClaimedHTLC orig_conv;
+       orig_conv.inner = untag_ptr(orig);
+       orig_conv.is_owned = ptr_is_owned(orig);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       orig_conv.is_owned = false;
+       LDKClaimedHTLC ret_var = ClaimedHTLC_clone(&orig_conv);
+       int64_t ret_ref = 0;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKClaimedHTLC a_conv;
+       a_conv.inner = untag_ptr(a);
+       a_conv.is_owned = ptr_is_owned(a);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
+       a_conv.is_owned = false;
+       LDKClaimedHTLC b_conv;
+       b_conv.inner = untag_ptr(b);
+       b_conv.is_owned = ptr_is_owned(b);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
+       b_conv.is_owned = false;
+       jboolean ret_conv = ClaimedHTLC_eq(&a_conv, &b_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKClaimedHTLC obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ClaimedHTLC_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_ClaimedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClaimedHTLCDecodeErrorZ), "LDKCResult_ClaimedHTLCDecodeErrorZ");
+       *ret_conv = ClaimedHTLC_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PathFailure_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -64516,6 +70042,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1counterparty
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1funding_1batch_1closure(JNIEnv *env, jclass clz) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_funding_batch_closure();
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ClosureReason_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
        LDKClosureReason* a_conv = (LDKClosureReason*)untag_ptr(a);
        LDKClosureReason* b_conv = (LDKClosureReason*)untag_ptr(b);
@@ -64745,7 +70278,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1funding_1generation_
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int8_tArray via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t onion_fields, int64_t amount_msat, int64_t counterparty_skimmed_fee_msat, int64_t purpose, int64_t via_channel_id, int64_t via_user_channel_id, int64_t claim_deadline) {
        LDKPublicKey receiver_node_id_ref;
        CHECK((*env)->GetArrayLength(env, receiver_node_id) == 33);
        (*env)->GetByteArrayRegion(env, receiver_node_id, 0, 33, receiver_node_id_ref.compressed_form);
@@ -64761,24 +70294,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable(J
        CHECK_ACCESS(purpose_ptr);
        LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
        purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
-       LDKThirtyTwoBytes via_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, via_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, via_channel_id, 0, 32, via_channel_id_ref.data);
+       void* via_channel_id_ptr = untag_ptr(via_channel_id);
+       CHECK_ACCESS(via_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ via_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(via_channel_id_ptr);
+       via_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(via_channel_id));
        void* via_user_channel_id_ptr = untag_ptr(via_user_channel_id);
        CHECK_ACCESS(via_user_channel_id_ptr);
-       LDKCOption_u128Z via_user_channel_id_conv = *(LDKCOption_u128Z*)(via_user_channel_id_ptr);
-       via_user_channel_id_conv = COption_u128Z_clone((LDKCOption_u128Z*)untag_ptr(via_user_channel_id));
+       LDKCOption_U128Z via_user_channel_id_conv = *(LDKCOption_U128Z*)(via_user_channel_id_ptr);
+       via_user_channel_id_conv = COption_U128Z_clone((LDKCOption_U128Z*)untag_ptr(via_user_channel_id));
        void* claim_deadline_ptr = untag_ptr(claim_deadline);
        CHECK_ACCESS(claim_deadline_ptr);
        LDKCOption_u32Z claim_deadline_conv = *(LDKCOption_u32Z*)(claim_deadline_ptr);
        claim_deadline_conv = COption_u32Z_clone((LDKCOption_u32Z*)untag_ptr(claim_deadline));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_ref, via_user_channel_id_conv, claim_deadline_conv);
+       *ret_copy = Event_payment_claimable(receiver_node_id_ref, payment_hash_ref, onion_fields_conv, amount_msat, counterparty_skimmed_fee_msat, purpose_conv, via_channel_id_conv, via_user_channel_id_conv, claim_deadline_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNIEnv *env, jclass clz, int8_tArray receiver_node_id, int8_tArray payment_hash, int64_t amount_msat, int64_t purpose, int64_tArray htlcs, int64_t sender_intended_total_msat) {
        LDKPublicKey receiver_node_id_ref;
        CHECK((*env)->GetArrayLength(env, receiver_node_id) == 33);
        (*env)->GetByteArrayRegion(env, receiver_node_id, 0, 33, receiver_node_id_ref.compressed_form);
@@ -64789,8 +70323,29 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNI
        CHECK_ACCESS(purpose_ptr);
        LDKPaymentPurpose purpose_conv = *(LDKPaymentPurpose*)(purpose_ptr);
        purpose_conv = PaymentPurpose_clone((LDKPaymentPurpose*)untag_ptr(purpose));
+       LDKCVec_ClaimedHTLCZ htlcs_constr;
+       htlcs_constr.datalen = (*env)->GetArrayLength(env, htlcs);
+       if (htlcs_constr.datalen > 0)
+               htlcs_constr.data = MALLOC(htlcs_constr.datalen * sizeof(LDKClaimedHTLC), "LDKCVec_ClaimedHTLCZ Elements");
+       else
+               htlcs_constr.data = NULL;
+       int64_t* htlcs_vals = (*env)->GetLongArrayElements (env, htlcs, NULL);
+       for (size_t n = 0; n < htlcs_constr.datalen; n++) {
+               int64_t htlcs_conv_13 = htlcs_vals[n];
+               LDKClaimedHTLC htlcs_conv_13_conv;
+               htlcs_conv_13_conv.inner = untag_ptr(htlcs_conv_13);
+               htlcs_conv_13_conv.is_owned = ptr_is_owned(htlcs_conv_13);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(htlcs_conv_13_conv);
+               htlcs_conv_13_conv = ClaimedHTLC_clone(&htlcs_conv_13_conv);
+               htlcs_constr.data[n] = htlcs_conv_13_conv;
+       }
+       (*env)->ReleaseLongArrayElements(env, htlcs, htlcs_vals, 0);
+       void* sender_intended_total_msat_ptr = untag_ptr(sender_intended_total_msat);
+       CHECK_ACCESS(sender_intended_total_msat_ptr);
+       LDKCOption_u64Z sender_intended_total_msat_conv = *(LDKCOption_u64Z*)(sender_intended_total_msat_ptr);
+       sender_intended_total_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(sender_intended_total_msat));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv);
+       *ret_copy = Event_payment_claimed(receiver_node_id_ref, payment_hash_ref, amount_msat, purpose_conv, htlcs_constr, sender_intended_total_msat_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -64798,8 +70353,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed(JNI
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1sent(JNIEnv *env, jclass clz, int64_t payment_id, int8_tArray payment_preimage, int8_tArray payment_hash, int64_t fee_paid_msat) {
        void* payment_id_ptr = untag_ptr(payment_id);
        CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_PaymentIdZ payment_id_conv = *(LDKCOption_PaymentIdZ*)(payment_id_ptr);
-       payment_id_conv = COption_PaymentIdZ_clone((LDKCOption_PaymentIdZ*)untag_ptr(payment_id));
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
        (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
@@ -64839,8 +70394,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1succe
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKPath path_conv;
        path_conv.inner = untag_ptr(path);
        path_conv.is_owned = ptr_is_owned(path);
@@ -64855,8 +70410,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1succe
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1failed(JNIEnv *env, jclass clz, int64_t payment_id, int8_tArray payment_hash, jboolean payment_failed_permanently, int64_t failure, int64_t path, int64_t short_channel_id) {
        void* payment_id_ptr = untag_ptr(payment_id);
        CHECK_ACCESS(payment_id_ptr);
-       LDKCOption_PaymentIdZ payment_id_conv = *(LDKCOption_PaymentIdZ*)(payment_id_ptr);
-       payment_id_conv = COption_PaymentIdZ_clone((LDKCOption_PaymentIdZ*)untag_ptr(payment_id));
+       LDKCOption_ThirtyTwoBytesZ payment_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_id_ptr);
+       payment_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_id));
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -64939,7 +70494,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1htlcintercepted(JNIE
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs(JNIEnv *env, jclass clz, int64_tArray outputs) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs(JNIEnv *env, jclass clz, int64_tArray outputs, int64_t channel_id) {
        LDKCVec_SpendableOutputDescriptorZ outputs_constr;
        outputs_constr.datalen = (*env)->GetArrayLength(env, outputs);
        if (outputs_constr.datalen > 0)
@@ -64956,19 +70511,25 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs(J
                outputs_constr.data[b] = outputs_conv_27_conv;
        }
        (*env)->ReleaseLongArrayElements(env, outputs, outputs_vals, 0);
+       void* channel_id_ptr = untag_ptr(channel_id);
+       CHECK_ACCESS(channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(channel_id_ptr);
+       channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(channel_id));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_spendable_outputs(outputs_constr);
+       *ret_copy = Event_spendable_outputs(outputs_constr, channel_id_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded(JNIEnv *env, jclass clz, int8_tArray prev_channel_id, int8_tArray next_channel_id, int64_t fee_earned_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
-       LDKThirtyTwoBytes prev_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, prev_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, prev_channel_id, 0, 32, prev_channel_id_ref.data);
-       LDKThirtyTwoBytes next_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, next_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, next_channel_id, 0, 32, next_channel_id_ref.data);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded(JNIEnv *env, jclass clz, int64_t prev_channel_id, int64_t next_channel_id, int64_t fee_earned_msat, jboolean claim_from_onchain_tx, int64_t outbound_amount_forwarded_msat) {
+       void* prev_channel_id_ptr = untag_ptr(prev_channel_id);
+       CHECK_ACCESS(prev_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ prev_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(prev_channel_id_ptr);
+       prev_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(prev_channel_id));
+       void* next_channel_id_ptr = untag_ptr(next_channel_id);
+       CHECK_ACCESS(next_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ next_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(next_channel_id_ptr);
+       next_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(next_channel_id));
        void* fee_earned_msat_ptr = untag_ptr(fee_earned_msat);
        CHECK_ACCESS(fee_earned_msat_ptr);
        LDKCOption_u64Z fee_earned_msat_conv = *(LDKCOption_u64Z*)(fee_earned_msat_ptr);
@@ -64978,21 +70539,22 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded(J
        LDKCOption_u64Z outbound_amount_forwarded_msat_conv = *(LDKCOption_u64Z*)(outbound_amount_forwarded_msat_ptr);
        outbound_amount_forwarded_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(outbound_amount_forwarded_msat));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_payment_forwarded(prev_channel_id_ref, next_channel_id_ref, fee_earned_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
+       *ret_copy = Event_payment_forwarded(prev_channel_id_conv, next_channel_id_conv, fee_earned_msat_conv, claim_from_onchain_tx, outbound_amount_forwarded_msat_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int8_tArray former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int64_t former_temporary_channel_id, int8_tArray counterparty_node_id, int64_t funding_txo) {
        LDKThirtyTwoBytes channel_id_ref;
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_ref.data);
        LDKU128 user_channel_id_ref;
        CHECK((*env)->GetArrayLength(env, user_channel_id) == 16);
        (*env)->GetByteArrayRegion(env, user_channel_id, 0, 16, user_channel_id_ref.le_bytes);
-       LDKThirtyTwoBytes former_temporary_channel_id_ref;
-       CHECK((*env)->GetArrayLength(env, former_temporary_channel_id) == 32);
-       (*env)->GetByteArrayRegion(env, former_temporary_channel_id, 0, 32, former_temporary_channel_id_ref.data);
+       void* former_temporary_channel_id_ptr = untag_ptr(former_temporary_channel_id);
+       CHECK_ACCESS(former_temporary_channel_id_ptr);
+       LDKCOption_ThirtyTwoBytesZ former_temporary_channel_id_conv = *(LDKCOption_ThirtyTwoBytesZ*)(former_temporary_channel_id_ptr);
+       former_temporary_channel_id_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(former_temporary_channel_id));
        LDKPublicKey counterparty_node_id_ref;
        CHECK((*env)->GetArrayLength(env, counterparty_node_id) == 33);
        (*env)->GetByteArrayRegion(env, counterparty_node_id, 0, 33, counterparty_node_id_ref.compressed_form);
@@ -65002,7 +70564,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending(JNI
        CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_pending(channel_id_ref, user_channel_id_ref, former_temporary_channel_id_ref, counterparty_node_id_ref, funding_txo_conv);
+       *ret_copy = Event_channel_pending(channel_id_ref, user_channel_id_ref, former_temporary_channel_id_conv, counterparty_node_id_ref, funding_txo_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -65028,7 +70590,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1ready(JNIEn
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int64_t reason) {
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed(JNIEnv *env, jclass clz, int8_tArray channel_id, int8_tArray user_channel_id, int64_t reason, int8_tArray counterparty_node_id, int64_t channel_capacity_sats) {
        LDKThirtyTwoBytes channel_id_ref;
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_ref.data);
@@ -65039,8 +70601,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed(JNIE
        CHECK_ACCESS(reason_ptr);
        LDKClosureReason reason_conv = *(LDKClosureReason*)(reason_ptr);
        reason_conv = ClosureReason_clone((LDKClosureReason*)untag_ptr(reason));
+       LDKPublicKey counterparty_node_id_ref;
+       CHECK((*env)->GetArrayLength(env, counterparty_node_id) == 33);
+       (*env)->GetByteArrayRegion(env, counterparty_node_id, 0, 33, counterparty_node_id_ref.compressed_form);
+       void* channel_capacity_sats_ptr = untag_ptr(channel_capacity_sats);
+       CHECK_ACCESS(channel_capacity_sats_ptr);
+       LDKCOption_u64Z channel_capacity_sats_conv = *(LDKCOption_u64Z*)(channel_capacity_sats_ptr);
+       channel_capacity_sats_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(channel_capacity_sats));
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
-       *ret_copy = Event_channel_closed(channel_id_ref, user_channel_id_ref, reason_conv);
+       *ret_copy = Event_channel_closed(channel_id_ref, user_channel_id_ref, reason_conv, counterparty_node_id_ref, channel_capacity_sats_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
 }
@@ -65372,11 +70941,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1tx_
        LDKPublicKey node_id_ref;
        CHECK((*env)->GetArrayLength(env, node_id) == 33);
        (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
-       LDKTxAddInput msg_conv;
+       LDKTxAbort msg_conv;
        msg_conv.inner = untag_ptr(msg);
        msg_conv.is_owned = ptr_is_owned(msg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
-       msg_conv = TxAddInput_clone(&msg_conv);
+       msg_conv = TxAbort_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_tx_abort(node_id_ref, msg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
@@ -65812,6 +71381,29 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameter
        return ret_conv;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKChannelDerivationParameters obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = ChannelDerivationParameters_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_ChannelDerivationParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelDerivationParametersDecodeErrorZ), "LDKCResult_ChannelDerivationParametersDecodeErrorZ");
+       *ret_conv = ChannelDerivationParameters_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnchorDescriptor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKAnchorDescriptor this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
@@ -65978,7 +71570,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnchorDescriptor_1tx_1i
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKSignature signature_ref;
+       LDKECDSASignature signature_ref;
        CHECK((*env)->GetArrayLength(env, signature) == 64);
        (*env)->GetByteArrayRegion(env, signature, 0, 64, signature_ref.compact_form);
        LDKWitness ret_var = AnchorDescriptor_tx_input_witness(&this_arg_conv, signature_ref);
@@ -66112,7 +71704,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1get_1preima
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKCOption_PaymentPreimageZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentPreimageZ), "LDKCOption_PaymentPreimageZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = HTLCDescriptor_get_preimage(&this_ptr_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -66126,8 +71718,8 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1set_1preimage(
        this_ptr_conv.is_owned = false;
        void* val_ptr = untag_ptr(val);
        CHECK_ACCESS(val_ptr);
-       LDKCOption_PaymentPreimageZ val_conv = *(LDKCOption_PaymentPreimageZ*)(val_ptr);
-       val_conv = COption_PaymentPreimageZ_clone((LDKCOption_PaymentPreimageZ*)untag_ptr(val));
+       LDKCOption_ThirtyTwoBytesZ val_conv = *(LDKCOption_ThirtyTwoBytesZ*)(val_ptr);
+       val_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(val));
        HTLCDescriptor_set_preimage(&this_ptr_conv, val_conv);
 }
 
@@ -66148,7 +71740,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1set_1counterpa
        this_ptr_conv.is_owned = ptr_is_owned(this_ptr);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        this_ptr_conv.is_owned = false;
-       LDKSignature val_ref;
+       LDKECDSASignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
        HTLCDescriptor_set_counterparty_sig(&this_ptr_conv, val_ref);
@@ -66199,6 +71791,29 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1eq(JNIEnv
        return ret_conv;
 }
 
+JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1write(JNIEnv *env, jclass clz, int64_t obj) {
+       LDKHTLCDescriptor obj_conv;
+       obj_conv.inner = untag_ptr(obj);
+       obj_conv.is_owned = ptr_is_owned(obj);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
+       obj_conv.is_owned = false;
+       LDKCVec_u8Z ret_var = HTLCDescriptor_write(&obj_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 int64_t JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_HTLCDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCDescriptorDecodeErrorZ), "LDKCResult_HTLCDescriptorDecodeErrorZ");
+       *ret_conv = HTLCDescriptor_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1outpoint(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKHTLCDescriptor this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
@@ -66264,7 +71879,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1tx_1inp
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKSignature signature_ref;
+       LDKECDSASignature signature_ref;
        CHECK((*env)->GetArrayLength(env, signature) == 64);
        (*env)->GetByteArrayRegion(env, signature, 0, 64, signature_ref.compact_form);
        LDKu8slice witness_script_ref;
@@ -66962,54 +72577,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BumpTransactionEventHandler_1h
        BumpTransactionEventHandler_handle_event(&this_arg_conv, event_conv);
 }
 
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
-       LDKFilesystemPersister this_obj_conv;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKFilesystemStore this_obj_conv;
        this_obj_conv.inner = untag_ptr(this_obj);
        this_obj_conv.is_owned = ptr_is_owned(this_obj);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
-       FilesystemPersister_free(this_obj_conv);
+       FilesystemStore_free(this_obj_conv);
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1new(JNIEnv *env, jclass clz, jstring path_to_channel_data) {
-       LDKStr path_to_channel_data_conv = java_to_owned_str(env, path_to_channel_data);
-       LDKFilesystemPersister ret_var = FilesystemPersister_new(path_to_channel_data_conv);
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1new(JNIEnv *env, jclass clz, jstring data_dir) {
+       LDKStr data_dir_conv = java_to_owned_str(env, data_dir);
+       LDKFilesystemStore ret_var = FilesystemStore_new(data_dir_conv);
        int64_t ret_ref = 0;
        CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = tag_ptr(ret_var.inner, ret_var.is_owned);
        return ret_ref;
 }
 
-JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1get_1data_1dir(JNIEnv *env, jclass clz, int64_t this_arg) {
-       LDKFilesystemPersister this_arg_conv;
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1get_1data_1dir(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFilesystemStore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKStr ret_str = FilesystemPersister_get_data_dir(&this_arg_conv);
+       LDKStr ret_str = FilesystemStore_get_data_dir(&this_arg_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
        return ret_conv;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1read_1channelmonitors(JNIEnv *env, jclass clz, int64_t this_arg, int64_t entropy_source, int64_t signer_provider) {
-       LDKFilesystemPersister this_arg_conv;
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1as_1KVStore(JNIEnv *env, jclass clz, int64_t this_arg) {
+       LDKFilesystemStore this_arg_conv;
        this_arg_conv.inner = untag_ptr(this_arg);
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       void* entropy_source_ptr = untag_ptr(entropy_source);
-       CHECK_ACCESS(entropy_source_ptr);
-       LDKEntropySource entropy_source_conv = *(LDKEntropySource*)(entropy_source_ptr);
-       if (entropy_source_conv.free == LDKEntropySource_JCalls_free) {
-               // If this_arg is a JCalls struct, then we need to increment the refcnt in it.
-               LDKEntropySource_JCalls_cloned(&entropy_source_conv);
-       }
-       void* signer_provider_ptr = untag_ptr(signer_provider);
-       if (ptr_is_owned(signer_provider)) { CHECK_ACCESS(signer_provider_ptr); }
-       LDKSignerProvider* signer_provider_conv = (LDKSignerProvider*)signer_provider_ptr;
-       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
-       *ret_conv = FilesystemPersister_read_channelmonitors(&this_arg_conv, entropy_source_conv, signer_provider_conv);
-       return tag_ptr(ret_conv, true);
+       LDKKVStore* ret_ret = MALLOC(sizeof(LDKKVStore), "LDKKVStore");
+       *ret_ret = FilesystemStore_as_KVStore(&this_arg_conv);
+       return tag_ptr(ret_ret, true);
 }
 
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
@@ -67126,7 +72731,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1join(J
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // WARNING: we need a move here but no clone is available for LDKBackgroundProcessor
        
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = BackgroundProcessor_join(this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -67138,7 +72743,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1stop(J
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // WARNING: we need a move here but no clone is available for LDKBackgroundProcessor
        
-       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       LDKCResult_NoneIOErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneIOErrorZ), "LDKCResult_NoneIOErrorZ");
        *ret_conv = BackgroundProcessor_stop(this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -68468,7 +74073,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawBolt11Invoice_1rec
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
+       LDKCResult_PayeePubKeySecp256k1ErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeySecp256k1ErrorZ), "LDKCResult_PayeePubKeySecp256k1ErrorZ");
        *ret_conv = SignedRawBolt11Invoice_recover_payee_pub_key(&this_arg_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -68578,7 +74183,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawBolt11Invoice_1payment_1
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_PaymentSecretZ *ret_copy = MALLOC(sizeof(LDKCOption_PaymentSecretZ), "LDKCOption_PaymentSecretZ");
+       LDKCOption_ThirtyTwoBytesZ *ret_copy = MALLOC(sizeof(LDKCOption_ThirtyTwoBytesZ), "LDKCOption_ThirtyTwoBytesZ");
        *ret_copy = RawBolt11Invoice_payment_secret(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -68842,7 +74447,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Bolt11Invoice_1expires_1at(
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCOption_DurationZ *ret_copy = MALLOC(sizeof(LDKCOption_DurationZ), "LDKCOption_DurationZ");
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Bolt11Invoice_expires_at(&this_arg_conv);
        int64_t ret_ref = tag_ptr(ret_copy, true);
        return ret_ref;
@@ -68914,7 +74519,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Bolt11Invoice_1fallbac
        this_arg_conv.is_owned = ptr_is_owned(this_arg);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv.is_owned = false;
-       LDKCVec_AddressZ ret_var = Bolt11Invoice_fallback_addresses(&this_arg_conv);
+       LDKCVec_StrZ ret_var = Bolt11Invoice_fallback_addresses(&this_arg_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, String_clz, NULL);
        ;
@@ -69271,7 +74876,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_pay_1invoice(JNIEnv *env, j
        channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        channelmanager_conv.is_owned = false;
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
        *ret_conv = pay_invoice(&invoice_conv, retry_strategy_conv, &channelmanager_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -69314,7 +74919,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_pay_1zero_1value_1invoice(J
        channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
        CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        channelmanager_conv.is_owned = false;
-       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       LDKCResult_ThirtyTwoBytesPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ThirtyTwoBytesPaymentErrorZ), "LDKCResult_ThirtyTwoBytesPaymentErrorZ");
        *ret_conv = pay_zero_value_invoice(&invoice_conv, amount_msats, retry_strategy_conv, &channelmanager_conv);
        return tag_ptr(ret_conv, true);
 }
@@ -69342,6 +74947,46 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_pay_1zero_1value_1invoice_1
        return tag_ptr(ret_conv, true);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_preflight_1probe_1invoice(JNIEnv *env, jclass clz, int64_t invoice, int64_t channelmanager, int64_t liquidity_limit_multiplier) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = preflight_probe_invoice(&invoice_conv, &channelmanager_conv, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_preflight_1probe_1zero_1value_1invoice(JNIEnv *env, jclass clz, int64_t invoice, int64_t amount_msat, int64_t channelmanager, int64_t liquidity_limit_multiplier) {
+       LDKBolt11Invoice invoice_conv;
+       invoice_conv.inner = untag_ptr(invoice);
+       invoice_conv.is_owned = ptr_is_owned(invoice);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
+       invoice_conv.is_owned = false;
+       LDKChannelManager channelmanager_conv;
+       channelmanager_conv.inner = untag_ptr(channelmanager);
+       channelmanager_conv.is_owned = ptr_is_owned(channelmanager);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
+       channelmanager_conv.is_owned = false;
+       void* liquidity_limit_multiplier_ptr = untag_ptr(liquidity_limit_multiplier);
+       CHECK_ACCESS(liquidity_limit_multiplier_ptr);
+       LDKCOption_u64Z liquidity_limit_multiplier_conv = *(LDKCOption_u64Z*)(liquidity_limit_multiplier_ptr);
+       liquidity_limit_multiplier_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(liquidity_limit_multiplier));
+       LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ), "LDKCResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ");
+       *ret_conv = preflight_probe_zero_value_invoice(&invoice_conv, amount_msat, &channelmanager_conv, liquidity_limit_multiplier_conv);
+       return tag_ptr(ret_conv, true);
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if (!ptr_is_owned(this_ptr)) return;
        void* this_ptr_ptr = untag_ptr(this_ptr);
@@ -69394,6 +75039,61 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentError_1eq(JNIEnv *e
        return ret_conv;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbingError_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       if (!ptr_is_owned(this_ptr)) return;
+       void* this_ptr_ptr = untag_ptr(this_ptr);
+       CHECK_ACCESS(this_ptr_ptr);
+       LDKProbingError this_ptr_conv = *(LDKProbingError*)(this_ptr_ptr);
+       FREE(untag_ptr(this_ptr));
+       ProbingError_free(this_ptr_conv);
+}
+
+static inline uint64_t ProbingError_clone_ptr(LDKProbingError *NONNULL_PTR arg) {
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_clone(arg);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKProbingError* arg_conv = (LDKProbingError*)untag_ptr(arg);
+       int64_t ret_conv = ProbingError_clone_ptr(arg_conv);
+       return ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKProbingError* orig_conv = (LDKProbingError*)untag_ptr(orig);
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_clone(orig_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1invoice(JNIEnv *env, jclass clz, jstring a) {
+       LDKStr a_conv = java_to_owned_str(env, a);
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_invoice(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ProbingError_1sending(JNIEnv *env, jclass clz, int64_t a) {
+       void* a_ptr = untag_ptr(a);
+       CHECK_ACCESS(a_ptr);
+       LDKProbeSendFailure a_conv = *(LDKProbeSendFailure*)(a_ptr);
+       a_conv = ProbeSendFailure_clone((LDKProbeSendFailure*)untag_ptr(a));
+       LDKProbingError *ret_copy = MALLOC(sizeof(LDKProbingError), "LDKProbingError");
+       *ret_copy = ProbingError_sending(a_conv);
+       int64_t ret_ref = tag_ptr(ret_copy, true);
+       return ret_ref;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbingError_1eq(JNIEnv *env, jclass clz, int64_t a, int64_t b) {
+       LDKProbingError* a_conv = (LDKProbingError*)untag_ptr(a);
+       LDKProbingError* b_conv = (LDKProbingError*)untag_ptr(b);
+       jboolean ret_conv = ProbingError_eq(a_conv, b_conv);
+       return ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1phantom_1invoice(JNIEnv *env, jclass clz, int64_t amt_msat, int64_t payment_hash, jstring description, int32_t invoice_expiry_delta_secs, int64_tArray phantom_route_hints, int64_t entropy_source, int64_t node_signer, int64_t logger, jclass network, int64_t min_final_cltv_expiry_delta, int64_t duration_since_epoch) {
        void* amt_msat_ptr = untag_ptr(amt_msat);
        CHECK_ACCESS(amt_msat_ptr);
@@ -69401,8 +75101,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1phantom_1invoice(JN
        amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKStr description_conv = java_to_owned_str(env, description);
        LDKCVec_PhantomRouteHintsZ phantom_route_hints_constr;
        phantom_route_hints_constr.datalen = (*env)->GetArrayLength(env, phantom_route_hints);
@@ -69459,8 +75159,8 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1phantom_1invoice_1w
        amt_msat_conv = COption_u64Z_clone((LDKCOption_u64Z*)untag_ptr(amt_msat));
        void* payment_hash_ptr = untag_ptr(payment_hash);
        CHECK_ACCESS(payment_hash_ptr);
-       LDKCOption_PaymentHashZ payment_hash_conv = *(LDKCOption_PaymentHashZ*)(payment_hash_ptr);
-       payment_hash_conv = COption_PaymentHashZ_clone((LDKCOption_PaymentHashZ*)untag_ptr(payment_hash));
+       LDKCOption_ThirtyTwoBytesZ payment_hash_conv = *(LDKCOption_ThirtyTwoBytesZ*)(payment_hash_ptr);
+       payment_hash_conv = COption_ThirtyTwoBytesZ_clone((LDKCOption_ThirtyTwoBytesZ*)untag_ptr(payment_hash));
        LDKSha256 description_hash_conv;
        description_hash_conv.inner = untag_ptr(description_hash);
        description_hash_conv.is_owned = ptr_is_owned(description_hash);
diff --git a/src/main/jni/org_ldk_enums_FailureCode.h b/src/main/jni/org_ldk_enums_FailureCode.h
deleted file mode 100644 (file)
index ce947c8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_enums_FailureCode */
-
-#ifndef _Included_org_ldk_enums_FailureCode
-#define _Included_org_ldk_enums_FailureCode
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_enums_FailureCode
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_enums_FailureCode_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_enums_SocketAddressParseError.h b/src/main/jni/org_ldk_enums_SocketAddressParseError.h
new file mode 100644 (file)
index 0000000..99005e5
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_enums_SocketAddressParseError */
+
+#ifndef _Included_org_ldk_enums_SocketAddressParseError
+#define _Included_org_ldk_enums_SocketAddressParseError
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_enums_SocketAddressParseError
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_enums_SocketAddressParseError_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
index bd611780aca9ecf4d9b958ddcccfc005f65818c8..5e29d5a6836188a8344f4832ff356caf96492828 100644 (file)
@@ -127,14 +127,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_TxOut_1get_1script_1pubk
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxOut_1get_1value
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_DurationZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_DurationZ;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1DurationZ_1ref_1from_1ptr
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCOption_u64Z_ref_from_ptr
@@ -159,6 +151,38 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKRetry_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKRetry;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRetry_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKDecodeError_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKDecodeError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKDecodeError_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKAPIError_ref_from_ptr
@@ -185,10 +209,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1get_1
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_PaymentSecretZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_PaymentSecretZ;
+ * Method:    LDKCOption_ThirtyTwoBytesZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_ThirtyTwoBytesZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentSecretZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ThirtyTwoBytesZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -201,26 +225,74 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1u8ZZ_1ref
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKDecodeError_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKDecodeError;
+ * Method:    CResult_RecipientOnionFieldsDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKDecodeError_1ref_1from_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_RecipientOnionFieldsDecodeErrorZ_get_ok
+ * Method:    CResult_RecipientOnionFieldsDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_RecipientOnionFieldsDecodeErrorZ_get_err
+ * Method:    C2Tuple_u64CVec_u8ZZ_get_a
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1get_1a
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_u64CVec_u8ZZ_get_b
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1get_1b
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RecipientOnionFieldsNoneZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RecipientOnionFieldsNoneZ_get_err
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_CVec_ThirtyTwoBytesZZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_CVec_ThirtyTwoBytesZZ;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1ThirtyTwoBytesZZ_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ThirtyTwoBytesNoneZ_get_ok
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ThirtyTwoBytesNoneZ_get_err
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -297,42 +369,42 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_PackedLockTimeZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_PackedLockTimeZ;
+ * Method:    LDKCOption_u32Z_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_u32Z;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PackedLockTimeZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PartiallySignedTransactionusizeZ_get_a
+ * Method:    C2Tuple_CVec_u8ZusizeZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PartiallySignedTransactionusizeZ_get_b
+ * Method:    C2Tuple_CVec_u8ZusizeZ_get_b
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1get_1b
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_ok
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_get_err
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -353,50 +425,50 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1get_1err
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_SignatureCVec_SignatureZZ_get_a
+ * Method:    C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_SignatureCVec_SignatureZZ_get_b
+ * Method:    C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_get_b
  * Signature: (J)[[B
  */
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1b
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_get_ok
+ * Method:    CResult_ECDSASignatureNoneZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_get_err
+ * Method:    CResult_ECDSASignatureNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -417,42 +489,42 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1get_1
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_ScalarZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_ScalarZ;
+ * Method:    LDKCOption_BigEndianScalarZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_BigEndianScalarZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ScalarZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1BigEndianScalarZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_get_ok
+ * Method:    CResult_RecoverableSignatureNoneZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_get_err
+ * Method:    CResult_RecoverableSignatureNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_RecoverableSignatureNoneZ_get_ok
+ * Method:    CResult_SchnorrSignatureNoneZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_RecoverableSignatureNoneZ_get_err
+ * Method:    CResult_SchnorrSignatureNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -657,18 +729,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChanne
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_get_ok
+ * Method:    CResult_CVec_u8ZNoneZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_get_err
+ * Method:    CResult_CVec_u8ZNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -687,6 +759,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNoneZ_
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_u16Z_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_u16Z;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_boolZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_boolZ;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1boolZ_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_CVec_u8ZZNoneZ_get_ok
@@ -719,22 +807,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_get_ok
- * Signature: (J)[B
- */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1get_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_get_err
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1get_1err
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TransactionNoneZ_get_ok
@@ -753,60 +825,60 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1get
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKScore_new
- * Signature: (Lorg/ldk/impl/bindings/LDKScore;)J
+ * Method:    LDKScoreLookUp_new
+ * Signature: (Lorg/ldk/impl/bindings/LDKScoreLookUp;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKScore_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKScoreLookUp_1new
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Score_channel_penalty_msat
+ * Method:    ScoreLookUp_channel_penalty_msat
  * Signature: (JJJJJJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Score_1channel_1penalty_1msat
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ScoreLookUp_1channel_1penalty_1msat
   (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Score_payment_path_failed
+ * Method:    LDKScoreUpdate_new
+ * Signature: (Lorg/ldk/impl/bindings/LDKScoreUpdate;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKScoreUpdate_1new
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ScoreUpdate_payment_path_failed
  * Signature: (JJJ)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1payment_1path_1failed
   (JNIEnv *, jclass, jlong, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Score_payment_path_successful
+ * Method:    ScoreUpdate_payment_path_successful
  * Signature: (JJ)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1successful
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1payment_1path_1successful
   (JNIEnv *, jclass, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Score_probe_failed
+ * Method:    ScoreUpdate_probe_failed
  * Signature: (JJJ)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1failed
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1probe_1failed
   (JNIEnv *, jclass, jlong, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Score_probe_successful
+ * Method:    ScoreUpdate_probe_successful
  * Signature: (JJ)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1probe_1successful
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1probe_1successful
   (JNIEnv *, jclass, jlong, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    Score_write
- * Signature: (J)[B
- */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Score_1write
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKLockableScore_new
@@ -817,10 +889,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKLockableScore_1new
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LockableScore_lock
+ * Method:    LockableScore_read_lock
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LockableScore_1lock
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LockableScore_1read_1lock
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LockableScore_write_lock
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LockableScore_1write_1lock
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -857,18 +937,18 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1WriteableScoreZ
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_get_ok
+ * Method:    CResult_NoneIOErrorZ_get_ok
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1get_1ok
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_get_err
+ * Method:    CResult_NoneIOErrorZ_get_err
  * Signature: (J)Lorg/ldk/enums/IOError;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -935,14 +1015,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedTailDecodeErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedTailDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_u32Z_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_u32Z;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteDecodeErrorZ_get_ok
@@ -1097,26 +1169,34 @@ JNIEXPORT jshortArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1get_1b
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple__u168_u168Z_get_a
+ * Method:    C2Tuple__u1632_u1632Z_get_a
  * Signature: (J)[S
  */
-JNIEXPORT jshortArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1get_1a
+JNIEXPORT jshortArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple__u168_u168Z_get_b
+ * Method:    C2Tuple__u1632_u1632Z_get_b
  * Signature: (J)[S
  */
-JNIEXPORT jshortArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1get_1b
+JNIEXPORT jshortArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1get_1b
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_C2Tuple_EightU16sEightU16sZZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_C2Tuple_EightU16sEightU16sZZ;
+ * Method:    LDKCOption_f64Z_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_f64Z;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1EightU16sEightU16sZZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1f64Z_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1161,26 +1241,34 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactio
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_BlockHashZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_BlockHashZ;
+ * Method:    C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_a
+ * Signature: (J)[B
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1BlockHashZ_1ref_1from_1ptr
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCOption_BlockHashZZ_get_a
- * Signature: (J)[B
+ * Method:    C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_get_b
+ * Signature: (J)J
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1get_1a
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCOption_BlockHashZZ_get_b
- * Signature: (J)J
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_get_ok
+ * Signature: (J)Lorg/ldk/enums/ChannelMonitorUpdateStatus;
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1get_1b
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_get_err
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1345,18 +1433,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseErro
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_get_ok
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_get_err
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_get_err
  * Signature: (J)Lorg/ldk/enums/Secp256k1Error;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1585,10 +1673,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKNetAddress_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKNetAddress;
+ * Method:    LDKSocketAddress_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKSocketAddress;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetAddress_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSocketAddress_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1657,18 +1745,42 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeEr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_CVec_NetAddressZZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_CVec_NetAddressZZ;
+ * Method:    LDKCOption_CVec_SocketAddressZZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_CVec_SocketAddressZZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1NetAddressZZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1SocketAddressZZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_PaymentPreimageZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_PaymentPreimageZ;
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentPreimageZ_1ref_1from_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1713,42 +1825,50 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1UtxoZNoneZ_1get
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_u16Z_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_u16Z;
+ * Method:    C2Tuple_u64u16Z_get_a
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_ChannelShutdownStateZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_ChannelShutdownStateZ;
+ * Method:    C2Tuple_u64u16Z_get_b
+ * Signature: (J)S
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ChannelShutdownStateZ_1ref_1from_1ptr
+JNIEXPORT jshort JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1get_1b
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_C2Tuple_u64u16ZZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_C2Tuple_u64u16ZZ;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1u64u16ZZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_PaymentHashZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_PaymentHashZ;
+ * Method:    LDKCOption_ChannelShutdownStateZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_ChannelShutdownStateZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentHashZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ChannelShutdownStateZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_get_ok
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_get_err
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1801,138 +1921,122 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1NoneRetryableSendF
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_get_ok
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_get_err
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_get_ok
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_get_err
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_get_err
  * Signature: (J)Lorg/ldk/enums/RetryableSendFailure;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentIdZ_get_a
+ * Method:    C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentIdZ_get_b
+ * Method:    C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_get_b
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1b
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentSecretZ_get_a
- * Signature: (J)[B
+ * Method:    LDKProbeSendFailure_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKProbeSendFailure;
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1a
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKProbeSendFailure_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentSecretZ_get_b
- * Signature: (J)[B
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_ok
+ * Signature: (J)[J
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1b
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_err
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1get_1err
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_get_ok
+ * Method:    C2Tuple_ThirtyTwoBytesPublicKeyZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1get_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_get_err
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1get_1err
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_get_ok
+ * Method:    C2Tuple_ThirtyTwoBytesPublicKeyZ_get_b
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_get_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_CVec_ChainHashZZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_CVec_ChainHashZZ;
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_get_err
+ * Signature: (J)V
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1ChainHashZZ_1ref_1from_1ptr
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2026,9 +2130,9 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKWatch_1new
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Watch_watch_channel
- * Signature: (JJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;
+ * Signature: (JJJ)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel
   (JNIEnv *, jclass, jlong, jlong, jlong);
 
 /*
@@ -2127,6 +2231,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeSigner_1ecdh
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1invoice
   (JNIEnv *, jclass, jlong, jbyteArray, jbyteArray, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeSigner_sign_bolt12_invoice_request
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1bolt12_1invoice_1request
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeSigner_sign_bolt12_invoice
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeSigner_1sign_1bolt12_1invoice
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeSigner_sign_gossip_message
@@ -2225,34 +2345,34 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Router_1find_1route_1with_1id
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelManagerZ_get_a
+ * Method:    C2Tuple_ThirtyTwoBytesChannelManagerZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelManagerZ_get_b
+ * Method:    C2Tuple_ThirtyTwoBytesChannelManagerZ_get_b
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1b
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2385,50 +2505,50 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErro
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_OutPointScriptZ_get_a
+ * Method:    C2Tuple_OutPointCVec_u8ZZ_get_a
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1get_1a
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_OutPointScriptZ_get_b
+ * Method:    C2Tuple_OutPointCVec_u8ZZ_get_b
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1get_1b
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_u32ScriptZ_get_a
+ * Method:    C2Tuple_u32CVec_u8ZZ_get_a
  * Signature: (J)I
  */
-JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1a
+JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_u32ScriptZ_get_b
+ * Method:    C2Tuple_u32CVec_u8ZZ_get_b
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1b
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_get_b
  * Signature: (J)[J
  */
-JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1b
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2449,18 +2569,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1get_1b
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_get_b
  * Signature: (J)[J
  */
-JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1b
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2473,34 +2593,34 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKBalance_1ref_1from_1ptr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_get_a
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_get_b
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_get_b
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1b
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2641,26 +2761,26 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecode
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_NetAddressZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_NetAddressZ;
+ * Method:    LDKCOption_SocketAddressZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_SocketAddressZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1NetAddressZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1SocketAddressZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PublicKeyCOption_NetAddressZZ_get_a
+ * Method:    C2Tuple_PublicKeyCOption_SocketAddressZZ_get_a
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1get_1a
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1get_1a
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PublicKeyCOption_NetAddressZZ_get_b
+ * Method:    C2Tuple_PublicKeyCOption_SocketAddressZZ_get_b
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1get_1b
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2737,34 +2857,90 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1u32GraphSyncErrorZ_1
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_KeyPairZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_KeyPairZ;
+ * Method:    CResult_CVec_u8ZIOErrorZ_get_ok
+ * Signature: (J)[B
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1KeyPairZ_1ref_1from_1ptr
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_get_ok
+ * Method:    CResult_CVec_u8ZIOErrorZ_get_err
+ * Signature: (J)Lorg/ldk/enums/IOError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_get_ok
+ * Signature: (J)[Ljava/lang/String;
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_get_err
+ * Signature: (J)Lorg/ldk/enums/IOError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_ok
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_get_err
+ * Signature: (J)Lorg/ldk/enums/IOError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_get_err
- * Signature: (J)V
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_get_err
+ * Signature: (J)Lorg/ldk/enums/IOError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_SecretKeyZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_SecretKeyZ;
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1SecretKeyZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_ScriptZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_ScriptZ;
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ScriptZ_1ref_1from_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_get_err
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2777,26 +2953,34 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1i64Z_1ref_1from
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_TxidZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_TxidZ;
+ * Method:    CResult_SocketAddressDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1TxidZ_1ref_1from_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_get_ok
+ * Method:    CResult_SocketAddressDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_get_err
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_get_err
+ * Signature: (J)Lorg/ldk/enums/SocketAddressParseError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -3745,18 +3929,26 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTran
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_get_ok
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_get_ok
  * Signature: (J)[[B
  */
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1get_1ok
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_get_err
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_get_err
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1get_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCOption_usizeZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_usizeZ;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1usizeZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -3815,6 +4007,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKPathFailure_ref_from_ptr
@@ -3929,18 +4137,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentFailureReason
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_u128Z_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_u128Z;
+ * Method:    LDKCOption_U128Z_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_U128Z;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u128Z_1ref_1from_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_PaymentIdZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_PaymentIdZ;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1PaymentIdZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1U128Z_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -3991,22 +4191,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok
- * Signature: (J)[J
- */
-JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err
- * Signature: (J)Lorg/ldk/enums/IOError;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1err
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKBolt11ParseError_ref_from_ptr
@@ -4097,18 +4281,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawBolt11Invoice_1u8
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_get_ok
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_get_err
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_get_err
  * Signature: (J)Lorg/ldk/enums/Secp256k1Error;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -4287,6 +4471,54 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKPaymentError_ref_from_ptr
@@ -4297,18 +4529,18 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_get_ok
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_get_ok
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1get_1ok
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_get_err
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -4329,18 +4561,42 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentErrorZ_1g
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_get_ok
+ * Method:    LDKProbingError_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKProbingError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKProbingError_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_ok
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StrSecp256k1ErrorZ_get_ok
  * Signature: (J)Ljava/lang/String;
  */
-JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1get_1ok
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_get_err
+ * Method:    CResult_StrSecp256k1ErrorZ_get_err
  * Signature: (J)Lorg/ldk/enums/Secp256k1Error;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -4359,6 +4615,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyOnionMessageZ_get_a
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1get_1a
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyOnionMessageZ_get_b
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1get_1b
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKSendError_ref_from_ptr
@@ -4367,6 +4639,22 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNoneZ
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSendError_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_get_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneSendErrorZ_get_ok
@@ -4399,6 +4687,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1ge
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_get_err
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1get_1err
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_BlindedPathDecodeErrorZ_get_ok
@@ -4511,6 +4815,46 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1Monito
 JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1MonitorUpdateIdZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKKVStore_new
+ * Signature: (Lorg/ldk/impl/bindings/LDKKVStore;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKKVStore_1new
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    KVStore_read
+ * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_KVStore_1read
+  (JNIEnv *, jclass, jlong, jstring, jstring, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    KVStore_write
+ * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_KVStore_1write
+  (JNIEnv *, jclass, jlong, jstring, jstring, jstring, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    KVStore_remove
+ * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_KVStore_1remove
+  (JNIEnv *, jclass, jlong, jstring, jstring, jstring, jboolean);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    KVStore_list
+ * Signature: (JLjava/lang/String;Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_KVStore_1list
+  (JNIEnv *, jclass, jlong, jstring, jstring);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKPersister_new
@@ -4543,6 +4887,30 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1graph
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Persister_1persist_1scorer
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKPersist_new
+ * Signature: (Lorg/ldk/impl/bindings/LDKPersist;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKPersist_1new
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Persist_persist_new_channel
+ * Signature: (JJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1channel
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Persist_update_persisted_channel
+ * Signature: (JJJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_1channel
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKFutureCallback_new
@@ -4631,30 +4999,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Confirm_1best_1block_1updated
 JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_Confirm_1get_1relevant_1txids
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKPersist_new
- * Signature: (Lorg/ldk/impl/bindings/LDKPersist;)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKPersist_1new
-  (JNIEnv *, jclass, jobject);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    Persist_persist_new_channel
- * Signature: (JJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1channel
-  (JNIEnv *, jclass, jlong, jlong, jlong, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    Persist_update_persisted_channel
- * Signature: (JJJJJ)Lorg/ldk/enums/ChannelMonitorUpdateStatus;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_1channel
-  (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKEventHandler_new
@@ -4689,10 +5033,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EventsProvider_1process_1pendi
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKRetry_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKRetry;
+ * Method:    LDKFailureCode_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKFailureCode;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKRetry_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKFailureCode_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -5343,6 +5687,38 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEffectiveCapacity_1ref_1
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPayee_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKScore_new
+ * Signature: (Lorg/ldk/impl/bindings/LDKScore;Lorg/ldk/impl/bindings/LDKScoreLookUp;Lorg/ldk/impl/bindings/LDKScoreUpdate;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKScore_1new
+  (JNIEnv *, jclass, jobject, jobject, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKScore_get_ScoreLookUp
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKScore_1get_1ScoreLookUp
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKScore_get_ScoreUpdate
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKScore_1get_1ScoreUpdate
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Score_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Score_1write
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKDestination_ref_from_ptr
@@ -5583,54 +5959,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxOut_1clone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Str_1free
   (JNIEnv *, jclass, jstring);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_DurationZ_some
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1some
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_DurationZ_none
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1none
-  (JNIEnv *, jclass);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_DurationZ_free
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_DurationZ_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_DurationZ_clone
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1DurationZ_1clone
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CVec_BlindedPathZ_free
- * Signature: ([J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BlindedPathZ_1free
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_u64Z_some
@@ -5671,6 +5999,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CVec_BlindedPathZ_free
+ * Signature: ([J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BlindedPathZ_1free
+  (JNIEnv *, jclass, jlongArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RefundBolt12ParseErrorZ_ok
@@ -5719,6 +6055,54 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RefundBolt12ParseErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RetryDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RetryDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneAPIErrorZ_ok
@@ -5785,42 +6169,42 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1APIErrorZ_1free
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentSecretZ_some
+ * Method:    COption_ThirtyTwoBytesZ_some
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1some
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1some
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentSecretZ_none
+ * Method:    COption_ThirtyTwoBytesZ_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentSecretZ_free
+ * Method:    COption_ThirtyTwoBytesZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentSecretZ_clone_ptr
+ * Method:    COption_ThirtyTwoBytesZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentSecretZ_clone
+ * Method:    COption_ThirtyTwoBytesZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentSecretZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ThirtyTwoBytesZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -5921,658 +6305,786 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFields
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_BlindedPayInfoDecodeErrorZ_ok
+ * Method:    C2Tuple_u64CVec_u8ZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_BlindedPayInfoDecodeErrorZ_err
+ * Method:    C2Tuple_u64CVec_u8ZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_BlindedPayInfoDecodeErrorZ_is_ok
- * Signature: (J)Z
+ * Method:    C2Tuple_u64CVec_u8ZZ_new
+ * Signature: (J[B)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1is_1ok
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1new
+  (JNIEnv *, jclass, jlong, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_BlindedPayInfoDecodeErrorZ_free
+ * Method:    C2Tuple_u64CVec_u8ZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64CVec_1u8ZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_BlindedPayInfoDecodeErrorZ_clone_ptr
+ * Method:    CVec_C2Tuple_u64CVec_u8ZZZ_free
+ * Signature: ([J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u64CVec_1u8ZZZ_1free
+  (JNIEnv *, jclass, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RecipientOnionFieldsNoneZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_BlindedPayInfoDecodeErrorZ_clone
- * Signature: (J)J
+ * Method:    CResult_RecipientOnionFieldsNoneZ_err
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1err
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RecipientOnionFieldsNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok
- * Signature: (J)J
+ * Method:    CResult_RecipientOnionFieldsNoneZ_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1ok
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err
+ * Method:    CResult_RecipientOnionFieldsNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok
- * Signature: (J)Z
+ * Method:    CResult_RecipientOnionFieldsNoneZ_clone
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1is_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecipientOnionFieldsNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free
+ * Method:    CVec_ThirtyTwoBytesZ_free
+ * Signature: ([[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ThirtyTwoBytesZ_1free
+  (JNIEnv *, jclass, jobjectArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_CVec_ThirtyTwoBytesZZ_some
+ * Signature: ([[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1some
+  (JNIEnv *, jclass, jobjectArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_CVec_ThirtyTwoBytesZZ_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_CVec_ThirtyTwoBytesZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr
+ * Method:    COption_CVec_ThirtyTwoBytesZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone
+ * Method:    COption_CVec_ThirtyTwoBytesZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ThirtyTwoBytesZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok
- * Signature: (J)J
+ * Method:    CResult_ThirtyTwoBytesNoneZ_ok
+ * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1ok
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1ok
+  (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err
- * Signature: (J)J
+ * Method:    CResult_ThirtyTwoBytesNoneZ_err
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1err
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1err
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok
+ * Method:    CResult_ThirtyTwoBytesNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free
+ * Method:    CResult_ThirtyTwoBytesNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr
+ * Method:    CResult_ThirtyTwoBytesNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone
+ * Method:    CResult_ThirtyTwoBytesNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_ok
+ * Method:    CResult_BlindedPayInfoDecodeErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_err
+ * Method:    CResult_BlindedPayInfoDecodeErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok
+ * Method:    CResult_BlindedPayInfoDecodeErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_free
+ * Method:    CResult_BlindedPayInfoDecodeErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr
+ * Method:    CResult_BlindedPayInfoDecodeErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_clone
+ * Method:    CResult_BlindedPayInfoDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPayInfoDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_SpendableOutputDescriptorZ_free
- * Signature: ([J)V
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SpendableOutputDescriptorZ_1free
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_TxOutZ_free
- * Signature: ([J)V
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TxOutZ_1free
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PackedLockTimeZ_some
- * Signature: (I)J
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok
+ * Signature: (J)Z
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1some
-  (JNIEnv *, jclass, jint);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PackedLockTimeZ_none
- * Signature: ()J
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1none
-  (JNIEnv *, jclass);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PackedLockTimeZ_free
- * Signature: (J)V
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PackedLockTimeZ_clone_ptr
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PackedLockTimeZ_clone
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PackedLockTimeZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PartiallySignedTransactionusizeZ_clone_ptr
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PartiallySignedTransactionusizeZ_clone
- * Signature: (J)J
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok
+ * Signature: (J)Z
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1clone
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PartiallySignedTransactionusizeZ_new
- * Signature: ([BJ)J
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1new
-  (JNIEnv *, jclass, jbyteArray, jlong);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PartiallySignedTransactionusizeZ_free
- * Signature: (J)V
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PartiallySignedTransactionusizeZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_ok
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_err
- * Signature: ()J
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_ok
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1err
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_is_ok
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_free
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone_ptr
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PartiallySignedTransactionusizeZNoneZ_clone
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PartiallySignedTransactionusizeZNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_PaymentPreimageZ_free
- * Signature: ([[B)V
+ * Method:    CVec_SpendableOutputDescriptorZ_free
+ * Signature: ([J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PaymentPreimageZ_1free
-  (JNIEnv *, jclass, jobjectArray);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SpendableOutputDescriptorZ_1free
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneNoneZ_ok
- * Signature: ()J
+ * Method:    CVec_TxOutZ_free
+ * Signature: ([J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1ok
-  (JNIEnv *, jclass);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TxOutZ_1free
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneNoneZ_err
- * Signature: ()J
+ * Method:    COption_u32Z_some
+ * Signature: (I)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1err
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1some
+  (JNIEnv *, jclass, jint);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneNoneZ_is_ok
- * Signature: (J)Z
+ * Method:    COption_u32Z_none
+ * Signature: ()J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1is_1ok
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneNoneZ_free
+ * Method:    COption_u32Z_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneNoneZ_clone_ptr
+ * Method:    COption_u32Z_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneNoneZ_clone
+ * Method:    COption_u32Z_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_SignatureZ_free
- * Signature: ([[B)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SignatureZ_1free
-  (JNIEnv *, jclass, jobjectArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_SignatureCVec_SignatureZZ_clone_ptr
+ * Method:    C2Tuple_CVec_u8ZusizeZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_SignatureCVec_SignatureZZ_clone
+ * Method:    C2Tuple_CVec_u8ZusizeZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_SignatureCVec_SignatureZZ_new
- * Signature: ([B[[B)J
+ * Method:    C2Tuple_CVec_u8ZusizeZ_new
+ * Signature: ([BJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1new
-  (JNIEnv *, jclass, jbyteArray, jobjectArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1new
+  (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_SignatureCVec_SignatureZZ_free
+ * Method:    C2Tuple_CVec_u8ZusizeZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1CVec_1u8ZusizeZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone
+ * Method:    CResult_C2Tuple_CVec_u8ZusizeZNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1CVec_1u8ZusizeZNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_ok
- * Signature: ([B)J
+ * Method:    CResult_NoneNoneZ_ok
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1ok
-  (JNIEnv *, jclass, jbyteArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1ok
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_err
+ * Method:    CResult_NoneNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_is_ok
+ * Method:    CResult_NoneNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_free
+ * Method:    CResult_NoneNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_clone_ptr
+ * Method:    CResult_NoneNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SignatureNoneZ_clone
+ * Method:    CResult_NoneNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyNoneZ_ok
- * Signature: ([B)J
+ * Method:    CVec_ECDSASignatureZ_free
+ * Signature: ([[B)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1ok
-  (JNIEnv *, jclass, jbyteArray);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ECDSASignatureZ_1free
+  (JNIEnv *, jclass, jobjectArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyNoneZ_err
+ * Method:    C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_new
+ * Signature: ([B[[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1new
+  (JNIEnv *, jclass, jbyteArray, jobjectArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_ECDSASignatureCVec_ECDSASignatureZZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyNoneZ_is_ok
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyNoneZ_free
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyNoneZ_clone_ptr
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyNoneZ_clone
+ * Method:    CResult_C2Tuple_ECDSASignatureCVec_ECDSASignatureZZNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ECDSASignatureCVec_1ECDSASignatureZZNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScalarZ_some
- * Signature: (J)J
+ * Method:    CResult_ECDSASignatureNoneZ_ok
+ * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1some
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1ok
+  (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScalarZ_none
+ * Method:    CResult_ECDSASignatureNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScalarZ_free
+ * Method:    CResult_ECDSASignatureNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ECDSASignatureNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScalarZ_clone_ptr
+ * Method:    CResult_ECDSASignatureNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScalarZ_clone
+ * Method:    CResult_ECDSASignatureNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScalarZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ECDSASignatureNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_ok
+ * Method:    CResult_PublicKeyNoneZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_err
+ * Method:    CResult_PublicKeyNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_is_ok
+ * Method:    CResult_PublicKeyNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_free
+ * Method:    CResult_PublicKeyNoneZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PublicKeyNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PublicKeyNoneZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyNoneZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_BigEndianScalarZ_some
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1some
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_BigEndianScalarZ_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_BigEndianScalarZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_clone_ptr
+ * Method:    COption_BigEndianScalarZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SharedSecretNoneZ_clone
+ * Method:    COption_BigEndianScalarZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SharedSecretNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BigEndianScalarZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -6631,6 +7143,54 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignature
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SchnorrSignatureNoneZ_ok
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1ok
+  (JNIEnv *, jclass, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SchnorrSignatureNoneZ_err
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1err
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SchnorrSignatureNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SchnorrSignatureNoneZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SchnorrSignatureNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SchnorrSignatureNoneZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SchnorrSignatureNoneZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_WriteableEcdsaChannelSignerDecodeErrorZ_ok
@@ -6681,50 +7241,50 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1WriteableEcdsaChanne
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_ok
+ * Method:    CResult_CVec_u8ZNoneZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_err
+ * Method:    CResult_CVec_u8ZNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_is_ok
+ * Method:    CResult_CVec_u8ZNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_free
+ * Method:    CResult_CVec_u8ZNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_clone_ptr
+ * Method:    CResult_CVec_u8ZNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ScriptNoneZ_clone
+ * Method:    CResult_CVec_u8ZNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScriptNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -6775,6 +7335,86 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNoneZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u16Z_some
+ * Signature: (S)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1some
+  (JNIEnv *, jclass, jshort);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u16Z_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u16Z_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u16Z_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u16Z_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_boolZ_some
+ * Signature: (Z)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1some
+  (JNIEnv *, jclass, jboolean);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_boolZ_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_boolZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_boolZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_boolZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1boolZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CVec_CVec_u8ZZ_free
@@ -6879,54 +7519,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_ok
- * Signature: ([B)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1ok
-  (JNIEnv *, jclass, jbyteArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_err
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1err
-  (JNIEnv *, jclass);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_is_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1is_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_free
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PartiallySignedTransactionNoneZ_clone
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PartiallySignedTransactionNoneZ_1clone
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TransactionNoneZ_ok
@@ -7001,50 +7593,50 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1WriteableScoreZ_1free
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_ok
+ * Method:    CResult_NoneIOErrorZ_ok
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1ok
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_err
+ * Method:    CResult_NoneIOErrorZ_err
  * Signature: (Lorg/ldk/enums/IOError;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_is_ok
+ * Method:    CResult_NoneIOErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_free
+ * Method:    CResult_NoneIOErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_clone_ptr
+ * Method:    CResult_NoneIOErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NoneErrorZ_clone
+ * Method:    CResult_NoneIOErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneIOErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -7263,46 +7855,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedTailDecodeErr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHopZ_1free
   (JNIEnv *, jclass, jlongArray);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_u32Z_some
- * Signature: (I)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1some
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_u32Z_none
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none
-  (JNIEnv *, jclass);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_u32Z_free
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_u32Z_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_u32Z_clone
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CVec_PathZ_free
@@ -7751,22 +8303,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u64ZZ_1c
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u64ZZ_1clone
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_Z_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_Z_clone
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1clone
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_Z_new
@@ -7785,74 +8321,82 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1Z_1free
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple__u168_u168Z_clone_ptr
- * Signature: (J)J
+ * Method:    C2Tuple__u1632_u1632Z_new
+ * Signature: ([S[S)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1new
+  (JNIEnv *, jclass, jshortArray, jshortArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple__u1632_u1632Z_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u1632_1u1632Z_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple__u168_u168Z_clone
+ * Method:    COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_some
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1some
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple__u168_u168Z_new
- * Signature: ([S[S)J
+ * Method:    COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_none
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1new
-  (JNIEnv *, jclass, jshortArray, jshortArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1none
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple__u168_u168Z_free
+ * Method:    COption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1_1u168_1u168Z_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_C2Tuple_EightU16sEightU16sZZ_some
- * Signature: (J)J
+ * Method:    COption_f64Z_some
+ * Signature: (D)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1some
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1some
+  (JNIEnv *, jclass, jdouble);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_C2Tuple_EightU16sEightU16sZZ_none
+ * Method:    COption_f64Z_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_C2Tuple_EightU16sEightU16sZZ_free
+ * Method:    COption_f64Z_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_C2Tuple_EightU16sEightU16sZZ_clone_ptr
+ * Method:    COption_f64Z_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_C2Tuple_EightU16sEightU16sZZ_clone
+ * Method:    COption_f64Z_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1EightU16sEightU16sZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1f64Z_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -7929,83 +8473,91 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1usizeTransactio
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_BlockHashZ_some
- * Signature: ([B)J
+ * Method:    C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1some
-  (JNIEnv *, jclass, jbyteArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_BlockHashZ_none
- * Signature: ()J
+ * Method:    C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_clone
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1none
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_new
+ * Signature: ([BJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1new
+  (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_BlockHashZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_BlockHashZ_clone_ptr
- * Signature: (J)J
+ * Method:    CVec_C2Tuple_ThirtyTwoBytesCOption_ThirtyTwoBytesZZZ_free
+ * Signature: ([J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCOption_1ThirtyTwoBytesZZZ_1free
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_BlockHashZ_clone
- * Signature: (J)J
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_ok
+ * Signature: (Lorg/ldk/enums/ChannelMonitorUpdateStatus;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1BlockHashZ_1clone
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1ok
+  (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCOption_BlockHashZZ_clone_ptr
- * Signature: (J)J
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_err
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1err
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCOption_BlockHashZZ_clone
- * Signature: (J)J
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_is_ok
+ * Signature: (J)Z
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1clone
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCOption_BlockHashZZ_new
- * Signature: ([BJ)J
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1new
-  (JNIEnv *, jclass, jbyteArray, jlong);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1free
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCOption_BlockHashZZ_free
- * Signature: (J)V
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCOption_1BlockHashZZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_C2Tuple_TxidCOption_BlockHashZZZ_free
- * Signature: ([J)V
+ * Method:    CResult_ChannelMonitorUpdateStatusNoneZ_clone
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCOption_1BlockHashZZZ_1free
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateStatusNoneZ_1clone
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -8391,14 +8943,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTypeFeaturesD
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTypeFeaturesDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CVec_ChainHashZ_free
- * Signature: ([[B)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChainHashZ_1free
-  (JNIEnv *, jclass, jobjectArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_OfferBolt12ParseErrorZ_ok
@@ -8449,50 +8993,50 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OfferBolt12ParseErro
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_ok
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_err
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_err
  * Signature: (Lorg/ldk/enums/Secp256k1Error;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_is_ok
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_free
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_clone_ptr
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_clone
+ * Method:    CResult_PublicKeySecp256k1ErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeySecp256k1ErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -8977,10 +9521,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_NetAddressZ_free
+ * Method:    CVec_SocketAddressZ_free
  * Signature: ([J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SocketAddressZ_1free
   (JNIEnv *, jclass, jlongArray);
 
 /*
@@ -9161,82 +9705,138 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_NetAddressZZ_some
+ * Method:    COption_CVec_SocketAddressZZ_some
  * Signature: ([J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1some
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1some
   (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_NetAddressZZ_none
+ * Method:    COption_CVec_SocketAddressZZ_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_NetAddressZZ_free
+ * Method:    COption_CVec_SocketAddressZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_NetAddressZZ_clone_ptr
+ * Method:    COption_CVec_SocketAddressZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_NetAddressZZ_clone
+ * Method:    COption_CVec_SocketAddressZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1SocketAddressZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentPreimageZ_some
- * Signature: ([B)J
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_ok
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1some
-  (JNIEnv *, jclass, jbyteArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentPreimageZ_none
- * Signature: ()J
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_err
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1none
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentPreimageZ_free
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelDerivationParametersDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelDerivationParametersDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentPreimageZ_clone_ptr
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentPreimageZ_clone
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentPreimageZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCDescriptorDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCDescriptorDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -9409,170 +10009,162 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1UtxoZNoneZ_1cl
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u16Z_some
- * Signature: (S)J
+ * Method:    C2Tuple_u64u16Z_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1some
-  (JNIEnv *, jclass, jshort);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u16Z_none
- * Signature: ()J
+ * Method:    C2Tuple_u64u16Z_clone
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1clone
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u16Z_free
- * Signature: (J)V
+ * Method:    C2Tuple_u64u16Z_new
+ * Signature: (JS)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1new
+  (JNIEnv *, jclass, jlong, jshort);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u16Z_clone_ptr
- * Signature: (J)J
+ * Method:    C2Tuple_u64u16Z_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u64u16Z_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u16Z_clone
+ * Method:    COption_C2Tuple_u64u16ZZ_some
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1some
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ChannelShutdownStateZ_some
- * Signature: (Lorg/ldk/enums/ChannelShutdownState;)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1some
-  (JNIEnv *, jclass, jobject);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_ChannelShutdownStateZ_none
+ * Method:    COption_C2Tuple_u64u16ZZ_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ChannelShutdownStateZ_free
+ * Method:    COption_C2Tuple_u64u16ZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ChannelShutdownStateZ_clone_ptr
+ * Method:    COption_C2Tuple_u64u16ZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ChannelShutdownStateZ_clone
+ * Method:    COption_C2Tuple_u64u16ZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1u64u16ZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentHashZ_some
- * Signature: ([B)J
+ * Method:    COption_ChannelShutdownStateZ_some
+ * Signature: (Lorg/ldk/enums/ChannelShutdownState;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1some
-  (JNIEnv *, jclass, jbyteArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1some
+  (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentHashZ_none
+ * Method:    COption_ChannelShutdownStateZ_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentHashZ_free
+ * Method:    COption_ChannelShutdownStateZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentHashZ_clone_ptr
+ * Method:    COption_ChannelShutdownStateZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentHashZ_clone
+ * Method:    COption_ChannelShutdownStateZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentHashZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ChannelShutdownStateZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_ok
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_err
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_is_ok
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_free
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_clone_ptr
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult__u832APIErrorZ_clone
+ * Method:    CResult_ThirtyTwoBytesAPIErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesAPIErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -9681,402 +10273,322 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneRetryableSendFai
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_ok
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_err
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_is_ok
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_free
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_clone_ptr
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashPaymentSendFailureZ_clone
+ * Method:    CResult_ThirtyTwoBytesPaymentSendFailureZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashPaymentSendFailureZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentSendFailureZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_ok
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_err
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_err
  * Signature: (Lorg/ldk/enums/RetryableSendFailure;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1err
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_is_ok
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_free
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_clone_ptr
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentHashRetryableSendFailureZ_clone
+ * Method:    CResult_ThirtyTwoBytesRetryableSendFailureZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentHashRetryableSendFailureZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesRetryableSendFailureZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentIdZ_clone_ptr
+ * Method:    C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentIdZ_clone
+ * Method:    C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentIdZ_new
+ * Method:    C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_new
  * Signature: ([B[B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentIdZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesThirtyTwoBytesZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone_1ptr
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_ThirtyTwoBytesZ_free
- * Signature: ([[B)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ThirtyTwoBytesZ_1free
-  (JNIEnv *, jclass, jobjectArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentSecretZ_clone_ptr
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZPaymentSendFailureZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentSecretZ_clone
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentSecretZ_new
- * Signature: ([B[B)J
+ * Method:    CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZ_free
+ * Signature: ([J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1new
-  (JNIEnv *, jclass, jbyteArray, jbyteArray);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZ_1free
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PaymentHashPaymentSecretZ_free
- * Signature: (J)V
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_ok
+ * Signature: ([J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1free
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1ok
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_ok
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_err
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1err
-  (JNIEnv *, jclass);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_free
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1clone_1ptr
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_clone
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentSecretZNoneZ_1clone
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_ok
- * Signature: ([B)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1ok
-  (JNIEnv *, jclass, jbyteArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_err
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1err
-  (JNIEnv *, jclass);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_is_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1is_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_free
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_clone_ptr
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbeSendFailureZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentSecretNoneZ_clone
+ * Method:    C2Tuple_ThirtyTwoBytesPublicKeyZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_ok
- * Signature: ([B)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1ok
-  (JNIEnv *, jclass, jbyteArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_err
+ * Method:    C2Tuple_ThirtyTwoBytesPublicKeyZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_is_ok
- * Signature: (J)Z
+ * Method:    C2Tuple_ThirtyTwoBytesPublicKeyZ_new
+ * Signature: ([B[B)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1is_1ok
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1new
+  (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesPublicKeyZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesPublicKeyZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_clone_ptr
- * Signature: (J)J
+ * Method:    CVec_C2Tuple_ThirtyTwoBytesPublicKeyZZ_free
+ * Signature: ([J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesPublicKeyZZ_1free
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentPreimageAPIErrorZ_clone
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPreimageAPIErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_ChainHashZZ_some
- * Signature: ([[B)J
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_err
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1some
-  (JNIEnv *, jclass, jobjectArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1err
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_ChainHashZZ_none
- * Signature: ()J
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_is_ok
+ * Signature: (J)Z
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1none
-  (JNIEnv *, jclass);
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_ChainHashZZ_free
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_ChainHashZZ_clone_ptr
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_CVec_ChainHashZZ_clone
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1ChainHashZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -10329,50 +10841,50 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelMonitorZ_1free
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelManagerZ_new
+ * Method:    C2Tuple_ThirtyTwoBytesChannelManagerZ_new
  * Signature: ([BJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1new
   (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelManagerZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesChannelManagerZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelManagerZDecodeErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelManagerZDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -10785,114 +11297,122 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErro
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_OutPointScriptZ_clone_ptr
+ * Method:    C2Tuple_OutPointCVec_u8ZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_OutPointScriptZ_clone
+ * Method:    C2Tuple_OutPointCVec_u8ZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_OutPointScriptZ_new
+ * Method:    C2Tuple_OutPointCVec_u8ZZ_new
  * Signature: (J[B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1new
   (JNIEnv *, jclass, jlong, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_OutPointScriptZ_free
+ * Method:    C2Tuple_OutPointCVec_u8ZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointCVec_1u8ZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_u32ScriptZ_clone_ptr
+ * Method:    C2Tuple_u32CVec_u8ZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_u32ScriptZ_clone
+ * Method:    C2Tuple_u32CVec_u8ZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_u32ScriptZ_new
+ * Method:    C2Tuple_u32CVec_u8ZZ_new
  * Signature: (I[B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1new
   (JNIEnv *, jclass, jint, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_u32ScriptZ_free
+ * Method:    C2Tuple_u32CVec_u8ZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32CVec_1u8ZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_C2Tuple_u32ScriptZZ_free
+ * Method:    CVec_C2Tuple_u32CVec_u8ZZZ_free
  * Signature: ([J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32ScriptZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32CVec_1u8ZZZ_1free
   (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_new
  * Signature: ([B[J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1new
   (JNIEnv *, jclass, jbyteArray, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_free
+ * Method:    CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZZ_free
  * Signature: ([J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32CVec_1u8ZZZZZ_1free
+  (JNIEnv *, jclass, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CVec_CommitmentTransactionZ_free
+ * Signature: ([J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CommitmentTransactionZ_1free
   (JNIEnv *, jclass, jlongArray);
 
 /*
@@ -10945,42 +11465,42 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_new
  * Signature: ([B[J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1new
   (JNIEnv *, jclass, jbyteArray, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free
+ * Method:    CVec_C2Tuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZZ_free
  * Signature: ([J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesCVec_1C2Tuple_1u32TxOutZZZZ_1free
   (JNIEnv *, jclass, jlongArray);
 
 /*
@@ -10993,82 +11513,82 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1BalanceZ_1free
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_clone_ptr
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_clone
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_new
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_new
  * Signature: ([BJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1new
   (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_free
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -11329,82 +11849,82 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecode
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_NetAddressZ_some
+ * Method:    COption_SocketAddressZ_some
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1some
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1some
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_NetAddressZ_none
+ * Method:    COption_SocketAddressZ_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_NetAddressZ_free
+ * Method:    COption_SocketAddressZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_NetAddressZ_clone_ptr
+ * Method:    COption_SocketAddressZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_NetAddressZ_clone
+ * Method:    COption_SocketAddressZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetAddressZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SocketAddressZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PublicKeyCOption_NetAddressZZ_clone_ptr
+ * Method:    C2Tuple_PublicKeyCOption_SocketAddressZZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PublicKeyCOption_NetAddressZZ_clone
+ * Method:    C2Tuple_PublicKeyCOption_SocketAddressZZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PublicKeyCOption_NetAddressZZ_new
+ * Method:    C2Tuple_PublicKeyCOption_SocketAddressZZ_new
  * Signature: ([BJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1new
   (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_PublicKeyCOption_NetAddressZZ_free
+ * Method:    C2Tuple_PublicKeyCOption_SocketAddressZZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1NetAddressZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyCOption_1SocketAddressZZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CVec_C2Tuple_PublicKeyCOption_NetAddressZZZ_free
+ * Method:    CVec_C2Tuple_PublicKeyCOption_SocketAddressZZZ_free
  * Signature: ([J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1PublicKeyCOption_1NetAddressZZZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1PublicKeyCOption_1SocketAddressZZZ_1free
   (JNIEnv *, jclass, jlongArray);
 
 /*
@@ -11585,130 +12105,298 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1u32GraphSyncErrorZ_1f
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_KeyPairZ_some
+ * Method:    CResult_CVec_u8ZIOErrorZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1some
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_KeyPairZ_none
- * Signature: ()J
+ * Method:    CResult_CVec_u8ZIOErrorZ_err
+ * Signature: (Lorg/ldk/enums/IOError;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1none
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1err
+  (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_KeyPairZ_free
+ * Method:    CResult_CVec_u8ZIOErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_u8ZIOErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_KeyPairZ_clone_ptr
+ * Method:    CResult_CVec_u8ZIOErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_KeyPairZ_clone
+ * Method:    CResult_CVec_u8ZIOErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1KeyPairZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZIOErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_ok
+ * Method:    CVec_StrZ_free
+ * Signature: ([Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1StrZ_1free
+  (JNIEnv *, jclass, jobjectArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_ok
+ * Signature: ([Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1ok
+  (JNIEnv *, jclass, jobjectArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_err
+ * Signature: (Lorg/ldk/enums/IOError;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1err
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_StrZIOErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_err
- * Signature: ()J
+ * Method:    CResult_CVec_StrZIOErrorZ_clone
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1err
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1StrZIOErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZ_free
+ * Signature: ([J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZ_1free
+  (JNIEnv *, jclass, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_ok
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1ok
+  (JNIEnv *, jclass, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_err
+ * Signature: (Lorg/ldk/enums/IOError;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1err
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_is_ok
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesChannelMonitorZZIOErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesChannelMonitorZZIOErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_err
+ * Signature: (Lorg/ldk/enums/IOError;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1err
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_free
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_clone_ptr
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_COption_KeyPairZNoneZ_clone
+ * Method:    CResult_C2Tuple_ThirtyTwoBytesChannelMonitorZIOErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1KeyPairZNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1ThirtyTwoBytesChannelMonitorZIOErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScriptZ_some
+ * Method:    COption_SecretKeyZ_some
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1some
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1some
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScriptZ_none
+ * Method:    COption_SecretKeyZ_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScriptZ_free
+ * Method:    COption_SecretKeyZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScriptZ_clone_ptr
+ * Method:    COption_SecretKeyZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_ScriptZ_clone
+ * Method:    COption_SecretKeyZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ScriptZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1SecretKeyZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_err
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1err
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_VerifiedInvoiceRequestNoneZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1VerifiedInvoiceRequestNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -11785,90 +12473,98 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1i64Z_1clone
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_TxidZ_some
- * Signature: ([B)J
+ * Method:    CResult_SocketAddressDecodeErrorZ_ok
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1some
-  (JNIEnv *, jclass, jbyteArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_TxidZ_none
- * Signature: ()J
+ * Method:    CResult_SocketAddressDecodeErrorZ_err
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1none
-  (JNIEnv *, jclass);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_TxidZ_free
- * Signature: (J)V
+ * Method:    CResult_SocketAddressDecodeErrorZ_is_ok
+ * Signature: (J)Z
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1free
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_TxidZ_clone_ptr
- * Signature: (J)J
+ * Method:    CResult_SocketAddressDecodeErrorZ_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1clone_1ptr
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_TxidZ_clone
+ * Method:    CResult_SocketAddressDecodeErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1TxidZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_ok
+ * Method:    CResult_SocketAddressDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_err
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_is_ok
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_err
+ * Signature: (Lorg/ldk/enums/SocketAddressParseError;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1err
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_free
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_clone_ptr
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_NetAddressDecodeErrorZ_clone
+ * Method:    CResult_SocketAddressSocketAddressParseErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SocketAddressSocketAddressParseErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -14697,50 +15393,90 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTran
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_ok
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_ok
  * Signature: ([[B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1ok
   (JNIEnv *, jclass, jobjectArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_err
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_err
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1err
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_is_ok
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_free
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_clone_ptr
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_SignatureZNoneZ_clone
+ * Method:    CResult_CVec_ECDSASignatureZNoneZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1ECDSASignatureZNoneZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_usizeZ_some
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1some
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_usizeZ_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_usizeZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_usizeZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_usizeZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1usizeZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -14887,6 +15623,54 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentPurposeDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClaimedHTLCDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClaimedHTLCDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_PathFailureZ_some
@@ -15201,83 +15985,51 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentFailureReason
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u128Z_some
+ * Method:    COption_U128Z_some
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1some
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1some
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u128Z_none
+ * Method:    COption_U128Z_none
  * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1none
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1none
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u128Z_free
+ * Method:    COption_U128Z_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u128Z_clone_ptr
+ * Method:    COption_U128Z_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_u128Z_clone
+ * Method:    COption_U128Z_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u128Z_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1U128Z_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentIdZ_some
- * Signature: ([B)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1some
-  (JNIEnv *, jclass, jbyteArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentIdZ_none
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1none
-  (JNIEnv *, jclass);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentIdZ_free
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentIdZ_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    COption_PaymentIdZ_clone
- * Signature: (J)J
+ * Method:    CVec_ClaimedHTLCZ_free
+ * Signature: ([J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1PaymentIdZ_1clone
-  (JNIEnv *, jclass, jlong);
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ClaimedHTLCZ_1free
+  (JNIEnv *, jclass, jlongArray);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -15407,62 +16159,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CVec_C2Tuple_BlockHashChannelMonitorZZ_free
- * Signature: ([J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1BlockHashChannelMonitorZZ_1free
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1ok
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err
- * Signature: (Lorg/ldk/enums/IOError;)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1err
-  (JNIEnv *, jclass, jobject);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1is_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1free
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SiPrefixBolt11ParseErrorZ_ok
@@ -15641,50 +16337,50 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawBolt11Invoice_1u83
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_ok
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_err
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_err
  * Signature: (Lorg/ldk/enums/Secp256k1Error;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_is_ok
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_free
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_clone_ptr
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PayeePubKeyErrorZ_clone
+ * Method:    CResult_PayeePubKeySecp256k1ErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeySecp256k1ErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -15839,14 +16535,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1Bolt11InvoiceBolt11S
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1Bolt11InvoiceBolt11SemanticErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    CVec_AddressZ_free
- * Signature: ([Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1AddressZ_1free
-  (JNIEnv *, jclass, jobjectArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DescriptionCreationErrorZ_ok
@@ -16233,50 +16921,194 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UntrustedStringDecod
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_ok
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReceiveTlvsDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReceiveTlvsDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentRelayDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentRelayDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentConstraintsDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentConstraintsDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_ok
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1ok
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_err
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_is_ok
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_free
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_clone_ptr
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PaymentIdPaymentErrorZ_clone
+ * Method:    CResult_ThirtyTwoBytesPaymentErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ThirtyTwoBytesPaymentErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -16329,50 +17161,98 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentErrorZ_1c
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_ok
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_ok
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1ok
+  (JNIEnv *, jclass, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1ThirtyTwoBytesThirtyTwoBytesZZProbingErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StrSecp256k1ErrorZ_ok
  * Signature: (Ljava/lang/String;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1ok
   (JNIEnv *, jclass, jstring);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_err
+ * Method:    CResult_StrSecp256k1ErrorZ_err
  * Signature: (Lorg/ldk/enums/Secp256k1Error;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_is_ok
+ * Method:    CResult_StrSecp256k1ErrorZ_is_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1is_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_free
+ * Method:    CResult_StrSecp256k1ErrorZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_clone_ptr
+ * Method:    CResult_StrSecp256k1ErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_clone
+ * Method:    CResult_StrSecp256k1ErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StrSecp256k1ErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -16471,6 +17351,70 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OnionMessagePathNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyOnionMessageZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyOnionMessageZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyOnionMessageZ_new
+ * Signature: ([BJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1new
+  (JNIEnv *, jclass, jbyteArray, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyOnionMessageZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyOnionMessageZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PublicKeyOnionMessageZSendErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PublicKeyOnionMessageZSendErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneSendErrorZ_ok
@@ -16551,6 +17495,54 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1cl
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BlindedPathNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_err
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1err
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlindedPayInfoBlindedPathZNoneZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlindedPayInfoBlindedPathZNoneZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_BlindedPathDecodeErrorZ_ok
@@ -17135,6 +18127,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_verify
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_construct_1invoice_1preimage
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    KVStore_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KVStore_1free
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Persister_free
@@ -17143,6 +18143,62 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_construct_1invoice_1prei
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Persister_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    read_channel_monitors
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_read_1channel_1monitors
+  (JNIEnv *, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdatingPersister_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdatingPersister_new
+ * Signature: (JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1new
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdatingPersister_read_all_channel_monitors_with_updates
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1read_1all_1channel_1monitors_1with_1updates
+  (JNIEnv *, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdatingPersister_read_channel_monitor_with_updates
+ * Signature: (JJJLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1read_1channel_1monitor_1with_1updates
+  (JNIEnv *, jclass, jlong, jlong, jlong, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdatingPersister_cleanup_stale_updates
+ * Signature: (JZ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1cleanup_1stale_1updates
+  (JNIEnv *, jclass, jlong, jboolean);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdatingPersister_as_Persist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdatingPersister_1as_1Persist
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UntrustedString_free
@@ -18553,10 +19609,10 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    ChannelMonitorUpdateStatus_permanent_failure
+ * Method:    ChannelMonitorUpdateStatus_unrecoverable_error
  * Signature: ()Lorg/ldk/enums/ChannelMonitorUpdateStatus;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1permanent_1failure
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdateStatus_1unrecoverable_1error
   (JNIEnv *, jclass);
 
 /*
@@ -19009,10 +20065,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1htlcevent
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    MonitorEvent_commitment_tx_confirmed
+ * Method:    MonitorEvent_holder_force_closed
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1commitment_1tx_1confirmed
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1holder_1force_1closed
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -19023,14 +20079,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1commitment_1tx_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1completed
   (JNIEnv *, jclass, jlong, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    MonitorEvent_update_failed
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1failed
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    MonitorEvent_eq
@@ -19279,6 +20327,30 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1and
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1process_1pending_1events
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelMonitor_initial_counterparty_commitment_tx
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1initial_1counterparty_1commitment_1tx
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelMonitor_counterparty_commitment_txs_from_update
+ * Signature: (JJ)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1counterparty_1commitment_1txs_1from_1update
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelMonitor_sign_to_local_justice_tx
+ * Signature: (J[BJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1sign_1to_1local_1justice_1tx
+  (JNIEnv *, jclass, jlong, jbyteArray, jlong, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelMonitor_get_counterparty_node_id
@@ -19359,6 +20431,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1current_1best
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1rebroadcast_1pending_1claims
   (JNIEnv *, jclass, jlong, jlong, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelMonitor_get_spendable_outputs
+ * Signature: (J[BI)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1spendable_1outputs
+  (JNIEnv *, jclass, jlong, jbyteArray, jint);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelMonitor_get_claimable_balances
@@ -19369,10 +20449,10 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1cla
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelMonitorZ_read
+ * Method:    C2Tuple_ThirtyTwoBytesChannelMonitorZ_read
  * Signature: ([BJJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1read
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelMonitorZ_1read
   (JNIEnv *, jclass, jbyteArray, jlong, jlong);
 
 /*
@@ -19479,38 +20559,62 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1write
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OutPoint_1read
   (JNIEnv *, jclass, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FailureCode_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FailureCode_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FailureCode_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FailureCode_clone
- * Signature: (J)Lorg/ldk/enums/FailureCode;
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FailureCode_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FailureCode_temporary_node_failure
- * Signature: ()Lorg/ldk/enums/FailureCode;
+ * Signature: ()J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_FailureCode_1temporary_1node_1failure
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FailureCode_1temporary_1node_1failure
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FailureCode_required_node_feature_missing
- * Signature: ()Lorg/ldk/enums/FailureCode;
+ * Signature: ()J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_FailureCode_1required_1node_1feature_1missing
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FailureCode_1required_1node_1feature_1missing
   (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FailureCode_incorrect_or_unknown_payment_details
- * Signature: ()Lorg/ldk/enums/FailureCode;
+ * Signature: ()J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_FailureCode_1incorrect_1or_1unknown_1payment_1details
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FailureCode_1incorrect_1or_1unknown_1payment_1details
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FailureCode_invalid_onion_payload
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FailureCode_1invalid_1onion_1payload
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelManager_free
@@ -20351,29 +21455,37 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1clone_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RecentPaymentDetails_awaiting_invoice
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1awaiting_1invoice
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RecentPaymentDetails_pending
- * Signature: ([BJ)J
+ * Signature: ([B[BJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1pending
-  (JNIEnv *, jclass, jbyteArray, jlong);
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RecentPaymentDetails_fulfilled
- * Signature: (J)J
+ * Signature: ([BJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1fulfilled
-  (JNIEnv *, jclass, jlong);
+  (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RecentPaymentDetails_abandoned
- * Signature: ([B)J
+ * Signature: ([B[B)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecentPaymentDetails_1abandoned
-  (JNIEnv *, jclass, jbyteArray);
+  (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -20607,6 +21719,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spontan
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1probe
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelManager_send_spontaneous_preflight_probes
+ * Signature: (J[BJIJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spontaneous_1preflight_1probes
+  (JNIEnv *, jclass, jlong, jbyteArray, jlong, jint, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelManager_send_preflight_probes
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1preflight_1probes
+  (JNIEnv *, jclass, jlong, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelManager_funding_transaction_generated
@@ -20615,6 +21743,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1probe
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1transaction_1generated
   (JNIEnv *, jclass, jlong, jbyteArray, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelManager_batch_funding_transaction_generated
+ * Signature: (J[J[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1batch_1funding_1transaction_1generated
+  (JNIEnv *, jclass, jlong, jlongArray, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelManager_update_partial_channel_config
@@ -20674,10 +21810,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1ba
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelManager_fail_htlc_backwards_with_reason
- * Signature: (J[BLorg/ldk/enums/FailureCode;)V
+ * Signature: (J[BJ)V
  */
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1backwards_1with_1reason
-  (JNIEnv *, jclass, jlong, jbyteArray, jobject);
+  (JNIEnv *, jclass, jlong, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -20687,6 +21823,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc_1ba
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1funds
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelManager_claim_funds_with_known_custom_tlvs
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1funds_1with_1known_1custom_1tlvs
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelManager_get_our_node_id
@@ -20801,10 +21945,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Confirm
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    ChannelManager_get_persistable_update_future
+ * Method:    ChannelManager_get_event_or_persistence_needed_future
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1persistable_1update_1future
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1event_1or_1persistence_1needed_1future
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelManager_get_and_clear_needs_persistence
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1and_1clear_1needs_1persistence
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -21113,10 +22265,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    C2Tuple_BlockHashChannelManagerZ_read
+ * Method:    C2Tuple_ThirtyTwoBytesChannelManagerZ_read
  * Signature: ([BJ)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1read
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1ThirtyTwoBytesChannelManagerZ_1read
   (JNIEnv *, jclass, jbyteArray, jlong);
 
 /*
@@ -24399,6 +25551,30 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_OnionMessage_1get_1blind
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessage_1set_1blinding_1point
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OnionMessage_get_onion_routing_packet
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OnionMessage_1get_1onion_1routing_1packet
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OnionMessage_set_onion_routing_packet
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OnionMessage_1set_1onion_1routing_1packet
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OnionMessage_new
+ * Signature: ([BJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OnionMessage_1new
+  (JNIEnv *, jclass, jbyteArray, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    OnionMessage_clone_ptr
@@ -25145,92 +26321,156 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1eq
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_free
+ * Method:    SocketAddress_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SocketAddress_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_clone_ptr
+ * Method:    SocketAddress_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_clone
+ * Method:    SocketAddress_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_ipv4
+ * Method:    SocketAddress_tcp_ip_v4
  * Signature: ([BS)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1ipv4
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1tcp_1ip_1v4
   (JNIEnv *, jclass, jbyteArray, jshort);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_ipv6
+ * Method:    SocketAddress_tcp_ip_v6
  * Signature: ([BS)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1ipv6
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1tcp_1ip_1v6
   (JNIEnv *, jclass, jbyteArray, jshort);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_onion_v2
+ * Method:    SocketAddress_onion_v2
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1onion_1v2
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1onion_1v2
   (JNIEnv *, jclass, jbyteArray);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_onion_v3
+ * Method:    SocketAddress_onion_v3
  * Signature: ([BSBS)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1onion_1v3
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1onion_1v3
   (JNIEnv *, jclass, jbyteArray, jshort, jbyte, jshort);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_hostname
+ * Method:    SocketAddress_hostname
  * Signature: (JS)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1hostname
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1hostname
   (JNIEnv *, jclass, jlong, jshort);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_eq
+ * Method:    SocketAddress_eq
  * Signature: (JJ)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NetAddress_1eq
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SocketAddress_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_write
+ * Method:    SocketAddress_write
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_NetAddress_1write
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_SocketAddress_1write
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    NetAddress_read
+ * Method:    SocketAddress_read
  * Signature: ([B)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1read
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1read
   (JNIEnv *, jclass, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddressParseError_clone
+ * Signature: (J)Lorg/ldk/enums/SocketAddressParseError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddressParseError_socket_addr_parse
+ * Signature: ()Lorg/ldk/enums/SocketAddressParseError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1socket_1addr_1parse
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddressParseError_invalid_input
+ * Signature: ()Lorg/ldk/enums/SocketAddressParseError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1input
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddressParseError_invalid_port
+ * Signature: ()Lorg/ldk/enums/SocketAddressParseError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1port
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddressParseError_invalid_onion_v3
+ * Signature: ()Lorg/ldk/enums/SocketAddressParseError;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1invalid_1onion_1v3
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddressParseError_eq
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SocketAddressParseError_1eq
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    parse_onion_address
+ * Signature: (Ljava/lang/String;S)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_parse_1onion_1address
+  (JNIEnv *, jclass, jstring, jshort);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketAddress_from_str
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketAddress_1from_1str
+  (JNIEnv *, jclass, jstring);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedGossipMessage_free
@@ -25607,6 +26847,30 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1set_1bitcoin_1key_12
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedChannelAnnouncement_get_excess_data
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1get_1excess_1data
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedChannelAnnouncement_set_excess_data
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1set_1excess_1data
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedChannelAnnouncement_new
+ * Signature: (J[BJJJJJ[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1new
+  (JNIEnv *, jclass, jlong, jbyteArray, jlong, jlong, jlong, jlong, jlong, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedChannelAnnouncement_clone_ptr
@@ -28303,6 +29567,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone_1ptr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelPublicKeys_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelPublicKeys_eq
@@ -28351,6 +29623,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1from_1channel
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_get_1revokeable_1redeemscript
   (JNIEnv *, jclass, jbyteArray, jshort, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    get_counterparty_payment_script
+ * Signature: (J[B)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_get_1counterparty_1payment_1script
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HTLCOutputInCommitment_free
@@ -28671,6 +29951,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTransactionParameters_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelTransactionParameters_eq
@@ -28743,6 +30031,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactio
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CounterpartyChannelTransactionParameters_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CounterpartyChannelTransactionParameters_eq
@@ -29311,6 +30607,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1get_1htlc_1sigs
   (JNIEnv *, jclass, jlong, jbyteArray, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    TrustedCommitmentTransaction_revokeable_output_index
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1revokeable_1output_1index
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    TrustedCommitmentTransaction_build_to_local_justice_tx
+ * Signature: (JJ[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1build_1to_1local_1justice_1tx
+  (JNIEnv *, jclass, jlong, jlong, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    get_commitment_transaction_number_obscure_factor
@@ -29631,6 +30943,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1un
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InitFeatures_set_required_custom_bit
@@ -29671,6 +30999,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1un
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeFeatures_set_required_custom_bit
@@ -29711,6 +31055,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1requires_
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelFeatures_set_required_custom_bit
@@ -29751,6 +31111,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1req
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt11InvoiceFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt11InvoiceFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt11InvoiceFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt11InvoiceFeatures_set_required_custom_bit
@@ -29791,6 +31167,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1requires_1u
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OfferFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OfferFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OfferFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    OfferFeatures_set_required_custom_bit
@@ -29831,6 +31223,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1re
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequestFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequestFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequestFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InvoiceRequestFeatures_set_required_custom_bit
@@ -29871,6 +31279,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1req
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12InvoiceFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12InvoiceFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12InvoiceFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt12InvoiceFeatures_set_required_custom_bit
@@ -29911,6 +31335,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1requir
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHopFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHopFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedHopFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    BlindedHopFeatures_set_required_custom_bit
@@ -29951,6 +31391,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requi
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requires_1unknown_1bits
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTypeFeatures_set_required_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1required_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTypeFeatures_set_optional_feature_bit
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1optional_1feature_1bit
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelTypeFeatures_set_required_custom_bit
@@ -31031,6 +32487,102 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1sh
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1shutdown_1anysegwit
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_set_taproot_optional
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1taproot_1optional
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_set_taproot_required
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1set_1taproot_1required
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_supports_taproot
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1supports_1taproot
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_set_taproot_optional
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1taproot_1optional
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_set_taproot_required
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1set_1taproot_1required
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_supports_taproot
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1supports_1taproot
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTypeFeatures_set_taproot_optional
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1taproot_1optional
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTypeFeatures_set_taproot_required
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1set_1taproot_1required
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTypeFeatures_supports_taproot
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1supports_1taproot
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_requires_taproot
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1taproot
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_requires_taproot
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1taproot
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTypeFeatures_requires_taproot
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTypeFeatures_1requires_1taproot
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InitFeatures_set_onion_messages_optional
@@ -31586,10 +33138,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Retry_1clone
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Retry_attempts
- * Signature: (J)J
+ * Signature: (I)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Retry_1attempts
-  (JNIEnv *, jclass, jlong);
+  (JNIEnv *, jclass, jint);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -31615,6 +33167,22 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Retry_1eq
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Retry_1hash
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Retry_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Retry_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Retry_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Retry_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RetryableSendFailure_clone
@@ -31719,6 +33287,62 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1duplicate
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1partial_1failure
   (JNIEnv *, jclass, jlongArray, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentSendFailure_eq
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1eq
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbeSendFailure_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbeSendFailure_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbeSendFailure_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbeSendFailure_route_not_found
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1route_1not_1found
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbeSendFailure_sending_failed
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1sending_1failed
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbeSendFailure_eq
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbeSendFailure_1eq
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RecipientOnionFields_free
@@ -31759,14 +33383,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1get_1pa
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1set_1payment_1metadata
   (JNIEnv *, jclass, jlong, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    RecipientOnionFields_new
- * Signature: (JJ)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1new
-  (JNIEnv *, jclass, jlong, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RecipientOnionFields_clone_ptr
@@ -31823,6 +33439,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1secret_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1spontaneous_1empty
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RecipientOnionFields_with_custom_tlvs
+ * Signature: (J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1with_1custom_1tlvs
+  (JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RecipientOnionFields_custom_tlvs
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_RecipientOnionFields_1custom_1tlvs
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CustomMessageReader_free
@@ -31855,6 +33487,206 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Type_1clone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Type_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Offer_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_chains
+ * Signature: (J)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Offer_1chains
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_metadata
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1metadata
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_amount
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1amount
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_description
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1description
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_offer_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1offer_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_absolute_expiry
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1absolute_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_issuer
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1issuer
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_paths
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_supported_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1supported_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_signing_pubkey
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Offer_1signing_1pubkey
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_supports_chain
+ * Signature: (J[B)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1supports_1chain
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_is_expired
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1expired
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_is_valid_quantity
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1valid_1quantity
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_expects_quantity
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1expects_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Offer_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Amount_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Amount_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Amount_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Amount_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Amount_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Amount_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Quantity_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Quantity_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Quantity_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Quantity_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Quantity_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Quantity_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Offer_from_str
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1from_1str
+  (JNIEnv *, jclass, jstring);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedBolt12Invoice_free
@@ -31865,10 +33697,10 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1free
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    UnsignedBolt12Invoice_signing_pubkey
- * Signature: (J)[B
+ * Method:    UnsignedBolt12Invoice_tagged_hash
+ * Signature: (J)J
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1signing_1pubkey
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1tagged_1hash
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -31895,6 +33727,222 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone_1ptr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_offer_chains
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1offer_1chains
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_chain
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1chain
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_metadata
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1metadata
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_amount
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1amount
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_offer_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1offer_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_description
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1description
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_absolute_expiry
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1absolute_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_issuer
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1issuer
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_message_paths
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1message_1paths
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_supported_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1supported_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_payer_metadata
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1metadata
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_invoice_request_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1invoice_1request_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_payer_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_payer_note
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payer_1note
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_created_at
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1created_1at
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_relative_expiry
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1relative_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_is_expired
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1is_1expired
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_payment_hash
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1payment_1hash
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_amount_msats
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1amount_1msats
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_invoice_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1invoice_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_signing_pubkey
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1signing_1pubkey
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_offer_chains
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1offer_1chains
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_chain
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1chain
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_metadata
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1metadata
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_amount
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_offer_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1offer_1features
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt12Invoice_description
@@ -31903,6 +33951,78 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1clone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1description
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_absolute_expiry
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1absolute_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_issuer
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1issuer
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_message_paths
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1message_1paths
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_supported_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1supported_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_payer_metadata
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1metadata
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_invoice_request_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1invoice_1request_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_payer_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_payer_note
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1payer_1note
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt12Invoice_created_at
@@ -31945,10 +34065,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1amount_1msats
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Bolt12Invoice_features
+ * Method:    Bolt12Invoice_invoice_features
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1features
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1invoice_1features
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -31959,6 +34079,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1features
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signing_1pubkey
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Bolt12Invoice_signature
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signature
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt12Invoice_signable_hash
@@ -31970,11 +34098,19 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1signable_
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt12Invoice_verify
- * Signature: (JJ)Z
+ * Signature: (JJ)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1verify
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Bolt12Invoice_1verify
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedBolt12Invoice_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedBolt12Invoice_1write
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Bolt12Invoice_write
@@ -32295,6 +34431,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceError_1read
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_tagged_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1tagged_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InvoiceRequest_free
@@ -32321,275 +34465,491 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1clone
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_metadata
- * Signature: (J)[B
+ * Method:    VerifiedInvoiceRequest_free
+ * Signature: (J)V
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1metadata
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_chain
- * Signature: (J)[B
+ * Method:    VerifiedInvoiceRequest_get_keys
+ * Signature: (J)J
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chain
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1get_1keys
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_amount_msats
+ * Method:    VerifiedInvoiceRequest_set_keys
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1set_1keys
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount_1msats
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_features
+ * Method:    VerifiedInvoiceRequest_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1features
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_quantity
+ * Method:    UnsignedInvoiceRequest_chains
+ * Signature: (J)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1chains
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_metadata
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1quantity
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1metadata
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_payer_id
- * Signature: (J)[B
+ * Method:    UnsignedInvoiceRequest_amount
+ * Signature: (J)J
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1id
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1amount
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_payer_note
+ * Method:    UnsignedInvoiceRequest_description
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1note
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1description
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_verify
- * Signature: (JJ)J
+ * Method:    UnsignedInvoiceRequest_offer_features
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1verify
-  (JNIEnv *, jclass, jlong, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1offer_1features
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    InvoiceRequest_write
+ * Method:    UnsignedInvoiceRequest_absolute_expiry
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1absolute_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_issuer
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1issuer
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_paths
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1paths
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_supported_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1supported_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_signing_pubkey
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1write
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1signing_1pubkey
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_free
- * Signature: (J)V
+ * Method:    UnsignedInvoiceRequest_payer_metadata
+ * Signature: (J)[B
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Offer_1free
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1metadata
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_clone_ptr
+ * Method:    UnsignedInvoiceRequest_chain
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1chain
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_amount_msats
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1amount_1msats
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_clone
+ * Method:    UnsignedInvoiceRequest_invoice_request_features
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1invoice_1request_1features
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_chains
- * Signature: (J)[[B
+ * Method:    UnsignedInvoiceRequest_quantity
+ * Signature: (J)J
  */
-JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Offer_1chains
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1quantity
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_supports_chain
- * Signature: (J[B)Z
+ * Method:    UnsignedInvoiceRequest_payer_id
+ * Signature: (J)[B
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1supports_1chain
-  (JNIEnv *, jclass, jlong, jbyteArray);
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1id
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_metadata
+ * Method:    UnsignedInvoiceRequest_payer_note
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1metadata
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1payer_1note
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_amount
+ * Method:    InvoiceRequest_chains
+ * Signature: (J)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chains
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequest_metadata
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1amount
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1metadata
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_description
+ * Method:    InvoiceRequest_amount
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1description
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_features
+ * Method:    InvoiceRequest_description
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1features
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1description
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_absolute_expiry
+ * Method:    InvoiceRequest_offer_features
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1absolute_1expiry
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1offer_1features
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_is_expired
- * Signature: (J)Z
+ * Method:    InvoiceRequest_absolute_expiry
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1expired
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1absolute_1expiry
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_issuer
+ * Method:    InvoiceRequest_issuer
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1issuer
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1issuer
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_paths
+ * Method:    InvoiceRequest_paths
  * Signature: (J)[J
  */
-JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_Offer_1paths
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1paths
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_supported_quantity
+ * Method:    InvoiceRequest_supported_quantity
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1supported_1quantity
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1supported_1quantity
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_is_valid_quantity
- * Signature: (JJ)Z
+ * Method:    InvoiceRequest_signing_pubkey
+ * Signature: (J)[B
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1is_1valid_1quantity
-  (JNIEnv *, jclass, jlong, jlong);
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1signing_1pubkey
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_expects_quantity
- * Signature: (J)Z
+ * Method:    InvoiceRequest_payer_metadata
+ * Signature: (J)[B
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Offer_1expects_1quantity
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1metadata
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_signing_pubkey
+ * Method:    InvoiceRequest_chain
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Offer_1signing_1pubkey
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1chain
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_write
+ * Method:    InvoiceRequest_amount_msats
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1amount_1msats
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequest_invoice_request_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1invoice_1request_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequest_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequest_payer_id
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Offer_1write
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1id
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Amount_free
- * Signature: (J)V
+ * Method:    InvoiceRequest_payer_note
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Amount_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1payer_1note
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Amount_clone_ptr
+ * Method:    InvoiceRequest_signature
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1signature
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequest_verify
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1verify
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_chains
+ * Signature: (J)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1chains
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_metadata
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Amount_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1metadata
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Amount_clone
+ * Method:    VerifiedInvoiceRequest_amount
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Amount_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1amount
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Quantity_free
- * Signature: (J)V
+ * Method:    VerifiedInvoiceRequest_description
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Quantity_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1description
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Quantity_clone_ptr
+ * Method:    VerifiedInvoiceRequest_offer_features
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Quantity_1clone_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1offer_1features
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Quantity_clone
+ * Method:    VerifiedInvoiceRequest_absolute_expiry
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Quantity_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1absolute_1expiry
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Offer_from_str
- * Signature: (Ljava/lang/String;)J
+ * Method:    VerifiedInvoiceRequest_issuer
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Offer_1from_1str
-  (JNIEnv *, jclass, jstring);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1issuer
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_paths
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1paths
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_supported_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1supported_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_signing_pubkey
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1signing_1pubkey
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_payer_metadata
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1metadata
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_chain
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1chain
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_amount_msats
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1amount_1msats
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_invoice_request_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1invoice_1request_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_quantity
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1quantity
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_payer_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    VerifiedInvoiceRequest_payer_note
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_VerifiedInvoiceRequest_1payer_1note
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedInvoiceRequest_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedInvoiceRequest_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceRequest_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InvoiceRequest_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    TaggedHash_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TaggedHash_1free
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -32897,10 +35257,10 @@ JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_Refund_1paths
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Refund_metadata
+ * Method:    Refund_payer_metadata
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Refund_1metadata
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Refund_1payer_1metadata
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -34417,18 +36777,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHt
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    ScorerAccountingForInFlightHtlcs_write
- * Signature: (J)[B
- */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1write
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    ScorerAccountingForInFlightHtlcs_as_Score
+ * Method:    ScorerAccountingForInFlightHtlcs_as_ScoreLookUp
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1as_1Score
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ScorerAccountingForInFlightHtlcs_1as_1ScoreLookUp
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -34607,13 +36959,29 @@ JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry_1d
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1delta
   (JNIEnv *, jclass, jlong, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteHop_get_maybe_announced_channel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1maybe_1announced_1channel
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteHop_set_maybe_announced_channel
+ * Signature: (JZ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1maybe_1announced_1channel
+  (JNIEnv *, jclass, jlong, jboolean);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteHop_new
- * Signature: ([BJJJJI)J
+ * Signature: ([BJJJJIZ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHop_1new
-  (JNIEnv *, jclass, jbyteArray, jlong, jlong, jlong, jlong, jint);
+  (JNIEnv *, jclass, jbyteArray, jlong, jlong, jlong, jlong, jint, jboolean);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -34921,18 +37289,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Route_get_payment_params
+ * Method:    Route_get_route_params
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Route_1get_1payment_1params
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Route_1get_1route_1params
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    Route_set_payment_params
+ * Method:    Route_set_route_params
  * Signature: (JJ)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1payment_1params
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1route_1params
   (JNIEnv *, jclass, jlong, jlong);
 
 /*
@@ -35047,13 +37415,29 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1value_1msat
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteParameters_get_max_total_routing_fee_msat
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1max_1total_1routing_1fee_1msat
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteParameters_set_max_total_routing_fee_msat
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1max_1total_1routing_1fee_1msat
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteParameters_new
- * Signature: (JJ)J
+ * Signature: (JJJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new
-  (JNIEnv *, jclass, jlong, jlong);
+  (JNIEnv *, jclass, jlong, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -35071,6 +37455,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteParameters_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteParameters_eq
@@ -35079,6 +37471,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteParameters_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteParameters_from_payment_params_and_value
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1from_1payment_1params_1and_1value
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteParameters_write
@@ -35279,6 +37679,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1for_1keyse
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1from_1bolt12_1invoice
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentParameters_blinded
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentParameters_1blinded
+  (JNIEnv *, jclass, jlongArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Payee_free
@@ -35591,6 +37999,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_find_1route
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_build_1route_1from_1hops
   (JNIEnv *, jclass, jbyteArray, jobjectArray, jlong, jlong, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ScoreLookUp_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreLookUp_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ScoreUpdate_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoreUpdate_1free
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Score_free
@@ -35657,26 +38081,42 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MultiThreadedLockableScore_1n
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    MultiThreadedScoreLock_free
+ * Method:    MultiThreadedScoreLockRead_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockRead_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    MultiThreadedScoreLock_write
+ * Method:    MultiThreadedScoreLockWrite_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MultiThreadedScoreLockRead_as_ScoreLookUp
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockRead_1as_1ScoreLookUp
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MultiThreadedScoreLockWrite_write
  * Signature: (J)[B
  */
-JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1write
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1write
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    MultiThreadedScoreLock_as_Score
+ * Method:    MultiThreadedScoreLockWrite_as_ScoreUpdate
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLock_1as_1Score
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MultiThreadedScoreLockWrite_1as_1ScoreUpdate
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -35793,10 +38233,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1with_1pen
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    FixedPenaltyScorer_as_Score
+ * Method:    FixedPenaltyScorer_as_ScoreLookUp
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1Score
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1ScoreLookUp
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FixedPenaltyScorer_as_ScoreUpdate
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FixedPenaltyScorer_1as_1ScoreUpdate
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -35959,6 +38407,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParame
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1considered_1impossible_1penalty_1msat
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbabilisticScoringFeeParameters_get_linear_success_probability
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1get_1linear_1success_1probability
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbabilisticScoringFeeParameters_set_linear_success_probability
+ * Signature: (JZ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbabilisticScoringFeeParameters_1set_1linear_1success_1probability
+  (JNIEnv *, jclass, jlong, jboolean);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ProbabilisticScoringFeeParameters_clone_ptr
@@ -36135,6 +38599,30 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1estimate
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1channel_1liquidity_1probabilities
   (JNIEnv *, jclass, jlong, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbabilisticScorer_historical_estimated_payment_success_probability
+ * Signature: (JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1historical_1estimated_1payment_1success_1probability
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbabilisticScorer_as_ScoreLookUp
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1ScoreLookUp
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbabilisticScorer_as_ScoreUpdate
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbabilisticScorer_1as_1ScoreUpdate
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ProbabilisticScorer_as_Score
@@ -36303,6 +38791,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescripto
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    DelayedPaymentOutputDescriptor_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    DelayedPaymentOutputDescriptor_eq
@@ -36399,13 +38895,29 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1value_1satoshis
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_get_channel_transaction_parameters
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1get_1channel_1transaction_1parameters
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_set_channel_transaction_parameters
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1set_1channel_1transaction_1parameters
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    StaticPaymentOutputDescriptor_new
- * Signature: (JJ[BJ)J
+ * Signature: (JJ[BJJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1new
-  (JNIEnv *, jclass, jlong, jlong, jbyteArray, jlong);
+  (JNIEnv *, jclass, jlong, jlong, jbyteArray, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -36423,6 +38935,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    StaticPaymentOutputDescriptor_eq
@@ -36431,6 +38951,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_witness_script
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1witness_1script
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_max_witness_length
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1max_1witness_1length
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    StaticPaymentOutputDescriptor_write
@@ -36495,6 +39031,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1de
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1static_1payment_1output
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SpendableOutputDescriptor_hash
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1hash
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    SpendableOutputDescriptor_eq
@@ -36754,25 +39298,25 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InMemorySigner_counterparty_selected_contest_delay
- * Signature: (J)S
+ * Signature: (J)J
  */
-JNIEXPORT jshort JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1selected_1contest_1delay
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterparty_1selected_1contest_1delay
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InMemorySigner_holder_selected_contest_delay
- * Signature: (J)S
+ * Signature: (J)J
  */
-JNIEXPORT jshort JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1selected_1contest_1delay
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1selected_1contest_1delay
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InMemorySigner_is_outbound
- * Signature: (J)Z
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbound
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbound
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -37255,6 +39799,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SendError_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageHandler_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    create_onion_message
+ * Signature: (JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_create_1onion_1message
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    OnionMessenger_new
@@ -37375,6 +39927,118 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_OffersMessage_1write
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OffersMessage_1read
   (JNIEnv *, jclass, jbyteArray, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_get_version
+ * Signature: (J)B
+ */
+JNIEXPORT jbyte JNICALL Java_org_ldk_impl_bindings_Packet_1get_1version
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_set_version
+ * Signature: (JB)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1version
+  (JNIEnv *, jclass, jlong, jbyte);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_get_public_key
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1public_1key
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_set_public_key
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1public_1key
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_get_hop_data
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1hop_1data
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_set_hop_data
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1hop_1data
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_get_hmac
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Packet_1get_1hmac
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_set_hmac
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Packet_1set_1hmac
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_new
+ * Signature: (B[B[B[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Packet_1new
+  (JNIEnv *, jclass, jbyte, jbyteArray, jbyteArray, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Packet_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Packet_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_eq
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Packet_1eq
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Packet_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Packet_1write
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    OnionMessageContents_free
@@ -37447,6 +40111,62 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomOnionMessageContents_1fr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_get_introduction_node_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1introduction_1node_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_set_introduction_node_id
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1introduction_1node_1id
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_get_blinding_point
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1blinding_1point
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_set_blinding_point
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1blinding_1point
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_get_blinded_hops
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_BlindedPath_1get_1blinded_1hops
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_set_blinded_hops
+ * Signature: (J[J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedPath_1set_1blinded_1hops
+  (JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_new
+ * Signature: ([B[B[J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlongArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    BlindedPath_clone_ptr
@@ -37487,6 +40207,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedPath_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHop_get_blinded_node_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1get_1blinded_1node_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHop_set_blinded_node_id
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1set_1blinded_1node_1id
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHop_get_encrypted_payload
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1get_1encrypted_1payload
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHop_set_encrypted_payload
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BlindedHop_1set_1encrypted_1payload
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedHop_new
+ * Signature: ([B[B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedHop_1new
+  (JNIEnv *, jclass, jbyteArray, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    BlindedHop_clone_ptr
@@ -37527,6 +40287,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_BlindedHop_1eq
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedPath_1new_1for_1message
   (JNIEnv *, jclass, jobjectArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BlindedPath_one_hop_for_payment
+ * Signature: ([BJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedPath_1one_1hop_1for_1payment
+  (JNIEnv *, jclass, jbyteArray, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    BlindedPath_write
@@ -37559,6 +40327,446 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_BlindedHop_1write
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BlindedHop_1read
   (JNIEnv *, jclass, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_get_tlvs
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1tlvs
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_set_tlvs
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1tlvs
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_get_node_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1node_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_set_node_id
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1node_1id
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_get_htlc_maximum_msat
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardNode_1get_1htlc_1maximum_1msat
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_set_htlc_maximum_msat
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardNode_1set_1htlc_1maximum_1msat
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_new
+ * Signature: (J[BJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardNode_1new
+  (JNIEnv *, jclass, jlong, jbyteArray, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardNode_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardNode_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardNode_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_get_short_channel_id
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1short_1channel_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_set_short_channel_id
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1short_1channel_1id
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_get_payment_relay
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1payment_1relay
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_set_payment_relay
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1payment_1relay
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_get_payment_constraints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1payment_1constraints
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_set_payment_constraints
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1payment_1constraints
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_get_features
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1get_1features
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_set_features
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1set_1features
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_new
+ * Signature: (JJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1new
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_get_payment_secret
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1get_1payment_1secret
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_set_payment_secret
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1set_1payment_1secret
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_get_payment_constraints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1get_1payment_1constraints
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_set_payment_constraints
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1set_1payment_1constraints
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_new
+ * Signature: ([BJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1new
+  (JNIEnv *, jclass, jbyteArray, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_get_cltv_expiry_delta
+ * Signature: (J)S
+ */
+JNIEXPORT jshort JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1cltv_1expiry_1delta
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_set_cltv_expiry_delta
+ * Signature: (JS)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1cltv_1expiry_1delta
+  (JNIEnv *, jclass, jlong, jshort);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_get_fee_proportional_millionths
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1fee_1proportional_1millionths
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_set_fee_proportional_millionths
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1fee_1proportional_1millionths
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_get_fee_base_msat
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1get_1fee_1base_1msat
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_set_fee_base_msat
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1set_1fee_1base_1msat
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_new
+ * Signature: (SII)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1new
+  (JNIEnv *, jclass, jshort, jint, jint);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_get_max_cltv_expiry
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1get_1max_1cltv_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_set_max_cltv_expiry
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1set_1max_1cltv_1expiry
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_get_htlc_minimum_msat
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1get_1htlc_1minimum_1msat
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_set_htlc_minimum_msat
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1set_1htlc_1minimum_1msat
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_new
+ * Signature: (IJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1new
+  (JNIEnv *, jclass, jint, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ForwardTlvs_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ForwardTlvs_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReceiveTlvs_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReceiveTlvs_1read
+  (JNIEnv *, jclass, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentRelay_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentRelay_1read
+  (JNIEnv *, jclass, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentConstraints_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentConstraints_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PaymentPurpose_free
@@ -37623,6 +40831,126 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1write
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1read
   (JNIEnv *, jclass, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_get_channel_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1channel_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_set_channel_id
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1channel_1id
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_get_user_channel_id
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1user_1channel_1id
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_set_user_channel_id
+ * Signature: (J[B)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1user_1channel_1id
+  (JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_get_cltv_expiry
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1cltv_1expiry
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_set_cltv_expiry
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1cltv_1expiry
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_get_value_msat
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1get_1value_1msat
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_set_value_msat
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1set_1value_1msat
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_new
+ * Signature: ([B[BIJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1new
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jint, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_eq
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1eq
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClaimedHTLC_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClaimedHTLC_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PathFailure_free
@@ -37783,6 +41111,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosureReason_1outdated_1chan
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosureReason_1counterparty_1coop_1closed_1unfunded_1channel
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClosureReason_funding_batch_closure
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosureReason_1funding_1batch_1closure
+  (JNIEnv *, jclass);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ClosureReason_eq
@@ -38002,18 +41338,18 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1funding_1generation_1r
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_payment_claimable
- * Signature: ([B[BJJJJ[BJJ)J
+ * Signature: ([B[BJJJJJJJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimable
-  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jlong, jlong, jlong, jbyteArray, jlong, jlong);
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jlong, jlong, jlong, jlong, jlong, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_payment_claimed
- * Signature: ([B[BJJ)J
+ * Signature: ([B[BJJ[JJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1payment_1claimed
-  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jlong);
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jlong, jlongArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -38082,26 +41418,26 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1htlcintercepted
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_spendable_outputs
- * Signature: ([J)J
+ * Signature: ([JJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1spendable_1outputs
-  (JNIEnv *, jclass, jlongArray);
+  (JNIEnv *, jclass, jlongArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_payment_forwarded
- * Signature: ([B[BJZJ)J
+ * Signature: (JJJZJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1payment_1forwarded
-  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jboolean, jlong);
+  (JNIEnv *, jclass, jlong, jlong, jlong, jboolean, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_channel_pending
- * Signature: ([B[B[B[BJ)J
+ * Signature: ([B[BJ[BJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1channel_1pending
-  (JNIEnv *, jclass, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jlong);
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -38114,10 +41450,10 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1channel_1ready
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_channel_closed
- * Signature: ([B[BJ)J
+ * Signature: ([B[BJ[BJ)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1channel_1closed
-  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong);
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jlong, jbyteArray, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -38575,6 +41911,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelDerivationParameters_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelDerivationParameters_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelDerivationParameters_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    AnchorDescriptor_free
@@ -38815,6 +42167,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1clone
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    HTLCDescriptor_write
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    HTLCDescriptor_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCDescriptor_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HTLCDescriptor_outpoint
@@ -39249,35 +42617,35 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BumpTransactionEventHandler_1h
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    FilesystemPersister_free
+ * Method:    FilesystemStore_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    FilesystemPersister_new
+ * Method:    FilesystemStore_new
  * Signature: (Ljava/lang/String;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1new
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1new
   (JNIEnv *, jclass, jstring);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    FilesystemPersister_get_data_dir
+ * Method:    FilesystemStore_get_data_dir
  * Signature: (J)Ljava/lang/String;
  */
-JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1get_1data_1dir
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1get_1data_1dir
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    FilesystemPersister_read_channelmonitors
- * Signature: (JJJ)J
+ * Method:    FilesystemStore_as_KVStore
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1read_1channelmonitors
-  (JNIEnv *, jclass, jlong, jlong, jlong);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FilesystemStore_1as_1KVStore
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -41047,6 +44415,22 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_pay_1zero_1value_1invoice
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_pay_1zero_1value_1invoice_1with_1id
   (JNIEnv *, jclass, jlong, jlong, jbyteArray, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    preflight_probe_invoice
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_preflight_1probe_1invoice
+  (JNIEnv *, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    preflight_probe_zero_value_invoice
+ * Signature: (JJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_preflight_1probe_1zero_1value_1invoice
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PaymentError_free
@@ -41095,6 +44479,54 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentError_1sending
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PaymentError_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbingError_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ProbingError_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbingError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbingError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbingError_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbingError_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbingError_invoice
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbingError_1invoice
+  (JNIEnv *, jclass, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbingError_sending
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ProbingError_1sending
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ProbingError_eq
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ProbingError_1eq
+  (JNIEnv *, jclass, jlong, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    create_phantom_invoice
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ.h
new file mode 100644 (file)
index 0000000..8a7476a
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_BigEndianScalarZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1BigEndianScalarZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_BlockHashZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_BlockHashZ.h
deleted file mode 100644 (file)
index 50d97f1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_BlockHashZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_BlockHashZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_BlockHashZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_BlockHashZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1BlockHashZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ.h
deleted file mode 100644 (file)
index 87ed0a5..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_C2Tuple_EightU16sEightU16sZZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1EightU16sEightU16sZZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ.h
new file mode 100644 (file)
index 0000000..d37f05b
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_C2Tuple_ThirtyTwoU16sThirtyTwoU16sZZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1ThirtyTwoU16sThirtyTwoU16sZZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ.h
new file mode 100644 (file)
index 0000000..537186d
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_C2Tuple_u64u16ZZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1C2Tuple_1u64u16ZZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ.h
deleted file mode 100644 (file)
index 18fcb5e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_CVec_ChainHashZZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1ChainHashZZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ.h
deleted file mode 100644 (file)
index 41a6ede..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_CVec_NetAddressZZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1NetAddressZZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ.h
new file mode 100644 (file)
index 0000000..0e0d235
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_CVec_SocketAddressZZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1SocketAddressZZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ.h
new file mode 100644 (file)
index 0000000..5e374e2
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_CVec_ThirtyTwoBytesZZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1CVec_1ThirtyTwoBytesZZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_DurationZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_DurationZ.h
deleted file mode 100644 (file)
index 3d140e8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_DurationZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_DurationZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_DurationZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_DurationZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1DurationZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_KeyPairZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_KeyPairZ.h
deleted file mode 100644 (file)
index 2b5e8ab..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_KeyPairZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_KeyPairZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_KeyPairZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_KeyPairZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1KeyPairZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_NetAddressZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_NetAddressZ.h
deleted file mode 100644 (file)
index 62bbfa2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_NetAddressZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_NetAddressZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_NetAddressZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_NetAddressZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1NetAddressZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ.h
deleted file mode 100644 (file)
index 6abd7ce..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_PackedLockTimeZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PackedLockTimeZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentHashZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentHashZ.h
deleted file mode 100644 (file)
index b3bc72e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_PaymentHashZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_PaymentHashZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_PaymentHashZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_PaymentHashZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentHashZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentIdZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentIdZ.h
deleted file mode 100644 (file)
index af5cb1b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_PaymentIdZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_PaymentIdZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_PaymentIdZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_PaymentIdZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentIdZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ.h
deleted file mode 100644 (file)
index 2b56748..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_PaymentPreimageZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentPreimageZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentSecretZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_PaymentSecretZ.h
deleted file mode 100644 (file)
index 0142fe7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_PaymentSecretZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_PaymentSecretZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_PaymentSecretZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_PaymentSecretZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1PaymentSecretZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_ScalarZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_ScalarZ.h
deleted file mode 100644 (file)
index 13718c0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_ScalarZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_ScalarZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_ScalarZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_ScalarZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ScalarZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_ScriptZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_ScriptZ.h
deleted file mode 100644 (file)
index 238ac0d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_ScriptZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_ScriptZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_ScriptZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_ScriptZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ScriptZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_SecretKeyZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_SecretKeyZ.h
new file mode 100644 (file)
index 0000000..a2ef028
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_SecretKeyZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_SecretKeyZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_SecretKeyZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_SecretKeyZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1SecretKeyZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_SocketAddressZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_SocketAddressZ.h
new file mode 100644 (file)
index 0000000..8bb01d7
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_SocketAddressZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_SocketAddressZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_SocketAddressZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_SocketAddressZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1SocketAddressZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ.h
new file mode 100644 (file)
index 0000000..b594606
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_ThirtyTwoBytesZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ThirtyTwoBytesZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_TxidZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_TxidZ.h
deleted file mode 100644 (file)
index 3d17bc7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_TxidZ */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_TxidZ
-#define _Included_org_ldk_impl_bindings_LDKCOption_TxidZ
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_TxidZ
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1TxidZ_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_U128Z.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_U128Z.h
new file mode 100644 (file)
index 0000000..a362fe2
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_U128Z */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_U128Z
+#define _Included_org_ldk_impl_bindings_LDKCOption_U128Z
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_U128Z
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1U128Z_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_f64Z.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_f64Z.h
new file mode 100644 (file)
index 0000000..e65d482
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_f64Z */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_f64Z
+#define _Included_org_ldk_impl_bindings_LDKCOption_f64Z
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_f64Z
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1f64Z_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_u128Z.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_u128Z.h
deleted file mode 100644 (file)
index afbe923..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKCOption_u128Z */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKCOption_u128Z
-#define _Included_org_ldk_impl_bindings_LDKCOption_u128Z
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKCOption_u128Z
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1u128Z_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKCOption_usizeZ.h b/src/main/jni/org_ldk_impl_bindings_LDKCOption_usizeZ.h
new file mode 100644 (file)
index 0000000..1cc4365
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKCOption_usizeZ */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKCOption_usizeZ
+#define _Included_org_ldk_impl_bindings_LDKCOption_usizeZ
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKCOption_usizeZ
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1usizeZ_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKFailureCode.h b/src/main/jni/org_ldk_impl_bindings_LDKFailureCode.h
new file mode 100644 (file)
index 0000000..db14b30
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKFailureCode */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKFailureCode
+#define _Included_org_ldk_impl_bindings_LDKFailureCode
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKFailureCode
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKFailureCode_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKNetAddress.h b/src/main/jni/org_ldk_impl_bindings_LDKNetAddress.h
deleted file mode 100644 (file)
index ab3d6ed..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_ldk_impl_bindings_LDKNetAddress */
-
-#ifndef _Included_org_ldk_impl_bindings_LDKNetAddress
-#define _Included_org_ldk_impl_bindings_LDKNetAddress
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_ldk_impl_bindings_LDKNetAddress
- * Method:    init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKNetAddress_init
-  (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKProbeSendFailure.h b/src/main/jni/org_ldk_impl_bindings_LDKProbeSendFailure.h
new file mode 100644 (file)
index 0000000..8a1c427
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKProbeSendFailure */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKProbeSendFailure
+#define _Included_org_ldk_impl_bindings_LDKProbeSendFailure
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKProbeSendFailure
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKProbeSendFailure_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKProbingError.h b/src/main/jni/org_ldk_impl_bindings_LDKProbingError.h
new file mode 100644 (file)
index 0000000..4a1e583
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKProbingError */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKProbingError
+#define _Included_org_ldk_impl_bindings_LDKProbingError
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKProbingError
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKProbingError_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/main/jni/org_ldk_impl_bindings_LDKSocketAddress.h b/src/main/jni/org_ldk_impl_bindings_LDKSocketAddress.h
new file mode 100644 (file)
index 0000000..7632122
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ldk_impl_bindings_LDKSocketAddress */
+
+#ifndef _Included_org_ldk_impl_bindings_LDKSocketAddress
+#define _Included_org_ldk_impl_bindings_LDKSocketAddress
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ldk_impl_bindings_LDKSocketAddress
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKSocketAddress_init
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif