summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyan <cyjan@mrcyjanek.net>2024-11-01 11:00:52 +0000
committercyan <cyjan@mrcyjanek.net>2024-11-01 11:00:52 +0000
commit2fb6b83fa8bd7c2b3de42f93e15079ab27ad1c6e (patch)
treee1decd047380fb858a5b0a57d51fd40a6bf169b1
parent36d00fd3159773fd1b874255c0097923b5a29ae3 (diff)
fix: devcontainer on x64
ffigen: add zano zano: add missing free dart: implement zano
-rw-r--r--.devcontainer/Dockerfile2
-rw-r--r--impls/monero.dart/ffigen_zano.yaml11
-rw-r--r--impls/monero.dart/lib/src/checksum_zano.dart6
-rw-r--r--impls/monero.dart/lib/src/generated_bindings_zano.g.dart527
-rw-r--r--impls/monero.dart/lib/zano.dart688
-rwxr-xr-ximpls/monero.dart/update_bindings.sh1
-rw-r--r--impls/monero.ts/checksum_zano.ts6
-rw-r--r--monero_libwallet2_api_c/CMakeLists.txt15
-rw-r--r--zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp5
-rw-r--r--zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.h3
-rw-r--r--zano_libwallet2_api_c/src/main/cpp/zano_checksum.h6
-rw-r--r--zano_libwallet2_api_c/zano_libwallet2_api_c.exp1
12 files changed, 1256 insertions, 15 deletions
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index c08f528..06ae781 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -8,7 +8,7 @@ FROM ghcr.io/cirruslabs/flutter:3.24.3
SHELL ["/bin/bash", "-c"]
RUN [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]] && exit 0 \
- && wget http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb -O libtinfo5.deb \
+ || wget http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb -O libtinfo5.deb \
&& apt install ./libtinfo5.deb \
&& rm libtinfo5.deb
diff --git a/impls/monero.dart/ffigen_zano.yaml b/impls/monero.dart/ffigen_zano.yaml
new file mode 100644
index 0000000..2c0f6a0
--- /dev/null
+++ b/impls/monero.dart/ffigen_zano.yaml
@@ -0,0 +1,11 @@
+name: ZanoC
+description: monero_c bindings
+output: 'lib/src/generated_bindings_zano.g.dart'
+headers:
+ entry-points:
+ - '../../zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.h'
+
+exclude-all-by-default: true
+functions:
+ include:
+ - "ZANO_.+" \ No newline at end of file
diff --git a/impls/monero.dart/lib/src/checksum_zano.dart b/impls/monero.dart/lib/src/checksum_zano.dart
index 6a003ab..0739d29 100644
--- a/impls/monero.dart/lib/src/checksum_zano.dart
+++ b/impls/monero.dart/lib/src/checksum_zano.dart
@@ -1,4 +1,4 @@
// ignore_for_file: constant_identifier_names
-const String wallet2_api_c_h_sha256 = "e37ae91020ddb248bcc206678ef9a8e2754f71d498ee0b09a00e5ad070a4d8a7";
-const String wallet2_api_c_cpp_sha256 = "bbcd07c986d29b482a2b3fcbab78f12ecfdce096b8178945fdec0d5b600b315a-59ea01339d958144736b614ab7d5f5e00fdf837b";
-const String wallet2_api_c_exp_sha256 = "78c7d24804c6f5c900ddf901ea101192da356af2e29f83c20226cc291ec9875b";
+const String wallet2_api_c_h_sha256 = "8acaa95513b85a984c08e05cc3f2ac7530bb8f32946eeeb45357bd846aef33dd";
+const String wallet2_api_c_cpp_sha256 = "258e315ccc5f5ffa6d3d6608e9bfd7ac4f3b91b36424ad1633ed4440bf2986bc-59ea01339d958144736b614ab7d5f5e00fdf837b";
+const String wallet2_api_c_exp_sha256 = "66f3ff655bbfd11ad28c318ab707090b5a93276f436b06f7b1c0f329dba3c9c2";
diff --git a/impls/monero.dart/lib/src/generated_bindings_zano.g.dart b/impls/monero.dart/lib/src/generated_bindings_zano.g.dart
new file mode 100644
index 0000000..1ffdc3e
--- /dev/null
+++ b/impls/monero.dart/lib/src/generated_bindings_zano.g.dart
@@ -0,0 +1,527 @@
+// AUTO GENERATED FILE, DO NOT EDIT.
+//
+// Generated by `package:ffigen`.
+// ignore_for_file: type=lint
+import 'dart:ffi' as ffi;
+
+/// monero_c bindings
+class ZanoC {
+ /// Holds the symbol lookup function.
+ final ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
+ _lookup;
+
+ /// The symbols are looked up in [dynamicLibrary].
+ ZanoC(ffi.DynamicLibrary dynamicLibrary) : _lookup = dynamicLibrary.lookup;
+
+ /// The symbols are looked up with [lookup].
+ ZanoC.fromLookup(
+ ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
+ lookup)
+ : _lookup = lookup;
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_init(
+ ffi.Pointer<ffi.Char> address,
+ ffi.Pointer<ffi.Char> working_dir,
+ int log_level,
+ ) {
+ return _ZANO_PlainWallet_init(
+ address,
+ working_dir,
+ log_level,
+ );
+ }
+
+ late final _ZANO_PlainWallet_initPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>, ffi.Int)>>('ZANO_PlainWallet_init');
+ late final _ZANO_PlainWallet_init = _ZANO_PlainWallet_initPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>, int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_init2(
+ ffi.Pointer<ffi.Char> ip,
+ ffi.Pointer<ffi.Char> port,
+ ffi.Pointer<ffi.Char> working_dir,
+ int log_level,
+ ) {
+ return _ZANO_PlainWallet_init2(
+ ip,
+ port,
+ working_dir,
+ log_level,
+ );
+ }
+
+ late final _ZANO_PlainWallet_init2Ptr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>,
+ ffi.Int)>>('ZANO_PlainWallet_init2');
+ late final _ZANO_PlainWallet_init2 = _ZANO_PlainWallet_init2Ptr.asFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>, int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_reset() {
+ return _ZANO_PlainWallet_reset();
+ }
+
+ late final _ZANO_PlainWallet_resetPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_reset');
+ late final _ZANO_PlainWallet_reset =
+ _ZANO_PlainWallet_resetPtr.asFunction<ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_setLogLevel(
+ int log_level,
+ ) {
+ return _ZANO_PlainWallet_setLogLevel(
+ log_level,
+ );
+ }
+
+ late final _ZANO_PlainWallet_setLogLevelPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function(ffi.Int)>>(
+ 'ZANO_PlainWallet_setLogLevel');
+ late final _ZANO_PlainWallet_setLogLevel = _ZANO_PlainWallet_setLogLevelPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function(int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getVersion() {
+ return _ZANO_PlainWallet_getVersion();
+ }
+
+ late final _ZANO_PlainWallet_getVersionPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_getVersion');
+ late final _ZANO_PlainWallet_getVersion = _ZANO_PlainWallet_getVersionPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getWalletFiles() {
+ return _ZANO_PlainWallet_getWalletFiles();
+ }
+
+ late final _ZANO_PlainWallet_getWalletFilesPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_getWalletFiles');
+ late final _ZANO_PlainWallet_getWalletFiles =
+ _ZANO_PlainWallet_getWalletFilesPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getExportPrivateInfo(
+ ffi.Pointer<ffi.Char> target_dir,
+ ) {
+ return _ZANO_PlainWallet_getExportPrivateInfo(
+ target_dir,
+ );
+ }
+
+ late final _ZANO_PlainWallet_getExportPrivateInfoPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_getExportPrivateInfo');
+ late final _ZANO_PlainWallet_getExportPrivateInfo =
+ _ZANO_PlainWallet_getExportPrivateInfoPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_deleteWallet(
+ ffi.Pointer<ffi.Char> file_name,
+ ) {
+ return _ZANO_PlainWallet_deleteWallet(
+ file_name,
+ );
+ }
+
+ late final _ZANO_PlainWallet_deleteWalletPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_deleteWallet');
+ late final _ZANO_PlainWallet_deleteWallet = _ZANO_PlainWallet_deleteWalletPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getAddressInfo(
+ ffi.Pointer<ffi.Char> addr,
+ ) {
+ return _ZANO_PlainWallet_getAddressInfo(
+ addr,
+ );
+ }
+
+ late final _ZANO_PlainWallet_getAddressInfoPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_getAddressInfo');
+ late final _ZANO_PlainWallet_getAddressInfo =
+ _ZANO_PlainWallet_getAddressInfoPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getAppconfig(
+ ffi.Pointer<ffi.Char> encryption_key,
+ ) {
+ return _ZANO_PlainWallet_getAppconfig(
+ encryption_key,
+ );
+ }
+
+ late final _ZANO_PlainWallet_getAppconfigPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_getAppconfig');
+ late final _ZANO_PlainWallet_getAppconfig = _ZANO_PlainWallet_getAppconfigPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_setAppconfig(
+ ffi.Pointer<ffi.Char> conf_str,
+ ffi.Pointer<ffi.Char> encryption_key,
+ ) {
+ return _ZANO_PlainWallet_setAppconfig(
+ conf_str,
+ encryption_key,
+ );
+ }
+
+ late final _ZANO_PlainWallet_setAppconfigPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_setAppconfig');
+ late final _ZANO_PlainWallet_setAppconfig =
+ _ZANO_PlainWallet_setAppconfigPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_generateRandomKey(
+ int lenght,
+ ) {
+ return _ZANO_PlainWallet_generateRandomKey(
+ lenght,
+ );
+ }
+
+ late final _ZANO_PlainWallet_generateRandomKeyPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function(ffi.Uint64)>>(
+ 'ZANO_PlainWallet_generateRandomKey');
+ late final _ZANO_PlainWallet_generateRandomKey =
+ _ZANO_PlainWallet_generateRandomKeyPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getLogsBuffer() {
+ return _ZANO_PlainWallet_getLogsBuffer();
+ }
+
+ late final _ZANO_PlainWallet_getLogsBufferPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_getLogsBuffer');
+ late final _ZANO_PlainWallet_getLogsBuffer =
+ _ZANO_PlainWallet_getLogsBufferPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_truncateLog() {
+ return _ZANO_PlainWallet_truncateLog();
+ }
+
+ late final _ZANO_PlainWallet_truncateLogPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_truncateLog');
+ late final _ZANO_PlainWallet_truncateLog = _ZANO_PlainWallet_truncateLogPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getConnectivityStatus() {
+ return _ZANO_PlainWallet_getConnectivityStatus();
+ }
+
+ late final _ZANO_PlainWallet_getConnectivityStatusPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_getConnectivityStatus');
+ late final _ZANO_PlainWallet_getConnectivityStatus =
+ _ZANO_PlainWallet_getConnectivityStatusPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_open(
+ ffi.Pointer<ffi.Char> path,
+ ffi.Pointer<ffi.Char> password,
+ ) {
+ return _ZANO_PlainWallet_open(
+ path,
+ password,
+ );
+ }
+
+ late final _ZANO_PlainWallet_openPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_open');
+ late final _ZANO_PlainWallet_open = _ZANO_PlainWallet_openPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_restore(
+ ffi.Pointer<ffi.Char> seed,
+ ffi.Pointer<ffi.Char> path,
+ ffi.Pointer<ffi.Char> password,
+ ffi.Pointer<ffi.Char> seed_password,
+ ) {
+ return _ZANO_PlainWallet_restore(
+ seed,
+ path,
+ password,
+ seed_password,
+ );
+ }
+
+ late final _ZANO_PlainWallet_restorePtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_restore');
+ late final _ZANO_PlainWallet_restore =
+ _ZANO_PlainWallet_restorePtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_generate(
+ ffi.Pointer<ffi.Char> path,
+ ffi.Pointer<ffi.Char> password,
+ ) {
+ return _ZANO_PlainWallet_generate(
+ path,
+ password,
+ );
+ }
+
+ late final _ZANO_PlainWallet_generatePtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_generate');
+ late final _ZANO_PlainWallet_generate =
+ _ZANO_PlainWallet_generatePtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getOpenWallets() {
+ return _ZANO_PlainWallet_getOpenWallets();
+ }
+
+ late final _ZANO_PlainWallet_getOpenWalletsPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_PlainWallet_getOpenWallets');
+ late final _ZANO_PlainWallet_getOpenWallets =
+ _ZANO_PlainWallet_getOpenWalletsPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getWalletStatus(
+ int h,
+ ) {
+ return _ZANO_PlainWallet_getWalletStatus(
+ h,
+ );
+ }
+
+ late final _ZANO_PlainWallet_getWalletStatusPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function(ffi.Int64)>>(
+ 'ZANO_PlainWallet_getWalletStatus');
+ late final _ZANO_PlainWallet_getWalletStatus =
+ _ZANO_PlainWallet_getWalletStatusPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_closeWallet(
+ int h,
+ ) {
+ return _ZANO_PlainWallet_closeWallet(
+ h,
+ );
+ }
+
+ late final _ZANO_PlainWallet_closeWalletPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function(ffi.Int64)>>(
+ 'ZANO_PlainWallet_closeWallet');
+ late final _ZANO_PlainWallet_closeWallet = _ZANO_PlainWallet_closeWalletPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function(int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_invoke(
+ int h,
+ ffi.Pointer<ffi.Char> params,
+ ) {
+ return _ZANO_PlainWallet_invoke(
+ h,
+ params,
+ );
+ }
+
+ late final _ZANO_PlainWallet_invokePtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Int64, ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_invoke');
+ late final _ZANO_PlainWallet_invoke = _ZANO_PlainWallet_invokePtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(int, ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_asyncCall(
+ ffi.Pointer<ffi.Char> method_name,
+ int instance_id,
+ ffi.Pointer<ffi.Char> params,
+ ) {
+ return _ZANO_PlainWallet_asyncCall(
+ method_name,
+ instance_id,
+ params,
+ );
+ }
+
+ late final _ZANO_PlainWallet_asyncCallPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>, ffi.Uint64,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_asyncCall');
+ late final _ZANO_PlainWallet_asyncCall =
+ _ZANO_PlainWallet_asyncCallPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>, int, ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_tryPullResult(
+ int instance_id,
+ ) {
+ return _ZANO_PlainWallet_tryPullResult(
+ instance_id,
+ );
+ }
+
+ late final _ZANO_PlainWallet_tryPullResultPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function(ffi.Uint64)>>(
+ 'ZANO_PlainWallet_tryPullResult');
+ late final _ZANO_PlainWallet_tryPullResult =
+ _ZANO_PlainWallet_tryPullResultPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_syncCall(
+ ffi.Pointer<ffi.Char> method_name,
+ int instance_id,
+ ffi.Pointer<ffi.Char> params,
+ ) {
+ return _ZANO_PlainWallet_syncCall(
+ method_name,
+ instance_id,
+ params,
+ );
+ }
+
+ late final _ZANO_PlainWallet_syncCallPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Char>, ffi.Uint64,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_syncCall');
+ late final _ZANO_PlainWallet_syncCall =
+ _ZANO_PlainWallet_syncCallPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(
+ ffi.Pointer<ffi.Char>, int, ffi.Pointer<ffi.Char>)>();
+
+ bool ZANO_PlainWallet_isWalletExist(
+ ffi.Pointer<ffi.Char> path,
+ ) {
+ return _ZANO_PlainWallet_isWalletExist(
+ path,
+ );
+ }
+
+ late final _ZANO_PlainWallet_isWalletExistPtr =
+ _lookup<ffi.NativeFunction<ffi.Bool Function(ffi.Pointer<ffi.Char>)>>(
+ 'ZANO_PlainWallet_isWalletExist');
+ late final _ZANO_PlainWallet_isWalletExist =
+ _ZANO_PlainWallet_isWalletExistPtr.asFunction<
+ bool Function(ffi.Pointer<ffi.Char>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_getWalletInfo(
+ int h,
+ ) {
+ return _ZANO_PlainWallet_getWalletInfo(
+ h,
+ );
+ }
+
+ late final _ZANO_PlainWallet_getWalletInfoPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function(ffi.Int64)>>(
+ 'ZANO_PlainWallet_getWalletInfo');
+ late final _ZANO_PlainWallet_getWalletInfo =
+ _ZANO_PlainWallet_getWalletInfoPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(int)>();
+
+ ffi.Pointer<ffi.Char> ZANO_PlainWallet_resetWalletPassword(
+ int h,
+ ffi.Pointer<ffi.Char> password,
+ ) {
+ return _ZANO_PlainWallet_resetWalletPassword(
+ h,
+ password,
+ );
+ }
+
+ late final _ZANO_PlainWallet_resetWalletPasswordPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Int64,
+ ffi.Pointer<ffi.Char>)>>('ZANO_PlainWallet_resetWalletPassword');
+ late final _ZANO_PlainWallet_resetWalletPassword =
+ _ZANO_PlainWallet_resetWalletPasswordPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(int, ffi.Pointer<ffi.Char>)>();
+
+ int ZANO_PlainWallet_getCurrentTxFee(
+ int priority,
+ ) {
+ return _ZANO_PlainWallet_getCurrentTxFee(
+ priority,
+ );
+ }
+
+ late final _ZANO_PlainWallet_getCurrentTxFeePtr =
+ _lookup<ffi.NativeFunction<ffi.Uint64 Function(ffi.Uint64)>>(
+ 'ZANO_PlainWallet_getCurrentTxFee');
+ late final _ZANO_PlainWallet_getCurrentTxFee =
+ _ZANO_PlainWallet_getCurrentTxFeePtr.asFunction<int Function(int)>();
+
+ void ZANO_free(
+ ffi.Pointer<ffi.Void> ptr,
+ ) {
+ return _ZANO_free(
+ ptr,
+ );
+ }
+
+ late final _ZANO_freePtr =
+ _lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
+ 'ZANO_free');
+ late final _ZANO_free =
+ _ZANO_freePtr.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
+
+ ffi.Pointer<ffi.Char> ZANO_checksum_wallet2_api_c_h() {
+ return _ZANO_checksum_wallet2_api_c_h();
+ }
+
+ late final _ZANO_checksum_wallet2_api_c_hPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_checksum_wallet2_api_c_h');
+ late final _ZANO_checksum_wallet2_api_c_h = _ZANO_checksum_wallet2_api_c_hPtr
+ .asFunction<ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_checksum_wallet2_api_c_cpp() {
+ return _ZANO_checksum_wallet2_api_c_cpp();
+ }
+
+ late final _ZANO_checksum_wallet2_api_c_cppPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_checksum_wallet2_api_c_cpp');
+ late final _ZANO_checksum_wallet2_api_c_cpp =
+ _ZANO_checksum_wallet2_api_c_cppPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function()>();
+
+ ffi.Pointer<ffi.Char> ZANO_checksum_wallet2_api_c_exp() {
+ return _ZANO_checksum_wallet2_api_c_exp();
+ }
+
+ late final _ZANO_checksum_wallet2_api_c_expPtr =
+ _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Char> Function()>>(
+ 'ZANO_checksum_wallet2_api_c_exp');
+ late final _ZANO_checksum_wallet2_api_c_exp =
+ _ZANO_checksum_wallet2_api_c_expPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function()>();
+}
diff --git a/impls/monero.dart/lib/zano.dart b/impls/monero.dart/lib/zano.dart
new file mode 100644
index 0000000..f17346a
--- /dev/null
+++ b/impls/monero.dart/lib/zano.dart
@@ -0,0 +1,688 @@
+
+// ignore_for_file: non_constant_identifier_names, camel_case_types
+
+import 'dart:ffi';
+import 'dart:io';
+
+import 'package:ffi/ffi.dart';
+import 'package:monero/src/generated_bindings_zano.g.dart';
+
+export 'src/checksum_monero.dart';
+
+typedef PendingTransaction = Pointer<Void>;
+
+ZanoC? lib;
+String libPath = (() {
+ if (Platform.isWindows) return 'zano_libwallet2_api_c.dll';
+ if (Platform.isMacOS) return 'zano_libwallet2_api_c.dylib';
+ if (Platform.isIOS) return 'ZanoWallet.framework/ZanoWallet';
+ if (Platform.isAndroid) return 'libzano_libwallet2_api_c.so';
+ return 'zano_libwallet2_api_c.so';
+})();
+
+Map<String, List<int>> debugCallLength = {};
+
+final defaultSeparatorStr = ";";
+final defaultSeparator = defaultSeparatorStr.toNativeUtf8().cast<Char>();
+/* we don't call .free here, this comment serves one purpose - so the numbers match :) */
+
+final Stopwatch sw = Stopwatch()..start();
+
+bool printStarts = false;
+
+void Function(String call)? debugStart = (call) {
+ try {
+ if (printStarts) print("MONERO: $call");
+ debugCallLength[call] ??= <int>[];
+ debugCallLength[call]!.add(sw.elapsedMicroseconds);
+ } catch (e) {}
+};
+void debugChores() {
+ for (var key in debugCallLength.keys) {
+ if (debugCallLength[key]!.length > 1000000) {
+ final elm =
+ debugCallLength[key]!.reduce((value, element) => value + element);
+ debugCallLength[key]!.clear();
+ debugCallLength["${key}_1M"] ??= <int>[];
+ debugCallLength["${key}_1M"]!.add(elm);
+ }
+ }
+}
+
+int debugCount = 0;
+
+void Function(String call)? debugEnd = (call) {
+ try {
+ final id = debugCallLength[call]!.length - 1;
+ if (++debugCount > 1000000) {
+ debugCount = 0;
+ debugChores();
+ }
+ debugCallLength[call]![id] =
+ sw.elapsedMicroseconds - debugCallLength[call]![id];
+ } catch (e) {}
+};
+void Function(String call, dynamic error)? errorHandler = (call, error) {
+ print("$call: $error");
+};
+
+// extern ADDAPI const char* ZANO_PlainWallet_init(const char* address, const char* working_dir, int log_level);
+String PlainWallet_init(String address, String working_dir, int log_level) {
+ debugStart?.call('ZANO_PlainWallet_init');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final address_ = address.toNativeUtf8();
+ final working_dir_ = working_dir.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_init(address_.cast(), working_dir_.cast(), log_level);
+ calloc.free(address_);
+ calloc.free(working_dir_);
+ debugEnd?.call('ZANO_PlainWallet_init');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_init');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_init', e);
+ debugEnd?.call('ZANO_PlainWallet_init');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_init2(const char* ip, const char* port, const char* working_dir, int log_level);
+String PlainWallet_init2(String ip, String port, String working_dir, int log_level) {
+ debugStart?.call('ZANO_PlainWallet_init2');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final ip_ = ip.toNativeUtf8();
+ final port_ = port.toNativeUtf8();
+ final working_dir_ = working_dir.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_init2(ip_.cast(), port_.cast(), working_dir_.cast(), log_level);
+ calloc.free(ip_);
+ calloc.free(port_);
+ calloc.free(working_dir_);
+ debugEnd?.call('ZANO_PlainWallet_init2');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_init2');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_init2', e);
+ debugEnd?.call('ZANO_PlainWallet_init2');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_reset();
+String PlainWallet_reset() {
+ debugStart?.call('ZANO_PlainWallet_reset');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_reset();
+ debugEnd?.call('ZANO_PlainWallet_reset');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_reset');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_reset', e);
+ debugEnd?.call('ZANO_PlainWallet_reset');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_setLogLevel(int log_level);
+String PlainWallet_setLogLevel(int log_level) {
+ debugStart?.call('ZANO_PlainWallet_setLogLevel');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_setLogLevel(log_level);
+ debugEnd?.call('ZANO_PlainWallet_setLogLevel');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_setLogLevel');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_setLogLevel', e);
+ debugEnd?.call('ZANO_PlainWallet_setLogLevel');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getVersion();
+String PlainWallet_getVersion() {
+ debugStart?.call('ZANO_PlainWallet_getVersion');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getVersion();
+ debugEnd?.call('ZANO_PlainWallet_getVersion');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getVersion');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getVersion', e);
+ debugEnd?.call('ZANO_PlainWallet_getVersion');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getWalletFiles();
+String PlainWallet_getWalletFiles() {
+ debugStart?.call('ZANO_PlainWallet_getWalletFiles');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getWalletFiles();
+ debugEnd?.call('ZANO_PlainWallet_getWalletFiles');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getWalletFiles');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getWalletFiles', e);
+ debugEnd?.call('ZANO_PlainWallet_getWalletFiles');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getExportPrivateInfo(const char* target_dir);
+String PlainWallet_getExportPrivateInfo(String target_dir) {
+ debugStart?.call('ZANO_PlainWallet_getExportPrivateInfo');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final target_dir_ = target_dir.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_getExportPrivateInfo(target_dir_.cast());
+ calloc.free(target_dir_);
+ debugEnd?.call('ZANO_PlainWallet_getExportPrivateInfo');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getExportPrivateInfo');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getExportPrivateInfo', e);
+ debugEnd?.call('ZANO_PlainWallet_getExportPrivateInfo');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_deleteWallet(const char* file_name);
+String PlainWallet_deleteWallet(String file_name) {
+ debugStart?.call('ZANO_PlainWallet_deleteWallet');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final file_name_ = file_name.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_deleteWallet(file_name_.cast());
+ calloc.free(file_name_);
+ debugEnd?.call('ZANO_PlainWallet_deleteWallet');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_deleteWallet');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_deleteWallet', e);
+ debugEnd?.call('ZANO_PlainWallet_deleteWallet');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getAddressInfo(const char* addr);
+String PlainWallet_getAddressInfo(String addr) {
+ debugStart?.call('ZANO_PlainWallet_getAddressInfo');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final addr_ = addr.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_getAddressInfo(addr_.cast());
+ calloc.free(addr_);
+ debugEnd?.call('ZANO_PlainWallet_getAddressInfo');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getAddressInfo');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getAddressInfo', e);
+ debugEnd?.call('ZANO_PlainWallet_getAddressInfo');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getAppconfig(const char* encryption_key);
+String PlainWallet_getAppconfig(String encryption_key) {
+ debugStart?.call('ZANO_PlainWallet_getAppconfig');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final encryption_key_ = encryption_key.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_getAppconfig(encryption_key_.cast());
+ calloc.free(encryption_key_);
+ debugEnd?.call('ZANO_PlainWallet_getAppconfig');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getAppconfig');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getAppconfig', e);
+ debugEnd?.call('ZANO_PlainWallet_getAppconfig');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_setAppconfig(const char* conf_str, const char* encryption_key);
+String PlainWallet_setAppconfig(String conf_str, String encryption_key) {
+ debugStart?.call('ZANO_PlainWallet_setAppconfig');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final conf_str_ = conf_str.toNativeUtf8();
+ final encryption_key_ = encryption_key.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_setAppconfig(conf_str_.cast(), encryption_key_.cast());
+ calloc.free(conf_str_);
+ calloc.free(encryption_key_);
+ debugEnd?.call('ZANO_PlainWallet_setAppconfig');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_setAppconfig');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_setAppconfig', e);
+ debugEnd?.call('ZANO_PlainWallet_setAppconfig');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_generateRandomKey(uint64_t lenght);
+String PlainWallet_generateRandomKey(int length) {
+ debugStart?.call('ZANO_PlainWallet_generateRandomKey');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_generateRandomKey(length);
+ debugEnd?.call('ZANO_PlainWallet_generateRandomKey');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_generateRandomKey');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_generateRandomKey', e);
+ debugEnd?.call('ZANO_PlainWallet_generateRandomKey');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getLogsBuffer();
+String PlainWallet_getLogsBuffer() {
+ debugStart?.call('ZANO_PlainWallet_getLogsBuffer');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getLogsBuffer();
+ debugEnd?.call('ZANO_PlainWallet_getLogsBuffer');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getLogsBuffer');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getLogsBuffer', e);
+ debugEnd?.call('ZANO_PlainWallet_getLogsBuffer');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_truncateLog();
+String PlainWallet_truncateLog() {
+ debugStart?.call('ZANO_PlainWallet_truncateLog');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_truncateLog();
+ debugEnd?.call('ZANO_PlainWallet_truncateLog');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_truncateLog');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_truncateLog', e);
+ debugEnd?.call('ZANO_PlainWallet_truncateLog');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getConnectivityStatus();
+String PlainWallet_getConnectivityStatus() {
+ debugStart?.call('ZANO_PlainWallet_getConnectivityStatus');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getConnectivityStatus();
+ debugEnd?.call('ZANO_PlainWallet_getConnectivityStatus');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getConnectivityStatus');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getConnectivityStatus', e);
+ debugEnd?.call('ZANO_PlainWallet_getConnectivityStatus');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_open(const char* path, const char* password);
+String PlainWallet_open(String path, String password) {
+ debugStart?.call('ZANO_PlainWallet_open');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final path_ = path.toNativeUtf8();
+ final password_ = password.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_open(path_.cast(), password_.cast());
+ calloc.free(path_);
+ calloc.free(password_);
+ debugEnd?.call('ZANO_PlainWallet_open');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_open');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_open', e);
+ debugEnd?.call('ZANO_PlainWallet_open');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_restore(const char* seed, const char* path, const char* password, const char* seed_password);
+String PlainWallet_restore(String seed, String path, String password, String seed_password) {
+ debugStart?.call('ZANO_PlainWallet_restore');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final seed_ = seed.toNativeUtf8();
+ final path_ = path.toNativeUtf8();
+ final password_ = password.toNativeUtf8();
+ final seed_password_ = seed_password.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_restore(seed_.cast(), path_.cast(), password_.cast(), seed_password_.cast());
+ calloc.free(seed_);
+ calloc.free(path_);
+ calloc.free(password_);
+ calloc.free(seed_password_);
+ debugEnd?.call('ZANO_PlainWallet_restore');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_restore');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_restore', e);
+ debugEnd?.call('ZANO_PlainWallet_restore');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_generate(const char* path, const char* password);
+String PlainWallet_generate(String path, String password) {
+ debugStart?.call('ZANO_PlainWallet_generate');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final path_ = path.toNativeUtf8();
+ final password_ = password.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_generate(path_.cast(), password_.cast());
+ calloc.free(path_);
+ calloc.free(password_);
+ debugEnd?.call('ZANO_PlainWallet_generate');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_generate');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_generate', e);
+ debugEnd?.call('ZANO_PlainWallet_generate');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getOpenWallets();
+String PlainWallet_getOpenWallets() {
+ debugStart?.call('ZANO_PlainWallet_getOpenWallets');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getOpenWallets();
+ debugEnd?.call('ZANO_PlainWallet_getOpenWallets');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getOpenWallets');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getOpenWallets', e);
+ debugEnd?.call('ZANO_PlainWallet_getOpenWallets');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getWalletStatus(int64_t h);
+String PlainWallet_getWalletStatus(int h) {
+ debugStart?.call('ZANO_PlainWallet_getWalletStatus');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getWalletStatus(h);
+ debugEnd?.call('ZANO_PlainWallet_getWalletStatus');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getWalletStatus');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getWalletStatus', e);
+ debugEnd?.call('ZANO_PlainWallet_getWalletStatus');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_closeWallet(int64_t h);
+String PlainWallet_closeWallet(int h) {
+ debugStart?.call('ZANO_PlainWallet_closeWallet');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_closeWallet(h);
+ debugEnd?.call('ZANO_PlainWallet_closeWallet');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_closeWallet');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_closeWallet', e);
+ debugEnd?.call('ZANO_PlainWallet_closeWallet');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_invoke(int64_t h, const char* params);
+String PlainWallet_invoke(int h, String params) {
+ debugStart?.call('ZANO_PlainWallet_invoke');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final params_ = params.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_invoke(h, params_.cast());
+ calloc.free(params_);
+ debugEnd?.call('ZANO_PlainWallet_invoke');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_invoke');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_invoke', e);
+ debugEnd?.call('ZANO_PlainWallet_invoke');
+ return "";
+ }
+}
+
+// extern ADDAPI const char* ZANO_PlainWallet_asyncCall(const char* method_name, uint64_t instance_id, const char* params);
+String PlainWallet_asyncCall(String method_name, int h, String params) {
+ debugStart?.call('ZANO_PlainWallet_asyncCall');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final params_ = params.toNativeUtf8();
+ final method_name_ = method_name.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_asyncCall(method_name_.cast(), h, params_.cast());
+ calloc.free(params_);
+ calloc.free(method_name_);
+ debugEnd?.call('ZANO_PlainWallet_asyncCall');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_asyncCall');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_asyncCall', e);
+ debugEnd?.call('ZANO_PlainWallet_asyncCall');
+ return "";
+ }
+}
+
+// extern ADDAPI const char* ZANO_PlainWallet_tryPullResult(uint64_t instance_id);
+String PlainWallet_tryPullResult(int instance_id) {
+ debugStart?.call('ZANO_PlainWallet_tryPullResult');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_tryPullResult(instance_id);
+ debugEnd?.call('ZANO_PlainWallet_tryPullResult');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_tryPullResult');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_tryPullResult', e);
+ debugEnd?.call('ZANO_PlainWallet_tryPullResult');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_syncCall(const char* method_name, uint64_t instance_id, const char* params);
+String PlainWallet_syncCall(String method_name, int instance_id, String params) {
+ debugStart?.call('ZANO_PlainWallet_syncCall');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final method_name_ = method_name.toNativeUtf8();
+ final params_ = params.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_syncCall(method_name_.cast(), instance_id, params_.cast());
+ calloc.free(method_name_);
+ calloc.free(params_);
+ debugEnd?.call('ZANO_PlainWallet_syncCall');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_syncCall');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_syncCall', e);
+ debugEnd?.call('ZANO_PlainWallet_syncCall');
+ return "";
+ }
+}
+// extern ADDAPI bool ZANO_PlainWallet_isWalletExist(const char* path);
+bool PlainWallet_isWalletExist(String path) {
+ debugStart?.call('ZANO_PlainWallet_isWalletExist');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final path_ = path.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_isWalletExist(path_.cast());
+ calloc.free(path_);
+ debugEnd?.call('ZANO_PlainWallet_isWalletExist');
+ return txid;
+}
+// extern ADDAPI const char* ZANO_PlainWallet_getWalletInfo(int64_t h);
+String PlainWallet_getWalletInfo(int h) {
+ debugStart?.call('ZANO_PlainWallet_getWalletInfo');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getWalletInfo(h);
+ debugEnd?.call('ZANO_PlainWallet_getWalletInfo');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_getWalletInfo');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_getWalletInfo', e);
+ debugEnd?.call('ZANO_PlainWallet_getWalletInfo');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_PlainWallet_resetWalletPassword(int64_t h, const char* password);
+String PlainWallet_resetWalletPassword(int h, String password) {
+ debugStart?.call('ZANO_PlainWallet_resetWalletPassword');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final password_ = password.toNativeUtf8();
+ final txid = lib!.ZANO_PlainWallet_resetWalletPassword(h, password_.cast());
+ calloc.free(password_);
+ debugEnd?.call('ZANO_PlainWallet_resetWalletPassword');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_PlainWallet_resetWalletPassword');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_PlainWallet_resetWalletPassword', e);
+ debugEnd?.call('ZANO_PlainWallet_resetWalletPassword');
+ return "";
+ }
+}
+// extern ADDAPI uint64_t ZANO_PlainWallet_getCurrentTxFee(uint64_t priority);
+int PlainWallet_getCurrentTxFee(int priority) {
+ debugStart?.call('ZANO_PlainWallet_getCurrentTxFee');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_PlainWallet_getCurrentTxFee(priority);
+ debugEnd?.call('ZANO_PlainWallet_getCurrentTxFee');
+ return txid;
+}
+
+void ZANO_free(Pointer<Void> wlptr) {
+ debugStart?.call('ZANO_free');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+
+ final s = lib!.ZANO_free(wlptr);
+ debugEnd?.call('ZANO_free');
+ return s;
+}
+
+// extern ADDAPI const char* ZANO_checksum_wallet2_api_c_h();
+String checksum_wallet2_api_c_h() {
+ debugStart?.call('ZANO_checksum_wallet2_api_c_h');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_checksum_wallet2_api_c_h();
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_h');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_h');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_checksum_wallet2_api_c_h', e);
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_h');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_checksum_wallet2_api_c_cpp();
+String checksum_wallet2_api_c_cpp() {
+ debugStart?.call('ZANO_checksum_wallet2_api_c_cpp');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_checksum_wallet2_api_c_cpp();
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_cpp');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_cpp');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_checksum_wallet2_api_c_cpp', e);
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_cpp');
+ return "";
+ }
+}
+// extern ADDAPI const char* ZANO_checksum_wallet2_api_c_exp();
+String checksum_wallet2_api_c_exp() {
+ debugStart?.call('ZANO_checksum_wallet2_api_c_exp');
+ lib ??= ZanoC(DynamicLibrary.open(libPath));
+ final txid = lib!.ZANO_checksum_wallet2_api_c_exp();
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_exp');
+ try {
+ final strPtr = txid.cast<Utf8>();
+ final str = strPtr.toDartString();
+ ZANO_free(strPtr.cast());
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_exp');
+ return str;
+ } catch (e) {
+ errorHandler?.call('ZANO_checksum_wallet2_api_c_exp', e);
+ debugEnd?.call('ZANO_checksum_wallet2_api_c_exp');
+ return "";
+ }
+} \ No newline at end of file
diff --git a/impls/monero.dart/update_bindings.sh b/impls/monero.dart/update_bindings.sh
index 8ac3cab..f1ba024 100755
--- a/impls/monero.dart/update_bindings.sh
+++ b/impls/monero.dart/update_bindings.sh
@@ -6,3 +6,4 @@ cd "$(realpath $(dirname $0))"
dart run ffigen --config ffigen_wownero.yaml
dart run ffigen --config ffigen_monero.yaml
+dart run ffigen --config ffigen_zano.yaml
diff --git a/impls/monero.ts/checksum_zano.ts b/impls/monero.ts/checksum_zano.ts
index 986e9bd..76e0106 100644
--- a/impls/monero.ts/checksum_zano.ts
+++ b/impls/monero.ts/checksum_zano.ts
@@ -1,5 +1,5 @@
export const zanoChecksum = {
- wallet2_api_c_h_sha256: "e37ae91020ddb248bcc206678ef9a8e2754f71d498ee0b09a00e5ad070a4d8a7",
- wallet2_api_c_cpp_sha256: "bbcd07c986d29b482a2b3fcbab78f12ecfdce096b8178945fdec0d5b600b315a-59ea01339d958144736b614ab7d5f5e00fdf837b",
- wallet2_api_c_exp_sha256: "78c7d24804c6f5c900ddf901ea101192da356af2e29f83c20226cc291ec9875b",
+ wallet2_api_c_h_sha256: "8acaa95513b85a984c08e05cc3f2ac7530bb8f32946eeeb45357bd846aef33dd",
+ wallet2_api_c_cpp_sha256: "258e315ccc5f5ffa6d3d6608e9bfd7ac4f3b91b36424ad1633ed4440bf2986bc-59ea01339d958144736b614ab7d5f5e00fdf837b",
+ wallet2_api_c_exp_sha256: "66f3ff655bbfd11ad28c318ab707090b5a93276f436b06f7b1c0f329dba3c9c2",
}
diff --git a/monero_libwallet2_api_c/CMakeLists.txt b/monero_libwallet2_api_c/CMakeLists.txt
index 5e84d16..10c0db9 100644
--- a/monero_libwallet2_api_c/CMakeLists.txt
+++ b/monero_libwallet2_api_c/CMakeLists.txt
@@ -27,7 +27,7 @@ if (${HOST_ABI} STREQUAL "host-apple-darwin" OR
endif()
endif()
-if(${HOST_ABI} STREQUAL "x86_64-linux-android" OR
+if(${HOST_ABI} STREQUAL "" OR
${HOST_ABI} STREQUAL "i686-linux-android" OR
${HOST_ABI} STREQUAL "aarch64-linux-android" OR
${HOST_ABI} STREQUAL "armv7a-linux-androideabi")
@@ -80,13 +80,17 @@ elseif(${HOST_ABI} STREQUAL "aarch64-linux-gnu")
set(BOOST_WTF_DATE_TIME "-mt-s-a64")
set(BOOST_WTF_PART "")
elseif(${HOST_ABI} STREQUAL "x86_64-w64-mingw32" OR ${HOST_ABI} STREQUAL "i686-w64-mingw32")
- set(BOOST_WTF "-mt-sa64")
+ set(BOOST_WTF "-mt-s")
set(BOOST_WTF_DATE_TIME "${BOOST_WTF}")
set(BOOST_WTF_PART "_win32")
elseif(${HOST_ABI} STREQUAL "host-apple-ios")
set(BOOST_WTF "")
set(BOOST_WTF_DATE_TIME "${BOOST_WTF}")
set(BOOST_WTF_PART "")
+elseif(${HOST_ABI} STREQUAL "x86_64-linux-gnu" AND ${MONERO_FLAVOR} STREQUAL "zano")
+ set(BOOST_WTF "-mt-x64")
+ set(BOOST_WTF_DATE_TIME "-mt-s-x64")
+ set(BOOST_WTF_PART "")
else()
set(BOOST_WTF "-mt")
set(BOOST_WTF_DATE_TIME "${BOOST_WTF}")
@@ -470,6 +474,9 @@ if (${MONERO_FLAVOR} STREQUAL "zano")
)
else()
set(API_IMPORTS
+
+ ${EXTRA_LIBS}
+
wallet_api
wallet
cryptonote_core
@@ -486,6 +493,7 @@ else()
easylogging
unbound
crypto
+ ssl
epee
blocks
checkpoints
@@ -500,14 +508,13 @@ else()
polyseed
polyseed-wrapper
utf8proc
+
)
endif()
target_link_libraries( wallet2_api_c
${API_IMPORTS}
-
- ${EXTRA_LIBS}
boost_chrono
boost_locale
diff --git a/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp b/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp
index 87be8ca..b860bbd 100644
--- a/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp
+++ b/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp
@@ -4,6 +4,7 @@
#include <cstring>
#include <thread>
#include "zano_checksum.h"
+#include "../../../../zano/src/wallet/plain_wallet_api.h"
#ifdef __cplusplus
extern "C"
@@ -243,6 +244,10 @@ uint64_t ZANO_PlainWallet_getCurrentTxFee(uint64_t priority) {
}
// }
+void ZANO_free(void* ptr) {
+ free(ptr);
+}
+
const char* ZANO_checksum_wallet2_api_c_h() {
return ZANO_wallet2_api_c_h_sha256;
}
diff --git a/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.h b/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.h
index b08dae7..df6d3ef 100644
--- a/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.h
+++ b/zano_libwallet2_api_c/src/main/cpp/wallet2_api_c.h
@@ -11,7 +11,6 @@
#include <stddef.h>
#include <unistd.h>
#include "zano_checksum.h"
-#include "../../../../zano/src/wallet/plain_wallet_api.h"
#ifdef __cplusplus
extern "C"
@@ -57,6 +56,8 @@ extern ADDAPI const char* ZANO_PlainWallet_getWalletInfo(int64_t h);
extern ADDAPI const char* ZANO_PlainWallet_resetWalletPassword(int64_t h, const char* password);
extern ADDAPI uint64_t ZANO_PlainWallet_getCurrentTxFee(uint64_t priority);
+extern ADDAPI void ZANO_free(void* ptr);
+
extern ADDAPI const char* ZANO_checksum_wallet2_api_c_h();
extern ADDAPI const char* ZANO_checksum_wallet2_api_c_cpp();
extern ADDAPI const char* ZANO_checksum_wallet2_api_c_exp();
diff --git a/zano_libwallet2_api_c/src/main/cpp/zano_checksum.h b/zano_libwallet2_api_c/src/main/cpp/zano_checksum.h
index 4645edf..4651449 100644
--- a/zano_libwallet2_api_c/src/main/cpp/zano_checksum.h
+++ b/zano_libwallet2_api_c/src/main/cpp/zano_checksum.h
@@ -1,6 +1,6 @@
#ifndef MONEROC_CHECKSUMS
#define MONEROC_CHECKSUMS
-const char * ZANO_wallet2_api_c_h_sha256 = "e37ae91020ddb248bcc206678ef9a8e2754f71d498ee0b09a00e5ad070a4d8a7";
-const char * ZANO_wallet2_api_c_cpp_sha256 = "bbcd07c986d29b482a2b3fcbab78f12ecfdce096b8178945fdec0d5b600b315a-59ea01339d958144736b614ab7d5f5e00fdf837b";
-const char * ZANO_wallet2_api_c_exp_sha256 = "78c7d24804c6f5c900ddf901ea101192da356af2e29f83c20226cc291ec9875b";
+const char * ZANO_wallet2_api_c_h_sha256 = "8acaa95513b85a984c08e05cc3f2ac7530bb8f32946eeeb45357bd846aef33dd";
+const char * ZANO_wallet2_api_c_cpp_sha256 = "258e315ccc5f5ffa6d3d6608e9bfd7ac4f3b91b36424ad1633ed4440bf2986bc-59ea01339d958144736b614ab7d5f5e00fdf837b";
+const char * ZANO_wallet2_api_c_exp_sha256 = "66f3ff655bbfd11ad28c318ab707090b5a93276f436b06f7b1c0f329dba3c9c2";
#endif
diff --git a/zano_libwallet2_api_c/zano_libwallet2_api_c.exp b/zano_libwallet2_api_c/zano_libwallet2_api_c.exp
index 14d0792..423922a 100644
--- a/zano_libwallet2_api_c/zano_libwallet2_api_c.exp
+++ b/zano_libwallet2_api_c/zano_libwallet2_api_c.exp
@@ -27,6 +27,7 @@ _ZANO_PlainWallet_isWalletExist
_ZANO_PlainWallet_getWalletInfo
_ZANO_PlainWallet_resetWalletPassword
_ZANO_PlainWallet_getCurrentTxFee
+_ZANO_free
_ZANO_checksum_wallet2_api_c_h
_ZANO_checksum_wallet2_api_c_cpp
_ZANO_checksum_wallet2_api_c_exp \ No newline at end of file