Merge remote-tracking branch 'origin_SW/staging' into add_frost

This commit is contained in:
julian 2024-01-25 02:21:11 -06:00
commit ef83dbdafa
7 changed files with 647 additions and 560 deletions

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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();