check server version

This commit is contained in:
julian 2023-04-17 09:42:55 -06:00
parent 9df5bc4f36
commit e01b422573

View file

@ -474,6 +474,10 @@ class ECashWallet extends CoinServiceAPI
.getServerFeatures() .getServerFeatures()
.timeout(const Duration(seconds: 3)); .timeout(const Duration(seconds: 3));
Logging.instance.log("features: $features", level: LogLevel.Info); Logging.instance.log("features: $features", level: LogLevel.Info);
_serverVersion =
_parseServerVersion(features["server_version"] as String);
switch (coin) { switch (coin) {
case Coin.eCash: case Coin.eCash:
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
@ -674,6 +678,29 @@ class ECashWallet extends CoinServiceAPI
return allTransactions; return allTransactions;
} }
double? _serverVersion;
bool get serverCanBatch => _serverVersion != null && _serverVersion! >= 1.6;
// stupid + fragile
double? _parseServerVersion(String version) {
double? result;
try {
final list = version.split(" ");
if (list.isNotEmpty) {
final numberStrings = list.last.split(".");
final major = numberStrings.removeAt(0);
result = double.tryParse("$major.${numberStrings.join("")}");
}
} catch (_) {}
Logging.instance.log(
"$walletName _parseServerVersion($version) => $result",
level: LogLevel.Info,
);
return result;
}
Future<void> _updateUTXOs() async { Future<void> _updateUTXOs() async {
final allAddresses = await _fetchAllOwnAddresses(); final allAddresses = await _fetchAllOwnAddresses();
@ -2439,6 +2466,15 @@ class ECashWallet extends CoinServiceAPI
Logging.instance.log("initializeExisting() ${coin.prettyName} wallet.", Logging.instance.log("initializeExisting() ${coin.prettyName} wallet.",
level: LogLevel.Info); level: LogLevel.Info);
try {
final features = await electrumXClient.getServerFeatures();
_serverVersion =
_parseServerVersion(features["server_version"] as String);
} catch (_) {
// catch nothing as failure here means we just do not batch certain rpc
// calls
}
if (getCachedId() == null) { if (getCachedId() == null) {
throw Exception( throw Exception(
"Attempted to initialize an existing wallet using an unknown wallet ID!"); "Attempted to initialize an existing wallet using an unknown wallet ID!");
@ -2776,6 +2812,8 @@ class ECashWallet extends CoinServiceAPI
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); final features = await electrumXClient.getServerFeatures();
Logging.instance.log("features: $features", level: LogLevel.Info); Logging.instance.log("features: $features", level: LogLevel.Info);
_serverVersion =
_parseServerVersion(features["server_version"] as String);
switch (coin) { switch (coin) {
case Coin.eCash: case Coin.eCash:
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {