mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-01-09 12:29:31 +00:00
62e0c2a592
* Fix stub creation * Generate MWEB addresses * Fix mweb address derivation * Use camel-case * Show utxos in tx list * A few fixes * Add spent processing * Update balance * Balance fixes * Update address records * Get rid of debounce hack * Get sending up to the confirmation box * Fee estimation * Stop the daemon if plugin is unloaded * Normal fee for non-mweb txns * Fix fee estimation for send all * Don't hash mweb addresses * More fee fixes * Broadcast mweb * Remove test files * One more * Confirm sent txns * Couple of fixes * Resign inputs after mweb create * Some more fixes * Update balance after sending * Correctly update address records * Update confs * [skip ci] updates * [skip ci] add dep overrides * working * small fix * merge fixes [skip ci] * merge fixes [skip ci] * [skip ci] minor fixes * silent payment fixes [skip ci] * updates [skip ci] * save [skip ci] * use mwebutxos box * [skip ci] lots of fixes, still testing * add rescan from height feature and test workflow build * install go * use sudo * correct package name * move building mweb higher for faster testing * install fixes * install later version of go * go fixes * testing * testing * testing * testing * testing * should workgit add .github/workflows/pr_test_build.yml * ??? * ??? pt.2 * should work, for real this time * fix tx history not persisting + update build_mwebd script * updates * fix some rescan and address gen issues * save [skip ci] * fix unconfirmed balance not updating when receiving * unspent coins / coin control fixes * coin control fixes * address balance and txCount fixes, try/catch electrum call * fix txCount for addresses * save [skip ci] * potential fixes * minor fix * minor fix - 2 * sync status fixes, potential fix for background state issue * workflow and script updates * updates * expirimental optimization * [skip ci] minor enhancements * workflow and script fixes * workflow minor cleanup [skip ci] * minor code cleanup & friendlier error message on failed tx's * balance when sending fix * experimental * more experiments * save * updates * coin control edge cases * remove neutrino.db if no litecoin wallets left after deleting * update translations * updates * minor fix * [skip ci] update translations + minor fixes * state fixes * configure fix * ui updates * translation fixes * [skip ci] addressbook updates * fix popup * fix popup2 * fix litecoin address book * fix ios mwebd build script * fix for building monero.com * minor fix * uncomment fix for state issues * potential mweb sync fix (ios) * remove print [skip ci] * electrum stream potential fix * fix ios build issues [skip ci] * connection reliability updates, update kotlin code to match swift code, minor electrum error handling * dep fixes * minor fix * more merge fixes * bitcoin_flutter removal fixes * [skip ci] fix always scan setting, swift updates * updates * fixes * small fix * small fix * fix * dart:convert != package:convert * change address fixes * update bitcoin_base to fix mweb address program checking * fix ios xcode project [skip ci] * updates * more fixes * more fixes * ensure we don't initialize mweb until we really have to * fix regression * improve mweb reliability * [skip ci] wip adress generation * wip * wip * [skip ci] wip * updates [skip ci] * ios fixes * fix workflows + ios fix * test old mweb version * update go version and mwebd hash * review updates pt.1 * Update cw_bitcoin/lib/litecoin_wallet.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * remove non-litecoin address types regex [skip ci] * more minor fixes * remove duplicate [skip ci] * Update lib/store/settings_store.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * script updates, swap params on createLitecoinWalletService * topup fix * [skip ci] wip * [skip ci] testing * [skip ci] file didn't get saved * more address generation reliability fixes * [skip ci] minor * minor code cleanup * hopefully prevents send issue * [skip ci] wip address changes * [skip ci] save * save mweb addresses, auto-restart sync process if it gets stuck [skip ci] * address generation issues mostly resolved * more performance fixes * [skip ci] * this should maybe be refactored, pt.1 * separate mweb balances, pt.2 * [skip ci] save * add translations [skip ci] * fix sending with mweb amounts * works for simple mweb-mweb case, further testing needed * found an edge case * [skip ci] make failed broadcast error message less serious * minor * capture all grpc errors and much better error handling overall * [skip ci] minor * prevent transactions with < 6 confirmations from being used + hide mweb balances if mweb is off * fix * merge fixes pt.1 [skip ci] * fix mweb tags * fix * [skip ci] fix tag spacing * fix transaction history not showing up * fix mweb crash on non-fully deleted mweb cache, sync status ETA, other connection fixes * [skip ci] minor code cleanup * [skip ci] minor code cleanup * additional cleanup * silent payments eta fixes and updates * revert sync eta changes into separate pr * [skip ci] minor * [skip ci] minor * revert sync status title * review fixes, additional cleanup * [skip ci] minor * [skip ci] minor * [skip ci] minor * trigger build * review fixes, pt.2 * check if still processing utxos before updating sync status [skip ci] * [skip ci] minor * balance fix * minor * minor * [skip ci] minor * [skip ci] fix test net btc * don't use mwebd for non-mweb tx's * [skip ci] minor cleanup * don't show all 1000+ mweb addresses on receive page * minor cleanup + additional logging --------- Co-authored-by: Hector Chu <hectorchu@gmail.com> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
129 lines
4.5 KiB
Dart
129 lines
4.5 KiB
Dart
import 'dart:convert';
|
|
import 'package:bitcoin_base/bitcoin_base.dart';
|
|
import 'package:cw_bitcoin/bitcoin_address_record.dart';
|
|
import 'package:cw_bitcoin/electrum_balance.dart';
|
|
import 'package:cw_core/encryption_file_utils.dart';
|
|
import 'package:cw_bitcoin/electrum_derivations.dart';
|
|
import 'package:cw_core/pathForWallet.dart';
|
|
import 'package:cw_core/wallet_info.dart';
|
|
import 'package:cw_core/utils/file.dart';
|
|
import 'package:cw_core/wallet_type.dart';
|
|
|
|
class ElectrumWalletSnapshot {
|
|
ElectrumWalletSnapshot({
|
|
required this.name,
|
|
required this.type,
|
|
required this.password,
|
|
required this.mnemonic,
|
|
required this.xpub,
|
|
required this.addresses,
|
|
required this.balance,
|
|
required this.regularAddressIndex,
|
|
required this.changeAddressIndex,
|
|
required this.addressPageType,
|
|
required this.silentAddresses,
|
|
required this.silentAddressIndex,
|
|
required this.mwebAddresses,
|
|
this.passphrase,
|
|
this.derivationType,
|
|
this.derivationPath,
|
|
});
|
|
|
|
final String name;
|
|
final String password;
|
|
final WalletType type;
|
|
final String? addressPageType;
|
|
|
|
@deprecated
|
|
String? mnemonic;
|
|
|
|
@deprecated
|
|
String? xpub;
|
|
|
|
@deprecated
|
|
String? passphrase;
|
|
|
|
List<BitcoinAddressRecord> addresses;
|
|
List<BitcoinSilentPaymentAddressRecord> silentAddresses;
|
|
List<BitcoinAddressRecord> mwebAddresses;
|
|
|
|
ElectrumBalance balance;
|
|
Map<String, int> regularAddressIndex;
|
|
Map<String, int> changeAddressIndex;
|
|
int silentAddressIndex;
|
|
DerivationType? derivationType;
|
|
String? derivationPath;
|
|
|
|
static Future<ElectrumWalletSnapshot> load(
|
|
EncryptionFileUtils encryptionFileUtils, String name, WalletType type, String password, BasedUtxoNetwork network) async {
|
|
final path = await pathForWallet(name: name, type: type);
|
|
final jsonSource = await encryptionFileUtils.read(path: path, password: password);
|
|
final data = json.decode(jsonSource) as Map;
|
|
final mnemonic = data['mnemonic'] as String?;
|
|
final xpub = data['xpub'] as String?;
|
|
final passphrase = data['passphrase'] as String? ?? '';
|
|
|
|
final addressesTmp = data['addresses'] as List? ?? <Object>[];
|
|
final addresses = addressesTmp
|
|
.whereType<String>()
|
|
.map((addr) => BitcoinAddressRecord.fromJSON(addr, network: network))
|
|
.toList();
|
|
|
|
final silentAddressesTmp = data['silent_addresses'] as List? ?? <Object>[];
|
|
final silentAddresses = silentAddressesTmp
|
|
.whereType<String>()
|
|
.map((addr) => BitcoinSilentPaymentAddressRecord.fromJSON(addr, network: network))
|
|
.toList();
|
|
|
|
final mwebAddressTmp = data['mweb_addresses'] as List? ?? <Object>[];
|
|
final mwebAddresses = mwebAddressTmp
|
|
.whereType<String>()
|
|
.map((addr) => BitcoinAddressRecord.fromJSON(addr, network: network))
|
|
.toList();
|
|
|
|
final balance = ElectrumBalance.fromJSON(data['balance'] as String?) ??
|
|
ElectrumBalance(confirmed: 0, unconfirmed: 0, frozen: 0);
|
|
var regularAddressIndexByType = {SegwitAddresType.p2wpkh.toString(): 0};
|
|
var changeAddressIndexByType = {SegwitAddresType.p2wpkh.toString(): 0};
|
|
var silentAddressIndex = 0;
|
|
|
|
final derivationType = DerivationType
|
|
.values[(data['derivationTypeIndex'] as int?) ?? DerivationType.electrum.index];
|
|
final derivationPath = data['derivationPath'] as String? ?? electrum_path;
|
|
|
|
try {
|
|
regularAddressIndexByType = {
|
|
SegwitAddresType.p2wpkh.toString(): int.parse(data['account_index'] as String? ?? '0')
|
|
};
|
|
changeAddressIndexByType = {
|
|
SegwitAddresType.p2wpkh.toString():
|
|
int.parse(data['change_address_index'] as String? ?? '0')
|
|
};
|
|
silentAddressIndex = int.parse(data['silent_address_index'] as String? ?? '0');
|
|
} catch (_) {
|
|
try {
|
|
regularAddressIndexByType = data["account_index"] as Map<String, int>? ?? {};
|
|
changeAddressIndexByType = data["change_address_index"] as Map<String, int>? ?? {};
|
|
} catch (_) {}
|
|
}
|
|
|
|
return ElectrumWalletSnapshot(
|
|
name: name,
|
|
type: type,
|
|
password: password,
|
|
passphrase: passphrase,
|
|
mnemonic: mnemonic,
|
|
xpub: xpub,
|
|
addresses: addresses,
|
|
balance: balance,
|
|
regularAddressIndex: regularAddressIndexByType,
|
|
changeAddressIndex: changeAddressIndexByType,
|
|
addressPageType: data['address_page_type'] as String?,
|
|
derivationType: derivationType,
|
|
derivationPath: derivationPath,
|
|
silentAddresses: silentAddresses,
|
|
silentAddressIndex: silentAddressIndex,
|
|
mwebAddresses: mwebAddresses,
|
|
);
|
|
}
|
|
}
|