diff --git a/cw_decred/lib/api/libdcrwallet.dart b/cw_decred/lib/api/libdcrwallet.dart index ebc450ce88..249714b047 100644 --- a/cw_decred/lib/api/libdcrwallet.dart +++ b/cw_decred/lib/api/libdcrwallet.dart @@ -26,66 +26,40 @@ void initLibdcrwallet(String logDir) { /// createWalletAsync calls the libdcrwallet's createWallet function /// asynchronously. -Future createWalletAsync( - {required String name, - required String dataDir, - required String password, - required String network, - String? mnemonic}) { - final args = { - "name": name, - "dataDir": dataDir, - "password": password, - "network": network, - "mnemonic": mnemonic ?? "", - }; - return compute(createWalletSync, args); +Future createWalletAsync(String config) { + return compute(createWalletSync, config); } /// createWalletSync calls the libdcrwallet's createWallet function /// synchronously. -void createWalletSync(Map args) { - final name = args["name"]!.toCString(); - final dataDir = args["dataDir"]!.toCString(); - final password = args["password"]!.toCString(); - final mnemonic = args["mnemonic"]!.toCString(); - final network = args["network"]!.toCString(); +void createWalletSync(String config) { + final cConfig = config.toCString(); executePayloadFn( - fn: () => dcrwalletApi.createWallet(name, dataDir, network, password, mnemonic), - ptrsToFree: [name, dataDir, network, password, mnemonic], + fn: () => dcrwalletApi.createWallet(cConfig), + ptrsToFree: [cConfig], ); } -void createWatchOnlyWallet(String walletName, String datadir, String pubkey, String network) { - final cName = walletName.toCString(); - final cDataDir = datadir.toCString(); - final cPub = pubkey.toCString(); - final cNet = network.toCString(); +void createWatchOnlyWallet(String config) { + final cConfig = config.toCString(); executePayloadFn( - fn: () => dcrwalletApi.createWatchOnlyWallet(cName, cDataDir, cNet, cPub), - ptrsToFree: [cName, cDataDir, cNet, cPub], + fn: () => dcrwalletApi.createWatchOnlyWallet(cConfig), + ptrsToFree: [cConfig], ); } /// loadWalletAsync calls the libdcrwallet's loadWallet function asynchronously. -Future loadWalletAsync({required String name, required String dataDir, required String net}) { - final args = { - "name": name, - "dataDir": dataDir, - "network": net, - }; - return compute(loadWalletSync, args); +Future loadWalletAsync(String config) { + return compute(loadWalletSync, config); } /// loadWalletSync calls the libdcrwallet's loadWallet function synchronously. -void loadWalletSync(Map args) { - final name = args["name"]!.toCString(); - final dataDir = args["dataDir"]!.toCString(); - final network = args["network"]!.toCString(); +void loadWalletSync(String config) { + final cConfig = config.toCString(); executePayloadFn( - fn: () => dcrwalletApi.loadWallet(name, dataDir, network), - ptrsToFree: [name, dataDir, network], + fn: () => dcrwalletApi.loadWallet(cConfig), + ptrsToFree: [cConfig], ); } diff --git a/cw_decred/lib/wallet.dart b/cw_decred/lib/wallet.dart index 632f8011d6..45e8318c25 100644 --- a/cw_decred/lib/wallet.dart +++ b/cw_decred/lib/wallet.dart @@ -250,11 +250,13 @@ abstract class DecredWalletBase persistantPeer = addr; libdcrwallet.closeWallet(walletInfo.name); final network = isTestnet ? "testnet" : "mainnet"; - libdcrwallet.loadWalletSync({ + final config = { "name": walletInfo.name, - "dataDir": walletInfo.dirPath, - "network": network, - }); + "datadir": walletInfo.dirPath, + "net": network, + "unsyncedaddrs": true, + }; + libdcrwallet.loadWalletSync(jsonEncode(config)); } await this._startSync(); connecting = false; @@ -445,6 +447,7 @@ abstract class DecredWalletBase final fee = (feeDouble * 1e8).toInt().abs(); final confs = d["confirmations"] ?? 0; final sendTime = d["time"] ?? 0; + final height = d["height"] ?? 0; final txInfo = DecredTransactionInfo( id: txid, amount: amount, @@ -452,7 +455,7 @@ abstract class DecredWalletBase direction: direction, isPending: confs == 0, date: DateTime.fromMillisecondsSinceEpoch(sendTime * 1000, isUtc: true), - height: 0, + height: height, confirmations: confs, to: d["address"] ?? "", ); diff --git a/cw_decred/lib/wallet_service.dart b/cw_decred/lib/wallet_service.dart index f22476b80d..472947ec3b 100644 --- a/cw_decred/lib/wallet_service.dart +++ b/cw_decred/lib/wallet_service.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:cw_decred/api/libdcrwallet.dart'; import 'package:cw_decred/wallet_creation_credentials.dart'; @@ -43,12 +44,14 @@ class DecredWalletService extends WalletService< @override Future create(DecredNewWalletCredentials credentials, {bool? isTestnet}) async { - await createWalletAsync( - name: credentials.walletInfo!.name, - dataDir: credentials.walletInfo!.dirPath, - password: credentials.password!, - network: isTestnet == true ? testnet : mainnet, - ); + final config = { + "name": credentials.walletInfo!.name, + "datadir": credentials.walletInfo!.dirPath, + "pass": credentials.password!, + "net": isTestnet == true ? testnet : mainnet, + "unsyncedaddrs": true, + }; + await createWalletAsync(jsonEncode(config)); final di = DerivationInfo( derivationPath: isTestnet == true ? seedRestorePathTestnet : seedRestorePath); credentials.walletInfo!.derivationInfo = di; @@ -72,11 +75,13 @@ class DecredWalletService extends WalletService< walletInfo.dirPath = await pathForWalletDir(name: name, type: getType()); } - await loadWalletAsync( - name: walletInfo.name, - dataDir: walletInfo.dirPath, - net: network, - ); + final config = { + "name": walletInfo.name, + "datadir": walletInfo.dirPath, + "net": network, + "unsyncedaddrs": true, + }; + await loadWalletAsync(jsonEncode(config)); final wallet = DecredWallet(walletInfo, password, this.unspentCoinsInfoSource); await wallet.init(); return wallet; @@ -115,12 +120,15 @@ class DecredWalletService extends WalletService< @override Future restoreFromSeed(DecredRestoreWalletFromSeedCredentials credentials, {bool? isTestnet}) async { - await createWalletAsync( - name: credentials.walletInfo!.name, - dataDir: credentials.walletInfo!.dirPath, - password: credentials.password!, - mnemonic: credentials.mnemonic, - network: isTestnet == true ? testnet : mainnet); + final config = { + "name": credentials.walletInfo!.name, + "datadir": credentials.walletInfo!.dirPath, + "pass": credentials.password!, + "mnemonic": credentials.mnemonic, + "net": isTestnet == true ? testnet : mainnet, + "unsyncedaddrs": true, + }; + await createWalletAsync(jsonEncode(config)); final di = DerivationInfo( derivationPath: isTestnet == true ? seedRestorePathTestnet : seedRestorePath); credentials.walletInfo!.derivationInfo = di; @@ -135,12 +143,14 @@ class DecredWalletService extends WalletService< @override Future restoreFromKeys(DecredRestoreWalletFromPubkeyCredentials credentials, {bool? isTestnet}) async { - createWatchOnlyWallet( - credentials.walletInfo!.name, - credentials.walletInfo!.dirPath, - credentials.pubkey, - isTestnet == true ? testnet : mainnet, - ); + final config = { + "name": credentials.walletInfo!.name, + "datadir": credentials.walletInfo!.dirPath, + "pubkey": credentials.pubkey, + "net": isTestnet == true ? testnet : mainnet, + "unsyncedaddrs": true, + }; + createWatchOnlyWallet(jsonEncode(config)); final di = DerivationInfo( derivationPath: isTestnet == true ? pubkeyRestorePathTestnet : pubkeyRestorePath); credentials.walletInfo!.derivationInfo = di; diff --git a/scripts/android/build_decred.sh b/scripts/android/build_decred.sh index 46507e468e..fca427880b 100755 --- a/scripts/android/build_decred.sh +++ b/scripts/android/build_decred.sh @@ -7,7 +7,7 @@ cd "$(dirname "$0")" CW_DECRED_DIR=$(realpath ../..)/cw_decred LIBWALLET_PATH="${PWD}/decred/libwallet" LIBWALLET_URL="https://github.com/decred/libwallet.git" -LIBWALLET_VERSION="82ed8a80ae9fa3b15a2d5609bc748fc663be7e37" # v2.2.1 +LIBWALLET_VERSION="e02273ad75a029a4f020f11c4575025f4e4eb132" if [ -e $LIBWALLET_PATH ]; then rm -fr $LIBWALLET_PATH/{*,.*} || true diff --git a/scripts/ios/build_decred.sh b/scripts/ios/build_decred.sh index 0387dca0c8..1f17e3a786 100755 --- a/scripts/ios/build_decred.sh +++ b/scripts/ios/build_decred.sh @@ -3,7 +3,7 @@ set -e . ./config.sh LIBWALLET_PATH="${EXTERNAL_IOS_SOURCE_DIR}/libwallet" LIBWALLET_URL="https://github.com/decred/libwallet.git" -LIBWALLET_VERSION="82ed8a80ae9fa3b15a2d5609bc748fc663be7e37" # v2.2.1 +LIBWALLET_VERSION="e02273ad75a029a4f020f11c4575025f4e4eb132" if [ -e $LIBWALLET_PATH ]; then rm -fr $LIBWALLET_PATH diff --git a/scripts/macos/build_decred.sh b/scripts/macos/build_decred.sh index 6f2b4eceff..580991160f 100755 --- a/scripts/macos/build_decred.sh +++ b/scripts/macos/build_decred.sh @@ -4,7 +4,7 @@ LIBWALLET_PATH="${EXTERNAL_MACOS_SOURCE_DIR}/libwallet" LIBWALLET_URL="https://github.com/decred/libwallet.git" -LIBWALLET_VERSION="82ed8a80ae9fa3b15a2d5609bc748fc663be7e37" # v2.2.1 +LIBWALLET_VERSION="e02273ad75a029a4f020f11c4575025f4e4eb132" echo "======================= DECRED LIBWALLET ========================="