Files
hash-wallet/cw_mweb/lib/generated_bindings.g.dart
jwinterm 6d22ba76ec Add cw_mweb generated_bindings.g.dart stub for desktop builds
Cake's mwebd Go daemon is only built for iOS and Android — no Linux/macOS/
Windows toolchain in their build scripts. ffigen consequently never runs
on those platforms, leaving cw_mweb/lib/mweb_ffi.dart dangling on a
non-existent generated_bindings.g.dart import.

This stub provides type-compatible signatures so the Dart build compiles
on every platform. At runtime, DynamicLibrary.open will fail on desktop
(no libmweb.so/.dll/.dylib shipped) and MWeb features will no-op — standard
non-MWEB Litecoin sends/receives still work fine through cw_bitcoin.

For Android the real bindings are still produced via ffigen against the
libmweb.h Go-generated header, overwriting this stub at build time.

Force-added past the *.g.dart gitignore — this one's a hand-maintained
desktop fallback, not a build artifact.
2026-05-14 18:19:53 -04:00

45 lines
1.4 KiB
Dart

// Hash Wallet: stub for the FFI bindings normally generated by ffigen from
// cw_mweb/android/src/main/jniLibs/arm64-v8a/libmweb.h.
//
// Upstream Cake only ships MWeb on iOS + Android — no Linux/macOS/Windows
// build of the Go-based mwebd daemon exists. Without this stub the Dart
// build fails on those platforms because cw_mweb/lib/mweb_ffi.dart imports
// MWebFlutter from this file at compile time.
//
// At runtime, attempting to use MWeb features will throw because
// DynamicLibrary.open(libPath) won't find a libmweb.so on desktop. That's
// fine — Litecoin's MWEB extension is a niche feature most users won't hit,
// and standard LTC sends/receives still work without it.
//
// To get real bindings (e.g. for an Android build): run ffigen against the
// libmweb.h header generated by `go build -buildmode=c-shared` in cw_mweb/go.
// See scripts/android/build_mwebd.sh for the canonical Android build.
import 'dart:ffi';
import 'package:ffi/ffi.dart';
class MWebFlutter {
MWebFlutter(DynamicLibrary _);
int StartServer(
Pointer<Char> chain,
Pointer<Char> dataDir,
Pointer<Char> nodeUri,
Pointer<Pointer<Char>> errMsg,
) =>
0;
void StopServer() {}
Pointer<Char> Addresses(
Pointer<Uint8> scanSecret,
int scanSecretLen,
Pointer<Uint8> spendPub,
int spendPubLen,
int fromIndex,
int toIndex,
) =>
''.toNativeUtf8().cast<Char>();
}