Merge branch 'xelis' into xelis

This commit is contained in:
Anthony Tritonn 2025-03-20 13:00:16 -07:00 committed by GitHub
commit 302ceaaf1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 77 additions and 73 deletions
crypto_plugins
lib/wallets/wallet

@ -1 +1 @@
Subproject commit 0bb1b1ced6e0d3c66e383698f89825754c692986
Subproject commit 8830be2ba661828d743be12df6f33d560448ed6a

View file

@ -4,9 +4,9 @@ import 'dart:math';
import 'package:isar/isar.dart';
import 'package:mutex/mutex.dart';
import 'package:stack_wallet_backup/generate_password.dart';
import 'package:xelis_dart_sdk/xelis_dart_sdk.dart' as xelis_sdk;
import 'package:xelis_flutter/src/api/wallet.dart' as x_wallet;
import 'package:stack_wallet_backup/generate_password.dart';
import '../../../models/balance.dart';
import '../../../models/isar/models/blockchain_data/address.dart';
@ -181,11 +181,12 @@ class XelisWallet extends LibXelisWallet {
try {
await open();
} catch (_) {
// Logging.instance.log(
// "Exception rethrown from recoverFromMnemonic(): $e\n$s",
// level: LogLevel.Error,
// );
} catch (e, s) {
Logging.instance.e(
"Error rethrown from $runtimeType recover(isRescan: $isRescan)",
error: e,
stackTrace: s,
);
rethrow;
}
}
@ -255,11 +256,12 @@ class XelisWallet extends LibXelisWallet {
);
await info.updateBalance(newBalance: balance, isar: mainDB.isar);
}
} catch (_) {
// Logging.instance.log(
// "Error in updateBalance(): $e\n$s",
// level: LogLevel.Warning,
// );
} catch (e, s) {
Logging.instance.e(
"Error in $runtimeType updateBalance()",
error: e,
stackTrace: s,
);
}
});
}
@ -282,28 +284,29 @@ class XelisWallet extends LibXelisWallet {
newHeight: height.toInt(),
isar: mainDB.isar,
);
} catch (_) {
// Logging.instance.log(
// "Error in updateChainHeight(): $e\n$s",
// level: LogLevel.Warning,
// );
} catch (e, s) {
Logging.instance.e(
"Error in $runtimeType updateChainHeight()",
error: e,
stackTrace: s,
);
}
}
@override
Future<void> updateNode() async {
try {
final node = getCurrentNode();
final bool online = await libXelisWallet!.isOnline();
if (online == true) {
await libXelisWallet!.offlineMode();
}
await super.connect();
} catch (_) {
// Logging.instance.log(
// "Error updating node: $e\n$s",
// level: LogLevel.Error,
// );
} catch (e, s) {
Logging.instance.e(
"Error rethrown from $runtimeType updateNode()",
error: e,
stackTrace: s,
);
rethrow;
}
}
@ -510,7 +513,7 @@ class XelisWallet extends LibXelisWallet {
otherData['asset_${transfer.asset}_amount'] =
transfer.amount.toString();
otherData['asset_${transfer.asset}_fee'] = fee.toString();
otherData['asset_${transfer.asset}_fee'] = fee.raw.toString();
if (transfer.extraData != null) {
otherData['extraData_${transfer.asset}'] =
transfer.extraData!.toJson();
@ -518,6 +521,7 @@ class XelisWallet extends LibXelisWallet {
}
} else {
// Skip unknown entry types
continue;
}
final txn = TransactionV2(
@ -546,11 +550,12 @@ class XelisWallet extends LibXelisWallet {
// );
txns.add(txn);
} catch (_) {
// Logging.instance.log(
// "Error handling tx $jsonString: $e\n$s",
// level: LogLevel.Warning,
// );
} catch (e, s) {
Logging.instance.w(
"Error in $runtimeType handling transaction: $jsonString",
error: e,
stackTrace: s,
);
}
}
await updateBalance();
@ -599,7 +604,9 @@ class XelisWallet extends LibXelisWallet {
final recipients =
txData.recipients?.isNotEmpty == true
? txData.recipients!
: throw ArgumentError('Address cannot be empty.'); // in the future, support for multiple recipients will work.
: throw ArgumentError(
'Address cannot be empty.',
); // in the future, support for multiple recipients will work.
final asset = assetId ?? xelis_sdk.xelisAsset;
@ -831,11 +838,12 @@ class XelisWallet extends LibXelisWallet {
case HistorySynced(:final topoheight):
await handleHistorySynced(topoheight);
}
} catch (_) {
// Logging.instance.log(
// "Error handling wallet event: $e\n$s",
// level: LogLevel.Error,
// );
} catch (e, s) {
Logging.instance.e(
"Error in $runtimeType handleEvent($event)",
error: e,
stackTrace: s,
);
}
}
@ -859,11 +867,12 @@ class XelisWallet extends LibXelisWallet {
// "New transaction processed: ${newTxIds.first}",
// level: LogLevel.Info,
// );
} catch (_) {
// Logging.instance.log(
// "Error handling new transaction: $e\n$s",
// level: LogLevel.Warning,
// );
} catch (e, s) {
Logging.instance.e(
"Error in $runtimeType handleNewTransaction($tx)",
error: e,
stackTrace: s,
);
}
}
@ -876,11 +885,12 @@ class XelisWallet extends LibXelisWallet {
}
// TODO: Update asset balances if needed
} catch (_) {
// Logging.instance.log(
// "Error handling balance change: $e\n$s",
// level: LogLevel.Warning,
// );
} catch (e, s) {
Logging.instance.e(
"Error in $runtimeType handleBalanceChanged($event)",
error: e,
stackTrace: s,
);
}
}
@ -937,10 +947,7 @@ class XelisWallet extends LibXelisWallet {
Future<void> handleNewAsset(xelis_sdk.AssetData asset) async {
// TODO: Store asset information if needed
// TODO: Update UI/state for new asset
// Logging.instance.log(
// "New asset detected: ${asset}",
// level: LogLevel.Info,
// );
Logging.instance.d("New xelis asset detected: $asset");
}
@override
@ -961,11 +968,12 @@ class XelisWallet extends LibXelisWallet {
),
);
}
} catch (_) {
// Logging.instance.log(
// "Error in refresh(): $e\n$s",
// level: LogLevel.Warning,
// );
} catch (e, s) {
Logging.instance.e(
"Error in $runtimeType refresh()",
error: e,
stackTrace: s,
);
}
});
}

View file

@ -32,10 +32,7 @@ enum XelisTableSize {
}
}
enum XelisWalletOpenType {
create,
restore
}
enum XelisWalletOpenType { create, restore }
class XelisTableState {
final bool isGenerating;
@ -263,11 +260,12 @@ abstract class LibXelisWallet<T extends ElectrumCurrency>
case xelis_sdk.WalletEvent.historySynced:
yield HistorySynced(json['data']['topoheight'] as int);
}
} catch (_) {
// Logging.instance.log(
// "Error processing wallet event: $e\n$s",
// level: LogLevel.Error,
// );
} catch (e, s) {
Logging.instance.e(
"Error processing xelis wallet event: $rawData",
error: e,
stackTrace: s,
);
continue;
}
}
@ -287,23 +285,21 @@ abstract class LibXelisWallet<T extends ElectrumCurrency>
Future<void> refresh({int? topoheight});
Future<void> connect() async {
final node = getCurrentNode();
try {
_eventSubscription = convertRawEvents().listen(handleEvent);
final node = getCurrentNode();
// Logging.instance.log(
// "Connecting to node: ${node.host}:${node.port}",
// level: LogLevel.Info,
// );
Logging.instance.i("Connecting to node: ${node.host}:${node.port}");
await libXelisWallet!.onlineMode(
daemonAddress: "${node.host}:${node.port}",
);
await super.refresh();
} catch (_) {
// Logging.instance.log(
// "Error connecting to node: $e\n$s",
// level: LogLevel.Error,
// );
} catch (e, s) {
Logging.instance.e(
"rethrowing error connecting to node: $node",
error: e,
stackTrace: s,
);
rethrow;
}
}