feat: add Zano support to Open CryptoPay (#2475)

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

Konstantin Ullrich committed Aug 22, 2025 at 13:50 UTC 7d67d2ffc7f8b5537b780612a365d7b73fb9e2a1
2 files changed +8 -11
cw_zano/lib/model/pending_zano_transaction.dart
+1 -1
@@ -44,7 +44,7 @@ class PendingZanoTransaction with PendingTransaction {
44
45 @override
46 Future<void> commit() async {
47 - await zanoWallet.transfer(destinations, fee, comment);
47 + transferResult = await zanoWallet.transfer(destinations, fee, comment);
48 zanoWallet.fetchTransactions();
49 }
50
lib/core/open_crypto_pay/open_cryptopay_service.dart
+7 -10
@@ -13,7 +13,8 @@ class OpenCryptoPayService {
13 value.toLowerCase().startsWith("lnurl");
14
15 static bool requiresClientCommit(CryptoCurrency currency) =>
16 - [CryptoCurrency.xmr, CryptoCurrency.sol].contains(currency) || currency.tag == "SOL";
16 + [CryptoCurrency.xmr, CryptoCurrency.zano, CryptoCurrency.sol].contains(currency) ||
17 + currency.tag == "SOL";
18
19 Future<String> commitOpenCryptoPayRequest(
20 String txHex, {
@@ -28,12 +29,11 @@ class OpenCryptoPayService {
29 queryParams['quote'] = request.quote;
30 queryParams['asset'] = asset.title;
31 queryParams['method'] = _getMethod(asset);
31 - queryParams['hex'] = txHex;
32 queryParams['tx'] = txId;
33 + if (txHex.isNotEmpty) queryParams['hex'] = txHex;
34
35 final response =
36 await ProxyWrapper().get(clearnetUri: Uri.https(uri.authority, uri.path, queryParams));
36 -
37
38 if (response.statusCode == 200) {
39 final body = jsonDecode(response.body) as Map;
@@ -76,7 +76,6 @@ class OpenCryptoPayService {
76 Future<(_OpenCryptoPayQuote, Map<String, List<OpenCryptoPayQuoteAsset>>)>
77 _getOpenCryptoPayParams(Uri uri) async {
78 final response = await ProxyWrapper().get(clearnetUri: uri);
79 -
79
80 if (response.statusCode == 200) {
81 final responseBody = jsonDecode(response.body) as Map;
@@ -122,8 +121,8 @@ class OpenCryptoPayService {
121 queryParams['asset'] = asset.title;
122 queryParams['method'] = _getMethod(asset);
123
125 - final response = await ProxyWrapper().get(clearnetUri: Uri.https(uri.authority, uri.path, queryParams));
126 -
124 + final response =
125 + await ProxyWrapper().get(clearnetUri: Uri.https(uri.authority, uri.path, queryParams));
126
127 if (response.statusCode == 200) {
128 final responseBody = jsonDecode(response.body) as Map;
@@ -181,11 +180,9 @@ class _OpenCryptoPayQuote {
180 final String id;
181 final DateTime expiration;
182
184 - _OpenCryptoPayQuote(
185 - this.callbackUrl, this.displayName, this.id, this.expiration);
183 + _OpenCryptoPayQuote(this.callbackUrl, this.displayName, this.id, this.expiration);
184
187 - _OpenCryptoPayQuote.fromJson(
188 - this.callbackUrl, this.displayName, Map<String, dynamic> json)
185 + _OpenCryptoPayQuote.fromJson(this.callbackUrl, this.displayName, Map<String, dynamic> json)
186 : id = json['id'] as String,
187 expiration = DateTime.parse(json['expiration'] as String);
188 }