mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
Cyjan zec mutex 2 (#3569)
* fix: mutex on zec * refactor: simplify orchard migratable balance checks and update related methods
This commit is contained in:
@@ -81,6 +81,9 @@ abstract class ZcashWalletBase
|
||||
CryptoCurrency.zec: ZcashBalance.zero(),
|
||||
});
|
||||
|
||||
@observable
|
||||
bool _orchardMigratable = false;
|
||||
|
||||
static const int _autoShieldMinSweep = 30000;
|
||||
|
||||
// zkool's migrate::MIN_SD.
|
||||
@@ -1251,22 +1254,7 @@ abstract class ZcashWalletBase
|
||||
return migratable;
|
||||
}
|
||||
|
||||
Future<bool> hasOrchardMigratableBalance() async {
|
||||
|
||||
final (active, migratableOrchard) = await runWithCoin(
|
||||
accountId: accountId,
|
||||
func: (final coin) async => (
|
||||
await zkool_network.isIronwoodActive(c: coin),
|
||||
await _migratableOrchardTotal(coin),
|
||||
),
|
||||
);
|
||||
|
||||
if(!active) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return migratableOrchard > BigInt.zero;
|
||||
}
|
||||
bool hasOrchardMigratableBalance() => _orchardMigratable;
|
||||
|
||||
Future<void> _$autoShield() async {
|
||||
if (syncStatus is! SyncedSyncStatus) {
|
||||
@@ -1449,11 +1437,15 @@ abstract class ZcashWalletBase
|
||||
unavailableAmount = sweepable <= BigInt.from(minSweep) ? BigInt.zero : sweepable;
|
||||
}
|
||||
|
||||
balance[currency] = ZcashBalance(
|
||||
Money(availableAmount, currency),
|
||||
Money(unavailableAmount, currency),
|
||||
frozen: Money.zero(currency),
|
||||
);
|
||||
runInAction(() {
|
||||
_orchardMigratable =
|
||||
ironwoodActive == true && migratableOrchard > BigInt.zero;
|
||||
balance[currency] = ZcashBalance(
|
||||
Money(availableAmount, currency),
|
||||
Money(unavailableAmount, currency),
|
||||
frozen: Money.zero(currency),
|
||||
);
|
||||
});
|
||||
} catch (e, stackTrace) {
|
||||
printV("Balance update error: $e");
|
||||
printV("Stack trace: $stackTrace");
|
||||
@@ -1784,6 +1776,7 @@ abstract class ZcashWalletBase
|
||||
required final int accountId,
|
||||
required final FutureOr<T> Function(zkool_coin.Coin c) func,
|
||||
}) async {
|
||||
await runWithCoinMutex.acquire();
|
||||
var newC = zkool_coin.Coin();
|
||||
newC = await newC.openDatabase(dbFilepath: c.dbFilepath);
|
||||
newC = await newC.setAccount(account: accountId);
|
||||
@@ -1792,7 +1785,6 @@ abstract class ZcashWalletBase
|
||||
|
||||
runWithCoinCount++;
|
||||
printV("run with coin: $runWithCoinCount");
|
||||
await runWithCoinMutex.acquire();
|
||||
try {
|
||||
newC = await newC.setAccount(account: accountId);
|
||||
return await func(newC);
|
||||
|
||||
@@ -96,7 +96,6 @@ abstract class DashboardViewModelBase with Store {
|
||||
isShowFirstYatIntroduction = false,
|
||||
isShowSecondYatIntroduction = false,
|
||||
isShowThirdYatIntroduction = false,
|
||||
isMigratingToIronwood = false,
|
||||
filterItems = [],
|
||||
exchangeFilterItems = [],
|
||||
subname = '',
|
||||
@@ -251,8 +250,6 @@ abstract class DashboardViewModelBase with Store {
|
||||
|
||||
reaction((_) => tradesStore.trades, (_) => tradeMonitor.monitorActiveTrades(wallet.id));
|
||||
|
||||
addZcashMigrationReaction();
|
||||
|
||||
tradeMonitor.monitorActiveTrades(wallet.id);
|
||||
}
|
||||
|
||||
@@ -377,21 +374,9 @@ abstract class DashboardViewModelBase with Store {
|
||||
);
|
||||
}
|
||||
|
||||
@observable
|
||||
ReactionDisposer? zcashMigrationReactionDisposer;
|
||||
|
||||
@action
|
||||
void addZcashMigrationReaction() {
|
||||
zcashMigrationReactionDisposer?.reaction.dispose();
|
||||
zcashMigrationReactionDisposer = null;
|
||||
|
||||
if (wallet.type == WalletType.zcash) {
|
||||
zcashMigrationReactionDisposer = reaction((_) => wallet.balance.values.first, (_) async {
|
||||
isMigratingToIronwood =
|
||||
wallet.type == WalletType.zcash && await zcash!.hasOrchardMigratableBalance(wallet);
|
||||
});
|
||||
}
|
||||
}
|
||||
@computed
|
||||
bool get isMigratingToIronwood =>
|
||||
wallet.type == WalletType.zcash && (zcash?.hasOrchardMigratableBalance(wallet) ?? false);
|
||||
|
||||
@computed
|
||||
bool get isSyncHeavy {
|
||||
@@ -1289,8 +1274,6 @@ abstract class DashboardViewModelBase with Store {
|
||||
name = wallet.name;
|
||||
loadFilterItems();
|
||||
|
||||
addZcashMigrationReaction();
|
||||
|
||||
if (wallet.type == WalletType.monero) {
|
||||
subname = monero!.getCurrentAccount(wallet).label;
|
||||
|
||||
@@ -1572,9 +1555,6 @@ abstract class DashboardViewModelBase with Store {
|
||||
}
|
||||
}
|
||||
|
||||
@observable
|
||||
bool isMigratingToIronwood;
|
||||
|
||||
String getTransactionType(TransactionInfo tx) {
|
||||
if (wallet.type == WalletType.bitcoin) {
|
||||
if (tx.isReplaced == true) return ' (replaced)';
|
||||
|
||||
@@ -223,7 +223,7 @@ class CWZcash extends Zcash {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> hasOrchardMigratableBalance(WalletBase wallet) {
|
||||
bool hasOrchardMigratableBalance(WalletBase wallet) {
|
||||
return (wallet as ZcashWallet).hasOrchardMigratableBalance();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1777,7 +1777,7 @@ abstract class Zcash {
|
||||
bool showMissingFundsCard(WalletBase wallet);
|
||||
Future<void> rescanInternalChange(WalletBase wallet);
|
||||
bool ironwoodActive(WalletAddresses walletAddresses);
|
||||
Future<bool> hasOrchardMigratableBalance(WalletBase wallet);
|
||||
bool hasOrchardMigratableBalance(WalletBase wallet);
|
||||
}
|
||||
""";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user