mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-29 06:38:45 +01:00
Zano with passphrase (#1971)
* CW-685 Add passphrase restore for xmr/wow (#1552) * CW-685 Add passphrase restore for xmr/wow * add support for polyseed passphrase * disable 14 word seed passphrase (not supported in wownero-seed) fix: Getting grayed screen on latest passphrase build after having restored a 14-word wownero seed (+passphrase) and attempting to restore a XMR seed, legacy or otherwise. * fix pointer when restoring depracated wownero seed * Fix polyseed encryption * changes from review * remove unused code * add passphrase back to the screen add passphrase to qr code backup export * fix settings leaking through currencies on seed restore * fix monero.com builds, make passphrase a getter on WalletBase * add support for weird polyseed * store passphrase for weird polyseed * show encrypted seed only when passphrase is not empty * force set restore height * fix build issues * fix build errors * fix configure script * print -> printV * Update lib/view_model/wallet_keys_view_model.dart [skip ci] * Update lib/view_model/wallet_keys_view_model.dart [skip ci] * Update tool/configure.dart [skip ci] * Update lib/view_model/wallet_new_vm.dart * reuse existing passphrase field * remove unused passphrase field * make workflow run on pullrequests only [skip ci] [skip slack] --------- Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * Zano (#1793) * my experiments * Inital code for Zano integration * Added missing android log lib * added dummy wallet & some zano implementation * fixing api for zano * fixed zano build script * attempt tp fix namespace problem * added copy script for Zano files * changes for zano wallet * last updates * zano.dart test app * wallet recovery * added pending transfer, some cleanup of unused * some cleanup * send + receive qr code * last upd * updated build_zano.sh * updated zano ApiCalls, removed dummy * updated zano ApiCalls, removed dummy * added logging for get status/get info * restored old wallet.dart * restoring original versions of files * restoring original versions of files * restored get_height_by_date.dart, removed unnecessary calls for zano get height * restoring original versions * added multiple destinations, send all flag; some refactoring * logging * removed the duplicate * fixed syncing sync status, decimal division, safe null json parsing * some fixes after merge * added multibalance/asset support for zano (ui) * adding/removing from whitelist * transfers in different assets * transfers for multiple destinations and send all, some refactoring * whitelists, some refactoring * added different digits (decimal points) for formatters, some refactoring * open, create, restore wallet refactoring; whitelists * whitelists * getting and updating transaction list; restoring a wallet from QR code * several attempts to close wallet * some refactoring * added seed phrase * changed fields to BigInt, some fixes * modified build scripts for android * build scripts * restored accidently removed cw_haven.dart * inital ios integration(zano libs built) * update in script * latest changes * Applied a patch for iOS build (Boost and Zano scripts) * Removed zano.dart (script-generated) and some unnecessary files * Revert "Removed zano.dart (script-generated) and some unnecessary files" This reverts commit 367c86398ef2616006a2cbd2339ef2f30ed2800e. * Removed zano.dart (generated by scripts), some files restored to initial versions * added timer library * changed paths in build_zano.sh * build_zano.sh * edit_token_page.dart - removed flag skipZanoAddressValidation Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * lib/core/address_validator.dart - updated zano address regex lib/src/screens/dashboard/edit_token_page.dart - using AddressValidator().call * fix zano build issues on android * remove contrib/depends to save space * move async call to a synchronouse one * call sync call in isolate to make it async generate framework for iOS as well fix UR issues * zano changes from monero_c repo * update monero_c hash * fix invalid zano imports, add support for linux, speed up CI builds * update monero_c hash * bump monero_c commit (yes, again, I know) * fix wallet resttore, fix hardcoded IP * fix regex, don't throw error when opening wallet, fix tx history, fix async calls, move stuff to isolate * fix api calls in async transaction creation * update build scripts * fix some build issues * update dependencies * fix dependencies * update ci scripts * Improve multithread use of zano api * Fix build issue * fix zano node selection, move other zano calls to separate isolate * update moneroc hash WIP fixes for zano * update monero_c * fix monero.com builds * sync wallet after connecting * update monero_c * Fix windows builds * update monero_c * update monero_c * unshallow submodule * cherry pick CW-867 Wownero fixes (#1881) * fix wownero syntax error * remove print statements in zano * update zano node URL * [PATCH] Apply new CI script (https://github.com/cake-tech/cake_wallet/pull/1948) * drop env -i to fix cmake build errors on newer system * [skip ci] Revert "[PATCH] Apply new CI script (https://github.com/cake-tech/cake_wallet/pull/1948)" This reverts commit 5acb5bfe57c4b2aeb7aa40bd684a3319a68f98bc. * [run tests] [skip slack] Fix env in build * Dynamically detect number of cores used to build monero_c, since it appears that zano requires more memory to link (and it reliably fails for first couple builds due to OOM on CI/VM with memory constrains). Drop unshallowing of all modules [run tests] * Changes from review [run tests] * drop zano on linux (missing symbols) fix wownero on linux add aarch64-linux-gnu [run tests] * - remove duplicate entry in addToken() - use walletPassword in createZanoNewWalletCredentials - remove createZanoRestoreWalletFromKeysCredentials [run tests] * [skip ci] update dockerfile * fix parameter issue --------- Co-authored-by: leo <leonid.ivanov@gmail.com> Co-authored-by: cr.zoidberg <crypto.zoidberg@gmail.com> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * - Add Zano Aliases - Enable simpleswap [skip ci] - Fix settings migration versions * push missing file [skip ci] * Zano pr with CW-685 passphrase (#1969) * my experiments * Inital code for Zano integration * Added missing android log lib * added dummy wallet & some zano implementation * fixing api for zano * fixed zano build script * attempt tp fix namespace problem * added copy script for Zano files * changes for zano wallet * last updates * zano.dart test app * wallet recovery * added pending transfer, some cleanup of unused * some cleanup * send + receive qr code * last upd * updated build_zano.sh * updated zano ApiCalls, removed dummy * updated zano ApiCalls, removed dummy * added logging for get status/get info * restored old wallet.dart * restoring original versions of files * restoring original versions of files * restored get_height_by_date.dart, removed unnecessary calls for zano get height * restoring original versions * added multiple destinations, send all flag; some refactoring * logging * removed the duplicate * fixed syncing sync status, decimal division, safe null json parsing * some fixes after merge * added multibalance/asset support for zano (ui) * adding/removing from whitelist * transfers in different assets * transfers for multiple destinations and send all, some refactoring * whitelists, some refactoring * added different digits (decimal points) for formatters, some refactoring * open, create, restore wallet refactoring; whitelists * whitelists * getting and updating transaction list; restoring a wallet from QR code * several attempts to close wallet * some refactoring * added seed phrase * CW-685 Add passphrase restore for xmr/wow * add support for polyseed passphrase * disable 14 word seed passphrase (not supported in wownero-seed) fix: Getting grayed screen on latest passphrase build after having restored a 14-word wownero seed (+passphrase) and attempting to restore a XMR seed, legacy or otherwise. * fix pointer when restoring depracated wownero seed * Fix polyseed encryption * changed fields to BigInt, some fixes * modified build scripts for android * build scripts * restored accidently removed cw_haven.dart * inital ios integration(zano libs built) * update in script * latest changes * changes from review * remove unused code * add passphrase back to the screen add passphrase to qr code backup export * fix settings leaking through currencies on seed restore * fix monero.com builds, make passphrase a getter on WalletBase * add support for weird polyseed * store passphrase for weird polyseed * show encrypted seed only when passphrase is not empty * force set restore height * Applied a patch for iOS build (Boost and Zano scripts) * Removed zano.dart (script-generated) and some unnecessary files * Revert "Removed zano.dart (script-generated) and some unnecessary files" This reverts commit 367c86398ef2616006a2cbd2339ef2f30ed2800e. * Removed zano.dart (generated by scripts), some files restored to initial versions * fix build issues * fix build errors * added timer library * changed paths in build_zano.sh * build_zano.sh * edit_token_page.dart - removed flag skipZanoAddressValidation Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * lib/core/address_validator.dart - updated zano address regex lib/src/screens/dashboard/edit_token_page.dart - using AddressValidator().call * fix zano build issues on android * remove contrib/depends to save space * move async call to a synchronouse one * call sync call in isolate to make it async generate framework for iOS as well fix UR issues * zano changes from monero_c repo * update monero_c hash * fix invalid zano imports, add support for linux, speed up CI builds * update monero_c hash * bump monero_c commit (yes, again, I know) * fix wallet resttore, fix hardcoded IP * fix regex, don't throw error when opening wallet, fix tx history, fix async calls, move stuff to isolate * fix api calls in async transaction creation * fix configure script * update build scripts * fix some build issues * update dependencies * fix dependencies * update ci scripts * Improve multithread use of zano api * Fix build issue * fix zano node selection, move other zano calls to separate isolate * update moneroc hash WIP fixes for zano * update monero_c * fix monero.com builds * sync wallet after connecting * update monero_c * Fix windows builds * update monero_c * print -> printV * update monero_c * unshallow submodule * cherry pick CW-867 Wownero fixes (#1881) * fix wownero syntax error * remove print statements in zano * update zano node URL * [PATCH] Apply new CI script (https://github.com/cake-tech/cake_wallet/pull/1948) * drop env -i to fix cmake build errors on newer system * Update lib/view_model/wallet_keys_view_model.dart [skip ci] * Update lib/view_model/wallet_keys_view_model.dart [skip ci] * Update tool/configure.dart [skip ci] * Update lib/view_model/wallet_new_vm.dart * [skip ci] Revert "[PATCH] Apply new CI script (https://github.com/cake-tech/cake_wallet/pull/1948)" This reverts commit 5acb5bfe57c4b2aeb7aa40bd684a3319a68f98bc. * [run tests] [skip slack] Fix env in build * Dynamically detect number of cores used to build monero_c, since it appears that zano requires more memory to link (and it reliably fails for first couple builds due to OOM on CI/VM with memory constrains). Drop unshallowing of all modules [run tests] * Changes from review [run tests] * drop zano on linux (missing symbols) fix wownero on linux add aarch64-linux-gnu [run tests] * - remove duplicate entry in addToken() - use walletPassword in createZanoNewWalletCredentials - remove createZanoRestoreWalletFromKeysCredentials [run tests] * [skip ci] update dockerfile * reuse existing passphrase field * add passphrase support for zano * Drop aarch64-linux-gnu for now. * fix passphrase display, fix gray screen * catch errors in polyseed encryption, encrypt only polyseed, fix coin in wownero * update monero_c update wownero to 0.11.3.0 * Show passphrase only when non-empty, fix passphrase being displayed as view key private. * fix NanoAccountListPage showing up instead of MoneroAccountListPage for wownero * build zano dependencies on android * fix parameter issue * minor merge leftover [skip ci] * minor cleanup [skip ci] * fix zano alias update eth url for ens lookup change $MAKE_JOB_COUNT to $NPROC * minor cleanup [skip ci] * fix zano alias * Disable passphrase for creation of xmr/wow/zano minor fixes * fix zano on iOS * - Fix get token data - Enable unavailable balance - Enable confirmations count - Adjust explorer link --------- Co-authored-by: leo <leonid.ivanov@gmail.com> Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com> Co-authored-by: cr.zoidberg <crypto.zoidberg@gmail.com> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> --------- Co-authored-by: cyan <cyjan@mrcyjanek.net> Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com> Co-authored-by: leo <leonid.ivanov@gmail.com> Co-authored-by: cr.zoidberg <crypto.zoidberg@gmail.com>
This commit is contained in:
co-authored by
leo
Konstantin Ullrich
cr.zoidberg
cyan
parent
9cda2c99e7
commit
df3a26dc15
@@ -54,11 +54,11 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
|
||||
case WalletType.wownero:
|
||||
case WalletType.none:
|
||||
case WalletType.haven:
|
||||
case WalletType.zano:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool get isMoneroSeedTypeOptionsEnabled => [
|
||||
WalletType.monero,
|
||||
WalletType.wownero,
|
||||
@@ -71,13 +71,16 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
|
||||
|
||||
bool get isNanoSeedTypeOptionsEnabled => [WalletType.nano].contains(type);
|
||||
|
||||
bool get hasPassphraseOption => [
|
||||
bool hasPassphraseOption(bool isRestore) => [
|
||||
WalletType.bitcoin,
|
||||
WalletType.litecoin,
|
||||
WalletType.bitcoinCash,
|
||||
WalletType.ethereum,
|
||||
WalletType.polygon,
|
||||
WalletType.tron,
|
||||
if (isRestore) WalletType.monero,
|
||||
if (isRestore) WalletType.wownero,
|
||||
if (isRestore) WalletType.zano,
|
||||
].contains(type);
|
||||
|
||||
@computed
|
||||
|
||||
@@ -111,7 +111,8 @@ abstract class BalanceViewModelBase with Store {
|
||||
bool get isHomeScreenSettingsEnabled =>
|
||||
isEVMCompatibleChain(wallet.type) ||
|
||||
wallet.type == WalletType.solana ||
|
||||
wallet.type == WalletType.tron;
|
||||
wallet.type == WalletType.tron ||
|
||||
wallet.type == WalletType.zano;
|
||||
|
||||
@computed
|
||||
bool get hasAccounts => wallet.type == WalletType.monero || wallet.type == WalletType.wownero;
|
||||
@@ -306,6 +307,7 @@ abstract class BalanceViewModelBase with Store {
|
||||
switch (type) {
|
||||
case WalletType.monero:
|
||||
case WalletType.wownero:
|
||||
case WalletType.zano:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:cake_wallet/solana/solana.dart';
|
||||
import 'package:cake_wallet/store/settings_store.dart';
|
||||
import 'package:cake_wallet/tron/tron.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/erc20_token.dart';
|
||||
import 'package:cw_core/utils/print_verbose.dart';
|
||||
@@ -39,6 +40,8 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
|
||||
final ObservableSet<CryptoCurrency> tokens;
|
||||
|
||||
WalletType get walletType => _balanceViewModel.wallet.type;
|
||||
|
||||
@observable
|
||||
bool isAddingToken;
|
||||
|
||||
@@ -108,6 +111,10 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
await tron!.addTronToken(_balanceViewModel.wallet, token, contractAddress);
|
||||
}
|
||||
|
||||
if (_balanceViewModel.wallet.type == WalletType.zano) {
|
||||
await zano!.addZanoAssetById(_balanceViewModel.wallet, contractAddress);
|
||||
}
|
||||
|
||||
_updateTokensList();
|
||||
_updateFiatPrices(token);
|
||||
} finally {
|
||||
@@ -134,6 +141,9 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
if (_balanceViewModel.wallet.type == WalletType.tron) {
|
||||
await tron!.deleteTronToken(_balanceViewModel.wallet, token);
|
||||
}
|
||||
if (_balanceViewModel.wallet.type == WalletType.zano) {
|
||||
await zano!.deleteZanoAsset(_balanceViewModel.wallet, token);
|
||||
}
|
||||
_updateTokensList();
|
||||
} finally {
|
||||
isDeletingToken = false;
|
||||
@@ -340,6 +350,10 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
return await tron!.getTronToken(_balanceViewModel.wallet, contractAddress);
|
||||
}
|
||||
|
||||
if (_balanceViewModel.wallet.type == WalletType.zano) {
|
||||
return await zano!.getZanoAsset(_balanceViewModel.wallet, contractAddress);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -378,6 +392,10 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
tron!.addTronToken(_balanceViewModel.wallet, token, address);
|
||||
}
|
||||
|
||||
if (_balanceViewModel.wallet.type == WalletType.zano) {
|
||||
await zano!.changeZanoAssetAvailability(_balanceViewModel.wallet, token);
|
||||
}
|
||||
|
||||
_refreshTokensList();
|
||||
}
|
||||
|
||||
@@ -432,6 +450,13 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
.toList()
|
||||
..sort(_sortFunc));
|
||||
}
|
||||
|
||||
if (_balanceViewModel.wallet.type == WalletType.zano) {
|
||||
tokens.addAll(zano!.getZanoAssets(_balanceViewModel.wallet)
|
||||
.where((element) => _matchesSearchText(element))
|
||||
.toList()
|
||||
..sort(_sortFunc));
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
@@ -476,6 +501,10 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||
return polygon!.getTokenAddress(asset);
|
||||
}
|
||||
|
||||
if (_balanceViewModel.wallet.type == WalletType.zano) {
|
||||
return zano!.getZanoAssetAddress(asset);
|
||||
}
|
||||
|
||||
// We return null if it's neither Tron, Polygon, Ethereum or Solana wallet (which is actually impossible because we only display home settings for either of these three wallets).
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:cake_wallet/reactions/wallet_connect.dart';
|
||||
import 'package:cake_wallet/solana/solana.dart';
|
||||
import 'package:cake_wallet/tron/tron.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/transaction_direction.dart';
|
||||
import 'package:cw_core/transaction_info.dart';
|
||||
@@ -63,6 +64,7 @@ class TransactionListItem extends ActionListItem with Keyable {
|
||||
switch (balanceViewModel.wallet.type) {
|
||||
case WalletType.monero:
|
||||
case WalletType.haven:
|
||||
case WalletType.zano:
|
||||
if (transaction.confirmations >= 0 && transaction.confirmations < 10) {
|
||||
return ' (${transaction.confirmations}/10)';
|
||||
}
|
||||
@@ -201,7 +203,6 @@ class TransactionListItem extends ActionListItem with Keyable {
|
||||
price: price,
|
||||
);
|
||||
break;
|
||||
|
||||
case WalletType.tron:
|
||||
final asset = tron!.assetOfTransaction(balanceViewModel.wallet, transaction);
|
||||
final price = balanceViewModel.fiatConvertationStore.prices[asset];
|
||||
@@ -211,6 +212,13 @@ class TransactionListItem extends ActionListItem with Keyable {
|
||||
price: price,
|
||||
);
|
||||
break;
|
||||
case WalletType.zano:
|
||||
final asset = zano!.assetOfTransaction(balanceViewModel.wallet, transaction);
|
||||
final price = balanceViewModel.fiatConvertationStore.prices[asset];
|
||||
amount = calculateFiatAmountRaw(
|
||||
cryptoAmount: zano!.formatterIntAmountToDouble(amount: transaction.amount, currency: asset, forFee: false),
|
||||
price: price);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -311,6 +311,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
case WalletType.monero:
|
||||
case WalletType.wownero:
|
||||
case WalletType.haven:
|
||||
case WalletType.zano:
|
||||
return transactionPriority == monero!.getMoneroTransactionPrioritySlow();
|
||||
case WalletType.bitcoin:
|
||||
return transactionPriority == bitcoin!.getBitcoinTransactionPrioritySlow();
|
||||
@@ -750,6 +751,10 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
depositCurrency = CryptoCurrency.wow;
|
||||
receiveCurrency = CryptoCurrency.xmr;
|
||||
break;
|
||||
case WalletType.zano:
|
||||
depositCurrency = CryptoCurrency.zano;
|
||||
receiveCurrency = CryptoCurrency.xmr;
|
||||
break;
|
||||
case WalletType.none:
|
||||
break;
|
||||
}
|
||||
@@ -824,6 +829,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
case WalletType.monero:
|
||||
case WalletType.haven:
|
||||
case WalletType.wownero:
|
||||
case WalletType.zano:
|
||||
_settingsStore.priority[wallet.type] = monero!.getMoneroTransactionPriorityAutomatic();
|
||||
break;
|
||||
case WalletType.bitcoin:
|
||||
|
||||
@@ -85,6 +85,7 @@ abstract class NodeCreateOrEditViewModelBase with Store {
|
||||
case WalletType.litecoin:
|
||||
case WalletType.bitcoinCash:
|
||||
case WalletType.bitcoin:
|
||||
case WalletType.zano:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,9 @@ abstract class NodeListViewModelBase with Store {
|
||||
case WalletType.wownero:
|
||||
node = getWowneroDefaultNode(nodes: _nodeSource);
|
||||
break;
|
||||
case WalletType.zano:
|
||||
node = getZanoDefaultNode(nodes: _nodeSource)!;
|
||||
break;
|
||||
default:
|
||||
throw Exception('Unexpected wallet type: ${_appStore.wallet!.type}');
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import 'package:cake_wallet/view_model/restore/restore_mode.dart';
|
||||
import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
|
||||
import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/monero/monero.dart';
|
||||
@@ -110,6 +111,7 @@ abstract class WalletRestorationFromQRVMBase extends WalletCreationVM with Store
|
||||
height: restoreWallet.height ?? 0,
|
||||
mnemonic: restoreWallet.mnemonicSeed ?? '',
|
||||
password: password,
|
||||
passphrase: restoreWallet.passphrase ?? '',
|
||||
);
|
||||
case WalletType.bitcoin:
|
||||
case WalletType.litecoin:
|
||||
@@ -180,6 +182,15 @@ abstract class WalletRestorationFromQRVMBase extends WalletCreationVM with Store
|
||||
height: restoreWallet.height ?? 0,
|
||||
mnemonic: restoreWallet.mnemonicSeed ?? '',
|
||||
password: password,
|
||||
passphrase: restoreWallet.passphrase ?? '',
|
||||
);
|
||||
case WalletType.zano:
|
||||
return zano!.createZanoRestoreWalletFromSeedCredentials(
|
||||
name: name,
|
||||
password: password,
|
||||
height: height,
|
||||
mnemonic: restoreWallet.mnemonicSeed ?? '',
|
||||
passphrase: restoreWallet.passphrase ?? '',
|
||||
);
|
||||
default:
|
||||
throw Exception('Unexpected type: ${type.toString()}');
|
||||
|
||||
@@ -41,6 +41,9 @@ class WalletRestoreFromQRCode {
|
||||
'wownero': WalletType.wownero,
|
||||
'wownero-wallet': WalletType.wownero,
|
||||
'wownero_wallet': WalletType.wownero,
|
||||
'zano': WalletType.zano,
|
||||
'zano-wallet': WalletType.zano,
|
||||
'zano_wallet': WalletType.zano,
|
||||
};
|
||||
|
||||
static bool _containsAssetSpecifier(String code) => _extractWalletType(code) != null;
|
||||
|
||||
@@ -10,6 +10,7 @@ import 'package:cake_wallet/solana/solana.dart';
|
||||
import 'package:cake_wallet/src/screens/send/widgets/extract_address_from_parsed.dart';
|
||||
import 'package:cake_wallet/tron/tron.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/utils/print_verbose.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -112,6 +113,9 @@ abstract class OutputBase with Store {
|
||||
case WalletType.wownero:
|
||||
_amount = wownero!.formatterWowneroParseAmount(amount: _cryptoAmount);
|
||||
break;
|
||||
case WalletType.zano:
|
||||
_amount = zano!.formatterParseAmount(amount: _cryptoAmount, currency: cryptoCurrencyHandler());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -180,6 +184,10 @@ abstract class OutputBase with Store {
|
||||
if (_wallet.type == WalletType.polygon) {
|
||||
return polygon!.formatterPolygonAmountToDouble(amount: BigInt.from(fee));
|
||||
}
|
||||
|
||||
if (_wallet.type == WalletType.zano) {
|
||||
return zano!.formatterIntAmountToDouble(amount: fee, currency: cryptoCurrencyHandler(), forFee: true);
|
||||
}
|
||||
} catch (e) {
|
||||
printV(e.toString());
|
||||
}
|
||||
@@ -308,6 +316,9 @@ abstract class OutputBase with Store {
|
||||
case WalletType.wownero:
|
||||
maximumFractionDigits = 11;
|
||||
break;
|
||||
case WalletType.zano:
|
||||
maximumFractionDigits = 12;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart';
|
||||
import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart';
|
||||
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cw_core/exceptions.dart';
|
||||
import 'package:cw_core/transaction_info.dart';
|
||||
import 'package:cw_core/transaction_priority.dart';
|
||||
@@ -61,7 +62,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
|
||||
selectedCryptoCurrency = wallet.currency;
|
||||
hasMultipleTokens = isEVMCompatibleChain(wallet.type) ||
|
||||
wallet.type == WalletType.solana ||
|
||||
wallet.type == WalletType.tron;
|
||||
wallet.type == WalletType.tron ||
|
||||
wallet.type == WalletType.zano;
|
||||
}
|
||||
|
||||
UnspentCoinsListViewModel unspentCoinsListViewModel;
|
||||
@@ -81,7 +83,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
|
||||
selectedCryptoCurrency = appStore.wallet!.currency,
|
||||
hasMultipleTokens = isEVMCompatibleChain(appStore.wallet!.type) ||
|
||||
appStore.wallet!.type == WalletType.solana ||
|
||||
appStore.wallet!.type == WalletType.tron,
|
||||
appStore.wallet!.type == WalletType.tron ||
|
||||
appStore.wallet!.type == WalletType.zano,
|
||||
outputs = ObservableList<Output>(),
|
||||
_settingsStore = appStore.settingsStore,
|
||||
fiatFromSettings = appStore.settingsStore.fiatCurrency,
|
||||
@@ -576,6 +579,9 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
|
||||
.createSolanaTransactionCredentials(outputs, currency: selectedCryptoCurrency);
|
||||
case WalletType.tron:
|
||||
return tron!.createTronTransactionCredentials(outputs, currency: selectedCryptoCurrency);
|
||||
case WalletType.zano:
|
||||
return zano!.createZanoTransactionCredentials(
|
||||
outputs: outputs, priority: priority!, currency: selectedCryptoCurrency);
|
||||
default:
|
||||
throw Exception('Unexpected wallet type: ${wallet.type}');
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||
import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
|
||||
import 'package:cake_wallet/entities/exchange_api_mode.dart';
|
||||
import 'package:cake_wallet/ethereum/ethereum.dart';
|
||||
@@ -79,6 +78,9 @@ abstract class PrivacySettingsViewModelBase with Store {
|
||||
@computed
|
||||
bool get lookupTwitter => _settingsStore.lookupsTwitter;
|
||||
|
||||
@computed
|
||||
bool get lookupsZanoAlias => _settingsStore.lookupsZanoAlias;
|
||||
|
||||
@computed
|
||||
bool get looksUpMastodon => _settingsStore.lookupsMastodon;
|
||||
|
||||
@@ -127,6 +129,9 @@ abstract class PrivacySettingsViewModelBase with Store {
|
||||
@action
|
||||
void setLookupsTwitter(bool value) => _settingsStore.lookupsTwitter = value;
|
||||
|
||||
@action
|
||||
void setLookupsZanoAlias(bool value) => _settingsStore.lookupsZanoAlias = value;
|
||||
|
||||
@action
|
||||
void setLookupsMastodon(bool value) => _settingsStore.lookupsMastodon = value;
|
||||
|
||||
|
||||
@@ -81,6 +81,9 @@ abstract class TransactionDetailsViewModelBase with Store {
|
||||
case WalletType.wownero:
|
||||
_addWowneroListItems(tx, dateFormat);
|
||||
break;
|
||||
case WalletType.zano:
|
||||
_addZanoListItems(tx, dateFormat);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -181,6 +184,8 @@ abstract class TransactionDetailsViewModelBase with Store {
|
||||
return 'https://tronscan.org/#/transaction/${txId}';
|
||||
case WalletType.wownero:
|
||||
return 'https://explore.wownero.com/tx/${txId}';
|
||||
case WalletType.zano:
|
||||
return 'https://explorer.zano.org/transaction/${txId}';
|
||||
case WalletType.none:
|
||||
return '';
|
||||
}
|
||||
@@ -211,6 +216,8 @@ abstract class TransactionDetailsViewModelBase with Store {
|
||||
return S.current.view_transaction_on + 'tronscan.org';
|
||||
case WalletType.wownero:
|
||||
return S.current.view_transaction_on + 'Wownero.com';
|
||||
case WalletType.zano:
|
||||
return S.current.view_transaction_on + 'explorer.zano.org';
|
||||
case WalletType.none:
|
||||
return '';
|
||||
}
|
||||
@@ -776,4 +783,20 @@ abstract class TransactionDetailsViewModelBase with Store {
|
||||
|
||||
items.addAll(_items);
|
||||
}
|
||||
|
||||
void _addZanoListItems(TransactionInfo tx, DateFormat dateFormat) {
|
||||
final comment = tx.additionalInfo['comment'] as String?;
|
||||
items.addAll([
|
||||
StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id),
|
||||
StandartListItem(title: 'Asset ID', value: tx.additionalInfo['assetId'] as String? ?? "Unknown asset id"),
|
||||
StandartListItem(
|
||||
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
|
||||
StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'),
|
||||
StandartListItem(title: S.current.transaction_details_amount, value: tx.amountFormatted()),
|
||||
if (tx.feeFormatted()?.isNotEmpty ?? false)
|
||||
StandartListItem(title: S.current.transaction_details_fee, value: tx.feeFormatted()!),
|
||||
if (comment != null)
|
||||
StandartListItem(title: S.current.transaction_details_title, value: comment),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||
import 'package:cake_wallet/store/settings_store.dart';
|
||||
import 'package:cake_wallet/store/yat/yat_store.dart';
|
||||
import 'package:cake_wallet/tron/tron.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cake_wallet/utils/list_item.dart';
|
||||
import 'package:cake_wallet/view_model/wallet_address_list/wallet_account_list_header.dart';
|
||||
import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_hidden_list_header.dart';
|
||||
@@ -205,6 +206,23 @@ class WowneroURI extends PaymentURI {
|
||||
}
|
||||
}
|
||||
|
||||
class ZanoURI extends PaymentURI {
|
||||
ZanoURI({required String amount, required String address})
|
||||
: super(amount: amount, address: address);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
var base = 'zano:' + address;
|
||||
|
||||
if (amount.isNotEmpty) {
|
||||
base += '?amount=${amount.replaceAll(',', '.')}';
|
||||
}
|
||||
|
||||
return base;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
abstract class WalletAddressListViewModelBase
|
||||
extends WalletChangeListenerViewModel with Store {
|
||||
WalletAddressListViewModelBase({
|
||||
@@ -298,11 +316,12 @@ abstract class WalletAddressListViewModelBase
|
||||
return TronURI(amount: amount, address: address.address);
|
||||
case WalletType.wownero:
|
||||
return WowneroURI(amount: amount, address: address.address);
|
||||
case WalletType.zano:
|
||||
return ZanoURI(amount: amount, address: address.address);
|
||||
case WalletType.none:
|
||||
throw Exception('Unexpected type: ${type.toString()}');
|
||||
}
|
||||
}
|
||||
|
||||
@computed
|
||||
ObservableList<ListItem> get items => ObservableList<ListItem>()
|
||||
..addAll(_baseItems)
|
||||
@@ -479,6 +498,12 @@ abstract class WalletAddressListViewModelBase
|
||||
.contains((addressList[i] as WalletAddressListItem).address);
|
||||
}
|
||||
|
||||
if (wallet.type == WalletType.zano) {
|
||||
final primaryAddress = zano!.getAddress(wallet);
|
||||
|
||||
addressList.add(WalletAddressListItem(isPrimary: true, name: null, address: primaryAddress));
|
||||
}
|
||||
|
||||
if (searchText.isNotEmpty) {
|
||||
return ObservableList.of(addressList.where((item) {
|
||||
if (item is WalletAddressListItem) {
|
||||
|
||||
@@ -6,11 +6,13 @@ import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.d
|
||||
import 'package:cake_wallet/src/widgets/text_info_box.dart';
|
||||
import 'package:cake_wallet/store/app_store.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cw_core/transaction_direction.dart';
|
||||
import 'package:cw_core/transaction_info.dart';
|
||||
import 'package:cw_core/wallet_base.dart';
|
||||
import 'package:cw_core/wallet_type.dart';
|
||||
import 'package:cw_monero/monero_wallet.dart';
|
||||
import 'package:cw_wownero/wownero_wallet.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:polyseed/polyseed.dart';
|
||||
@@ -255,6 +257,12 @@ abstract class WalletKeysViewModelBase with Store {
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
if (_appStore.wallet!.type == WalletType.zano) {
|
||||
items.addAll([
|
||||
StandartListItem(title: S.current.wallet_seed, value: _appStore.wallet!.seed!),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Future<int?> _currentHeight() async {
|
||||
@@ -296,6 +304,8 @@ abstract class WalletKeysViewModelBase with Store {
|
||||
return 'tron-wallet';
|
||||
case WalletType.wownero:
|
||||
return 'wownero-wallet';
|
||||
case WalletType.zano:
|
||||
return 'zano-wallet';
|
||||
default:
|
||||
throw Exception('Unexpected wallet type: ${_wallet.type.toString()}');
|
||||
}
|
||||
@@ -328,7 +338,7 @@ abstract class WalletKeysViewModelBase with Store {
|
||||
return {
|
||||
if (legacySeed.isNotEmpty) 'seed': legacySeed,
|
||||
if (restoreHeightResult != null) ...{'height': restoreHeightResult},
|
||||
if (_wallet.passphrase != null) 'passphrase': _wallet.passphrase!
|
||||
if ((_wallet.passphrase ?? '') != '') 'passphrase': _wallet.passphrase!
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
import 'package:cake_wallet/core/new_wallet_arguments.dart';
|
||||
import 'package:cake_wallet/ethereum/ethereum.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
|
||||
import 'package:cake_wallet/solana/solana.dart';
|
||||
import 'package:cake_wallet/tron/tron.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||
import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
|
||||
import 'package:cake_wallet/core/wallet_creation_service.dart';
|
||||
@@ -152,9 +160,14 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
|
||||
case WalletType.wownero:
|
||||
return wownero!.createWowneroNewWalletCredentials(
|
||||
name: name,
|
||||
password: walletPassword,
|
||||
language: options!.first as String,
|
||||
isPolyseed: options.last as bool,
|
||||
password: walletPassword,
|
||||
);
|
||||
case WalletType.zano:
|
||||
return zano!.createZanoNewWalletCredentials(
|
||||
name: name,
|
||||
password: walletPassword,
|
||||
);
|
||||
case WalletType.none:
|
||||
throw Exception('Unexpected type: ${type.toString()}');
|
||||
|
||||
@@ -15,6 +15,7 @@ import 'package:cake_wallet/view_model/restore/restore_mode.dart';
|
||||
import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
|
||||
import 'package:cake_wallet/view_model/wallet_creation_vm.dart';
|
||||
import 'package:cake_wallet/wownero/wownero.dart';
|
||||
import 'package:cake_wallet/zano/zano.dart';
|
||||
import 'package:cw_core/wallet_base.dart';
|
||||
import 'package:cw_core/wallet_credentials.dart';
|
||||
import 'package:cw_core/wallet_info.dart';
|
||||
@@ -61,6 +62,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||
case WalletType.bitcoin:
|
||||
case WalletType.litecoin:
|
||||
case WalletType.bitcoinCash:
|
||||
case WalletType.zano:
|
||||
case WalletType.none:
|
||||
availableModes = [WalletRestoreMode.seed];
|
||||
break;
|
||||
@@ -97,7 +99,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||
switch (type) {
|
||||
case WalletType.monero:
|
||||
return monero!.createMoneroRestoreWalletFromSeedCredentials(
|
||||
name: name, height: height, mnemonic: seed, password: password);
|
||||
name: name, height: height, mnemonic: seed, password: password, passphrase: passphrase??'');
|
||||
case WalletType.bitcoin:
|
||||
case WalletType.litecoin:
|
||||
return bitcoin!.createBitcoinRestoreWalletFromSeedCredentials(
|
||||
@@ -160,8 +162,16 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
|
||||
name: name,
|
||||
mnemonic: seed,
|
||||
password: password,
|
||||
passphrase: passphrase??'',
|
||||
height: height,
|
||||
);
|
||||
case WalletType.zano:
|
||||
return zano!.createZanoRestoreWalletFromSeedCredentials(
|
||||
name: name,
|
||||
password: password,
|
||||
height: height,
|
||||
passphrase: passphrase??'',
|
||||
mnemonic: seed);
|
||||
case WalletType.none:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user