Update auto-generated bindings
[ldk-c-bindings] / lightning-c-bindings / src / lightning / chain / mod.rs
index bfed80c0bd2011057a772fd1850fb10f33b401cb..c5e857a536d37df3b9c75e96d4c5e2a2de493aea 100644 (file)
@@ -8,11 +8,13 @@
 
 //! Structs and traits which allow other parts of rust-lightning to interact with the blockchain.
 
-use std::str::FromStr;
-use std::ffi::c_void;
+use alloc::str::FromStr;
+use core::ffi::c_void;
 use core::convert::Infallible;
 use bitcoin::hashes::Hash;
 use crate::c_types::*;
+#[cfg(feature="no-std")]
+use alloc::{vec::Vec, boxed::Box};
 
 pub mod chaininterface;
 pub mod chainmonitor;
@@ -21,25 +23,29 @@ pub mod transaction;
 pub mod keysinterface;
 mod onchaintx {
 
-use std::str::FromStr;
-use std::ffi::c_void;
+use alloc::str::FromStr;
+use core::ffi::c_void;
 use core::convert::Infallible;
 use bitcoin::hashes::Hash;
 use crate::c_types::*;
+#[cfg(feature="no-std")]
+use alloc::{vec::Vec, boxed::Box};
 
 }
 mod package {
 
-use std::str::FromStr;
-use std::ffi::c_void;
+use alloc::str::FromStr;
+use core::ffi::c_void;
 use core::convert::Infallible;
 use bitcoin::hashes::Hash;
 use crate::c_types::*;
+#[cfg(feature="no-std")]
+use alloc::{vec::Vec, boxed::Box};
 
 }
 
 use lightning::chain::BestBlock as nativeBestBlockImport;
-type nativeBestBlock = nativeBestBlockImport;
+pub(crate) type nativeBestBlock = nativeBestBlockImport;
 
 /// The best known block as identified by its hash and height.
 #[must_use]
@@ -69,7 +75,7 @@ impl Drop for BestBlock {
 pub extern "C" fn BestBlock_free(this_obj: BestBlock) { }
 #[allow(unused)]
 /// Used only if an object of this type is returned as a trait impl by a method
-extern "C" fn BestBlock_free_void(this_ptr: *mut c_void) {
+pub(crate) extern "C" fn BestBlock_free_void(this_ptr: *mut c_void) {
        unsafe { let _ = Box::from_raw(this_ptr as *mut nativeBestBlock); }
 }
 #[allow(unused)]
@@ -84,14 +90,14 @@ impl BestBlock {
        pub(crate) fn take_inner(mut self) -> *mut nativeBestBlock {
                assert!(self.is_owned);
                let ret = ObjOps::untweak_ptr(self.inner);
-               self.inner = std::ptr::null_mut();
+               self.inner = core::ptr::null_mut();
                ret
        }
 }
 impl Clone for BestBlock {
        fn clone(&self) -> Self {
                Self {
-                       inner: if <*mut nativeBestBlock>::is_null(self.inner) { std::ptr::null_mut() } else {
+                       inner: if <*mut nativeBestBlock>::is_null(self.inner) { core::ptr::null_mut() } else {
                                ObjOps::heap_alloc(unsafe { &*ObjOps::untweak_ptr(self.inner) }.clone()) },
                        is_owned: true,
                }
@@ -234,7 +240,7 @@ impl rustAccess for Access {
 
 // We're essentially a pointer already, or at least a set of pointers, so allow us to be used
 // directly as a Deref trait in higher-level structs:
-impl std::ops::Deref for Access {
+impl core::ops::Deref for Access {
        type Target = Self;
        fn deref(&self) -> &Self {
                self
@@ -296,7 +302,7 @@ impl rustListen for Listen {
 
 // We're essentially a pointer already, or at least a set of pointers, so allow us to be used
 // directly as a Deref trait in higher-level structs:
-impl std::ops::Deref for Listen {
+impl core::ops::Deref for Listen {
        type Target = Self;
        fn deref(&self) -> &Self {
                self
@@ -433,7 +439,7 @@ impl rustConfirm for Confirm {
 
 // We're essentially a pointer already, or at least a set of pointers, so allow us to be used
 // directly as a Deref trait in higher-level structs:
-impl std::ops::Deref for Confirm {
+impl core::ops::Deref for Confirm {
        type Target = Self;
        fn deref(&self) -> &Self {
                self
@@ -458,9 +464,10 @@ pub enum ChannelMonitorUpdateErr {
        /// our state failed, but is expected to succeed at some point in the future).
        ///
        /// 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, ChannelManager::channel_monitor_updated can be used to
-       /// restore the channel to an operational state.
+       /// submitting new commitment transactions to the counterparty. Once the update(s) that failed
+       /// have been successfully applied, a [`MonitorEvent::UpdateCompleted`] event should be returned
+       /// via [`Watch::release_pending_monitor_events`] which will then restore the channel to an
+       /// operational state.
        ///
        /// Note that a given ChannelManager will *never* re-generate a given ChannelMonitorUpdate. If
        /// you return a TemporaryFailure you must ensure that it is written to disk safely before
@@ -474,13 +481,14 @@ pub enum ChannelMonitorUpdateErr {
        /// the channel which would invalidate previous ChannelMonitors are not made when a channel has
        /// been \"frozen\".
        ///
-       /// Note that even if updates made after TemporaryFailure succeed you must still call
-       /// channel_monitor_updated to ensure you have the latest monitor and re-enable normal channel
-       /// operation.
+       /// Note that even if updates made after TemporaryFailure succeed you must still provide a
+       /// [`MonitorEvent::UpdateCompleted`] to ensure you have the latest monitor and re-enable
+       /// normal channel operation. Note that this is normally generated through a call to
+       /// [`ChainMonitor::channel_monitor_updated`].
        ///
-       /// Note that the update being processed here will not be replayed for you when you call
-       /// ChannelManager::channel_monitor_updated, so you must store the update itself along
-       /// with the persisted ChannelMonitor on your own local disk prior to returning a
+       /// Note that the update being processed here will not be replayed for you when you return a
+       /// [`MonitorEvent::UpdateCompleted`] event via [`Watch::release_pending_monitor_events`], so
+       /// you must store the update itself on your own local disk prior to returning a
        /// TemporaryFailure. You may, of course, employ a journaling approach, storing only the
        /// ChannelMonitorUpdate on disk without updating the monitor itself, replaying the journal at
        /// reload-time.
@@ -488,6 +496,8 @@ pub enum ChannelMonitorUpdateErr {
        /// 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
        /// updates will return TemporaryFailure until the remote copies could be updated.
+       ///
+       /// [`ChainMonitor::channel_monitor_updated`]: chainmonitor::ChainMonitor::channel_monitor_updated
        TemporaryFailure,
        /// Used to indicate no further channel monitor updates will be allowed (eg we've moved on to a
        /// different watchtower and cannot update with all watchtowers that were previously informed
@@ -603,6 +613,13 @@ pub struct Watch {
        pub update_channel: extern "C" fn (this_arg: *const c_void, funding_txo: crate::lightning::chain::transaction::OutPoint, update: crate::lightning::chain::channelmonitor::ChannelMonitorUpdate) -> crate::c_types::derived::CResult_NoneChannelMonitorUpdateErrZ,
        /// Returns any monitor events since the last call. Subsequent calls must only return new
        /// events.
+       ///
+       /// Note that after any block- or transaction-connection calls to a [`ChannelMonitor`], no
+       /// further events may be returned here until the [`ChannelMonitor`] has been fully persisted
+       /// to disk.
+       ///
+       /// For details on asynchronous [`ChannelMonitor`] updating and returning
+       /// [`MonitorEvent::UpdateCompleted`] here, see [`ChannelMonitorUpdateErr::TemporaryFailure`].
        #[must_use]
        pub release_pending_monitor_events: extern "C" fn (this_arg: *const c_void) -> crate::c_types::derived::CVec_MonitorEventZ,
        /// Frees any resources associated with this object given its this_arg pointer.
@@ -643,7 +660,7 @@ impl rustWatch<crate::lightning::chain::keysinterface::Sign> for Watch {
 
 // We're essentially a pointer already, or at least a set of pointers, so allow us to be used
 // directly as a Deref trait in higher-level structs:
-impl std::ops::Deref for Watch {
+impl core::ops::Deref for Watch {
        type Target = Self;
        fn deref(&self) -> &Self {
                self
@@ -728,7 +745,7 @@ impl rustFilter for Filter {
 
 // We're essentially a pointer already, or at least a set of pointers, so allow us to be used
 // directly as a Deref trait in higher-level structs:
-impl std::ops::Deref for Filter {
+impl core::ops::Deref for Filter {
        type Target = Self;
        fn deref(&self) -> &Self {
                self
@@ -746,7 +763,7 @@ impl Drop for Filter {
 }
 
 use lightning::chain::WatchedOutput as nativeWatchedOutputImport;
-type nativeWatchedOutput = nativeWatchedOutputImport;
+pub(crate) type nativeWatchedOutput = nativeWatchedOutputImport;
 
 /// A transaction output watched by a [`ChannelMonitor`] for spends on-chain.
 ///
@@ -786,7 +803,7 @@ impl Drop for WatchedOutput {
 pub extern "C" fn WatchedOutput_free(this_obj: WatchedOutput) { }
 #[allow(unused)]
 /// Used only if an object of this type is returned as a trait impl by a method
-extern "C" fn WatchedOutput_free_void(this_ptr: *mut c_void) {
+pub(crate) extern "C" fn WatchedOutput_free_void(this_ptr: *mut c_void) {
        unsafe { let _ = Box::from_raw(this_ptr as *mut nativeWatchedOutput); }
 }
 #[allow(unused)]
@@ -801,7 +818,7 @@ impl WatchedOutput {
        pub(crate) fn take_inner(mut self) -> *mut nativeWatchedOutput {
                assert!(self.is_owned);
                let ret = ObjOps::untweak_ptr(self.inner);
-               self.inner = std::ptr::null_mut();
+               self.inner = core::ptr::null_mut();
                ret
        }
 }
@@ -826,7 +843,7 @@ pub extern "C" fn WatchedOutput_set_block_hash(this_ptr: &mut WatchedOutput, mut
 #[no_mangle]
 pub extern "C" fn WatchedOutput_get_outpoint(this_ptr: &WatchedOutput) -> crate::lightning::chain::transaction::OutPoint {
        let mut inner_val = &mut this_ptr.get_native_mut_ref().outpoint;
-       crate::lightning::chain::transaction::OutPoint { inner: unsafe { ObjOps::nonnull_ptr_to_inner((inner_val as *const _) as *mut _) }, is_owned: false }
+       crate::lightning::chain::transaction::OutPoint { inner: unsafe { ObjOps::nonnull_ptr_to_inner((inner_val as *const lightning::chain::transaction::OutPoint<>) as *mut _) }, is_owned: false }
 }
 /// Outpoint identifying the transaction output.
 #[no_mangle]
@@ -858,7 +875,7 @@ pub extern "C" fn WatchedOutput_new(mut block_hash_arg: crate::c_types::ThirtyTw
 impl Clone for WatchedOutput {
        fn clone(&self) -> Self {
                Self {
-                       inner: if <*mut nativeWatchedOutput>::is_null(self.inner) { std::ptr::null_mut() } else {
+                       inner: if <*mut nativeWatchedOutput>::is_null(self.inner) { core::ptr::null_mut() } else {
                                ObjOps::heap_alloc(unsafe { &*ObjOps::untweak_ptr(self.inner) }.clone()) },
                        is_owned: true,
                }
@@ -878,9 +895,9 @@ pub extern "C" fn WatchedOutput_clone(orig: &WatchedOutput) -> WatchedOutput {
 #[no_mangle]
 pub extern "C" fn WatchedOutput_hash(o: &WatchedOutput) -> u64 {
        if o.inner.is_null() { return 0; }
-       // Note that we'd love to use std::collections::hash_map::DefaultHasher but it's not in core
+       // Note that we'd love to use alloc::collections::hash_map::DefaultHasher but it's not in core
        #[allow(deprecated)]
        let mut hasher = core::hash::SipHasher::new();
-       std::hash::Hash::hash(o.get_native_ref(), &mut hasher);
-       std::hash::Hasher::finish(&hasher)
+       core::hash::Hash::hash(o.get_native_ref(), &mut hasher);
+       core::hash::Hasher::finish(&hasher)
 }