Files
77812016ac LCW-1144 cupcake litecoin (#2557)
* Add psbt rpcs

* Only build arm64

* Rebuild protos

* Update proto

* Add psbt create rpc

* Restore wallet stuff

* more stuff

* more stuff

* more stuff

* Fix open wallet

* Fix mweb enabled

* Start of buildPsbt

* Update proto

* Psbt add recipients

* fixes

* slightly better

* more fixes

* decode ur

* add more commit code

* Update proto

* use new proto

* Don't eat psbt rpc errors

* Use unix domain socket for mwebd

* add gitignore

* Undo build only arm64

* fix pure mweb txns

* fix mweb txids

* fix ci

* fix blank pegin address

* chore: update cw_mweb dependencies
chore: remove cw_core as dependency from cw_mweb

* fix: Ltub restore

* fix: address review crashes, fix non-mweb view only wallets

* minor fixes

---------

Co-authored-by: Hector Chu <hectorchu@gmail.com>
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
2025-11-24 17:58:12 +01:00

77 lines
2.0 KiB
Dart

import 'dart:ffi';
import 'dart:io';
import 'dart:typed_data';
import 'package:cw_mweb/generated_bindings.g.dart';
import 'package:cw_mweb/print_verbose.dart';
import 'package:ffi/ffi.dart';
String libPath = (() {
if (Platform.isWindows) return 'mweb.dll';
if (Platform.isMacOS) return 'mweb.dylib';
if (Platform.isIOS) return 'Mwebd.framework/Mwebd';
if (Platform.isAndroid) return 'libmweb.so';
return 'libmweb.so';
})();
class MWebFfi {
late final MWebFlutter lib;
MWebFfi() : lib = MWebFlutter(DynamicLibrary.open(libPath));
static MWebFfi instance = MWebFfi();
int start(String dataDir, String nodeUri) {
final chain = "".toNativeUtf8().cast<Char>();
final dataDir_ = dataDir.toNativeUtf8().cast<Char>();
final nodeUri_ = nodeUri.toNativeUtf8().cast<Char>();
final errMsgPtr = calloc<Pointer<Char>>();
final port = lib.StartServer(chain, dataDir_, nodeUri_, errMsgPtr);
if (port == 0) {
final errMsg = errMsgPtr.value.cast<Utf8>().toDartString();
printV('Error starting server: $errMsg');
calloc.free(errMsgPtr.value);
}
calloc.free(chain);
calloc.free(dataDir_);
calloc.free(nodeUri_);
calloc.free(errMsgPtr);
return port;
}
void stop() => lib.StopServer();
String addresses(
Uint8List scanSecret, Uint8List spendPub, int fromIndex, int toIndex) {
final scanSecretPtr = malloc.allocate<Uint8>(scanSecret.length);
for (int k = 0; k < scanSecret.length; k++) {
scanSecretPtr[k] = scanSecret[k];
}
final spendPubKeyPtr = malloc.allocate<Uint8>(spendPub.length);
for (int k = 0; k < spendPub.length; k++) {
spendPubKeyPtr[k] = spendPub[k];
}
final Pointer<Char> resultPtr = lib.Addresses(
scanSecretPtr.cast(),
scanSecret.length,
spendPubKeyPtr.cast(),
spendPub.length,
fromIndex,
toIndex,
);
final result = resultPtr.cast<Utf8>().toDartString();
malloc.free(scanSecretPtr);
malloc.free(spendPubKeyPtr);
malloc.free(resultPtr);
return result;
}
}