mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-03-12 09:32:33 +00:00
fix: inconsistent connection states, fix tx history
This commit is contained in:
parent
0777db81c7
commit
65d6a890d0
3 changed files with 25 additions and 16 deletions
|
@ -64,7 +64,8 @@ class ElectrumClient {
|
|||
} catch (_) {}
|
||||
|
||||
if (useSSL == true) {
|
||||
socket = await SecureSocket.connect(host, port, timeout: connectionTimeout);
|
||||
socket = await SecureSocket.connect(host, port,
|
||||
timeout: connectionTimeout, onBadCertificate: (_) => true);
|
||||
} else {
|
||||
socket = await Socket.connect(host, port, timeout: connectionTimeout);
|
||||
}
|
||||
|
@ -418,7 +419,9 @@ class ElectrumClient {
|
|||
|
||||
Future<void> close() async {
|
||||
_aliveTimer?.cancel();
|
||||
await socket?.close();
|
||||
try {
|
||||
await socket?.close();
|
||||
} catch (_) {}
|
||||
onConnectionStatusChange = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -158,6 +158,8 @@ class ElectrumTransactionInfo extends TransactionInfo {
|
|||
}
|
||||
|
||||
factory ElectrumTransactionInfo.fromJson(Map<String, dynamic> data, WalletType type) {
|
||||
final inputAddresses = data['inputAddresses'] as List<dynamic>;
|
||||
final outputAddresses = data['outputAddresses'] as List<dynamic>;
|
||||
return ElectrumTransactionInfo(
|
||||
type,
|
||||
id: data['id'] as String,
|
||||
|
@ -168,8 +170,10 @@ class ElectrumTransactionInfo extends TransactionInfo {
|
|||
date: DateTime.fromMillisecondsSinceEpoch(data['date'] as int),
|
||||
isPending: data['isPending'] as bool,
|
||||
confirmations: data['confirmations'] as int,
|
||||
inputAddresses: data['inputAddresses'] as List<String>,
|
||||
outputAddresses: data['outputAddresses'] as List<String>,
|
||||
inputAddresses:
|
||||
inputAddresses.isEmpty ? [] : inputAddresses.map((e) => e.toString()).toList(),
|
||||
outputAddresses:
|
||||
outputAddresses.isEmpty ? [] : outputAddresses.map((e) => e.toString()).toList(),
|
||||
to: data['to'] as String?,
|
||||
unspents: data['unspents'] != null
|
||||
? (data['unspents'] as List<dynamic>)
|
||||
|
|
|
@ -322,31 +322,32 @@ abstract class ElectrumWalletBase
|
|||
Node? node;
|
||||
|
||||
@action
|
||||
Future<void> _electrumConnect(Node node, {bool? attemptedReconnect}) async {
|
||||
@override
|
||||
Future<void> connectToNode({required Node node}) async {
|
||||
this.node = node;
|
||||
|
||||
try {
|
||||
syncStatus = ConnectingSyncStatus();
|
||||
await electrumClient.connectToUri(node.uri, useSSL: node.useSSL);
|
||||
|
||||
if (!electrumClient.isConnected) {
|
||||
await electrumClient.close();
|
||||
}
|
||||
|
||||
electrumClient.onConnectionStatusChange = (bool isConnected) async {
|
||||
if (!isConnected) {
|
||||
if (isConnected) {
|
||||
syncStatus = ConnectedSyncStatus();
|
||||
} else if (isConnected == false) {
|
||||
syncStatus = LostConnectionSyncStatus();
|
||||
if (attemptedReconnect == false) {
|
||||
await _electrumConnect(node, attemptedReconnect: true);
|
||||
}
|
||||
}
|
||||
};
|
||||
syncStatus = ConnectedSyncStatus();
|
||||
|
||||
await electrumClient.connectToUri(node.uri, useSSL: node.useSSL);
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
syncStatus = FailedSyncStatus();
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
@override
|
||||
Future<void> connectToNode({required Node node}) => _electrumConnect(node);
|
||||
|
||||
int get _dustAmount => 546;
|
||||
|
||||
bool _isBelowDust(int amount) => amount <= _dustAmount && network != BitcoinNetwork.testnet;
|
||||
|
@ -1420,6 +1421,7 @@ abstract class ElectrumWalletBase
|
|||
Future<void> updateTransactions() async {
|
||||
try {
|
||||
if (_isTransactionUpdating) {
|
||||
_isTransactionUpdating = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1713,7 +1715,7 @@ Future<void> startRefresh(ScanData scanData) async {
|
|||
final electrumClient = await getElectrumConnection();
|
||||
|
||||
final scanningBlockCount =
|
||||
scanData.isSingleScan ? 1 : (scanData.network == BitcoinNetwork.testnet ? 1 : 10);
|
||||
scanData.isSingleScan ? 1 : (scanData.network == BitcoinNetwork.testnet ? 50 : 10);
|
||||
|
||||
Map<String, dynamic>? tweaks;
|
||||
try {
|
||||
|
|
Loading…
Reference in a new issue