diff --git a/.gitignore b/.gitignore
index 970241189f..c431a7f603 100644
--- a/.gitignore
+++ b/.gitignore
@@ -126,7 +126,7 @@ cw_shared_external/ios/External/
cw_haven/ios/External/
cw_haven/android/.externalNativeBuild/
cw_haven/android/.cxx/
-
+cw_zano/ios/External/
lib/bitcoin/bitcoin.dart
lib/monero/monero.dart
lib/haven/haven.dart
@@ -137,6 +137,7 @@ lib/polygon/polygon.dart
lib/solana/solana.dart
lib/tron/tron.dart
lib/wownero/wownero.dart
+lib/zano/zano.dart
ios/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_180.png
ios/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_120.png
@@ -179,3 +180,5 @@ scripts/monero_c
# iOS generated framework bin
ios/MoneroWallet.framework/MoneroWallet
ios/WowneroWallet.framework/WowneroWallet
+ios/ZanoWallet.framework/ZanoWallet
+*_libwallet2_api_c.dylib
diff --git a/analysis_options.yaml b/analysis_options.yaml
index be68a4f26d..bd35233ba5 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -22,6 +22,7 @@ analyzer:
lib/solana/cw_solana.dart,
lib/tron/cw_tron.dart,
lib/wownero/cw_wownero.dart,
+ lib/zano/cw_zano.dart,
]
language:
strict-casts: true
diff --git a/android/app/src/main/AndroidManifestBase.xml b/android/app/src/main/AndroidManifestBase.xml
index a92f493df3..5a1824a17e 100644
--- a/android/app/src/main/AndroidManifestBase.xml
+++ b/android/app/src/main/AndroidManifestBase.xml
@@ -89,6 +89,9 @@
+
+
+
diff --git a/android/app/src/main/jniLibs/arm64-v8a/libzano_libwallet2_api_c.so b/android/app/src/main/jniLibs/arm64-v8a/libzano_libwallet2_api_c.so
new file mode 120000
index 0000000000..49ddd0f47b
--- /dev/null
+++ b/android/app/src/main/jniLibs/arm64-v8a/libzano_libwallet2_api_c.so
@@ -0,0 +1 @@
+../../../../../../scripts/monero_c/release/zano/aarch64-linux-android_libwallet2_api_c.so
\ No newline at end of file
diff --git a/android/app/src/main/jniLibs/armeabi-v7a/libzano_libwallet2_api_c.so b/android/app/src/main/jniLibs/armeabi-v7a/libzano_libwallet2_api_c.so
new file mode 120000
index 0000000000..43f9b98b2f
--- /dev/null
+++ b/android/app/src/main/jniLibs/armeabi-v7a/libzano_libwallet2_api_c.so
@@ -0,0 +1 @@
+../../../../../../scripts/monero_c/release/zano/armv7a-linux-androideabi_libwallet2_api_c.so
\ No newline at end of file
diff --git a/android/app/src/main/jniLibs/x86_64/libzano_libwallet2_api_c.so b/android/app/src/main/jniLibs/x86_64/libzano_libwallet2_api_c.so
new file mode 120000
index 0000000000..8c37d73c27
--- /dev/null
+++ b/android/app/src/main/jniLibs/x86_64/libzano_libwallet2_api_c.so
@@ -0,0 +1 @@
+../../../../../../scripts/monero_c/release/zano/x86_64-linux-android_libwallet2_api_c.so
\ No newline at end of file
diff --git a/assets/images/zano_icon.png b/assets/images/zano_icon.png
new file mode 100644
index 0000000000..ff3cb023c0
Binary files /dev/null and b/assets/images/zano_icon.png differ
diff --git a/assets/zano_node_list.yml b/assets/zano_node_list.yml
new file mode 100644
index 0000000000..9ee602d82b
--- /dev/null
+++ b/assets/zano_node_list.yml
@@ -0,0 +1,4 @@
+-
+ uri: 37.27.100.59:10500
+ is_default: true
+ useSSL: false
\ No newline at end of file
diff --git a/cw_bitcoin/pubspec.lock b/cw_bitcoin/pubspec.lock
index c65f056bbf..6a8e7d5c4a 100644
--- a/cw_bitcoin/pubspec.lock
+++ b/cw_bitcoin/pubspec.lock
@@ -316,6 +316,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.7.10"
+ decimal:
+ dependency: transitive
+ description:
+ name: decimal
+ sha256: "24a261d5d5c87e86c7651c417a5dbdf8bcd7080dd592533910e8d0505a279f21"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.3"
encrypt:
dependency: transitive
description:
@@ -797,6 +805,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.2.2"
+ rational:
+ dependency: transitive
+ description:
+ name: rational
+ sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.3"
rxdart:
dependency: "direct main"
description:
diff --git a/cw_core/lib/amount_converter.dart b/cw_core/lib/amount_converter.dart
index 1c5456b07d..71d0cef429 100644
--- a/cw_core/lib/amount_converter.dart
+++ b/cw_core/lib/amount_converter.dart
@@ -1,3 +1,5 @@
+import 'package:decimal/decimal.dart';
+import 'package:decimal/intl.dart';
import 'package:intl/intl.dart';
import 'package:cw_core/crypto_currency.dart';
@@ -43,6 +45,8 @@ class AmountConverter {
case CryptoCurrency.xnzd:
case CryptoCurrency.xusd:
return _moneroAmountToString(amount);
+ case CryptoCurrency.zano:
+ return _moneroAmountToStringUsingDecimals(amount);
default:
return '';
}
@@ -59,4 +63,10 @@ class AmountConverter {
static String _wowneroAmountToString(int amount) => _wowneroAmountFormat
.format(cryptoAmountToDouble(amount: amount, divider: _wowneroAmountDivider));
+
+ static Decimal cryptoAmountToDecimal({required int amount, required int divider}) =>
+ (Decimal.fromInt(amount) / Decimal.fromInt(divider)).toDecimal();
+
+ static String _moneroAmountToStringUsingDecimals(int amount) => _moneroAmountFormat.format(
+ DecimalIntl(cryptoAmountToDecimal(amount: amount, divider: _moneroAmountDivider)));
}
diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart
index 0280bb45af..970f2ebf60 100644
--- a/cw_core/lib/crypto_currency.dart
+++ b/cw_core/lib/crypto_currency.dart
@@ -106,6 +106,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen
CryptoCurrency.usdcTrc20,
CryptoCurrency.tbtc,
CryptoCurrency.wow,
+ CryptoCurrency.zano,
CryptoCurrency.ton,
];
@@ -225,7 +226,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen
static const tbtc = CryptoCurrency(title: 'tBTC', fullName: 'Testnet Bitcoin', raw: 93, name: 'tbtc', iconPath: 'assets/images/tbtc.png', decimals: 8);
static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/wownero_icon.png', decimals: 11);
static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/images/ton_icon.png', decimals: 8);
-
+ static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/images/zano_icon.png', decimals: 12);
static final Map _rawCurrencyMap =
[...all, ...havenCurrencies].fold