mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
* 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>
77 lines
2.0 KiB
Dart
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;
|
|
}
|
|
}
|