mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-11-16 09:17:37 +00:00
Merge remote-tracking branch 'origin_SW/staging' into add_frost
This commit is contained in:
commit
ef83dbdafa
7 changed files with 647 additions and 560 deletions
2
.github/workflows/test.yaml
vendored
2
.github/workflows/test.yaml
vendored
|
@ -13,7 +13,7 @@ jobs:
|
|||
- name: Install Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: '3.10.6'
|
||||
flutter-version: '3.16.0'
|
||||
channel: 'stable'
|
||||
- name: Setup | Rust
|
||||
uses: ATiltedTree/setup-rust@v1
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 5566f2bdb3d960cbda44e049a2ec11c363053dab
|
||||
Subproject commit c976dcfc7786bbf7091e310eb877f5c685352903
|
File diff suppressed because it is too large
Load diff
|
@ -192,7 +192,8 @@ class Bitcoincash extends Bip39HDCurrency {
|
|||
addr = cashAddr.split(":").last;
|
||||
}
|
||||
|
||||
return addr.startsWith("q") || addr.startsWith("p");
|
||||
return addr.startsWith("q") /*|| addr.startsWith("p")*/;
|
||||
// Do not validate "p" (P2SH) addresses.
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -55,6 +55,7 @@ class MoneroWallet extends CryptonoteWallet with CwBasedInterface {
|
|||
|
||||
@override
|
||||
Future<void> exitCwWallet() async {
|
||||
resetWalletOpenCompleter();
|
||||
(cwWalletBase as MoneroWalletBase?)?.onNewBlock = null;
|
||||
(cwWalletBase as MoneroWalletBase?)?.onNewTransaction = null;
|
||||
(cwWalletBase as MoneroWalletBase?)?.syncStatusChanged = null;
|
||||
|
@ -63,6 +64,8 @@ class MoneroWallet extends CryptonoteWallet with CwBasedInterface {
|
|||
|
||||
@override
|
||||
Future<void> open() async {
|
||||
resetWalletOpenCompleter();
|
||||
|
||||
String? password;
|
||||
try {
|
||||
password = await cwKeysStorage.getWalletPassword(walletName: walletId);
|
||||
|
@ -87,6 +90,8 @@ class MoneroWallet extends CryptonoteWallet with CwBasedInterface {
|
|||
const Duration(seconds: 193),
|
||||
(_) async => await cwWalletBase?.save(),
|
||||
);
|
||||
|
||||
walletOpenCompleter?.complete();
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -152,6 +157,13 @@ class MoneroWallet extends CryptonoteWallet with CwBasedInterface {
|
|||
|
||||
@override
|
||||
Future<void> updateTransactions() async {
|
||||
try {
|
||||
await waitForWalletOpen().timeout(const Duration(seconds: 30));
|
||||
} catch (e, s) {
|
||||
Logging.instance
|
||||
.log("Failed to wait for wallet open: $e\n$s", level: LogLevel.Fatal);
|
||||
}
|
||||
|
||||
await (cwWalletBase as MoneroWalletBase?)?.updateTransactions();
|
||||
final transactions =
|
||||
(cwWalletBase as MoneroWalletBase?)?.transactionHistory?.transactions;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:stackwallet/wallets/crypto_currency/intermediate/cryptonote_currency.dart';
|
||||
import 'package:stackwallet/wallets/models/tx_data.dart';
|
||||
import 'package:stackwallet/wallets/wallet/wallet.dart';
|
||||
|
@ -7,6 +9,20 @@ abstract class CryptonoteWallet<T extends CryptonoteCurrency> extends Wallet<T>
|
|||
with MnemonicInterface<T> {
|
||||
CryptonoteWallet(T currency) : super(currency);
|
||||
|
||||
Completer<void>? walletOpenCompleter;
|
||||
|
||||
void resetWalletOpenCompleter() {
|
||||
if (walletOpenCompleter == null || walletOpenCompleter!.isCompleted) {
|
||||
walletOpenCompleter = Completer<void>();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> waitForWalletOpen() async {
|
||||
if (walletOpenCompleter != null && !walletOpenCompleter!.isCompleted) {
|
||||
await walletOpenCompleter!.future;
|
||||
}
|
||||
}
|
||||
|
||||
// ========== Overrides ======================================================
|
||||
|
||||
@override
|
||||
|
|
|
@ -47,6 +47,8 @@ mixin CwBasedInterface<T extends CryptonoteCurrency> on CryptonoteWallet<T>
|
|||
|
||||
Timer? autoSaveTimer;
|
||||
|
||||
static bool walletOperationWaiting = false;
|
||||
|
||||
Future<String> pathForWalletDir({
|
||||
required String name,
|
||||
required WalletType type,
|
||||
|
@ -244,6 +246,13 @@ mixin CwBasedInterface<T extends CryptonoteCurrency> on CryptonoteWallet<T>
|
|||
|
||||
@override
|
||||
Future<void> updateBalance() async {
|
||||
try {
|
||||
await waitForWalletOpen().timeout(const Duration(seconds: 30));
|
||||
} catch (e, s) {
|
||||
Logging.instance
|
||||
.log("Failed to wait for wallet open: $e\n$s", level: LogLevel.Fatal);
|
||||
}
|
||||
|
||||
final total = await totalBalance;
|
||||
final available = await availableBalance;
|
||||
|
||||
|
@ -300,6 +309,7 @@ mixin CwBasedInterface<T extends CryptonoteCurrency> on CryptonoteWallet<T>
|
|||
@override
|
||||
Future<void> exit() async {
|
||||
if (!_hasCalledExit) {
|
||||
resetWalletOpenCompleter();
|
||||
_hasCalledExit = true;
|
||||
autoSaveTimer?.cancel();
|
||||
await exitCwWallet();
|
||||
|
|
Loading…
Reference in a new issue