Skip to content

Commit

Permalink
Merge pull request #166 from cypherstack/staging
Browse files Browse the repository at this point in the history
Staging
  • Loading branch information
ryleedavis authored Oct 20, 2022
2 parents 66fe3f1 + 0a18f6b commit a750ad6
Show file tree
Hide file tree
Showing 10 changed files with 115 additions and 46 deletions.
12 changes: 6 additions & 6 deletions ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 78;
CURRENT_PROJECT_VERSION = 79;
DEVELOPMENT_TEAM = 4DQKUWSG6C;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
Expand Down Expand Up @@ -505,7 +505,7 @@
"$(PROJECT_DIR)/../crypto_plugins/flutter_libmonero/cw_shared_external/ios/External/ios/**",
"$(PROJECT_DIR)/../crypto_plugins/flutter_libepiccash/ios/libs",
);
MARKETING_VERSION = 1.5.8;
MARKETING_VERSION = 1.5.9;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = com.cypherstack.stackwallet;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -635,7 +635,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 78;
CURRENT_PROJECT_VERSION = 79;
DEVELOPMENT_TEAM = 4DQKUWSG6C;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
Expand Down Expand Up @@ -689,7 +689,7 @@
"$(PROJECT_DIR)/../crypto_plugins/flutter_libmonero/cw_shared_external/ios/External/ios/**",
"$(PROJECT_DIR)/../crypto_plugins/flutter_libepiccash/ios/libs",
);
MARKETING_VERSION = 1.5.8;
MARKETING_VERSION = 1.5.9;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = com.cypherstack.stackwallet;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -711,7 +711,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 78;
CURRENT_PROJECT_VERSION = 79;
DEVELOPMENT_TEAM = 4DQKUWSG6C;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
Expand Down Expand Up @@ -765,7 +765,7 @@
"$(PROJECT_DIR)/../crypto_plugins/flutter_libmonero/cw_shared_external/ios/External/ios/**",
"$(PROJECT_DIR)/../crypto_plugins/flutter_libepiccash/ios/libs",
);
MARKETING_VERSION = 1.5.8;
MARKETING_VERSION = 1.5.9;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = com.cypherstack.stackwallet;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down
11 changes: 9 additions & 2 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,12 @@ void main() async {
boxName: DB.boxNameDBInfo, key: "hive_data_version") as int? ??
0;
if (dbVersion < Constants.currentHiveDbVersion) {
await DbVersionMigrator().migrate(dbVersion);
try {
await DbVersionMigrator().migrate(dbVersion);
} catch (e, s) {
Logging.instance.log("Cannot migrate database\n$e $s",
level: LogLevel.Error, printFullLength: true);
}
}

monero.onStartup();
Expand Down Expand Up @@ -231,7 +236,9 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
// unawaited(_nodeService.updateCommunityNodes());

// run without awaiting
if (Constants.enableExchange && _prefs.externalCalls) {
if (Constants.enableExchange &&
_prefs.externalCalls &&
await _prefs.isExternalCallsSet()) {
unawaited(ExchangeDataLoadingService().loadAll(ref));
}

Expand Down
83 changes: 65 additions & 18 deletions lib/services/coins/bitcoincash/bitcoincash_wallet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import 'package:stackwallet/utilities/prefs.dart';
import 'package:tuple/tuple.dart';
import 'package:uuid/uuid.dart';

const int MINIMUM_CONFIRMATIONS = 3;
const int MINIMUM_CONFIRMATIONS = 1;
const int DUST_LIMIT = 546;

const String GENESIS_HASH_MAINNET =
Expand Down Expand Up @@ -265,6 +265,11 @@ class BitcoinCashWallet extends CoinServiceAPI {
DerivePathType addressType({required String address}) {
Uint8List? decodeBase58;
Segwit? decodeBech32;
try {
if (Bitbox.Address.detectFormat(address) == 0) {
address = Bitbox.Address.toLegacyAddress(address);
}
} catch (e, s) {}
try {
decodeBase58 = bs58check.decode(address);
} catch (err) {
Expand Down Expand Up @@ -825,9 +830,6 @@ class BitcoinCashWallet extends CoinServiceAPI {
/// Refreshes display data for the wallet
@override
Future<void> refresh() async {
final bchaddr = Bitbox.Address.toCashAddress(await currentReceivingAddress);
print("bchaddr: $bchaddr ${await currentReceivingAddress}");

if (refreshMutex) {
Logging.instance.log("$walletId $walletName refreshMutex denied",
level: LogLevel.Info);
Expand Down Expand Up @@ -1384,7 +1386,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
initialChangeAddressP2SH, 1, DerivePathType.bip49);

// this._currentReceivingAddress = Future(() => initialReceivingAddress);
_currentReceivingAddressP2PKH = Future(() => initialReceivingAddressP2PKH);

var newaddr = await _getCurrentAddressForChain(0, DerivePathType.bip44);
_currentReceivingAddressP2PKH = Future(() => newaddr);
_currentReceivingAddressP2SH = Future(() => initialReceivingAddressP2SH);

Logging.instance.log("_generateNewWalletFinished", level: LogLevel.Info);
Expand Down Expand Up @@ -1521,6 +1525,11 @@ class BitcoinCashWallet extends CoinServiceAPI {
print("Array key is ${jsonEncode(arrayKey)}");
final internalChainArray =
DB.instance.get<dynamic>(boxName: walletId, key: arrayKey);
if (derivePathType == DerivePathType.bip44) {
if (Bitbox.Address.detectFormat(internalChainArray.last as String) == 1) {
return Bitbox.Address.toCashAddress(internalChainArray.last as String);
}
}
return internalChainArray.last as String;
}

Expand Down Expand Up @@ -1986,6 +1995,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
/// Returns the scripthash or throws an exception on invalid bch address
String _convertToScriptHash(String bchAddress, NetworkType network) {
try {
if (Bitbox.Address.detectFormat(bchAddress) == 0) {
bchAddress = Bitbox.Address.toLegacyAddress(bchAddress);
}
final output = Address.addressToOutputScript(bchAddress, network);
final hash = sha256.convert(output.toList(growable: false)).toString();

Expand Down Expand Up @@ -2058,11 +2070,27 @@ class BitcoinCashWallet extends CoinServiceAPI {
}

Future<TransactionData> _fetchTransactionData() async {
final List<String> allAddresses = await _fetchAllOwnAddresses();
List<String> allAddressesOld = await _fetchAllOwnAddresses();
List<String> allAddresses = [];
for (String address in allAddressesOld) {
if (Bitbox.Address.detectFormat(address) == 1) {
allAddresses.add(Bitbox.Address.toCashAddress(address));
} else {
allAddresses.add(address);
}
}

final changeAddressesP2PKH =
var changeAddressesP2PKHOld =
DB.instance.get<dynamic>(boxName: walletId, key: 'changeAddressesP2PKH')
as List<dynamic>;
List<dynamic> changeAddressesP2PKH = [];
for (var address in changeAddressesP2PKHOld) {
if (Bitbox.Address.detectFormat(address as String) == 1) {
changeAddressesP2PKH.add(Bitbox.Address.toCashAddress(address));
} else {
changeAddressesP2PKH.add(address);
}
}

final List<Map<String, dynamic>> allTxHashes =
await _fetchHistory(allAddresses);
Expand All @@ -2087,7 +2115,16 @@ class BitcoinCashWallet extends CoinServiceAPI {
if (txHeight > 0 &&
txHeight < latestTxnBlockHeight - MINIMUM_CONFIRMATIONS) {
if (unconfirmedCachedTransactions[tx["tx_hash"] as String] == null) {
allTxHashes.remove(tx);
print(cachedTransactions.findTransaction(tx["tx_hash"] as String));
print(unconfirmedCachedTransactions[tx["tx_hash"] as String]);
final cachedTx =
cachedTransactions.findTransaction(tx["tx_hash"] as String);
if (!(cachedTx != null &&
addressType(address: cachedTx.address) ==
DerivePathType.bip44 &&
Bitbox.Address.detectFormat(cachedTx.address) == 1)) {
allTxHashes.remove(tx);
}
}
}
}
Expand All @@ -2096,7 +2133,6 @@ class BitcoinCashWallet extends CoinServiceAPI {
List<Map<String, dynamic>> allTransactions = [];

for (final txHash in allTxHashes) {
Logging.instance.log("bch: $txHash", level: LogLevel.Info);
final tx = await cachedElectrumXClient.getTransaction(
txHash: txHash["tx_hash"] as String,
verbose: true,
Expand Down Expand Up @@ -2166,7 +2202,8 @@ class BitcoinCashWallet extends CoinServiceAPI {
.log("recipientsArray: $recipientsArray", level: LogLevel.Info);

final foundInSenders =
allAddresses.any((element) => sendersArray.contains(element));
allAddresses.any((element) => sendersArray.contains(element)) ||
allAddressesOld.any((element) => sendersArray.contains(element));
Logging.instance
.log("foundInSenders: $foundInSenders", level: LogLevel.Info);

Expand Down Expand Up @@ -2228,7 +2265,8 @@ class BitcoinCashWallet extends CoinServiceAPI {
.toBigInt()
.toInt();
totalOut += value;
if (allAddresses.contains(address)) {
if (allAddresses.contains(address) ||
allAddressesOld.contains(address)) {
outputAmtAddressedToWallet += value;
}
}
Expand Down Expand Up @@ -2743,7 +2781,10 @@ class BitcoinCashWallet extends CoinServiceAPI {
for (final output in tx["vout"] as List) {
final n = output["n"];
if (n != null && n == utxosToUse[i].vout) {
final address = output["scriptPubKey"]["addresses"][0] as String;
String address = output["scriptPubKey"]["addresses"][0] as String;
if (Bitbox.Address.detectFormat(address) == 0) {
address = Bitbox.Address.toLegacyAddress(address);
}
if (!addressTxid.containsKey(address)) {
addressTxid[address] = <String>[];
}
Expand Down Expand Up @@ -2772,8 +2813,13 @@ class BitcoinCashWallet extends CoinServiceAPI {
derivePathType: DerivePathType.bip44,
);
for (int i = 0; i < p2pkhLength; i++) {
String address = addressesP2PKH[i];
if (Bitbox.Address.detectFormat(address) == 0) {
address = Bitbox.Address.toLegacyAddress(address);
}

// receives
final receiveDerivation = receiveDerivations[addressesP2PKH[i]];
final receiveDerivation = receiveDerivations[address];
// if a match exists it will not be null
if (receiveDerivation != null) {
final data = P2PKH(
Expand All @@ -2783,7 +2829,7 @@ class BitcoinCashWallet extends CoinServiceAPI {
network: _network,
).data;

for (String tx in addressTxid[addressesP2PKH[i]]!) {
for (String tx in addressTxid[address]!) {
results[tx] = {
"output": data.output,
"keyPair": ECPair.fromWIF(
Expand All @@ -2794,7 +2840,7 @@ class BitcoinCashWallet extends CoinServiceAPI {
}
} else {
// if its not a receive, check change
final changeDerivation = changeDerivations[addressesP2PKH[i]];
final changeDerivation = changeDerivations[address];
// if a match exists it will not be null
if (changeDerivation != null) {
final data = P2PKH(
Expand All @@ -2804,7 +2850,7 @@ class BitcoinCashWallet extends CoinServiceAPI {
network: _network,
).data;

for (String tx in addressTxid[addressesP2PKH[i]]!) {
for (String tx in addressTxid[address]!) {
results[tx] = {
"output": data.output,
"keyPair": ECPair.fromWIF(
Expand Down Expand Up @@ -3377,8 +3423,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
0,
DerivePathType
.bip44); // Add that new receiving address to the array of receiving addresses
_currentReceivingAddressP2PKH = Future(() =>
newReceivingAddress); // Set the new receiving address that the service
var newaddr = await _getCurrentAddressForChain(0, DerivePathType.bip44);
_currentReceivingAddressP2PKH = Future(
() => newaddr); // Set the new receiving address that the service

return true;
} catch (e, s) {
Expand Down
7 changes: 4 additions & 3 deletions lib/services/price.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ class PriceAPI {
}

final externalCalls = Prefs.instance.externalCalls;
if (!Logger.isTestEnv && !externalCalls) {
if ((!Logger.isTestEnv && !externalCalls) ||
!(await Prefs.instance.isExternalCallsSet())) {
Logging.instance.log("User does not want to use external calls",
level: LogLevel.Info);
return _cachedPrices;
}

Map<Coin, Tuple2<Decimal, double>> result = {};
try {
final uri = Uri.parse(
Expand Down Expand Up @@ -123,7 +123,8 @@ class PriceAPI {

static Future<List<String>?> availableBaseCurrencies() async {
final externalCalls = Prefs.instance.externalCalls;
if (!Logger.isTestEnv && !externalCalls) {
if ((!Logger.isTestEnv && !externalCalls) ||
!(await Prefs.instance.isExternalCallsSet())) {
Logging.instance.log("User does not want to use external calls",
level: LogLevel.Info);
return null;
Expand Down
2 changes: 1 addition & 1 deletion lib/utilities/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ abstract class Constants {
// Enable Logger.print statements
static const bool disableLogger = false;

static const int currentHiveDbVersion = 2;
static const int currentHiveDbVersion = 3;

static List<int> possibleLengthsForCoin(Coin coin) {
final List<int> values = [];
Expand Down
12 changes: 12 additions & 0 deletions lib/utilities/db_version_migration.dart
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,18 @@ class DbVersionMigrator {

// try to continue migrating
return await migrate(2);
case 2:
await Hive.openBox<dynamic>(DB.boxNamePrefs);
final prefs = Prefs.instance;
await prefs.init();
if (!(await prefs.isExternalCallsSet())) {
prefs.externalCalls = true;
}

// update version
await DB.instance.put<dynamic>(
boxName: DB.boxNameDBInfo, key: "hive_data_version", value: 3);
return await migrate(3);

default:
// finally return
Expand Down
9 changes: 9 additions & 0 deletions lib/utilities/prefs.dart
Original file line number Diff line number Diff line change
Expand Up @@ -571,4 +571,13 @@ class Prefs extends ChangeNotifier {
boxName: DB.boxNamePrefs, key: "externalCalls") as bool? ??
true;
}

Future<bool> isExternalCallsSet() async {
if (await DB.instance
.get<dynamic>(boxName: DB.boxNamePrefs, key: "externalCalls") ==
null) {
return false;
}
return true;
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ description: Stack Wallet
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.5.8+78
version: 1.5.9+79

environment:
sdk: ">=2.17.0 <3.0.0"
Expand Down
3 changes: 3 additions & 0 deletions test/price_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ void main() {
setUp(() async {
await setUpTestHive();
await Hive.openBox<dynamic>(DB.boxNamePriceCache);
await Hive.openBox<dynamic>(DB.boxNamePrefs);
await DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs, key: "externalCalls", value: true);
});

test("getPricesAnd24hChange fetch", () async {
Expand Down
Loading

0 comments on commit a750ad6

Please sign in to comment.