Skip to content

[0.1] Update to 0.1.2 and include lightning-liquidity #134

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Apr 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions c-bindings-gen/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1067,10 +1067,11 @@ fn writeln_impl<W: std::io::Write>(w: &mut W, w_uses: &mut HashSet<String, NonRa
if types.understood_c_path(&trait_path.1) && trait_obj_opt.is_some() {
let full_trait_path = full_trait_path_opt.unwrap();
let trait_obj = *trait_obj_opt.unwrap();
let trait_context_resolver = get_module_type_resolver!(full_trait_path, types.crate_types);

let supertrait_name;
let supertrait_resolver;
walk_supertraits!(trait_obj, Some(&types), (
walk_supertraits!(trait_obj, Some(&trait_context_resolver), (
(s, _i, _) => {
if let Some(supertrait) = types.crate_types.traits.get(s) {
supertrait_name = s.to_string();
Expand Down Expand Up @@ -1193,7 +1194,7 @@ fn writeln_impl<W: std::io::Write>(w: &mut W, w_uses: &mut HashSet<String, NonRa
}
}
let mut requires_clone = false;
walk_supertraits!(trait_obj, Some(&types), (
walk_supertraits!(trait_obj, Some(&trait_context_resolver), (
("Clone", _, _) => {
requires_clone = true;
writeln!(w, "\t\tcloned: Some({}_{}_cloned),", trait_obj.ident, ident).unwrap();
Expand Down Expand Up @@ -2169,7 +2170,19 @@ fn convert_file<'a, 'b>(libast: &'a FullLibraryAST, crate_types: &CrateTypes<'a>
} else {
format!("{}/lib.rs", out_dir)
};
let _ = std::fs::create_dir((&new_file_path.as_ref() as &std::path::Path).parent().unwrap());

fn create_dir_recursive(path: &std::path::Path) {
match std::fs::create_dir(path) {
Ok(_) => {},
Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {},
Err(_) => {
create_dir_recursive(path.parent().unwrap());
std::fs::create_dir(path).expect("Failed to create output dir");
},
}
}
create_dir_recursive((&new_file_path.as_ref() as &std::path::Path).parent().unwrap());

let mut out = std::fs::OpenOptions::new().write(true).create(true).truncate(true)
.open(new_file_path).expect("Unable to open new src file");
let mut out_uses = HashSet::default();
Expand Down
11 changes: 8 additions & 3 deletions c-bindings-gen/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1076,7 +1076,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
"str" => Some("crate::c_types::Str"),
"alloc::string::String"|"String"|"std::path::PathBuf" => Some("crate::c_types::Str"),

"bitcoin::address::Address"|"bitcoin::Address" => Some("crate::c_types::Str"),
"bitcoin::address::Address"|"bitcoin::Address" => Some("crate::c_types::Address"),

"std::time::Duration"|"core::time::Duration" => Some("u64"),
"std::time::SystemTime" => Some("u64"),
Expand Down Expand Up @@ -1206,6 +1206,8 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
"core::num::ParseIntError" => Some("u8::from_str_radix(\" a\", 10).unwrap_err() /*"),
"core::str::Utf8Error" => Some("core::str::from_utf8(&[0xff]).unwrap_err() /*"),

"bitcoin::address::Address"|"bitcoin::Address" => Some(""),

"std::time::Duration"|"core::time::Duration" => Some("core::time::Duration::from_secs("),
"std::time::SystemTime" => Some("(::std::time::SystemTime::UNIX_EPOCH + std::time::Duration::from_secs("),

Expand Down Expand Up @@ -1327,6 +1329,8 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
"core::num::ParseIntError" => Some("*/"),
"core::str::Utf8Error" => Some("*/"),

"bitcoin::address::Address"|"bitcoin::Address" => Some(".into_rust()"),

"std::time::Duration"|"core::time::Duration" => Some(")"),
"std::time::SystemTime" => Some("))"),

Expand Down Expand Up @@ -1442,7 +1446,8 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
"str" => Some(""),
"alloc::string::String"|"String"|"std::path::PathBuf" => Some(""),

"bitcoin::address::Address"|"bitcoin::Address" => Some("alloc::string::ToString::to_string(&"),
"bitcoin::address::Address"|"bitcoin::Address" if is_ref => Some("crate::c_types::Address::from_rust("),
"bitcoin::address::Address"|"bitcoin::Address" if !is_ref => Some("crate::c_types::Address::from_rust(&"),

"std::time::Duration"|"core::time::Duration" => Some(""),
"std::time::SystemTime" => Some(""),
Expand Down Expand Up @@ -1558,7 +1563,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
"alloc::string::String"|"String"|"std::path::PathBuf" if is_ref => Some(".as_str().into()"),
"alloc::string::String"|"String"|"std::path::PathBuf" => Some(".into()"),

"bitcoin::address::Address"|"bitcoin::Address" => Some(").into()"),
"bitcoin::address::Address"|"bitcoin::Address" => Some(")"),

"std::time::Duration"|"core::time::Duration" => Some(".as_secs()"),
"std::time::SystemTime" => Some(".duration_since(::std::time::SystemTime::UNIX_EPOCH).expect(\"Times must be post-1970\").as_secs()"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ edition = "2021"

[dependencies]
compiler_builtins = "=0.1.109"
gimli = "=0.25.0"
object = "=0.26.2"
21 changes: 19 additions & 2 deletions deterministic-build-wrappers/rustc
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,21 @@
# ever (indirectly) depend on multiple versions of the same crate.
args=("$@")
IS_LIGHTNING=false
SKIP_EMBED_BITCODE=false
for ((i=0; i<"${#args[@]}"; ++i)); do
case ${args[i]} in
--crate-name)
if [ "${args[i+1]}" = "lightning" -o "${args[i+1]}" = "lightning_types" -o "${args[i+1]}" = "lightning_background_processor" -o "${args[i+1]}" = "lightning_invoice" -o "${args[i+1]}" = "lightning_persister" -o "${args[i+1]}" = "lightning_rapid_gossip_sync" -o "${args[i+1]}" = "ldk" ]; then
if [ "${args[i+1]}" = "lightning" -o "${args[i+1]}" = "lightning_types" -o "${args[i+1]}" = "lightning_background_processor" -o "${args[i+1]}" = "lightning_invoice" -o "${args[i+1]}" = "lightning_persister" -o "${args[i+1]}" = "lightning_rapid_gossip_sync" -o "${args[i+1]}" = "lightning_liquidity" -o "${args[i+1]}" = "lightning_transaction_sync" -o "${args[i+1]}" = "ldk" ]; then
IS_LIGHTNING=true
fi
;;
--crate-type)
if [ "${args[i+1]}" = "proc-macro" ]; then
# If we're building a proc-macro, rustc incorrectly passes our RUSTFLAGS containing
# embed-bitcode=yes, which we don't want.
SKIP_EMBED_BITCODE=true
fi
;;
esac
done
for ((i=0; i<"${#args[@]}"; ++i)); do
Expand All @@ -24,7 +32,16 @@ for ((i=0; i<"${#args[@]}"; ++i)); do
args[i]="metadata=42"
fi
;;
embed-bitcode=yes)
if [ "$SKIP_EMBED_BITCODE" = "true" ]; then
args[i]="embed-bitcode=no"
fi
;;
lto)
if [ "$SKIP_EMBED_BITCODE" = "true" ]; then
args[i]="lto=no"
fi
;;
esac
done

$LDK_RUSTC_PATH "${args[@]}"
19 changes: 16 additions & 3 deletions genbindings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ if [ "$2" = "true" ]; then
add_crate "lightning-background-processor" "lightning_background_processor" --features=std,lightning/std
add_crate "lightning-invoice" "lightning_invoice" --features=std
add_crate "lightning-rapid-gossip-sync" "lightning_rapid_gossip_sync" --features=std,lightning/std
add_crate "lightning-liquidity" "lightning_liquidity" --features=std,lightning/std
CARGO_BUILD_ARGS="--features=std"
else
add_crate lightning lightning --features=dnssec
Expand All @@ -215,6 +216,7 @@ else
add_crate "lightning-background-processor" "lightning_background_processor"
add_crate "lightning-rapid-gossip-sync" "lightning_rapid_gossip_sync"
add_crate "lightning-invoice" "lightning_invoice"
add_crate "lightning-liquidity" "lightning_liquidity"
CARGO_BUILD_ARGS="--features=no-std"
fi

Expand All @@ -241,6 +243,9 @@ if [ "$CFLAGS_aarch64_apple_darwin" != "" -a "$HOST_OSX" = "true" ]; then
fi
cbindgen -v --config cbindgen.toml -o include/lightning.h >/dev/null 2>&1

echo "struct LDKBitcoinAddress;" >> include/ldk_rust_types.h
echo "typedef struct LDKBitcoinAddress LDKBitcoinAddress;" >> include/ldk_rust_types.h

# cbindgen is relatively braindead when exporting typedefs -
# it happily exports all our typedefs for private types, even with the
# generics we specified in C mode! So we drop all those types manually here.
Expand Down Expand Up @@ -605,17 +610,25 @@ fi

for IDX in ${!EXTRA_TARGETS[@]}; do
EXTRA_ENV_TARGET=$(echo "${EXTRA_TARGETS[$IDX]}" | sed 's/-/_/g')
export CFLAGS_$EXTRA_ENV_TARGET="$BASE_CFLAGS"
export CFLAGS_$EXTRA_ENV_TARGET="$BASE_CFLAGS -fPIC"
export CC_$EXTRA_ENV_TARGET=${EXTRA_CCS[$IDX]}
# Dunno why cc even looks for a target-specific ar, but just use LLVM
export AR_$EXTRA_ENV_TARGET=llvm-ar
EXTRA_RUSTFLAGS=""
case "$EXTRA_ENV_TARGET" in
"x86_64"*)
export CFLAGS_$EXTRA_ENV_TARGET="$BASE_CFLAGS -march=sandybridge -mtune=sandybridge"
export CFLAGS_$EXTRA_ENV_TARGET="$BASE_CFLAGS -march=sandybridge -mtune=sandybridge -fPIC"
EXTRA_RUSTFLAGS="-C target-cpu=sandybridge"
;;
esac
[ "${EXTRA_LINK_LTO[$IDX]}" != "" ] && EXTRA_RUSTFLAGS="-C linker-plugin-lto"
RUSTFLAGS="$BASE_RUSTFLAGS -C embed-bitcode=yes -C lto -C linker=${EXTRA_CCS[$IDX]} $EXTRA_RUSTFLAGS" CARGO_PROFILE_RELEASE_LTO=true cargo build $CARGO_BUILD_ARGS -v --release --target "${EXTRA_TARGETS[$IDX]}"

# At some point rustc fixed the issue which merits REALLY_PIN_CC. I'm not sure when,
# however, so we just use 1.84 as the cutoff.
[ "$RUSTC_MINOR_VERSION" -lt 84 ] && REALLY_PIN_CC
[ "$RUSTC_MINOR_VERSION" -lt 84 ] && OFFLINE_OPT="--offline"

RUSTC_BOOTSTRAP=1 RUSTFLAGS="$BASE_RUSTFLAGS -C embed-bitcode=yes -C lto -C linker=${EXTRA_CCS[$IDX]} $EXTRA_RUSTFLAGS" CARGO_PROFILE_RELEASE_LTO=true cargo build $OFFLINE_OPT $CARGO_BUILD_ARGS -v --release --target "${EXTRA_TARGETS[$IDX]}" -Zbuild-std=std,panic_abort
done

if [ "$CLANGPP" != "" -a "$LLD" != "" ]; then
Expand Down
9 changes: 8 additions & 1 deletion lightning-c-bindings/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ crate-type = ["staticlib"

[features]
no-std = ["lightning/dnssec"]
std = ["bitcoin/std", "lightning/std", "lightning/dnssec", "lightning-invoice/std", "lightning-background-processor/std", "lightning-rapid-gossip-sync/std"]
std = ["bitcoin/std", "lightning/std", "lightning/dnssec", "lightning-invoice/std", "lightning-background-processor/std", "lightning-rapid-gossip-sync/std", "lightning-liquidity/std"]

[dependencies]
bitcoin = { version = "0.32", default-features = false }
Expand All @@ -29,10 +29,17 @@ lightning-persister = { git = "https://github.com/lightningdevkit/rust-lightning
lightning-invoice = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "0.1-bindings", default-features = false }
lightning-background-processor = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "0.1-bindings", default-features = false }
lightning-rapid-gossip-sync = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "0.1-bindings", default-features = false }
lightning-liquidity = { git = "https://github.com/lightningdevkit/rust-lightning", branch = "0.1-bindings", default-features = false }

# Always force panic=abort, further options are set in the genbindings.sh build script
[profile.dev]
panic = "abort"

[profile.release]
panic = "abort"

[lints.rust.unexpected_cfgs]
level = "forbid"
check-cfg = [
"cfg(test_mod_pointers)",
]
72 changes: 72 additions & 0 deletions lightning-c-bindings/include/ldk_rust_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ struct nativeHumanReadableNameOpaque;
typedef struct nativeHumanReadableNameOpaque LDKnativeHumanReadableName;
struct nativeOMNameResolverOpaque;
typedef struct nativeOMNameResolverOpaque LDKnativeOMNameResolver;
struct nativeLSPS0ClientHandlerOpaque;
typedef struct nativeLSPS0ClientHandlerOpaque LDKnativeLSPS0ClientHandler;
struct nativeInvoiceWithExplicitSigningPubkeyBuilderOpaque;
typedef struct nativeInvoiceWithExplicitSigningPubkeyBuilderOpaque LDKnativeInvoiceWithExplicitSigningPubkeyBuilder;
struct nativeInvoiceWithDerivedSigningPubkeyBuilderOpaque;
Expand Down Expand Up @@ -79,6 +81,10 @@ struct nativeBlindedPathCandidateOpaque;
typedef struct nativeBlindedPathCandidateOpaque LDKnativeBlindedPathCandidate;
struct nativeOneHopBlindedPathCandidateOpaque;
typedef struct nativeOneHopBlindedPathCandidateOpaque LDKnativeOneHopBlindedPathCandidate;
struct nativeLSPS0ListProtocolsRequestOpaque;
typedef struct nativeLSPS0ListProtocolsRequestOpaque LDKnativeLSPS0ListProtocolsRequest;
struct nativeLSPS0ListProtocolsResponseOpaque;
typedef struct nativeLSPS0ListProtocolsResponseOpaque LDKnativeLSPS0ListProtocolsResponse;
struct nativeUntrustedStringOpaque;
typedef struct nativeUntrustedStringOpaque LDKnativeUntrustedString;
struct nativePrintableStringOpaque;
Expand All @@ -103,6 +109,14 @@ struct nativeBestBlockOpaque;
typedef struct nativeBestBlockOpaque LDKnativeBestBlock;
struct nativeWatchedOutputOpaque;
typedef struct nativeWatchedOutputOpaque LDKnativeWatchedOutput;
struct nativeLSPS1ClientConfigOpaque;
typedef struct nativeLSPS1ClientConfigOpaque LDKnativeLSPS1ClientConfig;
struct nativeLSPS1ClientHandlerOpaque;
typedef struct nativeLSPS1ClientHandlerOpaque LDKnativeLSPS1ClientHandler;
struct nativeLSPS2ClientConfigOpaque;
typedef struct nativeLSPS2ClientConfigOpaque LDKnativeLSPS2ClientConfig;
struct nativeLSPS2ClientHandlerOpaque;
typedef struct nativeLSPS2ClientHandlerOpaque LDKnativeLSPS2ClientHandler;
struct nativeOfferIdOpaque;
typedef struct nativeOfferIdOpaque LDKnativeOfferId;
struct nativeOfferWithExplicitMetadataBuilderOpaque;
Expand Down Expand Up @@ -171,6 +185,10 @@ struct nativeUserConfigOpaque;
typedef struct nativeUserConfigOpaque LDKnativeUserConfig;
struct nativeTaggedHashOpaque;
typedef struct nativeTaggedHashOpaque LDKnativeTaggedHash;
struct nativeLSPS2ServiceConfigOpaque;
typedef struct nativeLSPS2ServiceConfigOpaque LDKnativeLSPS2ServiceConfig;
struct nativeLSPS2ServiceHandlerOpaque;
typedef struct nativeLSPS2ServiceHandlerOpaque LDKnativeLSPS2ServiceHandler;
struct nativeChannelMonitorUpdateOpaque;
typedef struct nativeChannelMonitorUpdateOpaque LDKnativeChannelMonitorUpdate;
struct nativeHTLCUpdateOpaque;
Expand Down Expand Up @@ -325,6 +343,32 @@ struct nativeOnionPacketOpaque;
typedef struct nativeOnionPacketOpaque LDKnativeOnionPacket;
struct nativeTrampolineOnionPacketOpaque;
typedef struct nativeTrampolineOnionPacketOpaque LDKnativeTrampolineOnionPacket;
struct nativeLSPS1OrderIdOpaque;
typedef struct nativeLSPS1OrderIdOpaque LDKnativeLSPS1OrderId;
struct nativeLSPS1GetInfoRequestOpaque;
typedef struct nativeLSPS1GetInfoRequestOpaque LDKnativeLSPS1GetInfoRequest;
struct nativeLSPS1OptionsOpaque;
typedef struct nativeLSPS1OptionsOpaque LDKnativeLSPS1Options;
struct nativeLSPS1GetInfoResponseOpaque;
typedef struct nativeLSPS1GetInfoResponseOpaque LDKnativeLSPS1GetInfoResponse;
struct nativeLSPS1CreateOrderRequestOpaque;
typedef struct nativeLSPS1CreateOrderRequestOpaque LDKnativeLSPS1CreateOrderRequest;
struct nativeLSPS1OrderParamsOpaque;
typedef struct nativeLSPS1OrderParamsOpaque LDKnativeLSPS1OrderParams;
struct nativeLSPS1CreateOrderResponseOpaque;
typedef struct nativeLSPS1CreateOrderResponseOpaque LDKnativeLSPS1CreateOrderResponse;
struct nativeLSPS1PaymentInfoOpaque;
typedef struct nativeLSPS1PaymentInfoOpaque LDKnativeLSPS1PaymentInfo;
struct nativeLSPS1Bolt11PaymentInfoOpaque;
typedef struct nativeLSPS1Bolt11PaymentInfoOpaque LDKnativeLSPS1Bolt11PaymentInfo;
struct nativeLSPS1OnchainPaymentInfoOpaque;
typedef struct nativeLSPS1OnchainPaymentInfoOpaque LDKnativeLSPS1OnchainPaymentInfo;
struct nativeLSPS1OnchainPaymentOpaque;
typedef struct nativeLSPS1OnchainPaymentOpaque LDKnativeLSPS1OnchainPayment;
struct nativeLSPS1ChannelInfoOpaque;
typedef struct nativeLSPS1ChannelInfoOpaque LDKnativeLSPS1ChannelInfo;
struct nativeLSPS1GetOrderRequestOpaque;
typedef struct nativeLSPS1GetOrderRequestOpaque LDKnativeLSPS1GetOrderRequest;
struct nativeRecordOpaque;
typedef struct nativeRecordOpaque LDKnativeRecord;
struct nativeInboundHTLCDetailsOpaque;
Expand All @@ -341,6 +385,14 @@ struct nativeFutureOpaque;
typedef struct nativeFutureOpaque LDKnativeFuture;
struct nativeSleeperOpaque;
typedef struct nativeSleeperOpaque LDKnativeSleeper;
struct nativeRawLSPSMessageOpaque;
typedef struct nativeRawLSPSMessageOpaque LDKnativeRawLSPSMessage;
struct nativeLSPSRequestIdOpaque;
typedef struct nativeLSPSRequestIdOpaque LDKnativeLSPSRequestId;
struct nativeLSPSDateTimeOpaque;
typedef struct nativeLSPSDateTimeOpaque LDKnativeLSPSDateTime;
struct nativeLSPSResponseErrorOpaque;
typedef struct nativeLSPSResponseErrorOpaque LDKnativeLSPSResponseError;
struct nativeHeldHtlcAvailableOpaque;
typedef struct nativeHeldHtlcAvailableOpaque LDKnativeHeldHtlcAvailable;
struct nativeReleaseHeldHtlcOpaque;
Expand Down Expand Up @@ -377,6 +429,20 @@ struct nativeInvalidShutdownScriptOpaque;
typedef struct nativeInvalidShutdownScriptOpaque LDKnativeInvalidShutdownScript;
struct nativeBolt12ParseErrorOpaque;
typedef struct nativeBolt12ParseErrorOpaque LDKnativeBolt12ParseError;
struct nativeLSPS2GetInfoRequestOpaque;
typedef struct nativeLSPS2GetInfoRequestOpaque LDKnativeLSPS2GetInfoRequest;
struct nativeLSPS2RawOpeningFeeParamsOpaque;
typedef struct nativeLSPS2RawOpeningFeeParamsOpaque LDKnativeLSPS2RawOpeningFeeParams;
struct nativeLSPS2OpeningFeeParamsOpaque;
typedef struct nativeLSPS2OpeningFeeParamsOpaque LDKnativeLSPS2OpeningFeeParams;
struct nativeLSPS2GetInfoResponseOpaque;
typedef struct nativeLSPS2GetInfoResponseOpaque LDKnativeLSPS2GetInfoResponse;
struct nativeLSPS2BuyRequestOpaque;
typedef struct nativeLSPS2BuyRequestOpaque LDKnativeLSPS2BuyRequest;
struct nativeLSPS2InterceptScidOpaque;
typedef struct nativeLSPS2InterceptScidOpaque LDKnativeLSPS2InterceptScid;
struct nativeLSPS2BuyResponseOpaque;
typedef struct nativeLSPS2BuyResponseOpaque LDKnativeLSPS2BuyResponse;
struct nativePacketOpaque;
typedef struct nativePacketOpaque LDKnativePacket;
struct nativeClaimedHTLCOpaque;
Expand Down Expand Up @@ -483,6 +549,8 @@ struct nativeEmptyNodeIdLookUpOpaque;
typedef struct nativeEmptyNodeIdLookUpOpaque LDKnativeEmptyNodeIdLookUp;
struct nativeBlindedHopOpaque;
typedef struct nativeBlindedHopOpaque LDKnativeBlindedHop;
struct nativeMessageQueueOpaque;
typedef struct nativeMessageQueueOpaque LDKnativeMessageQueue;
struct nativeInvoiceErrorOpaque;
typedef struct nativeInvoiceErrorOpaque LDKnativeInvoiceError;
struct nativeErroneousFieldOpaque;
Expand All @@ -507,9 +575,13 @@ struct nativeLockedChannelMonitorOpaque;
typedef struct nativeLockedChannelMonitorOpaque LDKnativeLockedChannelMonitor;
struct nativeChainMonitorOpaque;
typedef struct nativeChainMonitorOpaque LDKnativeChainMonitor;
struct nativeLSPS0ServiceHandlerOpaque;
typedef struct nativeLSPS0ServiceHandlerOpaque LDKnativeLSPS0ServiceHandler;
struct nativeBlindedMessagePathOpaque;
typedef struct nativeBlindedMessagePathOpaque LDKnativeBlindedMessagePath;
struct nativeMessageForwardNodeOpaque;
typedef struct nativeMessageForwardNodeOpaque LDKnativeMessageForwardNode;
struct nativeDNSResolverContextOpaque;
typedef struct nativeDNSResolverContextOpaque LDKnativeDNSResolverContext;
struct LDKBitcoinAddress;
typedef struct LDKBitcoinAddress LDKBitcoinAddress;
Loading
Loading