timeout check server features on wallet creation (allow offline new wallet creation on timeout)

This commit is contained in:
julian 2022-11-30 09:54:46 -06:00
parent 5c9664c667
commit d86f0de130
6 changed files with 128 additions and 110 deletions

View file

@ -1519,22 +1519,28 @@ class BitcoinWallet extends CoinServiceAPI {
Logging.instance Logging.instance
.log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info); .log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info);
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); try {
Logging.instance.log("features: $features", level: LogLevel.Info); final features = await electrumXClient
switch (coin) { .getServerFeatures()
case Coin.bitcoin: .timeout(const Duration(seconds: 3));
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { Logging.instance.log("features: $features", level: LogLevel.Info);
throw Exception("genesis hash does not match main net!"); switch (coin) {
} case Coin.bitcoin:
break; if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
case Coin.bitcoinTestNet: throw Exception("genesis hash does not match main net!");
if (features['genesis_hash'] != GENESIS_HASH_TESTNET) { }
throw Exception("genesis hash does not match test net!"); break;
} case Coin.bitcoinTestNet:
break; if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
default: throw Exception("genesis hash does not match test net!");
throw Exception( }
"Attempted to generate a BitcoinWallet using a non bitcoin coin type: ${coin.name}"); break;
default:
throw Exception(
"Attempted to generate a BitcoinWallet using a non bitcoin coin type: ${coin.name}");
}
} catch (e, s) {
Logging.instance.log("$e/n$s", level: LogLevel.Info);
} }
} }

View file

@ -1405,22 +1405,28 @@ class BitcoinCashWallet extends CoinServiceAPI {
Logging.instance Logging.instance
.log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info); .log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info);
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); try {
Logging.instance.log("features: $features", level: LogLevel.Info); final features = await electrumXClient
switch (coin) { .getServerFeatures()
case Coin.bitcoincash: .timeout(const Duration(seconds: 3));
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { Logging.instance.log("features: $features", level: LogLevel.Info);
throw Exception("genesis hash does not match main net!"); switch (coin) {
} case Coin.bitcoincash:
break; if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
case Coin.bitcoincashTestnet: throw Exception("genesis hash does not match main net!");
if (features['genesis_hash'] != GENESIS_HASH_TESTNET) { }
throw Exception("genesis hash does not match test net!"); break;
} case Coin.bitcoincashTestnet:
break; if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
default: throw Exception("genesis hash does not match test net!");
throw Exception( }
"Attempted to generate a BitcoinWallet using a non bitcoin coin type: ${coin.name}"); break;
default:
throw Exception(
"Attempted to generate a BitcoinWallet using a non bitcoin coin type: ${coin.name}");
}
} catch (e, s) {
Logging.instance.log("$e/n$s", level: LogLevel.Info);
} }
} }

View file

@ -1268,22 +1268,28 @@ class DogecoinWallet extends CoinServiceAPI {
Logging.instance Logging.instance
.log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info); .log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info);
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); try {
Logging.instance.log("features: $features", level: LogLevel.Info); final features = await electrumXClient
switch (coin) { .getServerFeatures()
case Coin.dogecoin: .timeout(const Duration(seconds: 3));
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { Logging.instance.log("features: $features", level: LogLevel.Info);
throw Exception("genesis hash does not match main net!"); switch (coin) {
} case Coin.dogecoin:
break; if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
case Coin.dogecoinTestNet: throw Exception("genesis hash does not match main net!");
if (features['genesis_hash'] != GENESIS_HASH_TESTNET) { }
throw Exception("genesis hash does not match test net!"); break;
} case Coin.dogecoinTestNet:
break; if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
default: throw Exception("genesis hash does not match test net!");
throw Exception( }
"Attempted to generate a BitcoinWallet using a non bitcoin coin type: ${coin.name}"); break;
default:
throw Exception(
"Attempted to generate a BitcoinWallet using a non bitcoin coin type: ${coin.name}");
}
} catch (e, s) {
Logging.instance.log("$e/n$s", level: LogLevel.Info);
} }
} }

View file

@ -2148,32 +2148,29 @@ class FiroWallet extends CoinServiceAPI {
Logging.instance Logging.instance
.log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info); .log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info);
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); try {
Logging.instance.log("features: $features", level: LogLevel.Info); final features = await electrumXClient
switch (coin) { .getServerFeatures()
case Coin.firo: .timeout(const Duration(seconds: 3));
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { Logging.instance.log("features: $features", level: LogLevel.Info);
throw Exception("genesis hash does not match main net!"); switch (coin) {
} case Coin.firo:
break; if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
case Coin.firoTestNet: throw Exception("genesis hash does not match main net!");
if (features['genesis_hash'] != GENESIS_HASH_TESTNET) { }
throw Exception("genesis hash does not match test net!"); break;
} case Coin.firoTestNet:
break; if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
default: throw Exception("genesis hash does not match test net!");
throw Exception( }
"Attempted to generate a FiroWallet using a non firo coin type: ${coin.name}"); break;
default:
throw Exception(
"Attempted to generate a FiroWallet using a non firo coin type: ${coin.name}");
}
} catch (e, s) {
Logging.instance.log("$e/n$s", level: LogLevel.Info);
} }
// if (_networkType == BasicNetworkType.main) {
// if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
// throw Exception("genesis hash does not match!");
// }
// } else if (_networkType == BasicNetworkType.test) {
// if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
// throw Exception("genesis hash does not match!");
// }
// }
} }
// this should never fail as overwriting a mnemonic is big bad // this should never fail as overwriting a mnemonic is big bad

View file

@ -1521,23 +1521,29 @@ class LitecoinWallet extends CoinServiceAPI {
Logging.instance Logging.instance
.log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info); .log("IS_INTEGRATION_TEST: $integrationTestFlag", level: LogLevel.Info);
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); try {
Logging.instance.log("features: $features", level: LogLevel.Info); final features = await electrumXClient
switch (coin) { .getServerFeatures()
case Coin.litecoin: .timeout(const Duration(seconds: 3));
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { Logging.instance.log("features: $features", level: LogLevel.Info);
print(features['genesis_hash']); switch (coin) {
throw Exception("genesis hash does not match main net!"); case Coin.litecoin:
} if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
break; print(features['genesis_hash']);
case Coin.litecoinTestNet: throw Exception("genesis hash does not match main net!");
if (features['genesis_hash'] != GENESIS_HASH_TESTNET) { }
throw Exception("genesis hash does not match test net!"); break;
} case Coin.litecoinTestNet:
break; if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
default: throw Exception("genesis hash does not match test net!");
throw Exception( }
"Attempted to generate a LitecoinWallet using a non litecoin coin type: ${coin.name}"); break;
default:
throw Exception(
"Attempted to generate a LitecoinWallet using a non litecoin coin type: ${coin.name}");
}
} catch (e, s) {
Logging.instance.log("$e/n$s", level: LogLevel.Info);
} }
} }

View file

@ -344,27 +344,24 @@ class NamecoinWallet extends CoinServiceAPI {
Logging.instance.log("IS_INTEGRATION_TEST: $integrationTestFlag", Logging.instance.log("IS_INTEGRATION_TEST: $integrationTestFlag",
level: LogLevel.Info); level: LogLevel.Info);
if (!integrationTestFlag) { if (!integrationTestFlag) {
final features = await electrumXClient.getServerFeatures(); try {
Logging.instance.log("features: $features", level: LogLevel.Info); final features = await electrumXClient
switch (coin) { .getServerFeatures()
case Coin.namecoin: .timeout(const Duration(seconds: 3));
if (features['genesis_hash'] != GENESIS_HASH_MAINNET) { Logging.instance.log("features: $features", level: LogLevel.Info);
throw Exception("genesis hash does not match main net!"); switch (coin) {
} case Coin.namecoin:
break; if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
default: throw Exception("genesis hash does not match main net!");
throw Exception( }
"Attempted to generate a NamecoinWallet using a non namecoin coin type: ${coin.name}"); break;
default:
throw Exception(
"Attempted to generate a NamecoinWallet using a non namecoin coin type: ${coin.name}");
}
} catch (e, s) {
Logging.instance.log("$e/n$s", level: LogLevel.Info);
} }
// if (_networkType == BasicNetworkType.main) {
// if (features['genesis_hash'] != GENESIS_HASH_MAINNET) {
// throw Exception("genesis hash does not match main net!");
// }
// } else if (_networkType == BasicNetworkType.test) {
// if (features['genesis_hash'] != GENESIS_HASH_TESTNET) {
// throw Exception("genesis hash does not match test net!");
// }
// }
} }
// check to make sure we aren't overwriting a mnemonic // check to make sure we aren't overwriting a mnemonic
// this should never fail // this should never fail