Reformat the whole codebase with 100 line width (#3403)
What changed, and why it matters
This commit is a purely cosmetic reformatting of the entire codebase to use a 100-character line width. It adjusts whitespace, line breaks, and indentation across hundreds of files but does not change any program logic, security behavior, or functionality. The only non-formatting change is that the GitHub Actions lint workflow was disabled by commenting it out, which is a CI/process change rather than a product security issue.
No security action required. If desired, verify that the lint workflow was intentionally disabled and track re-enabling it separately; otherwise treat this as a routine style-only commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff shows an automated code-style refactor: +17,518 / -17,092 lines across 801 files, almost entirely whitespace and line-wrap adjustments in Dart source files. No semantic code changes, no new dependencies, no altered algorithms, and no changes to cryptographic, networking, or storage logic were introduced. The .github/workflows/lint.yml file was commented out, disabling the lint CI job. Verified references supplied are none, and the commit message explicitly describes the change as a reformat.
Changed components
Entire Dart codebase (formatting only).github/workflows/lint.yml (CI job disabled)Inspect captured patch +17518 / −17092
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index e496201..da28592 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -6,110 +6,110 @@ defaults:
run:
shell: bash
jobs:
- lint:
- runs-on: [Linux, amd64, android]
- container:
- image: ghcr.io/cake-tech/cake_wallet:debian13-flutter3.41.9-ndkr28-go1.24.1-ruststablenightly
- env:
- STORE_PASS: test@cake_wallet
- KEY_PASS: test@cake_wallet
- MONEROC_CACHE_DIR_ROOT: /opt/generic_cache
- BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
- ANDROID_AVD_HOME: /root/.android/avd
- volumes:
- - /opt/cw_cache_android/root/.cache:/root/.cache
- - /opt/cw_cache_android/root/.android/avd/:/root/.android/avd
- - /opt/cw_cache_android/root/.ccache:/root/.ccache
- - /opt/cw_cache_android/root/.pub-cache/:/root/.pub-cache
- - /opt/cw_cache_android/root/.gradle/:/root/.gradle
- - /opt/cw_cache_android/root/.android/:/root/.android
- - /opt/cw_cache_android/root/go/pkg:/root/go/pkg
- - /opt/cw_cache_android/opt/generic_cache:/opt/generic_cache
- - /dev/kvm:/dev/kvm
- - /var/run/docker.sock:/var/run/docker.sock
- strategy:
- matrix:
- api-level: [ 29 ]
-
- steps:
- - name: Fix github actions messing up $HOME...
- run: "echo HOME=/root | sudo tee -a $GITHUB_ENV"
- - uses: actions/checkout@v4
- with:
- ref: ${{ inputs.ref }}
-
- - name: configure git
- run: |
- git config --global --add safe.directory '*'
- git config --global user.email "ci@cakewallet.com"
- git config --global user.name "CakeWallet CI"
-
- - name: Fetch prebuilt Torch
- run: |
- set -x -e
- pushd scripts
- wget https://github.com/MrCyjaneK/torch_dart/releases/download/v1.0.17/torch_dart-v1.0.17.tar.gz -O torch_dart.tar.gz
- rm -rf torch_dart
- mkdir torch_dart
- pushd torch_dart
- tar -xzf ../torch_dart.tar.gz
- popd
- rm ./torch_dart.tar.gz
- popd
-
- - name: Fetch prebuilt Reown
- run: |
- set -x -e
- pushd scripts
- # cleaning
- rm -rf reown_flutter
- rm -f reown_flutter.tar.gz
-
- wget https://github.com/cake-tech/reown_flutter/releases/download/v0.0.4/reown_flutter-v0.0.4.tar.gz -O reown_flutter.tar.gz
- mkdir reown_flutter
- pushd reown_flutter
- tar -xzf ../reown_flutter.tar.gz
- popd
- rm ./reown_flutter.tar.gz
- popd
-
- - name: Build Bitbox Flutter
- run: |
- set -x -e
- pushd scripts
- ./build_bitbox_flutter.sh
- popd
-
- - name: Prepare Zcash
- run: |
- set -x -e
- scripts/prepare_zcash.sh
-
- - name: Execute Build and Setup Commands
- run: |
- pushd scripts/android
- source ./app_env.sh cakewallet
- export GITHUB_HUH=yeah
- ./app_config.sh
- popd
-
- - name: Install Flutter dependencies
- run: |
- flutter pub get
-
- - name: Build generated code
- run: |
- flutter --version
- flutter clean
- rm -rf .dart_tool
- rm pubspec.lock
- flutter pub get
- ./model_generator.sh async
-
- - name: Generate localization
- run: |
- dart run tool/generate_localization.dart
-
- - name: Lint
- run: |
- ABORT_ON_CHANGE=yeah scripts/lint.sh
\ No newline at end of file
+# lint:
+# runs-on: [Linux, amd64, android]
+# container:
+# image: ghcr.io/cake-tech/cake_wallet:debian13-flutter3.41.9-ndkr28-go1.24.1-ruststablenightly
+# env:
+# STORE_PASS: test@cake_wallet
+# KEY_PASS: test@cake_wallet
+# MONEROC_CACHE_DIR_ROOT: /opt/generic_cache
+# BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
+# ANDROID_AVD_HOME: /root/.android/avd
+# volumes:
+# - /opt/cw_cache_android/root/.cache:/root/.cache
+# - /opt/cw_cache_android/root/.android/avd/:/root/.android/avd
+# - /opt/cw_cache_android/root/.ccache:/root/.ccache
+# - /opt/cw_cache_android/root/.pub-cache/:/root/.pub-cache
+# - /opt/cw_cache_android/root/.gradle/:/root/.gradle
+# - /opt/cw_cache_android/root/.android/:/root/.android
+# - /opt/cw_cache_android/root/go/pkg:/root/go/pkg
+# - /opt/cw_cache_android/opt/generic_cache:/opt/generic_cache
+# - /dev/kvm:/dev/kvm
+# - /var/run/docker.sock:/var/run/docker.sock
+# strategy:
+# matrix:
+# api-level: [ 29 ]
+#
+# steps:
+# - name: Fix github actions messing up $HOME...
+# run: "echo HOME=/root | sudo tee -a $GITHUB_ENV"
+# - uses: actions/checkout@v4
+# with:
+# ref: ${{ inputs.ref }}
+#
+# - name: configure git
+# run: |
+# git config --global --add safe.directory '*'
+# git config --global user.email "ci@cakewallet.com"
+# git config --global user.name "CakeWallet CI"
+#
+# - name: Fetch prebuilt Torch
+# run: |
+# set -x -e
+# pushd scripts
+# wget https://github.com/MrCyjaneK/torch_dart/releases/download/v1.0.17/torch_dart-v1.0.17.tar.gz -O torch_dart.tar.gz
+# rm -rf torch_dart
+# mkdir torch_dart
+# pushd torch_dart
+# tar -xzf ../torch_dart.tar.gz
+# popd
+# rm ./torch_dart.tar.gz
+# popd
+#
+# - name: Fetch prebuilt Reown
+# run: |
+# set -x -e
+# pushd scripts
+# # cleaning
+# rm -rf reown_flutter
+# rm -f reown_flutter.tar.gz
+#
+# wget https://github.com/cake-tech/reown_flutter/releases/download/v0.0.4/reown_flutter-v0.0.4.tar.gz -O reown_flutter.tar.gz
+# mkdir reown_flutter
+# pushd reown_flutter
+# tar -xzf ../reown_flutter.tar.gz
+# popd
+# rm ./reown_flutter.tar.gz
+# popd
+#
+# - name: Build Bitbox Flutter
+# run: |
+# set -x -e
+# pushd scripts
+# ./build_bitbox_flutter.sh
+# popd
+#
+# - name: Prepare Zcash
+# run: |
+# set -x -e
+# scripts/prepare_zcash.sh
+#
+# - name: Execute Build and Setup Commands
+# run: |
+# pushd scripts/android
+# source ./app_env.sh cakewallet
+# export GITHUB_HUH=yeah
+# ./app_config.sh
+# popd
+#
+# - name: Install Flutter dependencies
+# run: |
+# flutter pub get
+#
+# - name: Build generated code
+# run: |
+# flutter --version
+# flutter clean
+# rm -rf .dart_tool
+# rm pubspec.lock
+# flutter pub get
+# ./model_generator.sh async
+#
+# - name: Generate localization
+# run: |
+# dart run tool/generate_localization.dart
+#
+# - name: Lint
+# run: |
+# ABORT_ON_CHANGE=yeah scripts/lint.sh
\ No newline at end of file
diff --git a/cw_bitcoin/lib/address_from_output.dart b/cw_bitcoin/lib/address_from_output.dart
index 0d985b2..072a92d 100644
--- a/cw_bitcoin/lib/address_from_output.dart
+++ b/cw_bitcoin/lib/address_from_output.dart
@@ -17,21 +17,16 @@ BitcoinBaseAddress addressFromScript(Script script,
switch (addressType) {
case P2pkhAddressType.p2pkh:
- return P2pkhAddress.fromScriptPubkey(
- script: script, network: BitcoinNetwork.mainnet);
+ return P2pkhAddress.fromScriptPubkey(script: script, network: BitcoinNetwork.mainnet);
case P2shAddressType.p2pkhInP2sh:
case P2shAddressType.p2pkInP2sh:
- return P2shAddress.fromScriptPubkey(
- script: script, network: BitcoinNetwork.mainnet);
+ return P2shAddress.fromScriptPubkey(script: script, network: BitcoinNetwork.mainnet);
case SegwitAddresType.p2wpkh:
- return P2wpkhAddress.fromScriptPubkey(
- script: script, network: BitcoinNetwork.mainnet);
+ return P2wpkhAddress.fromScriptPubkey(script: script, network: BitcoinNetwork.mainnet);
case SegwitAddresType.p2wsh:
- return P2wshAddress.fromScriptPubkey(
- script: script, network: BitcoinNetwork.mainnet);
+ return P2wshAddress.fromScriptPubkey(script: script, network: BitcoinNetwork.mainnet);
case SegwitAddresType.p2tr:
- return P2trAddress.fromScriptPubkey(
- script: script, network: BitcoinNetwork.mainnet);
+ return P2trAddress.fromScriptPubkey(script: script, network: BitcoinNetwork.mainnet);
}
throw ArgumentError("Invalid script");
diff --git a/cw_bitcoin/lib/bitcoin_address_record.dart b/cw_bitcoin/lib/bitcoin_address_record.dart
index d6de050..65b7289 100644
--- a/cw_bitcoin/lib/bitcoin_address_record.dart
+++ b/cw_bitcoin/lib/bitcoin_address_record.dart
@@ -72,17 +72,16 @@ class BitcoinAddressRecord extends BaseBitcoinAddressRecord {
required super.type,
String? scriptHash,
required super.network,
- }) {
+ }) {
try {
this.scriptHash = scriptHash ??
- (network != null ? BitcoinAddressUtils.scriptHash(address, network: network!) : null);
+ (network != null ? BitcoinAddressUtils.scriptHash(address, network: network!) : null);
} catch (e) {
printV(e);
}
-}
+ }
static bool _legacyDefaultForType(BitcoinAddressType type) {
-
// Some address types (p2wpkh, p2wsh) were historically derived from the same account/path as our new standard
// but using legacy formats. For these, we default to legacy = false.
if (type == SegwitAddresType.p2wpkh || type == SegwitAddresType.p2wsh) return false;
@@ -154,6 +153,7 @@ class BitcoinAddressRecord extends BaseBitcoinAddressRecord {
}
return scriptHash!;
}
+
@override
String get derivationPath {
if (type == SegwitAddresType.mweb) {
@@ -162,9 +162,7 @@ class BitcoinAddressRecord extends BaseBitcoinAddressRecord {
final coinType = _coinTypeForNetwork();
final purpose = _purposeForType(type);
- final accountPath = isLegacyDerivation
- ? electrum_path
- : "m/$purpose'/$coinType'/0'";
+ final accountPath = isLegacyDerivation ? electrum_path : "m/$purpose'/$coinType'/0'";
final chain = isHidden ? 1 : 0;
return "$accountPath/$chain/$index";
diff --git a/cw_bitcoin/lib/bitcoin_amount_format.dart b/cw_bitcoin/lib/bitcoin_amount_format.dart
index d5a42d9..dd73635 100644
--- a/cw_bitcoin/lib/bitcoin_amount_format.dart
+++ b/cw_bitcoin/lib/bitcoin_amount_format.dart
@@ -7,8 +7,8 @@ final bitcoinAmountFormat = NumberFormat()
..maximumFractionDigits = bitcoinAmountLength
..minimumFractionDigits = 1;
-String bitcoinAmountToString({required int amount}) => bitcoinAmountFormat.format(
- cryptoAmountToDouble(amount: amount, divider: bitcoinAmountDivider));
+String bitcoinAmountToString({required int amount}) =>
+ bitcoinAmountFormat.format(cryptoAmountToDouble(amount: amount, divider: bitcoinAmountDivider));
double bitcoinAmountToDouble({required int amount}) =>
cryptoAmountToDouble(amount: amount, divider: bitcoinAmountDivider);
diff --git a/cw_bitcoin/lib/bitcoin_commit_transaction_exception.dart b/cw_bitcoin/lib/bitcoin_commit_transaction_exception.dart
index 7bf488f..ffadb65 100644
--- a/cw_bitcoin/lib/bitcoin_commit_transaction_exception.dart
+++ b/cw_bitcoin/lib/bitcoin_commit_transaction_exception.dart
@@ -5,4 +5,3 @@ class BitcoinCommitTransactionException implements Exception {
@override
String toString() => errorMessage;
}
-
diff --git a/cw_bitcoin/lib/bitcoin_transaction_priority.dart b/cw_bitcoin/lib/bitcoin_transaction_priority.dart
index 46e4ca8..e38cbce 100644
--- a/cw_bitcoin/lib/bitcoin_transaction_priority.dart
+++ b/cw_bitcoin/lib/bitcoin_transaction_priority.dart
@@ -2,7 +2,8 @@ import 'package:cw_core/transaction_priority.dart';
import 'package:flutter/foundation.dart';
class BitcoinTransactionPriority extends TransactionPriority {
- const BitcoinTransactionPriority({required String title, required int raw, String? description, String? hint})
+ const BitcoinTransactionPriority(
+ {required String title, required int raw, String? description, String? hint})
: super(title: title, raw: raw, description: description, hint: hint);
static const List<BitcoinTransactionPriority> all = [fast, medium, slow, custom];
@@ -10,10 +11,10 @@ class BitcoinTransactionPriority extends TransactionPriority {
BitcoinTransactionPriority(title: 'Slow', description: "2 sat/byte", hint: "~ 24 h", raw: 0);
static const BitcoinTransactionPriority medium =
BitcoinTransactionPriority(title: 'Medium', description: "3 sat/byte", hint: "~ 1 h", raw: 1);
- static const BitcoinTransactionPriority fast =
- BitcoinTransactionPriority(title: 'Fast', description: "4 sat/byte", hint: "~ 30 min", raw: 2);
+ static const BitcoinTransactionPriority fast = BitcoinTransactionPriority(
+ title: 'Fast', description: "4 sat/byte", hint: "~ 30 min", raw: 2);
static const BitcoinTransactionPriority custom =
- BitcoinTransactionPriority(title: 'Custom', raw: 3);
+ BitcoinTransactionPriority(title: 'Custom', raw: 3);
static BitcoinTransactionPriority deserialize({required int raw}) {
switch (raw) {
@@ -116,19 +117,19 @@ class LitecoinTransactionPriority extends BitcoinTransactionPriority {
return label;
}
-
}
+
class BitcoinCashTransactionPriority extends BitcoinTransactionPriority {
const BitcoinCashTransactionPriority({required String title, required int raw})
: super(title: title, raw: raw);
static const List<BitcoinCashTransactionPriority> all = [fast, medium, slow];
static const BitcoinCashTransactionPriority slow =
- BitcoinCashTransactionPriority(title: 'Slow', raw: 0);
+ BitcoinCashTransactionPriority(title: 'Slow', raw: 0);
static const BitcoinCashTransactionPriority medium =
- BitcoinCashTransactionPriority(title: 'Medium', raw: 1);
+ BitcoinCashTransactionPriority(title: 'Medium', raw: 1);
static const BitcoinCashTransactionPriority fast =
- BitcoinCashTransactionPriority(title: 'Fast', raw: 2);
+ BitcoinCashTransactionPriority(title: 'Fast', raw: 2);
static BitcoinCashTransactionPriority deserialize({required int raw}) {
switch (raw) {
@@ -170,4 +171,3 @@ class BitcoinCashTransactionPriority extends BitcoinTransactionPriority {
return label;
}
}
-
diff --git a/cw_bitcoin/lib/bitcoin_wallet.dart b/cw_bitcoin/lib/bitcoin_wallet.dart
index a0d88ce..7e76132 100644
--- a/cw_bitcoin/lib/bitcoin_wallet.dart
+++ b/cw_bitcoin/lib/bitcoin_wallet.dart
@@ -140,7 +140,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
autorun((_) {
this.walletAddresses.isEnabledAutoGenerateSubaddress = this.isEnabledAutoGenerateSubaddress;
});
-
+
reaction((_) => this.useLightning, (bool useLightning) {
if (useLightning && LightningWallet.isAvailable) {
if (mnemonic != null) {
@@ -306,28 +306,28 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
}
return BitcoinWallet(
- mnemonic: mnemonic,
- xpub: keysData.xPub != null ? convertZpubToXpub(keysData.xPub!) : null,
- password: password,
- passphrase: passphrase,
- walletInfo: walletInfo,
- derivationInfo: derivationInfo,
- unspentCoinsInfo: unspentCoinsInfo,
- initialAddresses: snp?.addresses,
- initialSilentAddresses: snp?.silentAddresses,
- initialSilentAddressIndex: snp?.silentAddressIndex ?? 0,
- initialBalance: snp?.balance,
- initialLightningBalance: snp?.lightningBalance,
- encryptionFileUtils: encryptionFileUtils,
- seedBytes: seedBytes,
- initialRegularAddressIndex: snp?.regularAddressIndex,
- initialChangeAddressIndex: snp?.changeAddressIndex,
- addressPageType: snp?.addressPageType,
- networkParam: network,
- alwaysScan: snp?.alwaysScan,
- useLightning: snp?.useLightning,
- cachedLightningAddress: snp?.cachedLightningAddress,
- payjoinBox: payjoinBox,
+ mnemonic: mnemonic,
+ xpub: keysData.xPub != null ? convertZpubToXpub(keysData.xPub!) : null,
+ password: password,
+ passphrase: passphrase,
+ walletInfo: walletInfo,
+ derivationInfo: derivationInfo,
+ unspentCoinsInfo: unspentCoinsInfo,
+ initialAddresses: snp?.addresses,
+ initialSilentAddresses: snp?.silentAddresses,
+ initialSilentAddressIndex: snp?.silentAddressIndex ?? 0,
+ initialBalance: snp?.balance,
+ initialLightningBalance: snp?.lightningBalance,
+ encryptionFileUtils: encryptionFileUtils,
+ seedBytes: seedBytes,
+ initialRegularAddressIndex: snp?.regularAddressIndex,
+ initialChangeAddressIndex: snp?.changeAddressIndex,
+ addressPageType: snp?.addressPageType,
+ networkParam: network,
+ alwaysScan: snp?.alwaysScan,
+ useLightning: snp?.useLightning,
+ cachedLightningAddress: snp?.cachedLightningAddress,
+ payjoinBox: payjoinBox,
);
}
@@ -346,12 +346,12 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
}
try {
- final lBalance = await lightningWallet!.getBalance();
+ final lBalance = await lightningWallet!.getBalance();
- this.balance[CryptoCurrency.btcln] = ElectrumBalance(
- confirmed: lBalance,
- unconfirmed: Money.zero(CryptoCurrency.btcln),
- frozen: Money.zero(CryptoCurrency.btcln));
+ this.balance[CryptoCurrency.btcln] = ElectrumBalance(
+ confirmed: lBalance,
+ unconfirmed: Money.zero(CryptoCurrency.btcln),
+ frozen: Money.zero(CryptoCurrency.btcln));
} catch (e) {
printV("Error fetching lightning balance: $e");
}
@@ -494,7 +494,9 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
@override
Future<PendingTransaction> createTransaction(Object credentials) async {
credentials = credentials as BitcoinTransactionCredentials;
- final lnAddr = credentials.outputs.first.isParsedAddress ? credentials.outputs.first.extractedAddress! : credentials.outputs.first.address;
+ final lnAddr = credentials.outputs.first.isParsedAddress
+ ? credentials.outputs.first.extractedAddress!
+ : credentials.outputs.first.address;
final isLNCompatible = await lightningWallet?.isCompatible(lnAddr);
if ((credentials.coinTypeToSpendFrom == UnspentCoinType.lightning && lightningWallet != null) ||
@@ -506,12 +508,12 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
amount = credentials.outputs.first.cryptoAmount;
}
-
return lightningWallet!.createTransaction(
- lnAddr,
- amount.amount > BigInt.zero ? amount.amount : null,
- credentials.priority,
- credentials.outputs.first.sendAll,);
+ lnAddr,
+ amount.amount > BigInt.zero ? amount.amount : null,
+ credentials.priority,
+ credentials.outputs.first.sendAll,
+ );
}
final tx = (await super.createTransaction(credentials)) as PendingBitcoinTransaction;
diff --git a/cw_bitcoin/lib/bitcoin_wallet_addresses.dart b/cw_bitcoin/lib/bitcoin_wallet_addresses.dart
index 6abce96..0bc7f8c 100644
--- a/cw_bitcoin/lib/bitcoin_wallet_addresses.dart
+++ b/cw_bitcoin/lib/bitcoin_wallet_addresses.dart
@@ -137,7 +137,8 @@ abstract class BitcoinWalletAddressesBase extends ElectrumWalletAddresses with S
}
@override
- bool containsAddress(String address) => super.containsAddress(address) || address == lightningAddress;
+ bool containsAddress(String address) =>
+ super.containsAddress(address) || address == lightningAddress;
@override
String get addressForBuy {
@@ -153,12 +154,9 @@ abstract class BitcoinWalletAddressesBase extends ElectrumWalletAddresses with S
@override
String get addressForExchange {
-
final current = getFreshAddress();
final availableReceiveAddresses = receiveAddresses.where((element) =>
- !element.isUsed &&
- !element.isHidden &&
- !hiddenAddresses.contains(element.address));
+ !element.isUsed && !element.isHidden && !hiddenAddresses.contains(element.address));
final bool isSilentPaymentsPage = addressPageType == SilentPaymentsAddresType.p2sp;
final bool isLightningPage = addressPageType == LightningAddressType.p2l;
diff --git a/cw_bitcoin/lib/bitcoin_wallet_creation_credentials.dart b/cw_bitcoin/lib/bitcoin_wallet_creation_credentials.dart
index 479cf64..658969c 100644
--- a/cw_bitcoin/lib/bitcoin_wallet_creation_credentials.dart
+++ b/cw_bitcoin/lib/bitcoin_wallet_creation_credentials.dart
@@ -59,27 +59,27 @@ class BitcoinRestoreWalletFromWIFCredentials extends WalletCredentials {
}
class BitcoinWalletFromKeysCredentials extends WalletCredentials {
- BitcoinWalletFromKeysCredentials({
- required String name,
- required String password,
- required this.xpub,
- WalletInfo? walletInfo,
- super.hardwareWalletType
- }) : super(name: name, password: password, walletInfo: walletInfo);
+ BitcoinWalletFromKeysCredentials(
+ {required String name,
+ required String password,
+ required this.xpub,
+ WalletInfo? walletInfo,
+ super.hardwareWalletType})
+ : super(name: name, password: password, walletInfo: walletInfo);
final String xpub;
}
class LitecoinWalletFromKeysCredentials extends WalletCredentials {
- LitecoinWalletFromKeysCredentials({
- required String name,
- required String password,
- required this.xpub,
- required this.scanSecret,
- required this.spendPubkey,
- WalletInfo? walletInfo,
- super.hardwareWalletType
- }) : super(name: name, password: password, walletInfo: walletInfo);
+ LitecoinWalletFromKeysCredentials(
+ {required String name,
+ required String password,
+ required this.xpub,
+ required this.scanSecret,
+ required this.spendPubkey,
+ WalletInfo? walletInfo,
+ super.hardwareWalletType})
+ : super(name: name, password: password, walletInfo: walletInfo);
final String xpub;
final String scanSecret;
diff --git a/cw_bitcoin/lib/bitcoin_wallet_keys.dart b/cw_bitcoin/lib/bitcoin_wallet_keys.dart
index 4ed0da4..9a9bdcb 100644
--- a/cw_bitcoin/lib/bitcoin_wallet_keys.dart
+++ b/cw_bitcoin/lib/bitcoin_wallet_keys.dart
@@ -1,15 +1,12 @@
class BitcoinWalletKeys {
- const BitcoinWalletKeys({required this.wif, required this.privateKey, required this.publicKey, required this.xpub});
+ const BitcoinWalletKeys(
+ {required this.wif, required this.privateKey, required this.publicKey, required this.xpub});
final String wif;
final String privateKey;
final String publicKey;
final String xpub;
- Map<String, String> toJson() => {
- 'wif': wif,
- 'privateKey': privateKey,
- 'publicKey': publicKey,
- 'xpub': xpub
- };
-}
\ No newline at end of file
+ Map<String, String> toJson() =>
+ {'wif': wif, 'privateKey': privateKey, 'publicKey': publicKey, 'xpub': xpub};
+}
diff --git a/cw_bitcoin/lib/bitcoin_wallet_service.dart b/cw_bitcoin/lib/bitcoin_wallet_service.dart
index 8a034d8..836b006 100644
--- a/cw_bitcoin/lib/bitcoin_wallet_service.dart
+++ b/cw_bitcoin/lib/bitcoin_wallet_service.dart
@@ -21,8 +21,7 @@ class BitcoinWalletService extends WalletService<
BitcoinRestoreWalletFromSeedCredentials,
BitcoinWalletFromKeysCredentials,
BitcoinRestoreWalletFromHardware> {
- BitcoinWalletService(this.unspentCoinsInfoSource,
- this.payjoinSessionSource, this.isDirect);
+ BitcoinWalletService(this.unspentCoinsInfoSource, this.payjoinSessionSource, this.isDirect);
final Box<UnspentCoinsInfo> unspentCoinsInfoSource;
final Box<PayjoinSession> payjoinSessionSource;
@@ -38,9 +37,12 @@ class BitcoinWalletService extends WalletService<
final String mnemonic;
final derivationInfo = await credentials.walletInfo!.getDerivationInfo();
- derivationInfo.derivationType = credentials.derivationInfo?.derivationType ?? derivationInfo.derivationType;
- derivationInfo.derivationPath = credentials.derivationInfo?.derivationPath ?? derivationInfo.derivationPath;
- derivationInfo.description = credentials.derivationInfo?.description ?? derivationInfo.description;
+ derivationInfo.derivationType =
+ credentials.derivationInfo?.derivationType ?? derivationInfo.derivationType;
+ derivationInfo.derivationPath =
+ credentials.derivationInfo?.derivationPath ?? derivationInfo.derivationPath;
+ derivationInfo.description =
+ credentials.derivationInfo?.description ?? derivationInfo.description;
derivationInfo.scriptType = credentials.derivationInfo?.scriptType ?? derivationInfo.scriptType;
await derivationInfo.save();
switch (derivationInfo.derivationType) {
@@ -119,8 +121,9 @@ class BitcoinWalletService extends WalletService<
}
await WalletInfo.delete(walletInfo);
- final unspentCoinsToDelete = unspentCoinsInfoSource.values.where(
- (unspentCoin) => unspentCoin.walletId == walletInfo.id).toList();
+ final unspentCoinsToDelete = unspentCoinsInfoSource.values
+ .where((unspentCoin) => unspentCoin.walletId == walletInfo.id)
+ .toList();
final keysToDelete = unspentCoinsToDelete.map((unspentCoin) => unspentCoin.key).toList();
@@ -135,11 +138,10 @@ class BitcoinWalletService extends WalletService<
final network = isTestnet == true ? BitcoinNetwork.testnet : BitcoinNetwork.mainnet;
credentials.walletInfo?.network = network.value;
final derivationInfo = await credentials.walletInfo!.getDerivationInfo();
- derivationInfo.derivationPath =
- credentials.hwAccountData.derivationPath;
-
+ derivationInfo.derivationPath = credentials.hwAccountData.derivationPath;
+
final xpub = convertAnyToXpub(credentials.hwAccountData.xpub!);
-
+
await credentials.walletInfo!.save();
final wallet = await BitcoinWallet(
password: credentials.password!,
diff --git a/cw_bitcoin/lib/electrum.dart b/cw_bitcoin/lib/electrum.dart
index 052d18e..44aa096 100644
--- a/cw_bitcoin/lib/electrum.dart
+++ b/cw_bitcoin/lib/electrum.dart
@@ -304,9 +304,9 @@ class ElectrumClient {
});
Future<Map<String, List<Map<String, dynamic>>>> getBatchHistory(
- List<String> scriptHashes, {
- int timeout = 10000,
- }) async {
+ List<String> scriptHashes, {
+ int timeout = 10000,
+ }) async {
final paramsList = scriptHashes.map((h) => <Object>[h]).toList(growable: false);
final batchResults = await callBatchWithTimeout(
@@ -342,9 +342,9 @@ class ElectrumClient {
}
Future<Map<String, List<Map<String, dynamic>>>> getBatchUnspent(
- List<String> scriptHashes, {
- int timeout = 10000,
- }) async {
+ List<String> scriptHashes, {
+ int timeout = 10000,
+ }) async {
final paramsList = scriptHashes.map((h) => <Object>[h]).toList(growable: false);
final batchResults = await callBatchWithTimeout(
@@ -380,9 +380,9 @@ class ElectrumClient {
}
Future<Map<String, Map<String, dynamic>>> getBatchBalance(
- List<String> scriptHashes, {
- int timeout = 10000,
- }) async {
+ List<String> scriptHashes, {
+ int timeout = 10000,
+ }) async {
final paramsList = scriptHashes.map((h) => <Object>[h]).toList(growable: false);
final batchResults = await callBatchWithTimeout(
@@ -416,9 +416,9 @@ class ElectrumClient {
}
Future<Map<String, Map<String, dynamic>>> getBatchTransactionVerbose(
- List<String> hashes, {
- int timeout = 10000,
- }) async {
+ List<String> hashes, {
+ int timeout = 10000,
+ }) async {
final result = <String, Map<String, dynamic>>{};
if (hashes.isEmpty) return result;
@@ -443,9 +443,9 @@ class ElectrumClient {
}
Future<Map<String, String?>> getBatchTransactionHex(
- List<String> hashes, {
- int timeout = 10000,
- }) async {
+ List<String> hashes, {
+ int timeout = 10000,
+ }) async {
final result = <String, String?>{};
if (hashes.isEmpty) return result;
@@ -483,12 +483,8 @@ class ElectrumClient {
// Build the Batch Array
final List<Map<String, dynamic>> batchPayload = [];
for (int i = 0; i < paramsList.length; i++) {
- batchPayload.add({
- "jsonrpc": "2.0",
- "method": method,
- "params": paramsList[i],
- "id": "$batchBaseId-$i"
- });
+ batchPayload.add(
+ {"jsonrpc": "2.0", "method": method, "params": paramsList[i], "id": "$batchBaseId-$i"});
}
// Register the task
@@ -775,7 +771,6 @@ class ElectrumClient {
}
void _handleResponse(dynamic response) {
-
// Handle batch response
if (response is List) {
if (response.isEmpty) return;
diff --git a/cw_bitcoin/lib/electrum_transaction_history.dart b/cw_bitcoin/lib/electrum_transaction_history.dart
index 6457832..5de131c 100644
--- a/cw_bitcoin/lib/electrum_transaction_history.dart
+++ b/cw_bitcoin/lib/electrum_transaction_history.dart
@@ -1,6 +1,5 @@
import 'dart:convert';
-
import 'package:cw_bitcoin/electrum_transaction_info.dart';
import 'package:cw_core/encryption_file_utils.dart';
import 'package:cw_core/pathForWallet.dart';
diff --git a/cw_bitcoin/lib/electrum_transaction_info.dart b/cw_bitcoin/lib/electrum_transaction_info.dart
index a58829e..48c006a 100644
--- a/cw_bitcoin/lib/electrum_transaction_info.dart
+++ b/cw_bitcoin/lib/electrum_transaction_info.dart
@@ -184,15 +184,13 @@ class ElectrumTransactionInfo extends TransactionInfo {
// MWEB HogEx
final isHogExTx = (BtcTransaction tx) {
- if (tx.inputs.isEmpty || tx.inputs.first.txIndex > 0 || tx.outputs.isEmpty)
- return false;
+ if (tx.inputs.isEmpty || tx.inputs.first.txIndex > 0 || tx.outputs.isEmpty) return false;
final b = tx.outputs.first.scriptPubKey.toBytes();
return b.length == 34 && b[0] == 88 && b[1] == 32;
};
final firstInput = bundle.ins.isNotEmpty ? bundle.ins.first : null;
- final isHogEx = firstInput != null &&
- isHogExTx(bundle.originalTransaction) &&
- isHogExTx(firstInput);
+ final isHogEx =
+ firstInput != null && isHogExTx(bundle.originalTransaction) && isHogExTx(firstInput);
final fee = hasMissingInputTx ? null : inputAmount - totalOutAmount;
final walletCurrency = walletTypeToCryptoCurrency(type);
diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart
index ccd41d0..bc7d45e 100644
--- a/cw_bitcoin/lib/electrum_wallet.dart
+++ b/cw_bitcoin/lib/electrum_wallet.dart
@@ -156,7 +156,6 @@ abstract class ElectrumWalletBase
sideHdByType[type] = sideHd;
}
}
-
}
int _purposeForType(BitcoinAddressType type) {
@@ -195,7 +194,6 @@ abstract class ElectrumWalletBase
/// For LEGACY addresses, returns the wallet's legacy derivation base (derivationInfo.derivationPath)
/// which is already the account path used historically (e.g. m/0' or m/84'/0'/0').
String _accountDerivationPathForRecord(BaseBitcoinAddressRecord record) {
-
if (derivationInfo.derivationType == DerivationType.electrum) {
return derivationInfo.derivationPath ?? electrum_path; // m/0'
}
@@ -807,7 +805,7 @@ abstract class ElectrumWalletBase
node!.isElectrs = true;
// TODO figure out why condition was needed
// if (node!.isInBox) {
- node!.save();
+ node!.save();
// }
return node!.isElectrs!;
}
@@ -873,7 +871,8 @@ abstract class ElectrumWalletBase
BigInt get networkDustAmount => BigInt.from(546);
- bool _isBelowDust(BigInt amount) => amount <= networkDustAmount && network != BitcoinNetwork.testnet;
+ bool _isBelowDust(BigInt amount) =>
+ amount <= networkDustAmount && network != BitcoinNetwork.testnet;
UtxoDetails _createUTXOS({
required bool sendAll,
@@ -961,8 +960,7 @@ abstract class ElectrumWalletBase
final baseDerivationPath = _accountDerivationPathForRecord(utx.bitcoinAddressRecord);
- final derivationPath =
- "${_hardenedDerivationPath(baseDerivationPath)}"
+ final derivationPath = "${_hardenedDerivationPath(baseDerivationPath)}"
"/${utx.bitcoinAddressRecord.isHidden ? "1" : "0"}"
"/${utx.bitcoinAddressRecord.index}";
publicKeys[address.pubKeyHash()] = PublicKeyWithDerivationPath(pubKeyHex, derivationPath);
@@ -1139,7 +1137,8 @@ abstract class ElectrumWalletBase
utxoDetails.utxos.length ==
utxoDetails.availableInputs.length - utxoDetails.unconfirmedCoins.length;
- final amountLeftForChangeAndFee = utxoDetails.allInputsAmount - credentialsAmount.amount.toInt();
+ final amountLeftForChangeAndFee =
+ utxoDetails.allInputsAmount - credentialsAmount.amount.toInt();
if (amountLeftForChangeAndFee <= 0) {
if (!spendingAllCoins) {
@@ -1175,11 +1174,9 @@ abstract class ElectrumWalletBase
isChange: true,
));
-
// Must match the address' account root (purpose/coinType) and legacy derivation when applicable.
final changeBaseDerivationPath = _accountDerivationPathForRecord(changeAddress);
- final changeDerivationPath =
- "${_hardenedDerivationPath(changeBaseDerivationPath)}"
+ final changeDerivationPath = "${_hardenedDerivationPath(changeBaseDerivationPath)}"
"/${changeAddress.isHidden ? "1" : "0"}"
"/${changeAddress.index}";
utxoDetails.publicKeys[address.pubKeyHash()] =
@@ -1242,7 +1239,8 @@ abstract class ElectrumWalletBase
inputPrivKeyInfos: utxoDetails.inputPrivKeyInfos,
vinOutpoints: utxoDetails.vinOutpoints,
);
- final leftover = utxoDetails.allInputsAmount - credentialsAmount.amount.toInt() - feeNoChange;
+ final leftover =
+ utxoDetails.allInputsAmount - credentialsAmount.amount.toInt() - feeNoChange;
if (leftover >= 0) {
final finalFee = feeNoChange + leftover; // absorb tiny remainder
@@ -1827,16 +1825,15 @@ abstract class ElectrumWalletBase
}
Future<List<List<BitcoinUnspent>?>> _fetchUnspentsRegular(
- List<BitcoinAddressRecord> addresses,
- ) async {
+ List<BitcoinAddressRecord> addresses,
+ ) async {
final addressFutures = addresses.map((address) => fetchUnspent(address)).toList();
return Future.wait(addressFutures);
}
-
Future<List<List<BitcoinUnspent>?>> _fetchUnspentsBatch(
- List<BitcoinAddressRecord> addresses,
- ) async {
+ List<BitcoinAddressRecord> addresses,
+ ) async {
final byScriptHash = <String, BitcoinAddressRecord>{
for (final address in addresses) address.getScriptHash(network): address,
};
@@ -1845,7 +1842,7 @@ abstract class ElectrumWalletBase
try {
final unspentByScriptHash =
- await _processChunksToMap<String, String, List<Map<String, dynamic>>>(
+ await _processChunksToMap<String, String, List<Map<String, dynamic>>>(
items: scriptHashes,
chunkSize: addressHistoryChunkSize,
processChunk: _getListUnspentBatch,
@@ -2131,10 +2128,7 @@ abstract class ElectrumWalletBase
final hd = _hdFor(record: addressRecord);
- final privkey = generateECPrivate(
- hd: hd,
- index: addressRecord.index,
- network: network);
+ final privkey = generateECPrivate(hd: hd, index: addressRecord.index, network: network);
privateKeys.add(privkey);
@@ -2197,8 +2191,7 @@ abstract class ElectrumWalletBase
final deduction = (outputAmount - networkDustAmount >= remainingFee)
? remainingFee
: outputAmount - networkDustAmount;
- outputs[i] = BitcoinOutput(
- address: output.address, value: outputAmount - deduction);
+ outputs[i] = BitcoinOutput(address: output.address, value: outputAmount - deduction);
remainingFee -= deduction;
if (remainingFee <= BigInt.zero) break;
@@ -2464,7 +2457,8 @@ abstract class ElectrumWalletBase
@override
Future<Map<String, ElectrumTransactionInfo>> fetchTransactions() async {
try {
- final Map<String, ElectrumTransactionInfo> historiesWithDetails = {};;
+ final Map<String, ElectrumTransactionInfo> historiesWithDetails = {};
+ ;
printV('[BATCH_TEST] Fetching transactions with batch: $shouldUseBatchFetching');
@@ -2473,19 +2467,16 @@ abstract class ElectrumWalletBase
? fetchTransactionsForAddressTypeBatch(historiesWithDetails, type)
: fetchTransactionsForAddressType(historiesWithDetails, type)));
} else if (type == WalletType.bitcoinCash) {
- await Future.wait(BITCOIN_CASH_ADDRESS_TYPES
- .map((type) => shouldUseBatchFetching
+ await Future.wait(BITCOIN_CASH_ADDRESS_TYPES.map((type) => shouldUseBatchFetching
? fetchTransactionsForAddressTypeBatch(historiesWithDetails, type)
: fetchTransactionsForAddressType(historiesWithDetails, type)));
} else if (type == WalletType.litecoin) {
- await Future.wait(LITECOIN_ADDRESS_TYPES
- .where((type) => type != SegwitAddresType.mweb)
- .map((type) => shouldUseBatchFetching
- ? fetchTransactionsForAddressTypeBatch(historiesWithDetails, type)
- : fetchTransactionsForAddressType(historiesWithDetails, type)));
+ await Future.wait(LITECOIN_ADDRESS_TYPES.where((type) => type != SegwitAddresType.mweb).map(
+ (type) => shouldUseBatchFetching
+ ? fetchTransactionsForAddressTypeBatch(historiesWithDetails, type)
+ : fetchTransactionsForAddressType(historiesWithDetails, type)));
} else if (type == WalletType.dogecoin) {
- await Future.wait(DOGECOIN_ADDRESS_TYPES
- .map((type) => shouldUseBatchFetching
+ await Future.wait(DOGECOIN_ADDRESS_TYPES.map((type) => shouldUseBatchFetching
? fetchTransactionsForAddressTypeBatch(historiesWithDetails, type)
: fetchTransactionsForAddressType(historiesWithDetails, type)));
}
@@ -2633,8 +2624,7 @@ abstract class ElectrumWalletBase
}
Future<void> fetchTransactionsForAddressTypeBatch(
- Map<String, ElectrumTransactionInfo> historiesWithDetails,
- BitcoinAddressType type) async {
+ Map<String, ElectrumTransactionInfo> historiesWithDetails, BitcoinAddressType type) async {
final addressesByType =
walletAddresses.allAddresses.where((addr) => addr.type == type).toList();
final receiveAddresses = addressesByType.where((addr) => !addr.isHidden).toList();
@@ -2676,14 +2666,13 @@ abstract class ElectrumWalletBase
);
}
-
Future<void> fetchTransactionsForAddressesBranchBatch(
- Map<String, ElectrumTransactionInfo> historiesWithDetails,
- BitcoinAddressType type,
- List<BitcoinAddressRecord> branchAddresses, {
- required bool isHidden,
- required bool isLegacyDerivation,
- }) async {
+ Map<String, ElectrumTransactionInfo> historiesWithDetails,
+ BitcoinAddressType type,
+ List<BitcoinAddressRecord> branchAddresses, {
+ required bool isHidden,
+ required bool isLegacyDerivation,
+ }) async {
if (branchAddresses.isEmpty) return;
final tip = await getCurrentChainTip();
@@ -2714,7 +2703,6 @@ abstract class ElectrumWalletBase
if (!shouldDiscover) return;
-
final newAddresses = await walletAddresses.discoverAddressesBatch(
currentBranch,
isHidden,
@@ -2756,9 +2744,7 @@ abstract class ElectrumWalletBase
}
Future<Map<String, ElectrumTransactionInfo>> _fetchBatchAddressHistory(
- List<BitcoinAddressRecord> addressRecords,
- int? currentHeight,
- int historyChunkSize) async {
+ List<BitcoinAddressRecord> addressRecords, int? currentHeight, int historyChunkSize) async {
String lastTxId = '';
bool didUpdateHistory = false;
@@ -2769,11 +2755,8 @@ abstract class ElectrumWalletBase
final scriptHashes = addressRecords.map((a) => a.getScriptHash(network)).toList();
final historyByScriptHash =
- await _processChunksToMap<String, String, List<Map<String, dynamic>>>(
- items: scriptHashes,
- chunkSize: historyChunkSize,
- processChunk: _getHistoryBatch
- );
+ await _processChunksToMap<String, String, List<Map<String, dynamic>>>(
+ items: scriptHashes, chunkSize: historyChunkSize, processChunk: _getHistoryBatch);
// Map scriptHash -> addressRecord
final byScriptHash = <String, BitcoinAddressRecord>{};
@@ -2869,8 +2852,7 @@ abstract class ElectrumWalletBase
.toList(growable: false);
final heightsByHash = <String, int?>{
- for (final e in chunkHistory)
- (e['tx_hash'] as String): (e['height'] as int?),
+ for (final e in chunkHistory) (e['tx_hash'] as String): (e['height'] as int?),
};
final infosByHash = await fetchTransactionInfoBatch(
@@ -2909,40 +2891,35 @@ abstract class ElectrumWalletBase
}
}
- Future<Map<String, Map<String, dynamic>>> _getTransactionVerboseBatch(
- List<String> hashes) {
+ Future<Map<String, Map<String, dynamic>>> _getTransactionVerboseBatch(List<String> hashes) {
return electrumClient.getBatchTransactionVerbose(
hashes,
timeout: transactionBatchTimeoutMs,
);
}
- Future<Map<String, String?>> _getTransactionHexBatch(
- List<String> hashes) {
+ Future<Map<String, String?>> _getTransactionHexBatch(List<String> hashes) {
return electrumClient.getBatchTransactionHex(
hashes,
timeout: transactionBatchTimeoutMs,
);
}
- Future<Map<String, List<Map<String, dynamic>>>> _getHistoryBatch(
- List<String> scriptHashes) {
+ Future<Map<String, List<Map<String, dynamic>>>> _getHistoryBatch(List<String> scriptHashes) {
return electrumClient.getBatchHistory(
scriptHashes,
timeout: transactionBatchTimeoutMs,
);
}
- Future<Map<String, List<Map<String, dynamic>>>> _getListUnspentBatch(
- List<String> scriptHashes) {
+ Future<Map<String, List<Map<String, dynamic>>>> _getListUnspentBatch(List<String> scriptHashes) {
return electrumClient.getBatchUnspent(
scriptHashes,
timeout: transactionBatchTimeoutMs,
);
}
- Future<Map<String, Map<String, dynamic>>> _getBalanceBatch(
- List<String> scriptHashes) {
+ Future<Map<String, Map<String, dynamic>>> _getBalanceBatch(List<String> scriptHashes) {
return electrumClient.getBatchBalance(
scriptHashes,
timeout: transactionBatchTimeoutMs,
@@ -2956,8 +2933,7 @@ abstract class ElectrumWalletBase
Duration retryDelay = const Duration(seconds: 2),
}) async {
final result = <String, ElectrumTransactionInfo?>{};
- final uniqueHashes =
- hashes.map((h) => h.trim()).where((h) => h.isNotEmpty).toSet().toList();
+ final uniqueHashes = hashes.map((h) => h.trim()).where((h) => h.isNotEmpty).toSet().toList();
if (uniqueHashes.isEmpty) return result;
@@ -2990,9 +2966,8 @@ abstract class ElectrumWalletBase
required Map<String, int?>? heightsByHash,
}) async {
for (var i = 0; i < txIds.length; i += transactionChunkSize) {
- final end = (i + transactionChunkSize < txIds.length)
- ? i + transactionChunkSize
- : txIds.length;
+ final end =
+ (i + transactionChunkSize < txIds.length) ? i + transactionChunkSize : txIds.length;
final chunk = txIds.sublist(i, end);
final bundlesByHash = await getTransactionExpandedBatch(
@@ -3024,9 +2999,8 @@ abstract class ElectrumWalletBase
}
}
- Future<Map<String, ElectrumTransactionBundle>> getTransactionExpandedBatch({
- required List<String> hashes,
- Map<String, int?>? heightsByHash}) async {
+ Future<Map<String, ElectrumTransactionBundle>> getTransactionExpandedBatch(
+ {required List<String> hashes, Map<String, int?>? heightsByHash}) async {
final bundles = <String, ElectrumTransactionBundle>{};
if (hashes.isEmpty) return bundles;
@@ -3062,8 +3036,8 @@ abstract class ElectrumWalletBase
Future<Map<String, Map<String, dynamic>>> _fetchTransactionVerboseBatch(
List<String> txIds) async {
-
- final verboseTransactionByHash = await _processChunksToMap<String, String, Map<String, dynamic>>(
+ final verboseTransactionByHash =
+ await _processChunksToMap<String, String, Map<String, dynamic>>(
items: txIds,
chunkSize: transactionChunkSize,
processChunk: _getTransactionVerboseBatch,
@@ -3100,8 +3074,8 @@ abstract class ElectrumWalletBase
}
Map<String, BtcTransaction> _parseTransactions(
- Map<String, Map<String, dynamic>> verboseByHash,
- ) {
+ Map<String, Map<String, dynamic>> verboseByHash,
+ ) {
final result = <String, BtcTransaction>{};
for (final entry in verboseByHash.entries) {
@@ -3116,10 +3090,9 @@ abstract class ElectrumWalletBase
return result;
}
-
Map<String, List<String>> _collectInputTxIdsByHash(
- Map<String, BtcTransaction> originalByHash,
- ) {
+ Map<String, BtcTransaction> originalByHash,
+ ) {
final inputTxIdsByHash = <String, List<String>>{};
for (final entry in originalByHash.entries) {
@@ -3201,8 +3174,8 @@ abstract class ElectrumWalletBase
}
Future<Map<int, int>> _fetchBlockTimestampsFromMempoolByHeights(
- Set<int> heights,
- ) async {
+ Set<int> heights,
+ ) async {
final out = <int, int>{};
if (heights.isEmpty) return out;
if (!(await checkIfMempoolAPIIsEnabled())) return out;
@@ -3212,10 +3185,10 @@ abstract class ElectrumWalletBase
try {
final blockHashResp = await ProxyWrapper()
.get(
- clearnetUri: Uri.parse(
- 'https://mempool.cakewallet.com/api/v1/block-height/$h',
- ),
- )
+ clearnetUri: Uri.parse(
+ 'https://mempool.cakewallet.com/api/v1/block-height/$h',
+ ),
+ )
.timeout(const Duration(seconds: 15));
if (blockHashResp.statusCode != 200 || blockHashResp.body.isEmpty) return;
@@ -3225,10 +3198,10 @@ abstract class ElectrumWalletBase
final blockResp = await ProxyWrapper()
.get(
- clearnetUri: Uri.parse(
- 'https://mempool.cakewallet.com/api/v1/block/$blockHash',
- ),
- )
+ clearnetUri: Uri.parse(
+ 'https://mempool.cakewallet.com/api/v1/block/$blockHash',
+ ),
+ )
.timeout(const Duration(seconds: 15));
if (blockResp.statusCode != 200 || blockResp.body.isEmpty) return;
@@ -3276,7 +3249,6 @@ abstract class ElectrumWalletBase
return result;
}
-
Future<void> updateTransactions() async {
printV("updateTransactions() called!");
try {
@@ -3368,8 +3340,7 @@ abstract class ElectrumWalletBase
}
try {
- final balancesByScriptHash =
- await _processChunksToMap<String, String, Map<String, dynamic>>(
+ final balancesByScriptHash = await _processChunksToMap<String, String, Map<String, dynamic>>(
items: scriptHashes,
chunkSize: addressHistoryChunkSize,
processChunk: _getBalanceBatch,
@@ -3415,7 +3386,8 @@ abstract class ElectrumWalletBase
? await fetchBalancesBatch(addresses)
: await fetchBalancesRegular(addresses);
- printV('Fetched balances for ${addresses.length} addresses. Batch fetching: $shouldUseBatchFetching');
+ printV(
+ 'Fetched balances for ${addresses.length} addresses. Batch fetching: $shouldUseBatchFetching');
var totalFrozen = 0;
var totalConfirmed = 0;
@@ -3544,17 +3516,14 @@ abstract class ElectrumWalletBase
// that matches this received transaction, mark it as being from a peg out:
for (final tx2 in transactionHistory.transactions.values) {
final heightDiff = ((tx2.height ?? 0) - (tx.height ?? 0)).abs();
- // this isn't a perfect matching algorithm since we don't have the right input/output information from these transaction models (the addresses are in different formats), but this should be more than good enough for now as it's extremely unlikely a user receives the EXACT same amount from 2 different sources and one of them is a peg out and the other isn't WITHIN 5 blocks of each other
- if (tx2.additionalInfo["isPegOut"] == true &&
- tx2.amount == tx.amount &&
- heightDiff <= 5) {
+ // this isn't a perfect matching algorithm since we don't have the right input/output information from these transaction models (the addresses are in different formats), but this should be more than good enough for now as it's extremely unlikely a user receives the EXACT same amount from 2 different sources and one of them is a peg out and the other isn't WITHIN 5 blocks of each other
+ if (tx2.additionalInfo["isPegOut"] == true && tx2.amount == tx.amount && heightDiff <= 5) {
tx.additionalInfo["fromPegOut"] = true;
}
}
}
Future<void> checkIfBatchSupported() async {
-
if (_isBatchSupported != null) {
printV('[BATCH_TEST] Already checked: $_isBatchSupported');
return;
@@ -3580,9 +3549,7 @@ abstract class ElectrumWalletBase
);
final hasError = result.any((item) =>
- item is Map<String, dynamic> &&
- item.containsKey('error') &&
- item['error'] != null);
+ item is Map<String, dynamic> && item.containsKey('error') && item['error'] != null);
if (hasError) {
_isBatchSupported = false;
diff --git a/cw_bitcoin/lib/electrum_wallet_addresses.dart b/cw_bitcoin/lib/electrum_wallet_addresses.dart
index 239fa49..239977e 100644
--- a/cw_bitcoin/lib/electrum_wallet_addresses.dart
+++ b/cw_bitcoin/lib/electrum_wallet_addresses.dart
@@ -195,13 +195,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
}
if (addressPageType == LightningAddressType.p2l) {
- return lightningAddress ??
- "Error: Unable to fetch your Lightning address, please check your network connection.";
+ return lightningAddress ??
+ "Error: Unable to fetch your Lightning address, please check your network connection.";
}
- final typeMatchingAddressesAll = _addresses
- .where((addr) => !addr.isHidden && _isAddressPageTypeMatch(addr))
- .toList();
+ final typeMatchingAddressesAll =
+ _addresses.where((addr) => !addr.isHidden && _isAddressPageTypeMatch(addr)).toList();
// Prefer standard derivation addresses for the current/active address,
// but keep legacy addresses present in the overall address lists.
@@ -210,8 +209,9 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
...typeMatchingAddressesAll.where((a) => a.isLegacyDerivation),
];
- final typeMatchingReceiveAddressesAll =
- typeMatchingAddressesAll.where((addr) => !addr.isUsed && !hiddenAddresses.contains(addr.address)).toList();
+ final typeMatchingReceiveAddressesAll = typeMatchingAddressesAll
+ .where((addr) => !addr.isUsed && !hiddenAddresses.contains(addr.address))
+ .toList();
final typeMatchingReceiveAddresses = <BitcoinAddressRecord>[
...typeMatchingReceiveAddressesAll.where((a) => !a.isLegacyDerivation),
...typeMatchingReceiveAddressesAll.where((a) => a.isLegacyDerivation),
@@ -354,34 +354,35 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
return acc;
});
- @override
- Future<void> init() async {
- if (walletInfo.type == WalletType.bitcoinCash) {
- await _generateInitialAddresses(type: P2pkhAddressType.p2pkh);
- } else if (walletInfo.type == WalletType.litecoin) {
- await _generateInitialAddresses(type: SegwitAddresType.p2wpkh);
- if ((Platform.isAndroid || Platform.isIOS) && !isHardwareWallet) {
- await _generateInitialAddresses(type: SegwitAddresType.mweb);
- }
- } else if (walletInfo.type == WalletType.dogecoin) {
+ @override
+ Future<void> init() async {
+ if (walletInfo.type == WalletType.bitcoinCash) {
+ await _generateInitialAddresses(type: P2pkhAddressType.p2pkh);
+ } else if (walletInfo.type == WalletType.litecoin) {
+ await _generateInitialAddresses(type: SegwitAddresType.p2wpkh);
+ if ((Platform.isAndroid || Platform.isIOS) && !isHardwareWallet) {
+ await _generateInitialAddresses(type: SegwitAddresType.mweb);
+ }
+ } else if (walletInfo.type == WalletType.dogecoin) {
+ await _generateInitialAddresses(type: P2pkhAddressType.p2pkh);
+ } else if (walletInfo.type == WalletType.bitcoin) {
+ await _generateInitialAddresses(isLegacyDerivation: true);
+ await _generateInitialAddresses();
+ if (!isHardwareWallet) {
+ await _generateInitialAddresses(type: P2pkhAddressType.p2pkh, isLegacyDerivation: true);
await _generateInitialAddresses(type: P2pkhAddressType.p2pkh);
- } else if (walletInfo.type == WalletType.bitcoin) {
- await _generateInitialAddresses(isLegacyDerivation: true);
- await _generateInitialAddresses();
- if (!isHardwareWallet) {
- await _generateInitialAddresses(type: P2pkhAddressType.p2pkh, isLegacyDerivation: true);
- await _generateInitialAddresses(type: P2pkhAddressType.p2pkh);
- await _generateInitialAddresses(type: P2shAddressType.p2wpkhInP2sh, isLegacyDerivation: true);
- await _generateInitialAddresses(type: P2shAddressType.p2wpkhInP2sh);
+ await _generateInitialAddresses(
+ type: P2shAddressType.p2wpkhInP2sh, isLegacyDerivation: true);
+ await _generateInitialAddresses(type: P2shAddressType.p2wpkhInP2sh);
- await _generateInitialAddresses(type: SegwitAddresType.p2tr, isLegacyDerivation: true);
- await _generateInitialAddresses(type: SegwitAddresType.p2tr);
+ await _generateInitialAddresses(type: SegwitAddresType.p2tr, isLegacyDerivation: true);
+ await _generateInitialAddresses(type: SegwitAddresType.p2tr);
- await _generateInitialAddresses(type: SegwitAddresType.p2wsh, isLegacyDerivation: true);
- await _generateInitialAddresses(type: SegwitAddresType.p2wsh);
- }
+ await _generateInitialAddresses(type: SegwitAddresType.p2wsh, isLegacyDerivation: true);
+ await _generateInitialAddresses(type: SegwitAddresType.p2wsh);
}
+ }
updateAddressesByMatch();
updateReceiveAddresses();
@@ -680,9 +681,8 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
@action
void updateReceiveAddresses() {
receiveAddresses.removeRange(0, receiveAddresses.length);
- final newAddresses = _addresses.where((addressRecord) =>
- !addressRecord.isHidden &&
- !addressRecord.isUsed);
+ final newAddresses =
+ _addresses.where((addressRecord) => !addressRecord.isHidden && !addressRecord.isUsed);
receiveAddresses.addAll(newAddresses);
}
@@ -699,12 +699,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
@action
Future<void> discoverAddresses(
- List<BitcoinAddressRecord> addressList,
- bool isHidden,
- Future<String?> Function(BitcoinAddressRecord) getAddressHistory, {
- BitcoinAddressType type = SegwitAddresType.p2wpkh,
- required bool isLegacyDerivation,
- }) async {
+ List<BitcoinAddressRecord> addressList,
+ bool isHidden,
+ Future<String?> Function(BitcoinAddressRecord) getAddressHistory, {
+ BitcoinAddressType type = SegwitAddresType.p2wpkh,
+ required bool isLegacyDerivation,
+ }) async {
final newAddresses = await _createNewAddresses(
gap,
startIndex: addressList.length,
@@ -716,8 +716,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
addAddresses(newAddresses);
addressList.addAll(newAddresses);
- final addressesWithHistory =
- await Future.wait(newAddresses.map(getAddressHistory));
+ final addressesWithHistory = await Future.wait(newAddresses.map(getAddressHistory));
final isLastAddressUsed = addressesWithHistory.last != null;
if (isLastAddressUsed) {
@@ -733,12 +732,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
@action
Future<List<BitcoinAddressRecord>> discoverAddressesBatch(
- List<BitcoinAddressRecord> addressList,
- bool isHidden,
- Future<Set<String>> Function(List<BitcoinAddressRecord>) getUsedAddresses, {
- BitcoinAddressType type = SegwitAddresType.p2wpkh,
- required bool isLegacyDerivation,
- }) async {
+ List<BitcoinAddressRecord> addressList,
+ bool isHidden,
+ Future<Set<String>> Function(List<BitcoinAddressRecord>) getUsedAddresses, {
+ BitcoinAddressType type = SegwitAddresType.p2wpkh,
+ required bool isLegacyDerivation,
+ }) async {
final newAddresses = await _createNewAddresses(
gap,
startIndex: addressList.length,
@@ -750,8 +749,8 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
final usedAddresses = await getUsedAddresses(newAddresses);
- final hasUsedAddressInGap = newAddresses.any(
- (addressRecord) => usedAddresses.contains(addressRecord.address));
+ final hasUsedAddressInGap =
+ newAddresses.any((addressRecord) => usedAddresses.contains(addressRecord.address));
if (!hasUsedAddressInGap) {
return newAddresses;
@@ -770,64 +769,69 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
return [...newAddresses, ...moreNewAddresses];
}
-
Future<void> _generateInitialAddresses(
- {BitcoinAddressType type = SegwitAddresType.p2wpkh,
- bool isLegacyDerivation = false }) async {
-
- // Legacy derivation produces the same addresses as standard for these types.
- // Don't generate a legacy set to avoid duplicates.
- if (isLegacyDerivation && (type == SegwitAddresType.p2wpkh || type == SegwitAddresType.p2wsh)) {
- return;
- }
+ {BitcoinAddressType type = SegwitAddresType.p2wpkh, bool isLegacyDerivation = false}) async {
+ // Legacy derivation produces the same addresses as standard for these types.
+ // Don't generate a legacy set to avoid duplicates.
+ if (isLegacyDerivation && (type == SegwitAddresType.p2wpkh || type == SegwitAddresType.p2wsh)) {
+ return;
+ }
- var countOfReceiveAddresses = 0;
- var countOfHiddenAddresses = 0;
+ var countOfReceiveAddresses = 0;
+ var countOfHiddenAddresses = 0;
- _addresses.forEach((addr) {
- if (addr.type == type && addr.isLegacyDerivation == isLegacyDerivation) {
- if (addr.isHidden) {
- countOfHiddenAddresses += 1;
- } else {
- countOfReceiveAddresses += 1;
- }
+ _addresses.forEach((addr) {
+ if (addr.type == type && addr.isLegacyDerivation == isLegacyDerivation) {
+ if (addr.isHidden) {
+ countOfHiddenAddresses += 1;
+ } else {
+ countOfReceiveAddresses += 1;
}
- });
-
- if (countOfReceiveAddresses < defaultReceiveAddressesCount) {
- final addressesCount = defaultReceiveAddressesCount - countOfReceiveAddresses;
- final newAddresses = await _createNewAddresses(addressesCount,
- startIndex: countOfReceiveAddresses, isHidden: false, type: type, isLegacyDerivation: isLegacyDerivation);
- addAddresses(newAddresses);
}
+ });
- if (countOfHiddenAddresses < defaultChangeAddressesCount) {
- final addressesCount = defaultChangeAddressesCount - countOfHiddenAddresses;
- final newAddresses = await _createNewAddresses(addressesCount,
- startIndex: countOfHiddenAddresses, isHidden: true, type: type, isLegacyDerivation: isLegacyDerivation);
- addAddresses(newAddresses);
- }
+ if (countOfReceiveAddresses < defaultReceiveAddressesCount) {
+ final addressesCount = defaultReceiveAddressesCount - countOfReceiveAddresses;
+ final newAddresses = await _createNewAddresses(addressesCount,
+ startIndex: countOfReceiveAddresses,
+ isHidden: false,
+ type: type,
+ isLegacyDerivation: isLegacyDerivation);
+ addAddresses(newAddresses);
}
- Future<List<BitcoinAddressRecord>> _createNewAddresses(int count,
- {int startIndex = 0, bool isHidden = false, BitcoinAddressType? type, bool isLegacyDerivation = false}) async {
- final list = <BitcoinAddressRecord>[];
-
- for (var i = startIndex; i < count + startIndex; i++) {
-
- final addrType = type ?? addressPageType;
- final hd = _hdFor(isHidden: isHidden, type: addrType, isLegacyDerivation: isLegacyDerivation);
+ if (countOfHiddenAddresses < defaultChangeAddressesCount) {
+ final addressesCount = defaultChangeAddressesCount - countOfHiddenAddresses;
+ final newAddresses = await _createNewAddresses(addressesCount,
+ startIndex: countOfHiddenAddresses,
+ isHidden: true,
+ type: type,
+ isLegacyDerivation: isLegacyDerivation);
+ addAddresses(newAddresses);
+ }
+ }
- final address = BitcoinAddressRecord(
- await getAddressAsync(index: i, hd: hd, addressType: addrType),
- index: i,
- isHidden: isHidden,
- isLegacyDerivation: isLegacyDerivation,
- type: addrType,
- network: network,
- );
- list.add(address);
- }
+ Future<List<BitcoinAddressRecord>> _createNewAddresses(int count,
+ {int startIndex = 0,
+ bool isHidden = false,
+ BitcoinAddressType? type,
+ bool isLegacyDerivation = false}) async {
+ final list = <BitcoinAddressRecord>[];
+
+ for (var i = startIndex; i < count + startIndex; i++) {
+ final addrType = type ?? addressPageType;
+ final hd = _hdFor(isHidden: isHidden, type: addrType, isLegacyDerivation: isLegacyDerivation);
+
+ final address = BitcoinAddressRecord(
+ await getAddressAsync(index: i, hd: hd, addressType: addrType),
+ index: i,
+ isHidden: isHidden,
+ isLegacyDerivation: isLegacyDerivation,
+ type: addrType,
+ network: network,
+ );
+ list.add(address);
+ }
return list;
}
@@ -868,8 +872,10 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
return;
}
- final mainHd = _hdFor(isHidden: false, type: element.type, isLegacyDerivation: element.isLegacyDerivation);
- final sideHd = _hdFor(isHidden: true, type: element.type, isLegacyDerivation: element.isLegacyDerivation);
+ final mainHd = _hdFor(
+ isHidden: false, type: element.type, isLegacyDerivation: element.isLegacyDerivation);
+ final sideHd = _hdFor(
+ isHidden: true, type: element.type, isLegacyDerivation: element.isLegacyDerivation);
if (!element.isHidden &&
element.address !=
await getAddressAsync(index: element.index, hd: mainHd, addressType: element.type)) {
@@ -897,7 +903,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
return _isAddressByType(addressRecord, addressPageType);
}
- bool _isAddressByType(BitcoinAddressRecord addr, BitcoinAddressType type) => addr.type == type;
+ bool _isAddressByType(BitcoinAddressRecord addr, BitcoinAddressType type) => addr.type == type;
bool _isUnusedReceiveAddressByType(BitcoinAddressRecord addr, BitcoinAddressType type) =>
!addr.isHidden && !addr.isUsed && addr.type == type;
@@ -907,9 +913,9 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
final addressRecord = silentAddresses.firstWhere((addressRecord) =>
addressRecord.type == SilentPaymentsAddresType.p2sp && addressRecord.address == address);
- silentAddresses.remove(addressRecord);
- updateAddressesByMatch();
- }
+ silentAddresses.remove(addressRecord);
+ updateAddressesByMatch();
+ }
Bip32Slip10Secp256k1 _hdFor({
required bool isHidden,
@@ -923,7 +929,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
if (hd == null) throw Exception("HD not found for type $type");
return hd;
}
-
+
@action
Future<void> setLightningAddress(String walletName, {String newAddress = ""}) async {
if (lightningWallet == null) return;
diff --git a/cw_bitcoin/lib/exceptions.dart b/cw_bitcoin/lib/exceptions.dart
index 9bdb66e..d43ce82 100644
--- a/cw_bitcoin/lib/exceptions.dart
+++ b/cw_bitcoin/lib/exceptions.dart
@@ -30,7 +30,7 @@ class BitcoinTransactionCommitFailed extends TransactionCommitFailed {
@override
String toString() {
- return errorMessage??"unknown error";
+ return errorMessage ?? "unknown error";
}
}
diff --git a/cw_bitcoin/lib/hardware/bitbox_service.dart b/cw_bitcoin/lib/hardware/bitbox_service.dart
index 3f47c5c..a71dcac 100644
--- a/cw_bitcoin/lib/hardware/bitbox_service.dart
+++ b/cw_bitcoin/lib/hardware/bitbox_service.dart
@@ -67,7 +67,8 @@ class BitcoinBitboxService extends HardwareWalletService with BitcoinHardwareWal
Future<Uint8List> getMasterFingerprint() => manager.getMasterFingerprint();
}
-class LitecoinBitboxService extends HardwareWalletService with BitcoinHardwareWalletService, LitecoinHardwareWalletService {
+class LitecoinBitboxService extends HardwareWalletService
+ with BitcoinHardwareWalletService, LitecoinHardwareWalletService {
LitecoinBitboxService(this.manager);
final BitboxManager manager;
diff --git a/cw_bitcoin/lib/hardware/litecoin_ledger_service.dart b/cw_bitcoin/lib/hardware/litecoin_ledger_service.dart
index 9ede571..aa73fc1 100644
--- a/cw_bitcoin/lib/hardware/litecoin_ledger_service.dart
+++ b/cw_bitcoin/lib/hardware/litecoin_ledger_service.dart
@@ -12,7 +12,8 @@ import 'package:cw_core/hardware/hardware_wallet_service.dart';
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
import 'package:ledger_litecoin/ledger_litecoin.dart';
-class LitecoinLedgerService extends HardwareWalletService with BitcoinHardwareWalletService, LitecoinHardwareWalletService {
+class LitecoinLedgerService extends HardwareWalletService
+ with BitcoinHardwareWalletService, LitecoinHardwareWalletService {
LitecoinLedgerService(this.ledgerConnection)
: litecoinLedgerApp = LitecoinLedgerApp(ledgerConnection);
@@ -53,7 +54,6 @@ class LitecoinLedgerService extends HardwareWalletService with BitcoinHardwareWa
required List<PSBTReadyUtxoWithAddress> inputs,
required Map<String, PublicKeyWithDerivationPath> publicKeys,
}) {
-
final readyInputs = <LedgerTransaction>[];
for (final utxo in inputs) {
final publicKeyAndDerivationPath = publicKeys[utxo.ownerDetails.address.pubKeyHash()]!;
@@ -77,7 +77,7 @@ class LitecoinLedgerService extends HardwareWalletService with BitcoinHardwareWa
inputs: readyInputs,
outputs: outputs
.map((e) => TransactionOutput.fromBigInt((e as BitcoinOutput).value,
- Uint8List.fromList(e.address.toScriptPubKey().toBytes())))
+ Uint8List.fromList(e.address.toScriptPubKey().toBytes())))
.toList(),
changePath: changePath,
sigHashType: 0x01,
diff --git a/cw_bitcoin/lib/lightning/lightning_wallet.dart b/cw_bitcoin/lib/lightning/lightning_wallet.dart
index 42dda7c..ea9399c 100644
--- a/cw_bitcoin/lib/lightning/lightning_wallet.dart
+++ b/cw_bitcoin/lib/lightning/lightning_wallet.dart
@@ -90,8 +90,7 @@ class LightningWallet {
lnurlDomain: lnurlDomain,
apiKey: apiKey,
privateEnabledDefault: true,
- maxDepositClaimFee: MaxFee.rate(satPerVbyte: BigInt.from(5))
- );
+ maxDepositClaimFee: MaxFee.rate(satPerVbyte: BigInt.from(5)));
final connectRequest = ConnectRequest(
config: config,
@@ -105,8 +104,7 @@ class LightningWallet {
_logStream ??= initLogging().asBroadcastStream();
try {
- final logFile = File("$appPath/lightning.log")
- ..createSync();
+ final logFile = File("$appPath/lightning.log")..createSync();
_subscribeToLogStream(logFile);
} catch (e) {
printV(e);
@@ -198,15 +196,17 @@ class LightningWallet {
}
}
- Future<PendingLightningTransaction> createTransaction(
- String address, BigInt? amountSats, BitcoinTransactionPriority? priority, bool feesIncluded) async {
+ Future<PendingLightningTransaction> createTransaction(String address, BigInt? amountSats,
+ BitcoinTransactionPriority? priority, bool feesIncluded) async {
final inputType = await sdk.parse(input: address);
final feePolicy = feesIncluded ? FeePolicy.feesIncluded : FeePolicy.feesExcluded;
if (inputType is InputType_Bolt11Invoice) {
final request = PrepareSendPaymentRequest(
- paymentRequest: inputType.field0.invoice.bolt11, amount: amountSats, feePolicy: feePolicy);
+ paymentRequest: inputType.field0.invoice.bolt11,
+ amount: amountSats,
+ feePolicy: feePolicy);
final prepareResponse = await sdk.prepareSendPayment(request: request);
final paymentMethod = prepareResponse.paymentMethod;
@@ -392,14 +392,16 @@ class LightningWallet {
return _getElectrumTransactionInfoFromPayment(response.payment);
}
- Future<String> refundDeposit(String txId, int vout, String destinationAddress,
- BigInt feeRate) async {
- final response = await sdk.refundDeposit(request: RefundDepositRequest(
- txid: txId,
- vout: vout,
- destinationAddress: destinationAddress,
- fee: Fee.rate(satPerVbyte: feeRate),
- ),);
+ Future<String> refundDeposit(
+ String txId, int vout, String destinationAddress, BigInt feeRate) async {
+ final response = await sdk.refundDeposit(
+ request: RefundDepositRequest(
+ txid: txId,
+ vout: vout,
+ destinationAddress: destinationAddress,
+ fee: Fee.rate(satPerVbyte: feeRate),
+ ),
+ );
return response.txHex;
}
diff --git a/cw_bitcoin/lib/lightning/pending_lightning_transaction.dart b/cw_bitcoin/lib/lightning/pending_lightning_transaction.dart
index d2bcabb..237a6b8 100644
--- a/cw_bitcoin/lib/lightning/pending_lightning_transaction.dart
+++ b/cw_bitcoin/lib/lightning/pending_lightning_transaction.dart
@@ -10,10 +10,9 @@ class PendingLightningTransaction with PendingTransaction {
required this.commitOverride,
});
-
final bool isSendAll;
Future<String> Function() commitOverride;
- final List<void Function()> _listeners =[];
+ final List<void Function()> _listeners = [];
@override
String id;
diff --git a/cw_bitcoin/lib/litecoin_wallet.dart b/cw_bitcoin/lib/litecoin_wallet.dart
index 2f9ae0b..2395937 100644
--- a/cw_bitcoin/lib/litecoin_wallet.dart
+++ b/cw_bitcoin/lib/litecoin_wallet.dart
@@ -175,7 +175,6 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
@override
bool get hasRescan => true;
-
final String? scanSecretOverride;
final String? spendPubkeyOverride;
List<int> get scanSecret => (scanSecretOverride != null && scanSecretOverride?.isNotEmpty == true)
@@ -232,8 +231,12 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
}
@override
- WalletKeysData get walletKeysData =>
- WalletKeysData(mnemonic: seed, xPub: xpub, passphrase: passphrase, scanSecret: scanSecretOverride, spendPubkey: spendPubkeyOverride);
+ WalletKeysData get walletKeysData => WalletKeysData(
+ mnemonic: seed,
+ xPub: xpub,
+ passphrase: passphrase,
+ scanSecret: scanSecretOverride,
+ spendPubkey: spendPubkeyOverride);
static Future<LitecoinWallet> open({
required String name,
@@ -1106,15 +1109,18 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
for (final utxo in transaction.utxos) {
if (utxo.utxo.scriptType != SegwitAddresType.mweb) {
inputs.add(utxo.utxo.toInput());
- txouts.add(TxOut(value: Int64(utxo.utxo.value.toInt()),
- pkScript: utxo.ownerDetails.address.toScriptPubKey().toBytes()));
+ txouts.add(TxOut(
+ value: Int64(utxo.utxo.value.toInt()),
+ pkScript: utxo.ownerDetails.address.toScriptPubKey().toBytes()));
}
}
var resp = await CwMweb.psbtCreate(PsbtCreateRequest(
- rawTx: inputs.isEmpty ? null : BtcTransaction(
- inputs: inputs,
- outputs: isMweb ? [] : transaction.outputs,
- ).toBytes(),
+ rawTx: inputs.isEmpty
+ ? null
+ : BtcTransaction(
+ inputs: inputs,
+ outputs: isMweb ? [] : transaction.outputs,
+ ).toBytes(),
witnessUtxo: txouts,
));
for (final utxo in transaction.utxos) {
@@ -1127,17 +1133,18 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
));
}
}
- if (isMweb) for (final output in transaction.outputs) {
- var address = addressFromOutputScript(output.scriptPubKey, LitecoinNetwork.mainnet);
- if (output.scriptPubKey.getAddressType() == SegwitAddresType.mweb) {
- address = SegwitBech32Encoder.encode("ltcmweb", 0, output.scriptPubKey.toBytes());
+ if (isMweb)
+ for (final output in transaction.outputs) {
+ var address = addressFromOutputScript(output.scriptPubKey, LitecoinNetwork.mainnet);
+ if (output.scriptPubKey.getAddressType() == SegwitAddresType.mweb) {
+ address = SegwitBech32Encoder.encode("ltcmweb", 0, output.scriptPubKey.toBytes());
+ }
+ resp = await CwMweb.psbtAddRecipient(PsbtAddRecipientRequest(
+ psbtB64: resp.psbtB64,
+ recipient: PsbtRecipient(address: address, value: Int64(output.amount.toInt())),
+ feeRatePerKb: Int64.parseInt(transaction.feeRate) * 1000,
+ ));
}
- resp = await CwMweb.psbtAddRecipient(PsbtAddRecipientRequest(
- psbtB64: resp.psbtB64,
- recipient: PsbtRecipient(address: address, value: Int64(output.amount.toInt())),
- feeRatePerKb: Int64.parseInt(transaction.feeRate) * 1000,
- ));
- }
return base64.decode(resp.psbtB64);
}
@@ -1203,7 +1210,6 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
for (final utxo in tx.utxos) {
if (utxo.utxo.scriptType == SegwitAddresType.mweb) {
hasMwebInput = true;
-
} else {
// check if any of the inputs of this transaction are hog-ex:
// this list is only non-mweb inputs:
@@ -1256,9 +1262,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
final utxo = unspentCoins
.firstWhere((utxo) => utxo.hash == e.value.txId && utxo.vout == e.value.txIndex);
final key = generateECPrivate(
- hd: utxo.bitcoinAddressRecord.isHidden
- ? sideHd
- : mainHd,
+ hd: utxo.bitcoinAddressRecord.isHidden ? sideHd : mainHd,
index: utxo.bitcoinAddressRecord.index,
network: network);
final digest = tx2.getTransactionSegwitDigit(
@@ -1284,8 +1288,8 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
}
}
- void addTransactionListener(PendingBitcoinTransaction tx,
- List<String> inputAddresses, bool isPegIn, bool isPegOut) {
+ void addTransactionListener(
+ PendingBitcoinTransaction tx, List<String> inputAddresses, bool isPegIn, bool isPegOut) {
tx.addListener((transaction) async {
final addresses = <String>{};
transaction.inputAddresses?.addAll(inputAddresses);
@@ -1575,7 +1579,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
rawTx: rawTx,
ownerDetails: utxo.ownerDetails,
ownerDerivationPath: publicKeyAndDerivationPath.derivationPath,
- ownerMasterFingerprint:masterFingerprint,
+ ownerMasterFingerprint: masterFingerprint,
ownerPublicKey: publicKeyAndDerivationPath.publicKey,
));
}
diff --git a/cw_bitcoin/lib/litecoin_wallet_addresses.dart b/cw_bitcoin/lib/litecoin_wallet_addresses.dart
index a4a4b75..fe85cd7 100644
--- a/cw_bitcoin/lib/litecoin_wallet_addresses.dart
+++ b/cw_bitcoin/lib/litecoin_wallet_addresses.dart
@@ -59,9 +59,11 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
? hex.decode(scanSecretOverride!)
: mwebHd?.childKey(Bip32KeyIndex(0x80000000)).privateKey.privKey.raw ?? List.filled(32, 0);
- List<int> get spendPubkey => (spendPubkeyOverride != null && spendPubkeyOverride?.isNotEmpty == true)
- ? hex.decode(spendPubkeyOverride!)
- : mwebHd?.childKey(Bip32KeyIndex(0x80000001)).publicKey.pubKey.compressed ?? List.filled(32, 0);
+ List<int> get spendPubkey =>
+ (spendPubkeyOverride != null && spendPubkeyOverride?.isNotEmpty == true)
+ ? hex.decode(spendPubkeyOverride!)
+ : mwebHd?.childKey(Bip32KeyIndex(0x80000001)).publicKey.pubKey.compressed ??
+ List.filled(32, 0);
@override
Future<void> init() async {
@@ -81,7 +83,7 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
return null;
}
if ((scanSecret.length < 1 || scanSecret.reduce((a, b) => a + b) == 0) &&
- (spendPubkey.length < 1 || spendPubkey.reduce((a, b) => a + b) == 0)) {
+ (spendPubkey.length < 1 || spendPubkey.reduce((a, b) => a + b) == 0)) {
return null;
}
@@ -230,12 +232,16 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
// don't use mweb addresses for exchange refund address:
final current = getFreshAddress();
- final bool isMweb = receiveAddresses
- .any((e) => e.address == current && e.type == SegwitAddresType.mweb);
+ final bool isMweb =
+ receiveAddresses.any((e) => e.address == current && e.type == SegwitAddresType.mweb);
if (isMweb) {
final segwit = receiveAddresses
- .where((e) => e.type == SegwitAddresType.p2wpkh && !e.isUsed && !e.isHidden && !hiddenAddresses.contains(e.address))
+ .where((e) =>
+ e.type == SegwitAddresType.p2wpkh &&
+ !e.isUsed &&
+ !e.isHidden &&
+ !hiddenAddresses.contains(e.address))
.map((e) => e.address)
.toList();
diff --git a/cw_bitcoin/lib/litecoin_wallet_service.dart b/cw_bitcoin/lib/litecoin_wallet_service.dart
index 0156ee6..09ab924 100644
--- a/cw_bitcoin/lib/litecoin_wallet_service.dart
+++ b/cw_bitcoin/lib/litecoin_wallet_service.dart
@@ -48,7 +48,8 @@ class LitecoinWalletService extends WalletService<
password: credentials.password!,
passphrase: credentials.passphrase,
walletInfo: credentials.walletInfo!,
- derivationInfo: credentials.derivationInfo ?? (await credentials.walletInfo!.getDerivationInfo()),
+ derivationInfo:
+ credentials.derivationInfo ?? (await credentials.walletInfo!.getDerivationInfo()),
unspentCoinsInfo: unspentCoinsInfoSource,
encryptionFileUtils: encryptionFileUtilsFor(isDirect),
);
@@ -64,7 +65,6 @@ class LitecoinWalletService extends WalletService<
@override
Future<LitecoinWallet> openWallet(String name, String password) async {
-
final walletInfo = await WalletInfo.get(name, getType());
if (walletInfo == null) {
throw Exception('Wallet not found');
@@ -125,8 +125,9 @@ class LitecoinWalletService extends WalletService<
}
}
- final unspentCoinsToDelete = unspentCoinsInfoSource.values.where(
- (unspentCoin) => unspentCoin.walletId == walletInfo.id).toList();
+ final unspentCoinsToDelete = unspentCoinsInfoSource.values
+ .where((unspentCoin) => unspentCoin.walletId == walletInfo.id)
+ .toList();
final keysToDelete = unspentCoinsToDelete.map((unspentCoin) => unspentCoin.key).toList();
@@ -150,8 +151,7 @@ class LitecoinWalletService extends WalletService<
final network = isTestnet == true ? LitecoinNetwork.testnet : LitecoinNetwork.mainnet;
credentials.walletInfo?.network = network.value;
final derivationInfo = await credentials.walletInfo!.getDerivationInfo();
- derivationInfo.derivationPath =
- credentials.hwAccountData.derivationPath;
+ derivationInfo.derivationPath = credentials.hwAccountData.derivationPath;
await derivationInfo.save();
credentials.walletInfo!.save();
@@ -170,7 +170,7 @@ class LitecoinWalletService extends WalletService<
@override
Future<LitecoinWallet> restoreFromKeys(LitecoinWalletFromKeysCredentials credentials,
- {bool? isTestnet}) async {
+ {bool? isTestnet}) async {
final network = isTestnet == true ? LitecoinNetwork.testnet : LitecoinNetwork.mainnet;
credentials.walletInfo?.network = network.value;
@@ -202,7 +202,8 @@ class LitecoinWalletService extends WalletService<
passphrase: credentials.passphrase,
mnemonic: credentials.mnemonic,
walletInfo: credentials.walletInfo!,
- derivationInfo: credentials.derivationInfo ?? (await credentials.walletInfo!.getDerivationInfo()),
+ derivationInfo:
+ credentials.derivationInfo ?? (await credentials.walletInfo!.getDerivationInfo()),
unspentCoinsInfo: unspentCoinsInfoSource,
encryptionFileUtils: encryptionFileUtilsFor(isDirect),
);
diff --git a/cw_bitcoin/lib/payjoin/manager.dart b/cw_bitcoin/lib/payjoin/manager.dart
index 4fa2e2a..efa120f 100644
--- a/cw_bitcoin/lib/payjoin/manager.dart
+++ b/cw_bitcoin/lib/payjoin/manager.dart
@@ -108,16 +108,14 @@ class PayjoinManager {
Future<Sender> initSender(
String pjUriString, String originalPsbt, int networkFeesSatPerVb) async {
try {
- final pjUri =
- (await PayjoinUri.Uri.fromStr(pjUriString)).checkPjSupported();
+ final pjUri = (await PayjoinUri.Uri.fromStr(pjUriString)).checkPjSupported();
final minFeeRateSatPerKwu = BigInt.from(networkFeesSatPerVb * 250);
final senderBuilder = await SenderBuilder.fromPsbtAndUri(
psbtBase64: originalPsbt,
pjUri: pjUri,
);
final persister = PayjoinSenderPersister.impl();
- final newSender =
- await senderBuilder.buildRecommended(minFeeRate: minFeeRateSatPerKwu);
+ final newSender = await senderBuilder.buildRecommended(minFeeRate: minFeeRateSatPerKwu);
final senderToken = await newSender.persist(persister: persister);
return Sender.load(token: senderToken, persister: persister);
@@ -133,8 +131,7 @@ class PayjoinManager {
bool isTestnet = false,
}) async {
final pjUri = Uri.parse(pjUrl).queryParameters['pj']!;
- await _payjoinStorage.insertSenderSession(
- sender, pjUri, _wallet.id, amount);
+ await _payjoinStorage.insertSenderSession(sender, pjUri, _wallet.id, amount);
return _spawnSender(isTestnet: isTestnet, sender: sender, pjUri: pjUri);
}
@@ -207,8 +204,7 @@ class PayjoinManager {
return completer.future;
}
- Future<Receiver> getUnusedReceiver(String address,
- [bool isTestnet = false]) async {
+ Future<Receiver> getUnusedReceiver(String address, [bool isTestnet = false]) async {
final session = _payjoinStorage.getUnusedActiveReceiverSession(_wallet.id);
if (session != null) {
@@ -220,7 +216,8 @@ class PayjoinManager {
return initReceiver(address);
}
- Future<Receiver> initReceiver(String address, [bool isTestnet = false, int retryCount = 0]) async {
+ Future<Receiver> initReceiver(String address,
+ [bool isTestnet = false, int retryCount = 0]) async {
if (retryCount > 0) writePayjoinLog("Retrying initReceiver ${retryCount + 1} attempt");
try {
@@ -245,7 +242,6 @@ class PayjoinManager {
} catch (e) {
writePayjoinLog(e.toString());
if (e.toString().contains("error sending request for url") && retryCount < 5) {
-
return initReceiver(address, isTestnet, ++retryCount);
} else {
rethrow;
@@ -273,13 +269,11 @@ class PayjoinManager {
rawAmount = getOutputAmountFromTx(tx, _wallet);
break;
case PayjoinReceiverRequestTypes.checkIsOwned:
- (_wallet.walletAddresses as BitcoinWalletAddresses)
- .newPayjoinReceiver();
+ (_wallet.walletAddresses as BitcoinWalletAddresses).newPayjoinReceiver();
_payjoinStorage.markReceiverSessionInProgress(receiver.id());
final inputScript = message['input_script'] as Uint8List;
- final isOwned =
- _wallet.isMine(Script.fromRaw(byteData: inputScript));
+ final isOwned = _wallet.isMine(Script.fromRaw(byteData: inputScript));
mainToIsolateSendPort?.send({
'requestId': message['requestId'],
'result': isOwned,
@@ -288,8 +282,7 @@ class PayjoinManager {
case PayjoinReceiverRequestTypes.checkIsReceiverOutput:
final outputScript = message['output_script'] as Uint8List;
- final isReceiverOutput =
- _wallet.isMine(Script.fromRaw(byteData: outputScript));
+ final isReceiverOutput = _wallet.isMine(Script.fromRaw(byteData: outputScript));
mainToIsolateSendPort?.send({
'requestId': message['requestId'],
'result': isReceiverOutput,
@@ -310,7 +303,8 @@ class PayjoinManager {
case PayjoinReceiverRequestTypes.processPsbt:
final psbt = message['psbt'] as String;
- writePayjoinLog("Receiver(${receiver.id()}) PayjoinReceiverRequestTypes.processPsbt: $psbt");
+ writePayjoinLog(
+ "Receiver(${receiver.id()}) PayjoinReceiverRequestTypes.processPsbt: $psbt");
final signedPsbt = await _wallet.signPsbt(psbt, utxos);
mainToIsolateSendPort?.send({
@@ -322,7 +316,8 @@ class PayjoinManager {
case PayjoinReceiverRequestTypes.proposalSent:
_cleanupSession(receiver.id());
final psbt = message['psbt'] as String;
- writePayjoinLog("Receiver(${receiver.id()}) PayjoinReceiverRequestTypes.proposalSent: $psbt");
+ writePayjoinLog(
+ "Receiver(${receiver.id()}) PayjoinReceiverRequestTypes.proposalSent: $psbt");
await _payjoinStorage.markReceiverSessionComplete(
receiver.id(), getTxIdFromPsbtV0(psbt), rawAmount);
diff --git a/cw_bitcoin/lib/payjoin/payjoin_receive_worker.dart b/cw_bitcoin/lib/payjoin/payjoin_receive_worker.dart
index 6413995..f1980e3 100644
--- a/cw_bitcoin/lib/payjoin/payjoin_receive_worker.dart
+++ b/cw_bitcoin/lib/payjoin/payjoin_receive_worker.dart
@@ -47,8 +47,7 @@ class PayjoinReceiverWorker {
try {
final receiver = Receiver.fromJson(json: receiverJson);
- final uncheckedProposal =
- await worker.receiveUncheckedProposal(receiver);
+ final uncheckedProposal = await worker.receiveUncheckedProposal(receiver);
final originalTx = await uncheckedProposal.extractTxToScheduleBroadcast();
sendPort.send({
@@ -112,8 +111,7 @@ class PayjoinReceiverWorker {
final httpRequest = await client.post(url,
headers: {'Content-Type': request.contentType}, body: request.body);
- final proposal = await session.processRes(
- body: httpRequest.bodyBytes, ctx: extractReq.$2);
+ final proposal = await session.processRes(body: httpRequest.bodyBytes, ctx: extractReq.$2);
if (proposal != null) return proposal;
sleep(Duration(seconds: 2));
}
@@ -140,8 +138,7 @@ class PayjoinReceiverWorker {
return await finalProposal.psbt();
}
- Future<PayjoinProposal> processPayjoinProposal(
- UncheckedProposal proposal) async {
+ Future<PayjoinProposal> processPayjoinProposal(UncheckedProposal proposal) async {
await proposal.extractTxToScheduleBroadcast();
// TODO Handle this. send to the main port on a timer?
@@ -174,20 +171,17 @@ class PayjoinReceiverWorker {
);
final pj5 = await pj4.commitOutputs();
- final listUnspent =
- await _sendRequest(PayjoinReceiverRequestTypes.getCandidateInputs);
+ final listUnspent = await _sendRequest(PayjoinReceiverRequestTypes.getCandidateInputs);
final unspent = listUnspent as List<UtxoWithPrivateKey>;
if (unspent.isEmpty) throw RecoverableError('No unspent outputs available');
- final candidateInputs =
- await Future.wait(unspent.map(_inputPairFromUtxo));
+ final candidateInputs = await Future.wait(unspent.map(_inputPairFromUtxo));
// Prefer a UTXO that avoids the Unnecessary Input Heuristic (UIH2);
// fall back to the first candidate if none preserves privacy.
InputPair selectedUtxo = candidateInputs.first;
try {
- selectedUtxo =
- await pj5.tryPreservingPrivacy(candidateInputs: candidateInputs);
+ selectedUtxo = await pj5.tryPreservingPrivacy(candidateInputs: candidateInputs);
} catch (_) {}
final pj6 = await pj5.contributeInputs(replacementInputs: [selectedUtxo]);
@@ -196,8 +190,8 @@ class PayjoinReceiverWorker {
// Finalize proposal
final payjoinProposal = await pj7.finalizeProposal(
processPsbt: (String psbt) async {
- final result = await _sendRequest(
- PayjoinReceiverRequestTypes.processPsbt, {'psbt': psbt});
+ final result =
+ await _sendRequest(PayjoinReceiverRequestTypes.processPsbt, {'psbt': psbt});
return result as String;
},
// TODO set maxFeeRateSatPerVb
@@ -213,15 +207,12 @@ class PayjoinReceiverWorker {
Future<InputPair> _inputPairFromUtxo(UtxoWithPrivateKey utxo) async {
final txout = TxOut(
value: utxo.utxo.value,
- scriptPubkey: Uint8List.fromList(
- utxo.ownerDetails.address.toScriptPubKey().toBytes()),
+ scriptPubkey: Uint8List.fromList(utxo.ownerDetails.address.toScriptPubKey().toBytes()),
);
- final psbtin =
- PsbtInput(witnessUtxo: txout, redeemScript: null, witnessScript: null);
+ final psbtin = PsbtInput(witnessUtxo: txout, redeemScript: null, witnessScript: null);
- final previousOutput =
- OutPoint(txid: utxo.utxo.txHash, vout: utxo.utxo.vout);
+ final previousOutput = OutPoint(txid: utxo.utxo.txHash, vout: utxo.utxo.vout);
final txin = TxIn(
previousOutput: previousOutput,
diff --git a/cw_bitcoin/lib/payjoin/payjoin_send_worker.dart b/cw_bitcoin/lib/payjoin/payjoin_send_worker.dart
index 75f58a4..0d46d1f 100644
--- a/cw_bitcoin/lib/payjoin/payjoin_send_worker.dart
+++ b/cw_bitcoin/lib/payjoin/payjoin_send_worker.dart
@@ -46,11 +46,11 @@ class PayjoinSenderWorker {
sendPort.send(e);
}
}
+
final client = ProxyWrapper().getHttpIOClient();
/// Run a payjoin sender (V2 protocol first, fallback to V1).
Future<String> runSender(Sender sender) async {
-
try {
return await _runSenderV2(sender);
} catch (e) {
@@ -70,13 +70,11 @@ class PayjoinSenderWorker {
Future<String> _runSenderV2(Sender sender) async {
try {
final postRequest = await sender.extractV2(
- ohttpProxyUrl:
- await pj_uri.Url.fromStr(PayjoinManager.randomOhttpRelayUrl()),
+ ohttpProxyUrl: await pj_uri.Url.fromStr(PayjoinManager.randomOhttpRelayUrl()),
);
final postResult = await _postRequest(postRequest.$1);
- final getContext =
- await postRequest.$2.processResponse(response: postResult);
+ final getContext = await postRequest.$2.processResponse(response: postResult);
sendPort.send({'type': PayjoinSenderRequestTypes.requestPosted, "pj": pjUrl});
diff --git a/cw_bitcoin/lib/payjoin/storage.dart b/cw_bitcoin/lib/payjoin/storage.dart
index 5fb9d57..e4132eb 100644
--- a/cw_bitcoin/lib/payjoin/storage.dart
+++ b/cw_bitcoin/lib/payjoin/storage.dart
@@ -23,16 +23,14 @@ class PayjoinStorage {
),
);
- PayjoinSession? getUnusedActiveReceiverSession(String walletId) =>
- _payjoinSessionSources.values
- .where((session) =>
- session.walletId == walletId &&
- session.status == PayjoinSessionStatus.created.name &&
- !session.isSenderSession)
- .firstOrNull;
-
- Future<void> markReceiverSessionComplete(
- String sessionId, String txId, String amount) async {
+ PayjoinSession? getUnusedActiveReceiverSession(String walletId) => _payjoinSessionSources.values
+ .where((session) =>
+ session.walletId == walletId &&
+ session.status == PayjoinSessionStatus.created.name &&
+ !session.isSenderSession)
+ .firstOrNull;
+
+ Future<void> markReceiverSessionComplete(String sessionId, String txId, String amount) async {
final session = _payjoinSessionSources.get("$_receiverPrefix${sessionId}")!;
session.status = PayjoinSessionStatus.success.name;
@@ -41,8 +39,7 @@ class PayjoinStorage {
await session.save();
}
- Future<void> markReceiverSessionUnrecoverable(
- String sessionId, String reason) async {
+ Future<void> markReceiverSessionUnrecoverable(String sessionId, String reason) async {
final session = _payjoinSessionSources.get("$_receiverPrefix${sessionId}")!;
session.status = PayjoinSessionStatus.unrecoverable.name;
@@ -92,13 +89,10 @@ class PayjoinStorage {
await session.save();
}
- List<PayjoinSession> readAllOpenSessions(String walletId) =>
- _payjoinSessionSources.values
- .where((session) =>
- session.walletId == walletId &&
- ![
- PayjoinSessionStatus.success.name,
- PayjoinSessionStatus.unrecoverable.name
- ].contains(session.status))
- .toList();
+ List<PayjoinSession> readAllOpenSessions(String walletId) => _payjoinSessionSources.values
+ .where((session) =>
+ session.walletId == walletId &&
+ ![PayjoinSessionStatus.success.name, PayjoinSessionStatus.unrecoverable.name]
+ .contains(session.status))
+ .toList();
}
diff --git a/cw_bitcoin/lib/psbt/signer.dart b/cw_bitcoin/lib/psbt/signer.dart
index c46517e..fbd00b8 100644
--- a/cw_bitcoin/lib/psbt/signer.dart
+++ b/cw_bitcoin/lib/psbt/signer.dart
@@ -40,8 +40,7 @@ extension PsbtSigner on PsbtV2 {
return tx.buffer();
}
- Future<void> signWithUTXO(
- List<UtxoWithPrivateKey> utxos, UTXOSignerCallBack signer,
+ Future<void> signWithUTXO(List<UtxoWithPrivateKey> utxos, UTXOSignerCallBack signer,
[UTXOGetterCallBack? getTaprootPair]) async {
final raw = BytesUtils.toHexString(extractUnsignedTX(getSegwit: false));
final tx = BtcTransaction.fromRaw(raw);
@@ -53,8 +52,8 @@ extension PsbtSigner on PsbtV2 {
if (utxos.any((e) => e.utxo.isP2tr())) {
for (final input in tx.inputs) {
- final utxo = utxos.firstWhereOrNull(
- (u) => u.utxo.txHash == input.txId && u.utxo.vout == input.txIndex);
+ final utxo = utxos
+ .firstWhereOrNull((u) => u.utxo.txHash == input.txId && u.utxo.vout == input.txIndex);
if (utxo == null) {
final trPair = await getTaprootPair!.call(input.txId, input.txIndex);
@@ -81,8 +80,8 @@ extension PsbtSigner on PsbtV2 {
: BitcoinOpCodeConst.SIGHASH_ALL;
/// We generate transaction digest for current input
- final digest = _generateTransactionDigest(
- script, i, utxo.utxo, tx, taprootAmounts, taprootScripts);
+ final digest =
+ _generateTransactionDigest(script, i, utxo.utxo, tx, taprootAmounts, taprootScripts);
/// now we need sign the transaction digest
final sig = signer(digest, utxo, utxo.privateKey, sighash);
@@ -90,21 +89,14 @@ extension PsbtSigner on PsbtV2 {
if (utxo.utxo.isP2tr()) {
setInputTapKeySig(i, Uint8List.fromList(BytesUtils.fromHexString(sig)));
} else {
- setInputPartialSig(
- i,
- Uint8List.fromList(BytesUtils.fromHexString(utxo.public().toHex())),
+ setInputPartialSig(i, Uint8List.fromList(BytesUtils.fromHexString(utxo.public().toHex())),
Uint8List.fromList(BytesUtils.fromHexString(sig)));
}
}
}
- List<int> _generateTransactionDigest(
- Script scriptPubKeys,
- int input,
- BitcoinUtxo utxo,
- BtcTransaction transaction,
- List<BigInt> taprootAmounts,
- List<Script> tapRootPubKeys) {
+ List<int> _generateTransactionDigest(Script scriptPubKeys, int input, BitcoinUtxo utxo,
+ BtcTransaction transaction, List<BigInt> taprootAmounts, List<Script> tapRootPubKeys) {
if (utxo.isSegwit()) {
if (utxo.isP2tr()) {
return transaction.getTransactionTaprootDigset(
@@ -116,8 +108,7 @@ extension PsbtSigner on PsbtV2 {
return transaction.getTransactionSegwitDigit(
txInIndex: input, script: scriptPubKeys, amount: utxo.value);
}
- return transaction.getTransactionDigest(
- txInIndex: input, script: scriptPubKeys);
+ return transaction.getTransactionDigest(txInIndex: input, script: scriptPubKeys);
}
Script _findLockingScript(UtxoWithAddress utxo, bool isTaproot) {
@@ -172,11 +163,10 @@ extension PsbtSigner on PsbtV2 {
}
}
-typedef UTXOSignerCallBack = String Function(List<int> trDigest,
- UtxoWithAddress utxo, ECPrivate privateKey, int sighash);
+typedef UTXOSignerCallBack = String Function(
+ List<int> trDigest, UtxoWithAddress utxo, ECPrivate privateKey, int sighash);
-typedef UTXOGetterCallBack = Future<TaprootAmountScriptPair> Function(
- String txId, int vout);
+typedef UTXOGetterCallBack = Future<TaprootAmountScriptPair> Function(String txId, int vout);
class TaprootAmountScriptPair {
final BigInt value;
@@ -216,23 +206,17 @@ class UtxoWithPrivateKey extends UtxoWithAddress {
}
return UtxoWithPrivateKey(
- utxo: input.utxo,
- ownerDetails: input.ownerDetails,
- privateKey: key.privkey);
+ utxo: input.utxo, ownerDetails: input.ownerDetails, privateKey: key.privkey);
}
- factory UtxoWithPrivateKey.fromUnspent(
- BitcoinUnspent input, BitcoinWalletBase wallet) {
- final address =
- RegexUtils.addressTypeFromStr(input.address, BitcoinNetwork.mainnet);
+ factory UtxoWithPrivateKey.fromUnspent(BitcoinUnspent input, BitcoinWalletBase wallet) {
+ final address = RegexUtils.addressTypeFromStr(input.address, BitcoinNetwork.mainnet);
- final newHd =
- input.bitcoinAddressRecord.isHidden ? wallet.sideHd : wallet.mainHd;
+ final newHd = input.bitcoinAddressRecord.isHidden ? wallet.sideHd : wallet.mainHd;
ECPrivate privkey;
if (input.bitcoinAddressRecord is BitcoinSilentPaymentAddressRecord) {
- final unspentAddress =
- input.bitcoinAddressRecord as BitcoinSilentPaymentAddressRecord;
+ final unspentAddress = input.bitcoinAddressRecord as BitcoinSilentPaymentAddressRecord;
privkey = wallet.walletAddresses.silentAddress!.b_spend.tweakAdd(
BigintUtils.fromBytes(
BytesUtils.fromHexString(unspentAddress.silentPaymentTweak!),
@@ -240,9 +224,7 @@ class UtxoWithPrivateKey extends UtxoWithAddress {
);
} else {
privkey = generateECPrivate(
- hd: newHd,
- index: input.bitcoinAddressRecord.index,
- network: BitcoinNetwork.mainnet);
+ hd: newHd, index: input.bitcoinAddressRecord.index, network: BitcoinNetwork.mainnet);
}
return UtxoWithPrivateKey(
@@ -251,8 +233,7 @@ class UtxoWithPrivateKey extends UtxoWithAddress {
value: BigInt.from(input.value),
vout: input.vout,
scriptType: input.bitcoinAddressRecord.type,
- isSilentPayment:
- input.bitcoinAddressRecord is BitcoinSilentPaymentAddressRecord,
+ isSilentPayment: input.bitcoinAddressRecord is BitcoinSilentPaymentAddressRecord,
),
ownerDetails: UtxoAddressDetails(
publicKey: privkey.getPublic().toHex(),
diff --git a/cw_bitcoin/lib/psbt/transaction_builder.dart b/cw_bitcoin/lib/psbt/transaction_builder.dart
index 2046e45..7d2ead1 100644
--- a/cw_bitcoin/lib/psbt/transaction_builder.dart
+++ b/cw_bitcoin/lib/psbt/transaction_builder.dart
@@ -11,7 +11,10 @@ class PSBTTransactionBuild {
final PsbtV2 psbt = PsbtV2();
PSBTTransactionBuild(
- {required List<PSBTReadyUtxoWithAddress> inputs, required List<BitcoinBaseOutput> outputs, required List<OutputInfo> cwOutputs, bool enableRBF = true}) {
+ {required List<PSBTReadyUtxoWithAddress> inputs,
+ required List<BitcoinBaseOutput> outputs,
+ required List<OutputInfo> cwOutputs,
+ bool enableRBF = true}) {
psbt.setGlobalTxVersion(2);
psbt.setGlobalInputCount(inputs.length);
psbt.setGlobalOutputCount(outputs.length);
@@ -23,10 +26,10 @@ class PSBTTransactionBuild {
printV(input.utxo.isSegwit());
printV(input.utxo.isP2shSegwit());
- psbt.setInputPreviousTxId(i, Uint8List.fromList(hex.decode(input.utxo.txHash).reversed.toList()));
+ psbt.setInputPreviousTxId(
+ i, Uint8List.fromList(hex.decode(input.utxo.txHash).reversed.toList()));
psbt.setInputOutputIndex(i, input.utxo.vout);
psbt.setInputSequence(i, enableRBF ? 0xfffffffd : 0xffffffff);
-
if (input.utxo.isSegwit()) {
setInputSegwit(i, input);
@@ -48,10 +51,10 @@ class PSBTTransactionBuild {
if (cwOutputs.isNotEmpty) {
try {
final cwOutput = cwOutputs
- .where((e) => [e.address, e.extractedAddress]
- .map((e) => e?.toLowerCase())
- .contains(output.address.toAddress().toLowerCase()))
- .firstOrNull;
+ .where((e) => [e.address, e.extractedAddress]
+ .map((e) => e?.toLowerCase())
+ .contains(output.address.toAddress().toLowerCase()))
+ .firstOrNull;
if (cwOutput != null &&
cwOutput.extra.containsKey('bip353_name') &&
cwOutput.extra.containsKey('bip353_proof')) {
@@ -80,20 +83,14 @@ class PSBTTransactionBuild {
void setInputP2pkh(int i, PSBTReadyUtxoWithAddress input) {
psbt.setInputNonWitnessUtxo(i, Uint8List.fromList(hex.decode(input.rawTx)));
- psbt.setInputBip32Derivation(
- i,
- Uint8List.fromList(hex.decode(input.ownerPublicKey)),
- input.ownerMasterFingerprint,
- BIPPath.fromString(input.ownerDerivationPath).toPathArray());
+ psbt.setInputBip32Derivation(i, Uint8List.fromList(hex.decode(input.ownerPublicKey)),
+ input.ownerMasterFingerprint, BIPPath.fromString(input.ownerDerivationPath).toPathArray());
}
void setInputSegwit(int i, PSBTReadyUtxoWithAddress input) {
psbt.setInputNonWitnessUtxo(i, Uint8List.fromList(hex.decode(input.rawTx)));
- psbt.setInputBip32Derivation(
- i,
- Uint8List.fromList(hex.decode(input.ownerPublicKey)),
- input.ownerMasterFingerprint,
- BIPPath.fromString(input.ownerDerivationPath).toPathArray());
+ psbt.setInputBip32Derivation(i, Uint8List.fromList(hex.decode(input.ownerPublicKey)),
+ input.ownerMasterFingerprint, BIPPath.fromString(input.ownerDerivationPath).toPathArray());
psbt.setInputWitnessUtxo(i, Uint8List.fromList(bigIntToUint64LE(input.utxo.value)),
Uint8List.fromList(input.ownerDetails.address.toScriptPubKey().toBytes()));
diff --git a/cw_bitcoin/lib/psbt/utils.dart b/cw_bitcoin/lib/psbt/utils.dart
index 85d2530..08df000 100644
--- a/cw_bitcoin/lib/psbt/utils.dart
+++ b/cw_bitcoin/lib/psbt/utils.dart
@@ -10,9 +10,7 @@ import 'package:ledger_bitcoin/psbt.dart';
String getTxIdFromPsbtV0(String psbt) {
final psbtV2 = PsbtV2()..deserializeV0(base64.decode(psbt));
- return BtcTransaction.fromRaw(
- BytesUtils.toHexString(psbtV2.extractUnsignedTX(false)))
- .txId();
+ return BtcTransaction.fromRaw(BytesUtils.toHexString(psbtV2.extractUnsignedTX(false))).txId();
}
String getOutputAmountFromPsbt(String psbtV0, BitcoinWalletBase wallet) {
diff --git a/cw_bitcoin/lib/psbt/v0_deserialize.dart b/cw_bitcoin/lib/psbt/v0_deserialize.dart
index b908eae..541eb69 100644
--- a/cw_bitcoin/lib/psbt/v0_deserialize.dart
+++ b/cw_bitcoin/lib/psbt/v0_deserialize.dart
@@ -7,10 +7,10 @@ import 'package:ledger_bitcoin/src/utils/buffer_reader.dart';
import 'package:ledger_bitcoin/src/utils/uint8list_extension.dart' as ext;
extension PsbtSigner on PsbtV2 {
-
void deserializeV0(Uint8List psbt) {
final bufferReader = BufferReader(psbt);
- if (!listEquals(bufferReader.readSlice(5), Uint8List.fromList([0x70, 0x73, 0x62, 0x74, 0xff]))) {
+ if (!listEquals(
+ bufferReader.readSlice(5), Uint8List.fromList([0x70, 0x73, 0x62, 0x74, 0xff]))) {
throw Exception("Invalid magic bytes");
}
while (_readKeyPair(globalMap, bufferReader)) {}
@@ -26,7 +26,8 @@ extension PsbtSigner on PsbtV2 {
while (_readKeyPair(inputMaps[i], bufferReader)) {}
final input = tx.inputs[i];
setInputOutputIndex(i, input.txIndex);
- setInputPreviousTxId(i, Uint8List.fromList(BytesUtils.fromHexString(input.txId).reversed.toList()));
+ setInputPreviousTxId(
+ i, Uint8List.fromList(BytesUtils.fromHexString(input.txId).reversed.toList()));
setInputSequence(i, Uint8List.fromList(input.sequence).readUint32LE(0));
}
for (var i = 0; i < getGlobalOutputCount(); i++) {
diff --git a/cw_bitcoin/lib/psbt/v0_finalizer.dart b/cw_bitcoin/lib/psbt/v0_finalizer.dart
index b0b18de..ac4fb57 100644
--- a/cw_bitcoin/lib/psbt/v0_finalizer.dart
+++ b/cw_bitcoin/lib/psbt/v0_finalizer.dart
@@ -18,7 +18,6 @@ import "package:ledger_bitcoin/src/utils/buffer_writer.dart";
/// through PSBT_IN_PARTIAL_SIG or PSBT_IN_TAP_KEY_SIG
extension InputFinalizer on PsbtV2 {
void finalizeV0() {
-
// First check that each input has a signature
for (var i = 0; i < getGlobalInputCount(); i++) {
if (_isFinalized(i)) continue;
@@ -31,8 +30,7 @@ extension InputFinalizer on PsbtV2 {
}
if (legacyPubkeys.isNotEmpty) {
if (legacyPubkeys.length > 1) {
- throw Exception(
- 'Expected exactly one signature, got ${legacyPubkeys.length}');
+ throw Exception('Expected exactly one signature, got ${legacyPubkeys.length}');
}
if (taprootSig != null) {
throw Exception('Both taproot and non-taproot signatures present.');
@@ -55,8 +53,7 @@ extension InputFinalizer on PsbtV2 {
setInputFinalScriptwitness(i, witnessBuf.buffer());
if (isWrappedSegwit) {
if (redeemScript.isEmpty) {
- throw Exception(
- "Expected non-empty redeemscript. Can't finalize input $i");
+ throw Exception("Expected non-empty redeemscript. Can't finalize input $i");
}
final scriptSigBuf = BufferWriter()
..writeUInt8(redeemScript.length) // Push redeemScript length
diff --git a/cw_bitcoin/lib/utils.dart b/cw_bitcoin/lib/utils.dart
index 1eadc04..e1cd5b9 100644
--- a/cw_bitcoin/lib/utils.dart
+++ b/cw_bitcoin/lib/utils.dart
@@ -52,4 +52,4 @@ String generateP2TRAddress({
}) =>
ECPublic.fromBip32(hd.childKey(Bip32KeyIndex(index)).publicKey)
.toTaprootAddress()
- .toAddress(network);
\ No newline at end of file
+ .toAddress(network);
diff --git a/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet_service.dart b/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet_service.dart
index c7316ec..b8888c5 100644
--- a/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet_service.dart
+++ b/cw_bitcoin_cash/lib/src/bitcoin_cash_wallet_service.dart
@@ -87,8 +87,9 @@ class BitcoinCashWalletService extends WalletService<
}
await WalletInfo.delete(walletInfo);
- final unspentCoinsToDelete = unspentCoinsInfoSource.values.where(
- (unspentCoin) => unspentCoin.walletId == walletInfo.id).toList();
+ final unspentCoinsToDelete = unspentCoinsInfoSource.values
+ .where((unspentCoin) => unspentCoin.walletId == walletInfo.id)
+ .toList();
final keysToDelete = unspentCoinsToDelete.map((unspentCoin) => unspentCoin.key).toList();
@@ -122,8 +123,7 @@ class BitcoinCashWalletService extends WalletService<
walletInfo: credentials.walletInfo!,
unspentCoinsInfo: unspentCoinsInfoSource,
encryptionFileUtils: encryptionFileUtilsFor(isDirect),
- passphrase: credentials.passphrase
- );
+ passphrase: credentials.passphrase);
await wallet.save();
await wallet.init();
return wallet;
diff --git a/cw_bitcoin_cash/lib/src/exceptions/exceptions.dart b/cw_bitcoin_cash/lib/src/exceptions/exceptions.dart
index 746e324..993c604 100644
--- a/cw_bitcoin_cash/lib/src/exceptions/exceptions.dart
+++ b/cw_bitcoin_cash/lib/src/exceptions/exceptions.dart
@@ -1 +1 @@
-export 'bitcoin_cash_mnemonic_is_incorrect_exception.dart';
\ No newline at end of file
+export 'bitcoin_cash_mnemonic_is_incorrect_exception.dart';
diff --git a/cw_core/lib/account.dart b/cw_core/lib/account.dart
index 5e7df4a..3061cfe 100644
--- a/cw_core/lib/account.dart
+++ b/cw_core/lib/account.dart
@@ -9,4 +9,4 @@ class Account {
final int id;
final String label;
final String? balance;
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/account_list.dart b/cw_core/lib/account_list.dart
index f49f69a..49b9312 100644
--- a/cw_core/lib/account_list.dart
+++ b/cw_core/lib/account_list.dart
@@ -1,7 +1,6 @@
import 'package:mobx/mobx.dart';
abstract class AccountList<T> {
-
ObservableList<T> get accounts;
void update();
diff --git a/cw_core/lib/address_info.part.dart b/cw_core/lib/address_info.part.dart
index 75b2247..84f4309 100644
--- a/cw_core/lib/address_info.part.dart
+++ b/cw_core/lib/address_info.part.dart
@@ -41,7 +41,5 @@ class AddressInfoAdapter extends TypeAdapter<AddressInfo> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is AddressInfoAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is AddressInfoAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/amount/amount_sanitizer.dart b/cw_core/lib/amount/amount_sanitizer.dart
index 6504d1b..f8c320a 100644
--- a/cw_core/lib/amount/amount_sanitizer.dart
+++ b/cw_core/lib/amount/amount_sanitizer.dart
@@ -10,7 +10,6 @@ String _smartAmountSanitizer(String amount) {
return amount.replaceAll(",", ".");
}
-
extension SanitizerUserAmounts on String {
String sanitized() => _smartAmountSanitizer(this);
}
diff --git a/cw_core/lib/amount_converter.dart b/cw_core/lib/amount_converter.dart
index 850dd9b..a7f5288 100644
--- a/cw_core/lib/amount_converter.dart
+++ b/cw_core/lib/amount_converter.dart
@@ -9,19 +9,18 @@ class AmountConverter {
amount = amount.replaceAll(',', '');
final parts = amount.split('.');
final whole = parts[0].isEmpty ? '0' : parts[0];
- final frac = parts.length > 1 ? parts[1] : '';
+ final frac = parts.length > 1 ? parts[1] : '';
final fracPadded = (frac + '0' * decimals).substring(0, decimals);
final pow10 = BigInt.from(10).pow(decimals);
final wholeBI = BigInt.parse(whole);
- final fracBI = fracPadded.isEmpty ? BigInt.zero : BigInt.parse(fracPadded);
+ final fracBI = fracPadded.isEmpty ? BigInt.zero : BigInt.parse(fracPadded);
final res = wholeBI * pow10 + fracBI;
return neg ? '-${res.toString()}' : res.toString();
}
-
static String fromBaseUnits(String units, int decimals) {
units = units.trim();
if (units.isEmpty) return '0';
@@ -35,14 +34,14 @@ class AmountConverter {
if (units.length <= decimals) {
final s = units.padLeft(decimals + 1, '0'); // ensures at least "0xxxx"
final intPart = s.substring(0, s.length - decimals);
- var fracPart = s.substring(s.length - decimals);
+ var fracPart = s.substring(s.length - decimals);
fracPart = fracPart.replaceFirst(RegExp(r'0+$'), '');
final out = fracPart.isEmpty ? intPart : '$intPart.$fracPart';
return neg ? '-$out' : out;
}
final intPart = units.substring(0, units.length - decimals);
- var fracPart = units.substring(units.length - decimals);
+ var fracPart = units.substring(units.length - decimals);
fracPart = fracPart.replaceFirst(RegExp(r'0+$'), '');
final out = fracPart.isEmpty ? intPart : '$intPart.$fracPart';
return neg ? '-$out' : out;
diff --git a/cw_core/lib/balance_card_style_settings.dart b/cw_core/lib/balance_card_style_settings.dart
index feed5b2..2c874ca 100644
--- a/cw_core/lib/balance_card_style_settings.dart
+++ b/cw_core/lib/balance_card_style_settings.dart
@@ -14,13 +14,13 @@ class BalanceCardStyleSettings {
BalanceCardStyleSettings(
{required this.walletInfoId,
- required this.accountIndex,
- required this.gradientIndex,
- required this.useSpecialDesign,
- required this.backgroundImagePath,
- this.iconStyleIndex = 0,
- this.isGradientOnly = false,
- required this.cardOrder});
+ required this.accountIndex,
+ required this.gradientIndex,
+ required this.useSpecialDesign,
+ required this.backgroundImagePath,
+ this.iconStyleIndex = 0,
+ this.isGradientOnly = false,
+ required this.cardOrder});
static const tableName = "BalanceCardStyleSettings";
@@ -59,21 +59,17 @@ class BalanceCardStyleSettings {
int iconStyleIndex = 0,
int? gradientIndexOverride,
}) {
- final int gradientIndex = gradientIndexOverride ??
- CardDesign.allGradients.indexOf(design.gradient);
+ final int gradientIndex =
+ gradientIndexOverride ?? CardDesign.allGradients.indexOf(design.gradient);
return BalanceCardStyleSettings(
walletInfoId: walletInfoId,
accountIndex: accountIndex,
gradientIndex: gradientIndex,
- useSpecialDesign:
- design.backgroundType == CardDesignBackgroundTypes.svgFull,
+ useSpecialDesign: design.backgroundType == CardDesignBackgroundTypes.svgFull,
backgroundImagePath:
- design.backgroundType == CardDesignBackgroundTypes.image
- ? design.imagePath
- : "",
+ design.backgroundType == CardDesignBackgroundTypes.image ? design.imagePath : "",
iconStyleIndex: iconStyleIndex,
- isGradientOnly:
- design.backgroundType == CardDesignBackgroundTypes.gradientOnly,
+ isGradientOnly: design.backgroundType == CardDesignBackgroundTypes.gradientOnly,
cardOrder: cardOrder,
);
}
@@ -104,4 +100,4 @@ class BalanceCardStyleSettings {
Future<void> insert() async {
db!.insert(tableName, toJson(), conflictAlgorithm: ConflictAlgorithm.replace);
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/card_design.dart b/cw_core/lib/card_design.dart
index 9fcfe09..a8e33fd 100644
--- a/cw_core/lib/card_design.dart
+++ b/cw_core/lib/card_design.dart
@@ -12,14 +12,13 @@ class CardColorCombination {
const CardColorCombination(
{required this.textColor,
- required this.textColorSecondary,
- required this.backgroundImageColor});
+ required this.textColorSecondary,
+ required this.backgroundImageColor});
static const light = CardColorCombination(
textColor: Color.fromARGB(200, 255, 255, 255),
textColorSecondary: Colors.white54,
- backgroundImageColor: Color.fromARGB(200, 0, 0, 0)
- );
+ backgroundImageColor: Color.fromARGB(200, 0, 0, 0));
static const dark = CardColorCombination(
textColor: Color.fromARGB(200, 0, 0, 0),
@@ -50,10 +49,11 @@ class CardDesign {
const CardDesign(
{this.backgroundType = CardDesignBackgroundTypes.svgIcon,
- this.gradient = const LinearGradient(colors: [Colors.black], begin: Alignment.topCenter, end: Alignment.bottomCenter),
- this.imagePath = "assets/new-ui/blank.svg",
- this.colors = CardColorCombination.dark,
- this.preColoredIcon = false});
+ this.gradient = const LinearGradient(
+ colors: [Colors.black], begin: Alignment.topCenter, end: Alignment.bottomCenter),
+ this.imagePath = "assets/new-ui/blank.svg",
+ this.colors = CardColorCombination.dark,
+ this.preColoredIcon = false});
static const LinearGradient gradientOrange = LinearGradient(
colors: <Color>[Color(0xFFFF7C02), Color(0xFFFF5602)],
@@ -129,71 +129,50 @@ class CardDesign {
static const genericDefault = CardDesign(gradient: gradientBlue);
- static const gradientOnlyDesign = CardDesign(
- backgroundType: CardDesignBackgroundTypes.gradientOnly,
- gradient: gradientBlue);
-
- static const btc = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/bitcoin.svg");
-
- static const eth = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/ethereum.svg");
+ static const gradientOnlyDesign =
+ CardDesign(backgroundType: CardDesignBackgroundTypes.gradientOnly, gradient: gradientBlue);
- static const btcln = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/lightning.svg");
+ static const btc = CardDesign(imagePath: "assets/new-ui/balance_card_icons/bitcoin.svg");
- static const xmr = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/monero.svg");
+ static const eth = CardDesign(imagePath: "assets/new-ui/balance_card_icons/ethereum.svg");
- static const ltc = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/litecoin.svg");
+ static const btcln = CardDesign(imagePath: "assets/new-ui/balance_card_icons/lightning.svg");
- static const bch = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
+ static const xmr = CardDesign(imagePath: "assets/new-ui/balance_card_icons/monero.svg");
- static const doge = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/dogecoin.svg");
+ static const ltc = CardDesign(imagePath: "assets/new-ui/balance_card_icons/litecoin.svg");
- static const base = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/base.svg");
+ static const bch = CardDesign(imagePath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
- static const pol = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/polygon.svg");
+ static const doge = CardDesign(imagePath: "assets/new-ui/balance_card_icons/dogecoin.svg");
- static const sol = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/solana.svg");
+ static const base = CardDesign(imagePath: "assets/new-ui/balance_card_icons/base.svg");
- static const tron = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/tron.svg");
+ static const pol = CardDesign(imagePath: "assets/new-ui/balance_card_icons/polygon.svg");
- static const nano = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/nano.svg");
+ static const sol = CardDesign(imagePath: "assets/new-ui/balance_card_icons/solana.svg");
- static const zano = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/zano.svg");
+ static const tron = CardDesign(imagePath: "assets/new-ui/balance_card_icons/tron.svg");
- static const wow = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/wownero.svg");
+ static const nano = CardDesign(imagePath: "assets/new-ui/balance_card_icons/nano.svg");
- static const dcr = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/decred.svg");
+ static const zano = CardDesign(imagePath: "assets/new-ui/balance_card_icons/zano.svg");
- static const arbitrum = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/arbitrum.svg");
+ static const wow = CardDesign(imagePath: "assets/new-ui/balance_card_icons/wownero.svg");
- static const zec = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/zcash.svg");
+ static const dcr = CardDesign(imagePath: "assets/new-ui/balance_card_icons/decred.svg");
- static const bnb = CardDesign(
- imagePath: "assets/new-ui/balance_card_icons/bnb.svg");
+ static const arbitrum = CardDesign(imagePath: "assets/new-ui/balance_card_icons/arbitrum.svg");
+ static const zec = CardDesign(imagePath: "assets/new-ui/balance_card_icons/zcash.svg");
+ static const bnb = CardDesign(imagePath: "assets/new-ui/balance_card_icons/bnb.svg");
static const ethSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF6259FF), Color(0xFF3B20E6)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
colors: CardColorCombination.light,
imagePath: "assets/new-ui/balance_card_backgrounds/ethereum.svg");
@@ -201,24 +180,24 @@ class CardDesign {
static const btcSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFFFBF00), Color(0xFFFF6A00)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/bitcoin.svg");
static const xmrSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFFF5900), Color(0xFFE62E00)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/monero.svg");
static const ltcSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF2145BF), Color(0xFF072071)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
colors: CardColorCombination.light,
imagePath: "assets/new-ui/balance_card_backgrounds/litecoin.svg");
@@ -226,8 +205,8 @@ class CardDesign {
static const lnSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFFFBF00), Color(0xFFFF6A00)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
colors: CardColorCombination.dark,
imagePath: "assets/new-ui/balance_card_backgrounds/lightning.svg");
@@ -235,8 +214,8 @@ class CardDesign {
static const tronSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFFF1313), Color(0xFFB40000)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
colors: CardColorCombination.light,
imagePath: "assets/new-ui/balance_card_backgrounds/tron.svg");
@@ -244,8 +223,8 @@ class CardDesign {
static const solSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF4701AA), Color(0xFF19004B)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
colors: CardColorCombination.light,
imagePath: "assets/new-ui/balance_card_backgrounds/solana.svg");
@@ -253,40 +232,40 @@ class CardDesign {
static const bchSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF36DA4C), Color(0xFF008D57)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/bitcoin-cash.svg");
static const wowSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFFF6CD3), Color(0xFFF200A9)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/wownero.svg");
static const dogeSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFCBA818), Color(0xFF885D00)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/dogecoin.svg");
static const nanoSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF209CE9), Color(0xFF0073CB)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/nano.svg");
static const polSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF863FE3), Color(0xFF59098E)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
colors: CardColorCombination.light,
imagePath: "assets/new-ui/balance_card_backgrounds/polygon.svg");
@@ -294,8 +273,8 @@ class CardDesign {
static const dcrSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF2871FF), Color(0xFF0057FF)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
colors: CardColorCombination.light,
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/decred.svg");
@@ -303,8 +282,8 @@ class CardDesign {
static const zanoSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF0004B4), Color(0xFF170069)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
colors: CardColorCombination.black,
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/zano.svg");
@@ -312,8 +291,8 @@ class CardDesign {
static const baseSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF003CFF), Color(0xFF000087)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
colors: CardColorCombination.light,
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/base.svg");
@@ -321,8 +300,8 @@ class CardDesign {
static const arbitrumSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF173F76), Color(0xFF031A39)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
colors: CardColorCombination.light,
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/arbitrum.svg");
@@ -330,16 +309,16 @@ class CardDesign {
static const zecSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFFF6C527), Color(0xFFCD8C00)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/zcash.svg");
static const bnbSpecial = CardDesign(
gradient: const LinearGradient(
colors: <Color>[Color(0xFF603000), Color(0xFFF0B90B)],
- begin: Alignment.topCenter, end: Alignment.bottomCenter
- ),
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter),
colors: CardColorCombination.light,
backgroundType: CardDesignBackgroundTypes.svgFull,
imagePath: "assets/new-ui/balance_card_backgrounds/bnb.svg");
@@ -351,12 +330,14 @@ class CardDesign {
backgroundType: backgroundType,
preColoredIcon: preColoredIcon);
- CardDesign withGradientAndColorCombination(Gradient gradient, CardColorCombination cardColorCombination) => CardDesign(
- gradient: gradient,
- colors: cardColorCombination,
- imagePath: imagePath,
- backgroundType: backgroundType,
- preColoredIcon: preColoredIcon);
+ CardDesign withGradientAndColorCombination(
+ Gradient gradient, CardColorCombination cardColorCombination) =>
+ CardDesign(
+ gradient: gradient,
+ colors: cardColorCombination,
+ imagePath: imagePath,
+ backgroundType: backgroundType,
+ preColoredIcon: preColoredIcon);
CardDesign withIcon(CardIconPath icon) => CardDesign(
gradient: gradient,
@@ -374,8 +355,10 @@ class CardDesign {
static const Map<CryptoCurrency, _CurrencyIconNames> _iconNames = {
CryptoCurrency.arbEth: _CurrencyIconNames(ticker: 'arb', longName: 'arbitrum'),
- CryptoCurrency.baseEth: _CurrencyIconNames(ticker: 'base', longName: 'base', chainFile: 'base_icon'),
- CryptoCurrency.bch: _CurrencyIconNames(ticker: 'bch', longName: 'bitcoin_cash', chainFile: 'bitcoin-cash'),
+ CryptoCurrency.baseEth:
+ _CurrencyIconNames(ticker: 'base', longName: 'base', chainFile: 'base_icon'),
+ CryptoCurrency.bch:
+ _CurrencyIconNames(ticker: 'bch', longName: 'bitcoin_cash', chainFile: 'bitcoin-cash'),
CryptoCurrency.btc: _CurrencyIconNames(ticker: 'btc', longName: 'bitcoin', outlineFile: 'BTC'),
CryptoCurrency.bnb: _CurrencyIconNames(ticker: 'bnb', longName: 'bnb'),
CryptoCurrency.dcr: _CurrencyIconNames(ticker: 'dcr', longName: 'decred'),
@@ -383,13 +366,13 @@ class CardDesign {
CryptoCurrency.eth: _CurrencyIconNames(ticker: 'eth', longName: 'ethereum'),
CryptoCurrency.btcln: _CurrencyIconNames(ticker: 'ln', longName: 'lightning'),
CryptoCurrency.ltc: _CurrencyIconNames(ticker: 'ltc', longName: 'litecoin'),
- CryptoCurrency.xmr: _CurrencyIconNames(
- ticker: 'xmr', longName: 'monero', ogPath: 'assets/images/xmr-og.webp'),
+ CryptoCurrency.xmr:
+ _CurrencyIconNames(ticker: 'xmr', longName: 'monero', ogPath: 'assets/images/xmr-og.webp'),
CryptoCurrency.nano: _CurrencyIconNames(ticker: 'xno', longName: 'nano'),
CryptoCurrency.maticpoly: _CurrencyIconNames(ticker: 'pol', longName: 'polygon'),
CryptoCurrency.sol: _CurrencyIconNames(ticker: 'sol', longName: 'solana'),
- CryptoCurrency.trx: _CurrencyIconNames(
- ticker: 'trx', longName: 'tron', ogPath: '$_ogIconPrefix/tron-og.svg'),
+ CryptoCurrency.trx:
+ _CurrencyIconNames(ticker: 'trx', longName: 'tron', ogPath: '$_ogIconPrefix/tron-og.svg'),
CryptoCurrency.zano: _CurrencyIconNames(ticker: 'zano', longName: 'zano'),
CryptoCurrency.zec: _CurrencyIconNames(ticker: 'zec', longName: 'zcash'),
};
@@ -408,7 +391,40 @@ class CardDesign {
];
}
- static const List<CardDesign> all = [genericDefault, btc, eth, xmr, ltc, eth, pol, doge, base, sol, btcln, tron, zano, dcr, arbitrum, zec, bnb, ethSpecial, btcSpecial, xmrSpecial, ltcSpecial, lnSpecial, tronSpecial, bchSpecial, wowSpecial, dogeSpecial, polSpecial, dcrSpecial, zanoSpecial, arbitrumSpecial, zecSpecial, bnbSpecial];
+ static const List<CardDesign> all = [
+ genericDefault,
+ btc,
+ eth,
+ xmr,
+ ltc,
+ eth,
+ pol,
+ doge,
+ base,
+ sol,
+ btcln,
+ tron,
+ zano,
+ dcr,
+ arbitrum,
+ zec,
+ bnb,
+ ethSpecial,
+ btcSpecial,
+ xmrSpecial,
+ ltcSpecial,
+ lnSpecial,
+ tronSpecial,
+ bchSpecial,
+ wowSpecial,
+ dogeSpecial,
+ polSpecial,
+ dcrSpecial,
+ zanoSpecial,
+ arbitrumSpecial,
+ zecSpecial,
+ bnbSpecial
+ ];
static CardDesign forCurrencySpecial(CryptoCurrency currency) {
return specialDesignsForCurrencies[currency] ?? genericDefault;
@@ -437,7 +453,6 @@ class CardDesign {
CryptoCurrency.zec: zec,
CryptoCurrency.dcr: dcr,
CryptoCurrency.bnb: bnb,
-
};
static const Map<CryptoCurrency, CardDesign> specialDesignsForCurrencies = {
@@ -504,9 +519,9 @@ class CardDesign {
if (setting.isGradientOnly) {
final gradient = gradientForStoredIndex(setting.gradientIndex, walletCurrency);
- final textColors = preferredColorCombinations[gradient]
- ?? specialDesignsForCurrencies[walletCurrency]?.colors
- ?? gradientOnlyDesign.colors;
+ final textColors = preferredColorCombinations[gradient] ??
+ specialDesignsForCurrencies[walletCurrency]?.colors ??
+ gradientOnlyDesign.colors;
return gradientOnlyDesign.withGradientAndColorCombination(gradient, textColors);
}
@@ -521,11 +536,9 @@ class CardDesign {
}
if (!setting.useSpecialDesign && setting.gradientIndex == -1) {
- final specialColors =
- specialDesignsForCurrencies[walletCurrency] ?? genericDefault;
+ final specialColors = specialDesignsForCurrencies[walletCurrency] ?? genericDefault;
final design = CardDesign.forCurrencyIcon(walletCurrency)
- .withGradientAndColorCombination(
- specialColors.gradient, specialColors.colors);
+ .withGradientAndColorCombination(specialColors.gradient, specialColors.colors);
return design.withIconStyleIndex(setting.iconStyleIndex, walletCurrency);
}
if (setting.useSpecialDesign) {
@@ -534,9 +547,9 @@ class CardDesign {
if (setting.gradientIndex != -1) {
final baseIcon = CardDesign.forCurrencyIcon(walletCurrency);
final gradient = gradientForStoredIndex(setting.gradientIndex, walletCurrency);
- final textColors = preferredColorCombinations[gradient]
- ?? specialDesignsForCurrencies[walletCurrency]?.colors
- ?? baseIcon.colors;
+ final textColors = preferredColorCombinations[gradient] ??
+ specialDesignsForCurrencies[walletCurrency]?.colors ??
+ baseIcon.colors;
return baseIcon
.withGradientAndColorCombination(gradient, textColors)
.withIconStyleIndex(setting.iconStyleIndex, walletCurrency);
@@ -561,4 +574,4 @@ class _CurrencyIconNames {
this.chainFile,
this.ogPath,
});
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/crypto_amount_format.dart b/cw_core/lib/crypto_amount_format.dart
index d6ddf11..2c1d96f 100644
--- a/cw_core/lib/crypto_amount_format.dart
+++ b/cw_core/lib/crypto_amount_format.dart
@@ -37,7 +37,6 @@ extension MaxDecimals on String {
return parts.join(".");
}
-
/// Format a stringified number to a localized representation
/// 1.000.000,00 in de_DE
/// 1’000’000.00 in de_CH
diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart
index cdf8283..b3f711b 100644
--- a/cw_core/lib/crypto_currency.dart
+++ b/cw_core/lib/crypto_currency.dart
@@ -161,143 +161,846 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
// well technically not currencies but since we had them a long time ago and don't want to break
// the app for users who had contacts saved for them
- static const zcashCurrencies = [ zec, zaddr, tzec ];
+ static const zcashCurrencies = [zec, zaddr, tzec];
// title, tag (if applicable), fullName (if unique), raw, name, iconPath
- static const xmr = CryptoCurrency(title: 'XMR', fullName: 'Monero', raw: 0, name: 'xmr', iconPath: 'assets/new-ui/crypto_full_icons/monero.svg', decimals: 12, flatIconPath: "assets/new-ui/balance_card_icons/monero.svg");
- static const ada = CryptoCurrency(title: 'ADA', fullName: 'Cardano', raw: 1, name: 'ada', iconPath: 'assets/images/ada_icon.png', decimals: 6);
- static const bch = CryptoCurrency(title: 'BCH', fullName: 'Bitcoin Cash', raw: 2, name: 'bch', iconPath: 'assets/new-ui/crypto_full_icons/bitcoin-cash.svg', decimals: 8, flatIconPath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
- static const bnb = CryptoCurrency(title: 'BNB', tag: 'BSC', fullName: 'BNB', raw: 3, name: 'bnb', iconPath: 'assets/new-ui/crypto_full_icons/bnb.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/bnb.svg", chainIconPath: "assets/new-ui/chain_badges/bnb.svg");
- static const btc = CryptoCurrency(title: 'BTC', fullName: 'Bitcoin', raw: 4, name: 'btc', iconPath: 'assets/new-ui/crypto_full_icons/bitcoin.svg' ,decimals: 8, flatIconPath: "assets/new-ui/balance_card_icons/bitcoin.svg");
- static const dai = CryptoCurrency(title: 'DAI', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai', iconPath: 'assets/new-ui/crypto_full_icons/dai.svg', decimals: 18, groups: const {CurrencyGroups.stablecoin});
- static const dash = CryptoCurrency(title: 'DASH', fullName: 'Dash', raw: 6, name: 'dash', iconPath: 'assets/images/dash_icon.png', decimals: 8);
- static const eos = CryptoCurrency(title: 'EOS', fullName: 'EOS', raw: 7, name: 'eos', iconPath: 'assets/images/eos_icon.png', decimals: 4);
- static const eth = CryptoCurrency(title: 'ETH', fullName: 'Ethereum', raw: 8, name: 'eth', iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/ethereum.svg", chainIconPath: "assets/new-ui/chain_badges/ethereum.svg");
- static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/new-ui/crypto_full_icons/litecoin.svg', decimals: 8, flatIconPath: "assets/new-ui/balance_card_icons/litecoin.svg", chainIconPath: "assets/new-ui/chain_badges/mweb.svg");
- static const nano = CryptoCurrency(title: 'XNO', fullName: 'Nano', raw: 10, name: 'xno', iconPath: 'assets/new-ui/crypto_full_icons/nano.svg', decimals: 30, flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
- static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/new-ui/crypto_full_icons/tron.svg', decimals: 6, flatIconPath: "assets/new-ui/balance_card_icons/tron.svg", chainIconPath: "assets/new-ui/chain_badges/tron.svg");
- static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'Tether', raw: 12, name: 'usdt', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const xlm = CryptoCurrency(title: 'XLM', fullName: 'Stellar', raw: 14, name: 'xlm', iconPath: 'assets/images/xlm_icon.png', decimals: 7);
- static const xrp = CryptoCurrency(title: 'XRP', fullName: 'Ripple', raw: 15, name: 'xrp', iconPath: 'assets/images/xrp_icon.png', decimals: 6);
- static const xhv = CryptoCurrency(title: 'XHV', fullName: 'Haven Protocol', raw: 16, name: 'xhv', iconPath: 'assets/images/xhv_logo.png', decimals: 12);
-
- static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17, name: 'xag', decimals: 12);
+ static const xmr = CryptoCurrency(
+ title: 'XMR',
+ fullName: 'Monero',
+ raw: 0,
+ name: 'xmr',
+ iconPath: 'assets/new-ui/crypto_full_icons/monero.svg',
+ decimals: 12,
+ flatIconPath: "assets/new-ui/balance_card_icons/monero.svg");
+ static const ada = CryptoCurrency(
+ title: 'ADA',
+ fullName: 'Cardano',
+ raw: 1,
+ name: 'ada',
+ iconPath: 'assets/images/ada_icon.png',
+ decimals: 6);
+ static const bch = CryptoCurrency(
+ title: 'BCH',
+ fullName: 'Bitcoin Cash',
+ raw: 2,
+ name: 'bch',
+ iconPath: 'assets/new-ui/crypto_full_icons/bitcoin-cash.svg',
+ decimals: 8,
+ flatIconPath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
+ static const bnb = CryptoCurrency(
+ title: 'BNB',
+ tag: 'BSC',
+ fullName: 'BNB',
+ raw: 3,
+ name: 'bnb',
+ iconPath: 'assets/new-ui/crypto_full_icons/bnb.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/bnb.svg",
+ chainIconPath: "assets/new-ui/chain_badges/bnb.svg");
+ static const btc = CryptoCurrency(
+ title: 'BTC',
+ fullName: 'Bitcoin',
+ raw: 4,
+ name: 'btc',
+ iconPath: 'assets/new-ui/crypto_full_icons/bitcoin.svg',
+ decimals: 8,
+ flatIconPath: "assets/new-ui/balance_card_icons/bitcoin.svg");
+ static const dai = CryptoCurrency(
+ title: 'DAI',
+ tag: 'ETH',
+ fullName: 'Dai',
+ raw: 5,
+ name: 'dai',
+ iconPath: 'assets/new-ui/crypto_full_icons/dai.svg',
+ decimals: 18,
+ groups: const {CurrencyGroups.stablecoin});
+ static const dash = CryptoCurrency(
+ title: 'DASH',
+ fullName: 'Dash',
+ raw: 6,
+ name: 'dash',
+ iconPath: 'assets/images/dash_icon.png',
+ decimals: 8);
+ static const eos = CryptoCurrency(
+ title: 'EOS',
+ fullName: 'EOS',
+ raw: 7,
+ name: 'eos',
+ iconPath: 'assets/images/eos_icon.png',
+ decimals: 4);
+ static const eth = CryptoCurrency(
+ title: 'ETH',
+ fullName: 'Ethereum',
+ raw: 8,
+ name: 'eth',
+ iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/ethereum.svg",
+ chainIconPath: "assets/new-ui/chain_badges/ethereum.svg");
+ static const ltc = CryptoCurrency(
+ title: 'LTC',
+ fullName: 'Litecoin',
+ raw: 9,
+ name: 'ltc',
+ iconPath: 'assets/new-ui/crypto_full_icons/litecoin.svg',
+ decimals: 8,
+ flatIconPath: "assets/new-ui/balance_card_icons/litecoin.svg",
+ chainIconPath: "assets/new-ui/chain_badges/mweb.svg");
+ static const nano = CryptoCurrency(
+ title: 'XNO',
+ fullName: 'Nano',
+ raw: 10,
+ name: 'xno',
+ iconPath: 'assets/new-ui/crypto_full_icons/nano.svg',
+ decimals: 30,
+ flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
+ static const trx = CryptoCurrency(
+ title: 'TRX',
+ fullName: 'TRON',
+ raw: 11,
+ name: 'trx',
+ iconPath: 'assets/new-ui/crypto_full_icons/tron.svg',
+ decimals: 6,
+ flatIconPath: "assets/new-ui/balance_card_icons/tron.svg",
+ chainIconPath: "assets/new-ui/chain_badges/tron.svg");
+ static const usdt = CryptoCurrency(
+ title: 'USDT',
+ tag: 'OMNI',
+ fullName: 'Tether',
+ raw: 12,
+ name: 'usdt',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const usdterc20 = CryptoCurrency(
+ title: 'USDT',
+ tag: 'ETH',
+ fullName: 'Tether',
+ raw: 13,
+ name: 'usdterc20',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const xlm = CryptoCurrency(
+ title: 'XLM',
+ fullName: 'Stellar',
+ raw: 14,
+ name: 'xlm',
+ iconPath: 'assets/images/xlm_icon.png',
+ decimals: 7);
+ static const xrp = CryptoCurrency(
+ title: 'XRP',
+ fullName: 'Ripple',
+ raw: 15,
+ name: 'xrp',
+ iconPath: 'assets/images/xrp_icon.png',
+ decimals: 6);
+ static const xhv = CryptoCurrency(
+ title: 'XHV',
+ fullName: 'Haven Protocol',
+ raw: 16,
+ name: 'xhv',
+ iconPath: 'assets/images/xhv_logo.png',
+ decimals: 12);
+
+ static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17, name: 'xag', decimals: 12);
static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18, name: 'xau', decimals: 12);
- static const xaud = CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19, name: 'xaud', decimals: 12);
- static const xbtc = CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20, name: 'xbtc', decimals: 12);
- static const xcad = CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21, name: 'xcad', decimals: 12);
- static const xchf = CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22, name: 'xchf', decimals: 12);
- static const xcny = CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23, name: 'xcny', decimals: 12);
- static const xeur = CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24, name: 'xeur', decimals: 12);
- static const xgbp = CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25, name: 'xgbp', decimals: 12);
- static const xjpy = CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26, name: 'xjpy', decimals: 12);
- static const xnok = CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27, name: 'xnok', decimals: 12);
- static const xnzd = CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28, name: 'xnzd', decimals: 12);
- static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd', decimals: 12);
-
- static const ape = CryptoCurrency(title: 'APE', tag: 'ETH', fullName: 'ApeCoin', raw: 30, name: 'ape', iconPath: 'assets/images/ape_icon.png', decimals: 18);
- static const avaxc = CryptoCurrency(title: 'AVAX', tag: 'AVAXC', fullName: 'Avalanche', raw: 31, name: 'avaxc', iconPath: 'assets/new-ui/crypto_full_icons/avax.svg', decimals: 9);
- static const btt = CryptoCurrency(title: 'BTT', tag: 'ETH', fullName: 'BitTorrent', raw: 32, name: 'btt', iconPath: 'assets/images/btt_icon.png', decimals: 18);
- static const bttc = CryptoCurrency(title: 'BTTC', tag: 'TRX', fullName: 'BitTorrent-NEW', raw: 33, name: 'bttc', iconPath: 'assets/images/btt_icon.png', decimals: 18);
- static const doge = CryptoCurrency(title: 'DOGE', fullName: 'Dogecoin', raw: 34, name: 'doge', iconPath: 'assets/new-ui/crypto_full_icons/dogecoin.svg', decimals: 8, flatIconPath: "assets/new-ui/balance_card_icons/dogecoin.svg");
- static const firo = CryptoCurrency(title: 'FIRO', raw: 35, name: 'firo', iconPath: 'assets/images/firo_icon.png', decimals: 8);
- static const usdttrc20 = CryptoCurrency(title: 'USDT', tag: 'TRX', fullName: 'Tether', raw: 36, name: 'usdttrc20', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const hbar = CryptoCurrency(title: 'HBAR', fullName: 'Hedera', raw: 37, name: 'hbar', iconPath: 'assets/images/hbar_icon.png', decimals: 8);
- static const sc = CryptoCurrency(title: 'SC', fullName: 'Siacoin', raw: 38, name: 'sc', iconPath: 'assets/images/sc_icon.png', decimals: 16);
- static const sol = CryptoCurrency(title: 'SOL', fullName: 'Solana', raw: 39, name: 'sol', iconPath: 'assets/new-ui/crypto_full_icons/solana.svg', decimals: 9, flatIconPath: "assets/new-ui/balance_card_icons/solana.svg", chainIconPath: "assets/new-ui/chain_badges/solana.svg");
- static const usdc = CryptoCurrency(title: 'USDC', tag: 'ETH', fullName: 'USDC', raw: 40, name: 'usdc', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const usdcsol = CryptoCurrency(title: 'USDC', tag: 'SOL', fullName: 'USDC Coin', raw: 41, name: 'usdcsol', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', fullName: 'Shielded Zcash', raw: 42, name: 'zaddr', iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg', decimals: 8);
- static const tzec = CryptoCurrency(title: 'tZEC', tag: 'ZEC', fullName: 'Transparent Zcash', raw: 43, name: 'zec', iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg', decimals: 8);
- static const zen = CryptoCurrency(title: 'ZEN', fullName: 'Horizen', raw: 44, name: 'zen', iconPath: 'assets/images/zen_icon.png', decimals: 8);
- static const xvg = CryptoCurrency(title: 'XVG', fullName: 'Verge', raw: 45, name: 'xvg', iconPath: 'assets/images/xvg_icon.png', decimals: 8);
-
- static const usdcpoly = CryptoCurrency(title: 'USDC', tag: 'POL', fullName: 'USDC', raw: 46, name: 'usdcpoly', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const dcr = CryptoCurrency(title: 'DCR', fullName: 'Decred', raw: 47, name: 'dcr', iconPath: 'assets/new-ui/crypto_full_icons/decred.svg', decimals: 8, flatIconPath: "assets/new-ui/balance_card_icons/decred.svg");
- static const kmd = CryptoCurrency(title: 'KMD', fullName: 'Komodo', raw: 48, name: 'kmd', iconPath: 'assets/images/kmd_icon.png', decimals: 8);
- static const mana = CryptoCurrency(title: 'MANA', tag: 'ETH', fullName: 'Decentraland', raw: 49, name: 'mana', iconPath: 'assets/images/mana_icon.png', decimals: 18);
- static const maticpoly = CryptoCurrency(title: 'POL', tag: 'POL', fullName: 'Polygon', raw: 50, name: 'maticpoly', iconPath: 'assets/new-ui/crypto_full_icons/polygon.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg", chainIconPath: "assets/new-ui/chain_badges/polygon.svg");
- static const matic = CryptoCurrency(title: 'MATIC', tag: 'ETH', fullName: 'Polygon', raw: 51, name: 'matic', iconPath: 'assets/new-ui/crypto_full_icons/polygon.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg");
- static const mkr = CryptoCurrency(title: 'MKR', tag: 'ETH', fullName: 'Maker', raw: 52, name: 'mkr', iconPath: 'assets/images/mkr_icon.png', decimals: 18);
- static const near = CryptoCurrency(title: 'NEAR', fullName: 'NEAR Protocol', raw: 53, name: 'near', iconPath: 'assets/images/near_icon.png', decimals: 24);
- static const oxt = CryptoCurrency(title: 'OXT', tag: 'ETH', fullName: 'Orchid', raw: 54, name: 'oxt', iconPath: 'assets/images/oxt_icon.png', decimals: 18);
- static const paxg = CryptoCurrency(title: 'PAXG', tag: 'ETH', fullName: 'Pax Gold', raw: 55, name: 'paxg', iconPath: 'assets/new-ui/crypto_full_icons/paxg.svg', decimals: 18);
- static const pivx = CryptoCurrency(title: 'PIVX', raw: 56, name: 'pivx', iconPath: 'assets/images/pivx_icon.png', decimals: 8);
- static const rune = CryptoCurrency(title: 'RUNE', fullName: 'Thorchain', raw: 57, name: 'rune', iconPath: 'assets/images/rune_icon.png', decimals: 18);
- static const rvn = CryptoCurrency(title: 'RVN', fullName: 'Ravencoin', raw: 58, name: 'rvn', iconPath: 'assets/images/rvn_icon.png', decimals: 8);
- static const scrt = CryptoCurrency(title: 'SCRT', fullName: 'Secret Network', raw: 59, name: 'scrt', iconPath: 'assets/images/scrt_icon.png', decimals: 6);
- static const uni = CryptoCurrency(title: 'UNI', tag: 'ETH', fullName: 'Uniswap', raw: 60, name: 'uni', iconPath: 'assets/images/uni_icon.png', decimals: 18);
- static const stx = CryptoCurrency(title: 'STX', fullName: 'Stacks', raw: 61, name: 'stx', iconPath: 'assets/images/stx_icon.png', decimals: 8);
- static const btcln = CryptoCurrency(title: 'BTC', tag: 'LN', fullName: 'Bitcoin Lightning Network', raw: 62, name: 'btcln', iconPath: 'assets/new-ui/crypto_full_icons/lightning.svg', chainIconPath: "assets/new-ui/chain_badges/lightning.svg", decimals: 8);
- static const shib = CryptoCurrency(title: 'SHIB', tag: 'ETH', fullName: 'Shiba Inu', raw: 63, name: 'shib', iconPath: 'assets/images/shib_icon.png', decimals: 18);
- static const aave = CryptoCurrency(title: 'AAVE', tag: 'ETH', fullName: 'Aave', raw: 64, name: 'aave', iconPath: 'assets/images/aave_icon.png', decimals: 18);
- static const arb = CryptoCurrency(title: 'ARB', fullName: 'Arbitrum', raw: 65, name: 'arb', iconPath: 'assets/new-ui/crypto_full_icons/arbitrum.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg", chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
- static const bat = CryptoCurrency(title: 'BAT', tag: 'ETH', fullName: 'Basic Attention Token', raw: 66, name: 'bat', iconPath: 'assets/images/bat_icon.png', decimals: 18);
- static const comp = CryptoCurrency(title: 'COMP', tag: 'ETH', fullName: 'Compound', raw: 67, name: 'comp', iconPath: 'assets/images/comp_icon.png', decimals: 18);
- static const cro = CryptoCurrency(title: 'CRO', tag: 'ETH', fullName: 'Crypto.com Cronos', raw: 68, name: 'cro', iconPath: 'assets/images/cro_icon.png', decimals: 8);
- static const ens = CryptoCurrency(title: 'ENS', tag: 'ETH', fullName: 'Ethereum Name Service', raw: 69, name: 'ens', iconPath: 'assets/images/ens_icon.png', decimals: 18);
- static const ftm = CryptoCurrency(title: 'FTM', tag: 'ETH', fullName: 'Fantom', raw: 70, name: 'ftm', iconPath: 'assets/images/ftm_icon.png', decimals: 18);
- static const frax = CryptoCurrency(title: 'FRAX', tag: 'ETH', fullName: 'Frax', raw: 71, name: 'frax', iconPath: 'assets/images/frax_icon.png', decimals: 18);
- static const gusd = CryptoCurrency(title: 'GUSD', tag: 'ETH', fullName: 'Gemini USD', raw: 72, name: 'gusd', iconPath: 'assets/images/gusd_icon.png', decimals: 2);
- static const gtc = CryptoCurrency(title: 'GTC', tag: 'ETH', fullName: 'Gitcoin', raw: 73, name: 'gtc', iconPath: 'assets/images/gtc_icon.png', decimals: 18);
- static const grt = CryptoCurrency(title: 'GRT', tag: 'ETH', fullName: 'The Graph', raw: 74, name: 'grt', iconPath: 'assets/images/grt_icon.png', decimals: 18);
- static const ldo = CryptoCurrency(title: 'LDO', tag: 'ETH', fullName: 'Lido DAO', raw: 75, name: 'ldo', iconPath: 'assets/images/ldo_icon.png', decimals: 18);
- static const nexo = CryptoCurrency(title: 'NEXO', tag: 'ETH', fullName: 'Nexo', raw: 76, name: 'nexo', iconPath: 'assets/images/nexo_icon.png', decimals: 18);
- static const cake = CryptoCurrency(title: 'CAKE', tag: 'BSC', fullName: 'PancakeSwap', raw: 77, name: 'cake', iconPath: 'assets/images/cake_icon.png', decimals: 18);
- static const pepe = CryptoCurrency(title: 'PEPE', tag: 'ETH', fullName: 'Pepe', raw: 78, name: 'pepe', iconPath: 'assets/images/pepe_icon.png', decimals: 18);
- static const storj = CryptoCurrency(title: 'STORJ', tag: 'ETH', fullName: 'Storj', raw: 79, name: 'storj', iconPath: 'assets/images/storj_icon.png', decimals: 8);
- static const tusd = CryptoCurrency(title: 'TUSD', tag: 'ETH', fullName: 'TrueUSD', raw: 80, name: 'tusd', iconPath: 'assets/images/tusd_icon.png', decimals: 18);
- static const wbtc = CryptoCurrency(title: 'WBTC', tag: 'ETH', fullName: 'Wrapped Bitcoin', raw: 81, name: 'wbtc', iconPath: 'assets/new-ui/crypto_full_icons/wbtc.svg', decimals: 8);
- static const weth = CryptoCurrency(title: 'WETH', tag: 'ETH', fullName: 'Wrapped Ethereum', raw: 82, name: 'weth', iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg', decimals: 18);
- static const zrx = CryptoCurrency(title: 'ZRX', tag: 'ETH', fullName: '0x Protocol', raw: 83, name: 'zrx', iconPath: 'assets/images/zrx_icon.png', decimals: 18);
- static const dydx = CryptoCurrency(title: 'DYDX', tag: 'ETH', fullName: 'dYdX', raw: 84, name: 'dydx', iconPath: 'assets/images/dydx_icon.png', decimals: 18);
- static const steth = CryptoCurrency(title: 'STETH', tag: 'ETH', fullName: 'Lido Staked Ethereum', raw: 85, name: 'steth', iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg', decimals: 18);
- static const banano = CryptoCurrency(title: 'BAN', fullName: 'Banano', raw: 86, name: 'banano', iconPath: 'assets/images/nano_icon.png', decimals: 29,flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
- static const usdtPoly = CryptoCurrency(title: 'USDT', tag: 'POL', fullName: 'Tether (PoS)', raw: 87, name: 'usdtpoly', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const usdcEPoly = CryptoCurrency(title: 'USDC.E', tag: 'POL', fullName: 'USDC (PoS)', raw: 88, name: 'usdcepoly', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6);
- static const kaspa = CryptoCurrency(title: 'KAS', fullName: 'Kaspa', raw: 89, name: 'kas', iconPath: 'assets/images/kaspa_icon.png', decimals: 8);
- static const digibyte = CryptoCurrency(title: 'DGB', fullName: 'DigiByte', raw: 90, name: 'dgb', iconPath: 'assets/images/digibyte.png', decimals: 8);
- static const usdtSol = CryptoCurrency(title: 'USDT', tag: 'SOL', fullName: 'Tether', raw: 91, name: 'usdtsol', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const tbtc = CryptoCurrency(title: 'tBTC', fullName: 'Testnet Bitcoin', raw: 93, name: 'tbtc', iconPath: 'assets/images/tbtc.png', decimals: 8);
- static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/crypto/wownero.svg', decimals: 11);
- static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/new-ui/crypto_full_icons/ton.svg', decimals: 8);
- static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/new-ui/crypto_full_icons/zano.svg', decimals: 12, flatIconPath: "assets/new-ui/balance_card_icons/zano.svg", chainIconPath: "assets/new-ui/chain_badges/zano.svg");
- static const flip = CryptoCurrency(title: 'FLIP', tag: 'ETH', fullName: 'Chainflip', raw: 97, name: 'flip', iconPath: 'assets/images/flip_icon.png', decimals: 18);
- static const deuro = CryptoCurrency(title: 'DEURO', tag: 'ETH', fullName: 'Decentralized Euro', raw: 98, name: 'deuro', iconPath: 'assets/images/deuro_icon.png',decimals: 18, groups: const {CurrencyGroups.stablecoin});
- static const usdtbsc = CryptoCurrency(title: 'USDT', tag: 'BSC', fullName: 'USDT Binance coin', raw: 99, name: 'usdtbsc', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 18, groups: const {CurrencyGroups.stablecoin});
- static const ndeps = CryptoCurrency(title: 'NDEPS', tag: 'ETH', fullName: 'Native Decentralized Euro Protocol Share', raw: 100, name: 'ndeps', iconPath: 'assets/images/ndeps_icon.png', decimals: 18);
- static const deps = CryptoCurrency(title: 'DEPS', tag: 'ETH', fullName: 'Decentralized Euro Protocol Share', raw: 101, name: 'deps', iconPath: 'assets/images/deps_icon.png', decimals: 18);
- static const kbtc = CryptoCurrency(title: 'KBTC', tag: 'ETH', fullName: 'Kraken Wrapped Bitcoin', raw: 102, name: 'kbtc', iconPath: 'assets/images/kbtc_icon.png', decimals: 8);
- static const cbbtc = CryptoCurrency(title: 'CBBTC', tag: 'ETH', fullName: 'Coinbase Wrapped BTC', raw: 103, name: 'cbbtc', iconPath: 'assets/images/cbbtc_icon.png', decimals: 8);
- static const baseEth = CryptoCurrency(title: 'ETH', tag: 'BASE', fullName: 'Ethereum', raw: 104, name: 'baseth', iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/base.svg", chainIconPath: "assets/new-ui/chain_badges/base.svg");
- static const usde = CryptoCurrency(title: 'USDE', tag: 'BASE', fullName: 'Ethena USDE', raw: 105, name: 'usde', iconPath: 'assets/new-ui/crypto_full_icons/usde.svg', decimals: 18);
- static const arbEth = CryptoCurrency(title: 'ETH', tag: 'ARB', fullName: 'Ethereum', raw: 106, name: 'arbeth', iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg', decimals: 18, flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg", chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
- static const zec = CryptoCurrency(title: 'ZEC', fullName: 'Zcash', raw: 107, name: 'zec', iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg', decimals: 8,flatIconPath: "assets/new-ui/balance_card_icons/zcash.svg");
- static const usdcArb = CryptoCurrency(title: 'USDC', tag: 'ARB', fullName: 'USDC Coin', raw: 108, name: 'usdcarb', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const usdtArb = CryptoCurrency(title: 'USDT', tag: 'ARB', fullName: 'USDT Tether', raw: 109, name: 'usdtarb', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6, groups: const {CurrencyGroups.stablecoin});
- static const ltcmweb = CryptoCurrency(title: 'LTC', fullName: 'Litecoin MWeb', raw: 110, name: 'ltcmweb', iconPath: 'assets/new-ui/crypto_full_icons/litecoin.svg', decimals: 8);
-
- static final Map<int, CryptoCurrency> _rawCurrencyMap =
- [...all, ...havenCurrencies, ...zcashCurrencies].fold<Map<int, CryptoCurrency>>(<int, CryptoCurrency>{}, (acc, item) {
- acc.addAll({item.raw: item});
- return acc;
- });
-
- static final Map<String, CryptoCurrency> _nameCurrencyMap =
- [...all, ...havenCurrencies, ...zcashCurrencies].fold<Map<String, CryptoCurrency>>(<String, CryptoCurrency>{}, (acc, item) {
- acc.addAll({item.name: item});
- return acc;
- });
-
- static final Map<String, CryptoCurrency> _fullNameCurrencyMap =
- [...all, ...havenCurrencies, ...zcashCurrencies].fold<Map<String, CryptoCurrency>>(<String, CryptoCurrency>{}, (acc, item) {
- if(item.fullName != null){
- acc.addAll({item.fullName!.toLowerCase(): item});
- }
- return acc;
- });
+ static const xaud =
+ CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19, name: 'xaud', decimals: 12);
+ static const xbtc =
+ CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20, name: 'xbtc', decimals: 12);
+ static const xcad =
+ CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21, name: 'xcad', decimals: 12);
+ static const xchf =
+ CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22, name: 'xchf', decimals: 12);
+ static const xcny =
+ CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23, name: 'xcny', decimals: 12);
+ static const xeur =
+ CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24, name: 'xeur', decimals: 12);
+ static const xgbp =
+ CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25, name: 'xgbp', decimals: 12);
+ static const xjpy =
+ CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26, name: 'xjpy', decimals: 12);
+ static const xnok =
+ CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27, name: 'xnok', decimals: 12);
+ static const xnzd =
+ CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28, name: 'xnzd', decimals: 12);
+ static const xusd =
+ CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd', decimals: 12);
+
+ static const ape = CryptoCurrency(
+ title: 'APE',
+ tag: 'ETH',
+ fullName: 'ApeCoin',
+ raw: 30,
+ name: 'ape',
+ iconPath: 'assets/images/ape_icon.png',
+ decimals: 18);
+ static const avaxc = CryptoCurrency(
+ title: 'AVAX',
+ tag: 'AVAXC',
+ fullName: 'Avalanche',
+ raw: 31,
+ name: 'avaxc',
+ iconPath: 'assets/new-ui/crypto_full_icons/avax.svg',
+ decimals: 9);
+ static const btt = CryptoCurrency(
+ title: 'BTT',
+ tag: 'ETH',
+ fullName: 'BitTorrent',
+ raw: 32,
+ name: 'btt',
+ iconPath: 'assets/images/btt_icon.png',
+ decimals: 18);
+ static const bttc = CryptoCurrency(
+ title: 'BTTC',
+ tag: 'TRX',
+ fullName: 'BitTorrent-NEW',
+ raw: 33,
+ name: 'bttc',
+ iconPath: 'assets/images/btt_icon.png',
+ decimals: 18);
+ static const doge = CryptoCurrency(
+ title: 'DOGE',
+ fullName: 'Dogecoin',
+ raw: 34,
+ name: 'doge',
+ iconPath: 'assets/new-ui/crypto_full_icons/dogecoin.svg',
+ decimals: 8,
+ flatIconPath: "assets/new-ui/balance_card_icons/dogecoin.svg");
+ static const firo = CryptoCurrency(
+ title: 'FIRO', raw: 35, name: 'firo', iconPath: 'assets/images/firo_icon.png', decimals: 8);
+ static const usdttrc20 = CryptoCurrency(
+ title: 'USDT',
+ tag: 'TRX',
+ fullName: 'Tether',
+ raw: 36,
+ name: 'usdttrc20',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const hbar = CryptoCurrency(
+ title: 'HBAR',
+ fullName: 'Hedera',
+ raw: 37,
+ name: 'hbar',
+ iconPath: 'assets/images/hbar_icon.png',
+ decimals: 8);
+ static const sc = CryptoCurrency(
+ title: 'SC',
+ fullName: 'Siacoin',
+ raw: 38,
+ name: 'sc',
+ iconPath: 'assets/images/sc_icon.png',
+ decimals: 16);
+ static const sol = CryptoCurrency(
+ title: 'SOL',
+ fullName: 'Solana',
+ raw: 39,
+ name: 'sol',
+ iconPath: 'assets/new-ui/crypto_full_icons/solana.svg',
+ decimals: 9,
+ flatIconPath: "assets/new-ui/balance_card_icons/solana.svg",
+ chainIconPath: "assets/new-ui/chain_badges/solana.svg");
+ static const usdc = CryptoCurrency(
+ title: 'USDC',
+ tag: 'ETH',
+ fullName: 'USDC',
+ raw: 40,
+ name: 'usdc',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const usdcsol = CryptoCurrency(
+ title: 'USDC',
+ tag: 'SOL',
+ fullName: 'USDC Coin',
+ raw: 41,
+ name: 'usdcsol',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const zaddr = CryptoCurrency(
+ title: 'ZZEC',
+ tag: 'ZEC',
+ fullName: 'Shielded Zcash',
+ raw: 42,
+ name: 'zaddr',
+ iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg',
+ decimals: 8);
+ static const tzec = CryptoCurrency(
+ title: 'tZEC',
+ tag: 'ZEC',
+ fullName: 'Transparent Zcash',
+ raw: 43,
+ name: 'zec',
+ iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg',
+ decimals: 8);
+ static const zen = CryptoCurrency(
+ title: 'ZEN',
+ fullName: 'Horizen',
+ raw: 44,
+ name: 'zen',
+ iconPath: 'assets/images/zen_icon.png',
+ decimals: 8);
+ static const xvg = CryptoCurrency(
+ title: 'XVG',
+ fullName: 'Verge',
+ raw: 45,
+ name: 'xvg',
+ iconPath: 'assets/images/xvg_icon.png',
+ decimals: 8);
+
+ static const usdcpoly = CryptoCurrency(
+ title: 'USDC',
+ tag: 'POL',
+ fullName: 'USDC',
+ raw: 46,
+ name: 'usdcpoly',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const dcr = CryptoCurrency(
+ title: 'DCR',
+ fullName: 'Decred',
+ raw: 47,
+ name: 'dcr',
+ iconPath: 'assets/new-ui/crypto_full_icons/decred.svg',
+ decimals: 8,
+ flatIconPath: "assets/new-ui/balance_card_icons/decred.svg");
+ static const kmd = CryptoCurrency(
+ title: 'KMD',
+ fullName: 'Komodo',
+ raw: 48,
+ name: 'kmd',
+ iconPath: 'assets/images/kmd_icon.png',
+ decimals: 8);
+ static const mana = CryptoCurrency(
+ title: 'MANA',
+ tag: 'ETH',
+ fullName: 'Decentraland',
+ raw: 49,
+ name: 'mana',
+ iconPath: 'assets/images/mana_icon.png',
+ decimals: 18);
+ static const maticpoly = CryptoCurrency(
+ title: 'POL',
+ tag: 'POL',
+ fullName: 'Polygon',
+ raw: 50,
+ name: 'maticpoly',
+ iconPath: 'assets/new-ui/crypto_full_icons/polygon.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg",
+ chainIconPath: "assets/new-ui/chain_badges/polygon.svg");
+ static const matic = CryptoCurrency(
+ title: 'MATIC',
+ tag: 'ETH',
+ fullName: 'Polygon',
+ raw: 51,
+ name: 'matic',
+ iconPath: 'assets/new-ui/crypto_full_icons/polygon.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg");
+ static const mkr = CryptoCurrency(
+ title: 'MKR',
+ tag: 'ETH',
+ fullName: 'Maker',
+ raw: 52,
+ name: 'mkr',
+ iconPath: 'assets/images/mkr_icon.png',
+ decimals: 18);
+ static const near = CryptoCurrency(
+ title: 'NEAR',
+ fullName: 'NEAR Protocol',
+ raw: 53,
+ name: 'near',
+ iconPath: 'assets/images/near_icon.png',
+ decimals: 24);
+ static const oxt = CryptoCurrency(
+ title: 'OXT',
+ tag: 'ETH',
+ fullName: 'Orchid',
+ raw: 54,
+ name: 'oxt',
+ iconPath: 'assets/images/oxt_icon.png',
+ decimals: 18);
+ static const paxg = CryptoCurrency(
+ title: 'PAXG',
+ tag: 'ETH',
+ fullName: 'Pax Gold',
+ raw: 55,
+ name: 'paxg',
+ iconPath: 'assets/new-ui/crypto_full_icons/paxg.svg',
+ decimals: 18);
+ static const pivx = CryptoCurrency(
+ title: 'PIVX', raw: 56, name: 'pivx', iconPath: 'assets/images/pivx_icon.png', decimals: 8);
+ static const rune = CryptoCurrency(
+ title: 'RUNE',
+ fullName: 'Thorchain',
+ raw: 57,
+ name: 'rune',
+ iconPath: 'assets/images/rune_icon.png',
+ decimals: 18);
+ static const rvn = CryptoCurrency(
+ title: 'RVN',
+ fullName: 'Ravencoin',
+ raw: 58,
+ name: 'rvn',
+ iconPath: 'assets/images/rvn_icon.png',
+ decimals: 8);
+ static const scrt = CryptoCurrency(
+ title: 'SCRT',
+ fullName: 'Secret Network',
+ raw: 59,
+ name: 'scrt',
+ iconPath: 'assets/images/scrt_icon.png',
+ decimals: 6);
+ static const uni = CryptoCurrency(
+ title: 'UNI',
+ tag: 'ETH',
+ fullName: 'Uniswap',
+ raw: 60,
+ name: 'uni',
+ iconPath: 'assets/images/uni_icon.png',
+ decimals: 18);
+ static const stx = CryptoCurrency(
+ title: 'STX',
+ fullName: 'Stacks',
+ raw: 61,
+ name: 'stx',
+ iconPath: 'assets/images/stx_icon.png',
+ decimals: 8);
+ static const btcln = CryptoCurrency(
+ title: 'BTC',
+ tag: 'LN',
+ fullName: 'Bitcoin Lightning Network',
+ raw: 62,
+ name: 'btcln',
+ iconPath: 'assets/new-ui/crypto_full_icons/lightning.svg',
+ chainIconPath: "assets/new-ui/chain_badges/lightning.svg",
+ decimals: 8);
+ static const shib = CryptoCurrency(
+ title: 'SHIB',
+ tag: 'ETH',
+ fullName: 'Shiba Inu',
+ raw: 63,
+ name: 'shib',
+ iconPath: 'assets/images/shib_icon.png',
+ decimals: 18);
+ static const aave = CryptoCurrency(
+ title: 'AAVE',
+ tag: 'ETH',
+ fullName: 'Aave',
+ raw: 64,
+ name: 'aave',
+ iconPath: 'assets/images/aave_icon.png',
+ decimals: 18);
+ static const arb = CryptoCurrency(
+ title: 'ARB',
+ fullName: 'Arbitrum',
+ raw: 65,
+ name: 'arb',
+ iconPath: 'assets/new-ui/crypto_full_icons/arbitrum.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg",
+ chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
+ static const bat = CryptoCurrency(
+ title: 'BAT',
+ tag: 'ETH',
+ fullName: 'Basic Attention Token',
+ raw: 66,
+ name: 'bat',
+ iconPath: 'assets/images/bat_icon.png',
+ decimals: 18);
+ static const comp = CryptoCurrency(
+ title: 'COMP',
+ tag: 'ETH',
+ fullName: 'Compound',
+ raw: 67,
+ name: 'comp',
+ iconPath: 'assets/images/comp_icon.png',
+ decimals: 18);
+ static const cro = CryptoCurrency(
+ title: 'CRO',
+ tag: 'ETH',
+ fullName: 'Crypto.com Cronos',
+ raw: 68,
+ name: 'cro',
+ iconPath: 'assets/images/cro_icon.png',
+ decimals: 8);
+ static const ens = CryptoCurrency(
+ title: 'ENS',
+ tag: 'ETH',
+ fullName: 'Ethereum Name Service',
+ raw: 69,
+ name: 'ens',
+ iconPath: 'assets/images/ens_icon.png',
+ decimals: 18);
+ static const ftm = CryptoCurrency(
+ title: 'FTM',
+ tag: 'ETH',
+ fullName: 'Fantom',
+ raw: 70,
+ name: 'ftm',
+ iconPath: 'assets/images/ftm_icon.png',
+ decimals: 18);
+ static const frax = CryptoCurrency(
+ title: 'FRAX',
+ tag: 'ETH',
+ fullName: 'Frax',
+ raw: 71,
+ name: 'frax',
+ iconPath: 'assets/images/frax_icon.png',
+ decimals: 18);
+ static const gusd = CryptoCurrency(
+ title: 'GUSD',
+ tag: 'ETH',
+ fullName: 'Gemini USD',
+ raw: 72,
+ name: 'gusd',
+ iconPath: 'assets/images/gusd_icon.png',
+ decimals: 2);
+ static const gtc = CryptoCurrency(
+ title: 'GTC',
+ tag: 'ETH',
+ fullName: 'Gitcoin',
+ raw: 73,
+ name: 'gtc',
+ iconPath: 'assets/images/gtc_icon.png',
+ decimals: 18);
+ static const grt = CryptoCurrency(
+ title: 'GRT',
+ tag: 'ETH',
+ fullName: 'The Graph',
+ raw: 74,
+ name: 'grt',
+ iconPath: 'assets/images/grt_icon.png',
+ decimals: 18);
+ static const ldo = CryptoCurrency(
+ title: 'LDO',
+ tag: 'ETH',
+ fullName: 'Lido DAO',
+ raw: 75,
+ name: 'ldo',
+ iconPath: 'assets/images/ldo_icon.png',
+ decimals: 18);
+ static const nexo = CryptoCurrency(
+ title: 'NEXO',
+ tag: 'ETH',
+ fullName: 'Nexo',
+ raw: 76,
+ name: 'nexo',
+ iconPath: 'assets/images/nexo_icon.png',
+ decimals: 18);
+ static const cake = CryptoCurrency(
+ title: 'CAKE',
+ tag: 'BSC',
+ fullName: 'PancakeSwap',
+ raw: 77,
+ name: 'cake',
+ iconPath: 'assets/images/cake_icon.png',
+ decimals: 18);
+ static const pepe = CryptoCurrency(
+ title: 'PEPE',
+ tag: 'ETH',
+ fullName: 'Pepe',
+ raw: 78,
+ name: 'pepe',
+ iconPath: 'assets/images/pepe_icon.png',
+ decimals: 18);
+ static const storj = CryptoCurrency(
+ title: 'STORJ',
+ tag: 'ETH',
+ fullName: 'Storj',
+ raw: 79,
+ name: 'storj',
+ iconPath: 'assets/images/storj_icon.png',
+ decimals: 8);
+ static const tusd = CryptoCurrency(
+ title: 'TUSD',
+ tag: 'ETH',
+ fullName: 'TrueUSD',
+ raw: 80,
+ name: 'tusd',
+ iconPath: 'assets/images/tusd_icon.png',
+ decimals: 18);
+ static const wbtc = CryptoCurrency(
+ title: 'WBTC',
+ tag: 'ETH',
+ fullName: 'Wrapped Bitcoin',
+ raw: 81,
+ name: 'wbtc',
+ iconPath: 'assets/new-ui/crypto_full_icons/wbtc.svg',
+ decimals: 8);
+ static const weth = CryptoCurrency(
+ title: 'WETH',
+ tag: 'ETH',
+ fullName: 'Wrapped Ethereum',
+ raw: 82,
+ name: 'weth',
+ iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
+ decimals: 18);
+ static const zrx = CryptoCurrency(
+ title: 'ZRX',
+ tag: 'ETH',
+ fullName: '0x Protocol',
+ raw: 83,
+ name: 'zrx',
+ iconPath: 'assets/images/zrx_icon.png',
+ decimals: 18);
+ static const dydx = CryptoCurrency(
+ title: 'DYDX',
+ tag: 'ETH',
+ fullName: 'dYdX',
+ raw: 84,
+ name: 'dydx',
+ iconPath: 'assets/images/dydx_icon.png',
+ decimals: 18);
+ static const steth = CryptoCurrency(
+ title: 'STETH',
+ tag: 'ETH',
+ fullName: 'Lido Staked Ethereum',
+ raw: 85,
+ name: 'steth',
+ iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
+ decimals: 18);
+ static const banano = CryptoCurrency(
+ title: 'BAN',
+ fullName: 'Banano',
+ raw: 86,
+ name: 'banano',
+ iconPath: 'assets/images/nano_icon.png',
+ decimals: 29,
+ flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
+ static const usdtPoly = CryptoCurrency(
+ title: 'USDT',
+ tag: 'POL',
+ fullName: 'Tether (PoS)',
+ raw: 87,
+ name: 'usdtpoly',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const usdcEPoly = CryptoCurrency(
+ title: 'USDC.E',
+ tag: 'POL',
+ fullName: 'USDC (PoS)',
+ raw: 88,
+ name: 'usdcepoly',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
+ decimals: 6);
+ static const kaspa = CryptoCurrency(
+ title: 'KAS',
+ fullName: 'Kaspa',
+ raw: 89,
+ name: 'kas',
+ iconPath: 'assets/images/kaspa_icon.png',
+ decimals: 8);
+ static const digibyte = CryptoCurrency(
+ title: 'DGB',
+ fullName: 'DigiByte',
+ raw: 90,
+ name: 'dgb',
+ iconPath: 'assets/images/digibyte.png',
+ decimals: 8);
+ static const usdtSol = CryptoCurrency(
+ title: 'USDT',
+ tag: 'SOL',
+ fullName: 'Tether',
+ raw: 91,
+ name: 'usdtsol',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const usdcTrc20 = CryptoCurrency(
+ title: 'USDC',
+ tag: 'TRX',
+ fullName: 'USDC Coin',
+ raw: 92,
+ name: 'usdctrc20',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const tbtc = CryptoCurrency(
+ title: 'tBTC',
+ fullName: 'Testnet Bitcoin',
+ raw: 93,
+ name: 'tbtc',
+ iconPath: 'assets/images/tbtc.png',
+ decimals: 8);
+ static const wow = CryptoCurrency(
+ title: 'WOW',
+ fullName: 'Wownero',
+ raw: 94,
+ name: 'wow',
+ iconPath: 'assets/images/crypto/wownero.svg',
+ decimals: 11);
+ static const ton = CryptoCurrency(
+ title: 'TON',
+ fullName: 'Toncoin',
+ raw: 95,
+ name: 'ton',
+ iconPath: 'assets/new-ui/crypto_full_icons/ton.svg',
+ decimals: 8);
+ static const zano = CryptoCurrency(
+ title: 'ZANO',
+ tag: 'ZANO',
+ fullName: 'Zano',
+ raw: 96,
+ name: 'zano',
+ iconPath: 'assets/new-ui/crypto_full_icons/zano.svg',
+ decimals: 12,
+ flatIconPath: "assets/new-ui/balance_card_icons/zano.svg",
+ chainIconPath: "assets/new-ui/chain_badges/zano.svg");
+ static const flip = CryptoCurrency(
+ title: 'FLIP',
+ tag: 'ETH',
+ fullName: 'Chainflip',
+ raw: 97,
+ name: 'flip',
+ iconPath: 'assets/images/flip_icon.png',
+ decimals: 18);
+ static const deuro = CryptoCurrency(
+ title: 'DEURO',
+ tag: 'ETH',
+ fullName: 'Decentralized Euro',
+ raw: 98,
+ name: 'deuro',
+ iconPath: 'assets/images/deuro_icon.png',
+ decimals: 18,
+ groups: const {CurrencyGroups.stablecoin});
+ static const usdtbsc = CryptoCurrency(
+ title: 'USDT',
+ tag: 'BSC',
+ fullName: 'USDT Binance coin',
+ raw: 99,
+ name: 'usdtbsc',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 18,
+ groups: const {CurrencyGroups.stablecoin});
+ static const ndeps = CryptoCurrency(
+ title: 'NDEPS',
+ tag: 'ETH',
+ fullName: 'Native Decentralized Euro Protocol Share',
+ raw: 100,
+ name: 'ndeps',
+ iconPath: 'assets/images/ndeps_icon.png',
+ decimals: 18);
+ static const deps = CryptoCurrency(
+ title: 'DEPS',
+ tag: 'ETH',
+ fullName: 'Decentralized Euro Protocol Share',
+ raw: 101,
+ name: 'deps',
+ iconPath: 'assets/images/deps_icon.png',
+ decimals: 18);
+ static const kbtc = CryptoCurrency(
+ title: 'KBTC',
+ tag: 'ETH',
+ fullName: 'Kraken Wrapped Bitcoin',
+ raw: 102,
+ name: 'kbtc',
+ iconPath: 'assets/images/kbtc_icon.png',
+ decimals: 8);
+ static const cbbtc = CryptoCurrency(
+ title: 'CBBTC',
+ tag: 'ETH',
+ fullName: 'Coinbase Wrapped BTC',
+ raw: 103,
+ name: 'cbbtc',
+ iconPath: 'assets/images/cbbtc_icon.png',
+ decimals: 8);
+ static const baseEth = CryptoCurrency(
+ title: 'ETH',
+ tag: 'BASE',
+ fullName: 'Ethereum',
+ raw: 104,
+ name: 'baseth',
+ iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/base.svg",
+ chainIconPath: "assets/new-ui/chain_badges/base.svg");
+ static const usde = CryptoCurrency(
+ title: 'USDE',
+ tag: 'BASE',
+ fullName: 'Ethena USDE',
+ raw: 105,
+ name: 'usde',
+ iconPath: 'assets/new-ui/crypto_full_icons/usde.svg',
+ decimals: 18);
+ static const arbEth = CryptoCurrency(
+ title: 'ETH',
+ tag: 'ARB',
+ fullName: 'Ethereum',
+ raw: 106,
+ name: 'arbeth',
+ iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
+ decimals: 18,
+ flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg",
+ chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
+ static const zec = CryptoCurrency(
+ title: 'ZEC',
+ fullName: 'Zcash',
+ raw: 107,
+ name: 'zec',
+ iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg',
+ decimals: 8,
+ flatIconPath: "assets/new-ui/balance_card_icons/zcash.svg");
+ static const usdcArb = CryptoCurrency(
+ title: 'USDC',
+ tag: 'ARB',
+ fullName: 'USDC Coin',
+ raw: 108,
+ name: 'usdcarb',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const usdtArb = CryptoCurrency(
+ title: 'USDT',
+ tag: 'ARB',
+ fullName: 'USDT Tether',
+ raw: 109,
+ name: 'usdtarb',
+ iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
+ decimals: 6,
+ groups: const {CurrencyGroups.stablecoin});
+ static const ltcmweb = CryptoCurrency(
+ title: 'LTC',
+ fullName: 'Litecoin MWeb',
+ raw: 110,
+ name: 'ltcmweb',
+ iconPath: 'assets/new-ui/crypto_full_icons/litecoin.svg',
+ decimals: 8);
+
+ static final Map<int, CryptoCurrency> _rawCurrencyMap = [
+ ...all,
+ ...havenCurrencies,
+ ...zcashCurrencies
+ ].fold<Map<int, CryptoCurrency>>(<int, CryptoCurrency>{}, (acc, item) {
+ acc.addAll({item.raw: item});
+ return acc;
+ });
+
+ static final Map<String, CryptoCurrency> _nameCurrencyMap = [
+ ...all,
+ ...havenCurrencies,
+ ...zcashCurrencies
+ ].fold<Map<String, CryptoCurrency>>(<String, CryptoCurrency>{}, (acc, item) {
+ acc.addAll({item.name: item});
+ return acc;
+ });
+
+ static final Map<String, CryptoCurrency> _fullNameCurrencyMap = [
+ ...all,
+ ...havenCurrencies,
+ ...zcashCurrencies
+ ].fold<Map<String, CryptoCurrency>>(<String, CryptoCurrency>{}, (acc, item) {
+ if (item.fullName != null) {
+ acc.addAll({item.fullName!.toLowerCase(): item});
+ }
+ return acc;
+ });
// Scheme to currency mapping for URI scheme
static final Map<String, CryptoCurrency> _schemeCurrencyMap = {
@@ -324,7 +1027,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
static CryptoCurrency deserialize({required int raw}) {
if (CryptoCurrency._rawCurrencyMap[raw] == null) {
final s = 'Unexpected token: $raw for CryptoCurrency deserialize';
- throw ArgumentError.value(raw, 'raw', s);
+ throw ArgumentError.value(raw, 'raw', s);
}
return CryptoCurrency._rawCurrencyMap[raw]!;
}
@@ -334,10 +1037,8 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
return _rawCurrencyMap[raw];
}
-
// TODO: refactor this
static CryptoCurrency fromString(String name, {CryptoCurrency? walletCurrency}) {
-
final schemeMatch = _schemeCurrencyMap[name.toLowerCase()];
if (schemeMatch != null) return schemeMatch;
@@ -357,7 +1058,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
if (CryptoCurrency._nameCurrencyMap[name.toLowerCase()] == null) {
final s = 'Unexpected token: $name for CryptoCurrency fromString';
- throw ArgumentError.value(name, 'name', s);
+ throw ArgumentError.value(name, 'name', s);
}
return CryptoCurrency._nameCurrencyMap[name.toLowerCase()]!;
@@ -366,36 +1067,34 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
static CryptoCurrency fromFullName(String name) {
if (CryptoCurrency._fullNameCurrencyMap[name.split("(").first.trim().toLowerCase()] == null) {
final s = 'Unexpected token: $name for CryptoCurrency fromFullName';
- throw ArgumentError.value(name, 'Fullname', s);
+ throw ArgumentError.value(name, 'Fullname', s);
}
return CryptoCurrency._fullNameCurrencyMap[name.split("(").first.trim().toLowerCase()]!;
}
static CryptoCurrency? safeParseCurrencyFromString(
- String? raw, {
- String? tag,
- CryptoCurrency? walletCurrency,
- }) {
+ String? raw, {
+ String? tag,
+ CryptoCurrency? walletCurrency,
+ }) {
if (raw == null || raw.isEmpty) return null;
- if(tag?.toLowerCase() == "lightning") tag = "LN";
+ if (tag?.toLowerCase() == "lightning") tag = "LN";
if (tag != null && tag.isNotEmpty) {
final match = CryptoCurrency.all.firstWhereOrNull(
- (e) =>
- e.title.toUpperCase() == raw.toUpperCase() &&
+ (e) =>
+ e.title.toUpperCase() == raw.toUpperCase() &&
e.tag?.toUpperCase() == tag?.toUpperCase(),
);
if (match != null) return match;
return null;
}
-
// Try for native currency with same title and tag
if (tag == null || tag.isEmpty) {
final match = CryptoCurrency.all.firstWhereOrNull(
- (e) =>
- e.title.toUpperCase() == raw.toUpperCase() && (e.tag == raw.toUpperCase()),
+ (e) => e.title.toUpperCase() == raw.toUpperCase() && (e.tag == raw.toUpperCase()),
);
if (match != null) return match;
diff --git a/cw_core/lib/currency_for_wallet_type.dart b/cw_core/lib/currency_for_wallet_type.dart
index 3409ab7..a0a1d38 100644
--- a/cw_core/lib/currency_for_wallet_type.dart
+++ b/cw_core/lib/currency_for_wallet_type.dart
@@ -90,7 +90,8 @@ int? getChainIdByCryptoCurrency(CryptoCurrency currency) {
}
}
-CryptoCurrency getCryptoCurrencyForWalletListItem(WalletType type, {bool isTestnet = false, int? chainId}) {
+CryptoCurrency getCryptoCurrencyForWalletListItem(WalletType type,
+ {bool isTestnet = false, int? chainId}) {
if (type == WalletType.arbitrum) {
return CryptoCurrency.arb;
}
diff --git a/cw_core/lib/db/sqlite_debug.dart b/cw_core/lib/db/sqlite_debug.dart
index 8e4a353..45a3312 100644
--- a/cw_core/lib/db/sqlite_debug.dart
+++ b/cw_core/lib/db/sqlite_debug.dart
@@ -100,7 +100,7 @@ class _SqliteErrorHandlerState extends State<SqliteErrorHandler> {
final dbFile = File("${(await getAppDir()).path}/cake.db");
final jsonText = JsonEncoder.withIndent(" ").convert(await dumpCustomDb(dbFile.path));
setState(() {
- log = jsonText;
+ log = jsonText;
});
} catch (e, s) {
setState(() {
diff --git a/cw_core/lib/encryption_file_utils.dart b/cw_core/lib/encryption_file_utils.dart
index 1889c43..72a601b 100644
--- a/cw_core/lib/encryption_file_utils.dart
+++ b/cw_core/lib/encryption_file_utils.dart
@@ -3,40 +3,39 @@ import 'dart:typed_data';
import 'package:cw_core/utils/file.dart' as file;
import 'package:cake_backup/backup.dart' as cwb;
-EncryptionFileUtils encryptionFileUtilsFor(bool direct)
- => direct
- ? XChaCha20EncryptionFileUtils()
- : Salsa20EncryhptionFileUtils();
+EncryptionFileUtils encryptionFileUtilsFor(bool direct) =>
+ direct ? XChaCha20EncryptionFileUtils() : Salsa20EncryhptionFileUtils();
abstract class EncryptionFileUtils {
- Future<void> write({required String path, required String password, required String data});
- Future<String> read({required String path, required String password});
+ Future<void> write({required String path, required String password, required String data});
+ Future<String> read({required String path, required String password});
}
class Salsa20EncryhptionFileUtils extends EncryptionFileUtils {
- // Requires legacy complex key + iv as password
- @override
- Future<void> write({required String path, required String password, required String data}) async
- => await file.write(path: path, password: password, data: data);
+ // Requires legacy complex key + iv as password
+ @override
+ Future<void> write(
+ {required String path, required String password, required String data}) async =>
+ await file.write(path: path, password: password, data: data);
- // Requires legacy complex key + iv as password
- @override
- Future<String> read({required String path, required String password}) async
- => await file.read(path: path, password: password);
+ // Requires legacy complex key + iv as password
+ @override
+ Future<String> read({required String path, required String password}) async =>
+ await file.read(path: path, password: password);
}
class XChaCha20EncryptionFileUtils extends EncryptionFileUtils {
- @override
- Future<void> write({required String path, required String password, required String data}) async {
- final encrypted = await cwb.encrypt(password, Uint8List.fromList(data.codeUnits));
- await File(path).writeAsBytes(encrypted);
- }
-
- @override
- Future<String> read({required String path, required String password}) async {
- final file = File(path);
- final encrypted = await file.readAsBytes();
- final bytes = await cwb.decrypt(password, encrypted);
- return String.fromCharCodes(bytes);
- }
-}
\ No newline at end of file
+ @override
+ Future<void> write({required String path, required String password, required String data}) async {
+ final encrypted = await cwb.encrypt(password, Uint8List.fromList(data.codeUnits));
+ await File(path).writeAsBytes(encrypted);
+ }
+
+ @override
+ Future<String> read({required String path, required String password}) async {
+ final file = File(path);
+ final encrypted = await file.readAsBytes();
+ final bytes = await cwb.decrypt(password, encrypted);
+ return String.fromCharCodes(bytes);
+ }
+}
diff --git a/cw_core/lib/erc20_token.part.dart b/cw_core/lib/erc20_token.part.dart
index 14c61b5..e19b4b5 100644
--- a/cw_core/lib/erc20_token.part.dart
+++ b/cw_core/lib/erc20_token.part.dart
@@ -1,4 +1,4 @@
- // GENERATED CODE - DO NOT MODIFY BY HAND
+// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'erc20_token.dart';
@@ -55,7 +55,5 @@ class Erc20TokenAdapter extends TypeAdapter<Erc20Token> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is Erc20TokenAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is Erc20TokenAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/exceptions.dart b/cw_core/lib/exceptions.dart
index b615552..8460569 100644
--- a/cw_core/lib/exceptions.dart
+++ b/cw_core/lib/exceptions.dart
@@ -69,4 +69,4 @@ class WalletDeprecationException implements Exception {
String toString() => "Wallet type no longer supported";
WalletDeprecationException({required this.seed, required this.curr});
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/format_amount.dart b/cw_core/lib/format_amount.dart
index 7dd6c0c..6ee41b6 100644
--- a/cw_core/lib/format_amount.dart
+++ b/cw_core/lib/format_amount.dart
@@ -1,8 +1,8 @@
String formatAmount(String amount) {
- if ((!amount.contains('.'))&&(!amount.contains(','))) {
+ if ((!amount.contains('.')) && (!amount.contains(','))) {
return amount + '.00';
- } else if ((amount.endsWith('.'))||(amount.endsWith(','))) {
+ } else if ((amount.endsWith('.')) || (amount.endsWith(','))) {
return amount + '00';
}
return amount;
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/format_fixed.dart b/cw_core/lib/format_fixed.dart
index b704581..52c0e14 100644
--- a/cw_core/lib/format_fixed.dart
+++ b/cw_core/lib/format_fixed.dart
@@ -1,7 +1,6 @@
import 'package:cw_core/parse_fixed.dart';
-String formatFixed(BigInt value, int? decimals,
- {int? fractionalDigits, bool trimZeros = true}) {
+String formatFixed(BigInt value, int? decimals, {int? fractionalDigits, bool trimZeros = true}) {
decimals ??= 0;
fractionalDigits ??= decimals;
@@ -10,10 +9,8 @@ String formatFixed(BigInt value, int? decimals,
var negative = value.isNegative;
if (negative) value = value * BigInt.from(-1);
- var fraction = value
- .modPow(BigInt.one, BigInt.parse(multiplier))
- .toString()
- .padLeft(decimals, "0");
+ var fraction =
+ value.modPow(BigInt.one, BigInt.parse(multiplier)).toString().padLeft(decimals, "0");
if (fractionalDigits < 0) fractionalDigits = 0;
if (fractionalDigits > decimals) fractionalDigits = decimals;
diff --git a/cw_core/lib/get_height_by_date.dart b/cw_core/lib/get_height_by_date.dart
index 58155a7..c530fb4 100644
--- a/cw_core/lib/get_height_by_date.dart
+++ b/cw_core/lib/get_height_by_date.dart
@@ -6,7 +6,8 @@ import 'dart:convert';
// FIXME: Hardcoded values; Works only for monero
-int getMoneroHeigthByDate({required DateTime date}) => MoneroHeight.getBlockHeightByTime(date..subtract(Duration(days: 1)));
+int getMoneroHeigthByDate({required DateTime date}) =>
+ MoneroHeight.getBlockHeightByTime(date..subtract(Duration(days: 1)));
const havenDates = {
"2023-05": 1352995,
diff --git a/cw_core/lib/get_height_by_date_xmr.dart b/cw_core/lib/get_height_by_date_xmr.dart
index 16a1b20..df8baa0 100644
--- a/cw_core/lib/get_height_by_date_xmr.dart
+++ b/cw_core/lib/get_height_by_date_xmr.dart
@@ -1,4 +1,3 @@
-
class MoneroHeight {
// for i in $(seq 1 364); do echo "_Checkpoint(_t($(curl https://xmrchain.net/block/${i}0000 | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' | xargs | sed 's/ /\n/g' | head -5 | tail -1 | tr '()' ' ' | sed 's/ /\n/g' | head -2 | xargs)), ${i}0000),"; done > points.txt
static final List<_Checkpoint> _points = [
diff --git a/cw_core/lib/hive_type_ids.dart b/cw_core/lib/hive_type_ids.dart
index 72139ca..8a2b051 100644
--- a/cw_core/lib/hive_type_ids.dart
+++ b/cw_core/lib/hive_type_ids.dart
@@ -1,24 +1,24 @@
-const CONTACT_TYPE_ID = 0;
-const NODE_TYPE_ID = 1;
-const TRANSACTION_TYPE_ID = 2;
-const TRADE_TYPE_ID = 3;
-const WALLET_INFO_TYPE_ID = 4;
-const WALLET_TYPE_TYPE_ID = 5;
-const TEMPLATE_TYPE_ID = 6;
-const EXCHANGE_TEMPLATE_TYPE_ID = 7;
-const ORDER_TYPE_ID = 8;
-const UNSPENT_COINS_INFO_TYPE_ID = 9;
-const ANONPAY_INVOICE_INFO_TYPE_ID = 10;
-const ADDRESS_INFO_TYPE_ID = 11;
-const ERC20_TOKEN_TYPE_ID = 12;
-const NANO_ACCOUNT_TYPE_ID = 13;
-const POW_NODE_TYPE_ID = 14;
-const DERIVATION_TYPE_TYPE_ID = 15;
-const SPL_TOKEN_TYPE_ID = 16;
-const DERIVATION_INFO_TYPE_ID = 17;
-const TRON_TOKEN_TYPE_ID = 18;
-const HARDWARE_WALLET_TYPE_TYPE_ID = 19;
-const MWEB_UTXO_TYPE_ID = 20;
-const HAVEN_SEED_STORE_TYPE_ID = 21;
-const ZANO_ASSET_TYPE_ID = 22;
-const PAYJOIN_SESSION_TYPE_ID = 23;
\ No newline at end of file
+const CONTACT_TYPE_ID = 0;
+const NODE_TYPE_ID = 1;
+const TRANSACTION_TYPE_ID = 2;
+const TRADE_TYPE_ID = 3;
+const WALLET_INFO_TYPE_ID = 4;
+const WALLET_TYPE_TYPE_ID = 5;
+const TEMPLATE_TYPE_ID = 6;
+const EXCHANGE_TEMPLATE_TYPE_ID = 7;
+const ORDER_TYPE_ID = 8;
+const UNSPENT_COINS_INFO_TYPE_ID = 9;
+const ANONPAY_INVOICE_INFO_TYPE_ID = 10;
+const ADDRESS_INFO_TYPE_ID = 11;
+const ERC20_TOKEN_TYPE_ID = 12;
+const NANO_ACCOUNT_TYPE_ID = 13;
+const POW_NODE_TYPE_ID = 14;
+const DERIVATION_TYPE_TYPE_ID = 15;
+const SPL_TOKEN_TYPE_ID = 16;
+const DERIVATION_INFO_TYPE_ID = 17;
+const TRON_TOKEN_TYPE_ID = 18;
+const HARDWARE_WALLET_TYPE_TYPE_ID = 19;
+const MWEB_UTXO_TYPE_ID = 20;
+const HAVEN_SEED_STORE_TYPE_ID = 21;
+const ZANO_ASSET_TYPE_ID = 22;
+const PAYJOIN_SESSION_TYPE_ID = 23;
diff --git a/cw_core/lib/key.dart b/cw_core/lib/key.dart
index 6973b7a..383cbff 100644
--- a/cw_core/lib/key.dart
+++ b/cw_core/lib/key.dart
@@ -16,7 +16,8 @@ List<String> extractKeys(String key) {
return [_key, iv];
}
-Future<String> encode({required encrypt.Key key, required encrypt.IV iv, required String data}) async {
+Future<String> encode(
+ {required encrypt.Key key, required encrypt.IV iv, required String data}) async {
final encrypter = encrypt.Encrypter(encrypt.Salsa20(key));
final encrypted = encrypter.encrypt(data, iv: iv);
diff --git a/cw_core/lib/keyable.dart b/cw_core/lib/keyable.dart
index e75399d..332cde3 100644
--- a/cw_core/lib/keyable.dart
+++ b/cw_core/lib/keyable.dart
@@ -1,3 +1,3 @@
mixin Keyable {
dynamic keyIndex;
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/lnurl.dart b/cw_core/lib/lnurl.dart
index 7676daf..8ea33b9 100644
--- a/cw_core/lib/lnurl.dart
+++ b/cw_core/lib/lnurl.dart
@@ -12,12 +12,11 @@ bool isBolt11ZeroInvoice(String invoice) {
try {
final request = Bech32Codec().decode(invoice.replaceFirst("lightning:", ""), invoice.length);
-
- final prefix = _BOLT_PREFIXES
- .firstWhere((prefix) => request.hrp.startsWith(prefix), orElse: () => "");
+ final prefix =
+ _BOLT_PREFIXES.firstWhere((prefix) => request.hrp.startsWith(prefix), orElse: () => "");
return request.hrp.length == prefix.length;
- } catch(e) {
+ } catch (e) {
return false;
}
}
@@ -27,7 +26,7 @@ int? _getAmountBolt11Msat(String invoice) {
final request = Bech32Codec().decode(invoice.replaceFirst("lightning:", ""), invoice.length);
final prefix = _BOLT_PREFIXES.firstWhere(
- (prefix) => request.hrp.startsWith(prefix),
+ (prefix) => request.hrp.startsWith(prefix),
orElse: () => throw FormatException('Invalid BOLT11 invoice: unknown HRP prefix.'),
);
@@ -86,8 +85,7 @@ class LNURL {
final maxSendable = body["maxSendable"] as int?;
// if minSendable and maxSendable are the same we assume a specific payment request
- if (msat != maxSendable)
- return null;
+ if (msat != maxSendable) return null;
if (msat == null || msat % 1000 != 0) return null;
return Money.fromInt(msat ~/ 1000, CryptoCurrency.btcln);
@@ -136,8 +134,7 @@ class LNURL {
String _findLnUrl(String input) {
final res = RegExp(r',*?((lnurl)([0-9]+[a-z0-9]+))').allMatches(input.toLowerCase());
- if (res.length != 1)
- throw ArgumentError('Not a valid lnurl string');
+ if (res.length != 1) throw ArgumentError('Not a valid lnurl string');
return res.first.group(0)!;
}
diff --git a/cw_core/lib/monero_wallet_keys.dart b/cw_core/lib/monero_wallet_keys.dart
index 4ead3d7..e088068 100644
--- a/cw_core/lib/monero_wallet_keys.dart
+++ b/cw_core/lib/monero_wallet_keys.dart
@@ -1,11 +1,11 @@
class MoneroWalletKeys {
const MoneroWalletKeys(
{required this.primaryAddress,
- required this.privateSpendKey,
- required this.privateViewKey,
- required this.publicSpendKey,
- required this.publicViewKey,
- required this.passphrase});
+ required this.privateSpendKey,
+ required this.privateViewKey,
+ required this.publicSpendKey,
+ required this.publicViewKey,
+ required this.passphrase});
final String primaryAddress;
final String publicViewKey;
@@ -13,4 +13,4 @@ class MoneroWalletKeys {
final String publicSpendKey;
final String privateSpendKey;
final String passphrase;
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/mweb_utxo.part.dart b/cw_core/lib/mweb_utxo.part.dart
index fedc719..91e2661 100644
--- a/cw_core/lib/mweb_utxo.part.dart
+++ b/cw_core/lib/mweb_utxo.part.dart
@@ -50,7 +50,5 @@ class MwebUtxoAdapter extends TypeAdapter<MwebUtxo> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is MwebUtxoAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is MwebUtxoAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/nano_account.part.dart b/cw_core/lib/nano_account.part.dart
index 49b1e63..be880fe 100644
--- a/cw_core/lib/nano_account.part.dart
+++ b/cw_core/lib/nano_account.part.dart
@@ -44,7 +44,5 @@ class NanoAccountAdapter extends TypeAdapter<NanoAccount> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is NanoAccountAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is NanoAccountAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/node.dart b/cw_core/lib/node.dart
index 24346fa..78faba1 100644
--- a/cw_core/lib/node.dart
+++ b/cw_core/lib/node.dart
@@ -25,11 +25,9 @@ Future<void> validateBuiltinNodes() async {
for (final listNode in builtinFromList) {
// preserve proxy settings from user
try {
- final matchedDbNode = builtinFromDb.firstWhere(
- (dbNode) => dbNode.uri == listNode.uri
- );
+ final matchedDbNode = builtinFromDb.firstWhere((dbNode) => dbNode.uri == listNode.uri);
listNode.socksProxyAddress = matchedDbNode.socksProxyAddress;
- } catch(e) {}
+ } catch (e) {}
}
final dbSet = builtinFromDb.toSet();
@@ -121,7 +119,7 @@ class Node {
"label": label,
'password': password,
"isPow": isPow ? 1 : 0,
- 'useSSL': (useSSL??false) ? 1 : 0,
+ 'useSSL': (useSSL ?? false) ? 1 : 0,
"typeRaw": typeRaw,
'trusted': trusted ? 1 : 0,
'socksProxyAddress': socksProxyAddress,
@@ -165,7 +163,6 @@ class Node {
}
Future<int> save() async {
-
final json = toMap();
if (json[selfIdColumn] == 0) {
json[selfIdColumn] = null;
@@ -174,9 +171,9 @@ class Node {
return id;
}
-
- static Future<List<Node>> selectList(String where, List<dynamic> whereArgs, {String? orderBy}) async {
- if(orderBy == null) {
+ static Future<List<Node>> selectList(String where, List<dynamic> whereArgs,
+ {String? orderBy}) async {
+ if (orderBy == null) {
orderBy = selfIdColumn;
}
final list = await db!.query(
@@ -189,7 +186,7 @@ class Node {
}
static Future<Node?> select(String where, List<dynamic> whereArgs, {String? orderBy}) async {
- if(orderBy == null) {
+ if (orderBy == null) {
orderBy = selfIdColumn;
}
final list = await db!.query(
@@ -201,7 +198,6 @@ class Node {
return list.isEmpty ? null : Node.fromMap(list.first);
}
-
static Future<List<Node>> getAll() async {
return selectList("isPow = ?", [0]);
}
@@ -219,11 +215,15 @@ class Node {
}
static Future<Node?> getDefaultForWalletType(WalletType type) async {
- return (await selectList("typeRaw = ? AND isPow = ? AND isDefault = ?", [serializeToInt(type), 0, 1])).firstOrNull;
+ return (await selectList(
+ "typeRaw = ? AND isPow = ? AND isDefault = ?", [serializeToInt(type), 0, 1]))
+ .firstOrNull;
}
static Future<Node?> getDefaultPowForWalletType(WalletType type) async {
- return (await selectList("typeRaw = ? AND isPow = ? AND isDefault = ?", [serializeToInt(type), 1, 1])).firstOrNull;
+ return (await selectList(
+ "typeRaw = ? AND isPow = ? AND isDefault = ?", [serializeToInt(type), 1, 1]))
+ .firstOrNull;
}
static Future<List<Node>> getAllForWalletTypePow(WalletType type) async {
@@ -238,7 +238,6 @@ class Node {
return select("${selfIdColumn} = ?", [id]);
}
-
int id;
late String uriRaw;
String? login;
@@ -262,7 +261,6 @@ class Node {
static String get tableName => "Node";
static String get selfIdColumn => "${tableName}Id";
-
bool get isSSL => useSSL ?? false;
bool get useSocksProxy => socksProxyAddress == null ? false : socksProxyAddress!.isNotEmpty;
@@ -333,7 +331,6 @@ class Node {
socksProxyAddress.hashCode ^
path.hashCode;
-
WalletType get type => deserializeFromInt(typeRaw);
set type(WalletType type) => typeRaw = serializeToInt(type);
@@ -387,7 +384,6 @@ class Node {
body: jsonBody,
);
-
final resBody = json.decode(response.body) as Map<String, dynamic>;
return resBody['result']['height'] != null;
@@ -407,15 +403,13 @@ class Node {
final body = {'jsonrpc': '2.0', 'id': '0', 'method': methodName};
try {
-
final jsonBody = json.encode(body);
final response = await ProxyWrapper().post(
- clearnetUri: rpcUri,
- headers: {'Content-Type': 'application/json'},
- body: jsonBody,
- allowMitmMoneroBypassSSLCheck: true
- );
+ clearnetUri: rpcUri,
+ headers: {'Content-Type': 'application/json'},
+ body: jsonBody,
+ allowMitmMoneroBypassSSLCheck: true);
// Check if we received a 401 Unauthorized response
if (response.statusCode == 401) {
final daemonRpc = DaemonRpc(
@@ -494,7 +488,6 @@ class Node {
final ProxySocket socket;
socket = await ProxyWrapper().getSocksSocket(useSSL ?? false, uri.host, uri.port);
-
socket.destroy();
return true;
} catch (_) {
@@ -531,9 +524,12 @@ class Node {
Future<bool> requestEthereumServer() async {
try {
- final req = await ProxyWrapper().getHttpClient()
- .getUrl(uri,)
- .timeout(Duration(seconds: 15));
+ final req = await ProxyWrapper()
+ .getHttpClient()
+ .getUrl(
+ uri,
+ )
+ .timeout(Duration(seconds: 15));
final response = await req.close();
return response.statusCode >= 200 && response.statusCode < 300;
@@ -544,13 +540,13 @@ class Node {
}
Future<bool> requestDecredNode() async {
- if (uri.host == "default-spv-nodes") {
- // Just show default port as ok. The wallet will connect to a list of known
- // nodes automatically.
- return true;
- }
- try {
- final socket = await Socket.connect(uri.host, uri.port, timeout: Duration(seconds: 5));
+ if (uri.host == "default-spv-nodes") {
+ // Just show default port as ok. The wallet will connect to a list of known
+ // nodes automatically.
+ return true;
+ }
+ try {
+ final socket = await Socket.connect(uri.host, uri.port, timeout: Duration(seconds: 5));
socket.destroy();
return true;
} catch (_) {
diff --git a/cw_core/lib/node_legacy.dart b/cw_core/lib/node_legacy.dart
index 7d36ddd..848b771 100644
--- a/cw_core/lib/node_legacy.dart
+++ b/cw_core/lib/node_legacy.dart
@@ -19,17 +19,15 @@ import 'node.dart' as node_new;
part 'node_legacy.part.dart';
Future<void> performNodeHiveMigration() async {
- if(!CakeHive.isAdapterRegistered(Node.typeId)) {
+ if (!CakeHive.isAdapterRegistered(Node.typeId)) {
CakeHive.registerAdapter(NodeAdapter());
}
final nodeBox = await CakeHive.openBox<Node>(Node.boxName);
- final powNodeBox = await CakeHive.openBox<Node>(Node.boxName+"pow");
+ final powNodeBox = await CakeHive.openBox<Node>(Node.boxName + "pow");
final builtinNodes = await loadAllDefaultNodes();
final builtinPowNodes = await loadDefaultNanoPowNodes();
await Node.migrateAllToSqlite(nodeBox, powNodeBox, builtinNodes, builtinPowNodes);
-
-
}
Uri createUriFromElectrumAddress(String address, String path) =>
@@ -62,31 +60,26 @@ class Node extends HiveObject with Keyable {
final list = nodeBox.values.toList();
final powList = powNodeBox.values.toList();
for (final node in list) {
- if(defaultNodes.any((item)=>item.uri == node.uri)) {
+ if (defaultNodes.any((item) => item.uri == node.uri)) {
// default nodes will be added by validateBuiltinNodes(), no need to migrate them.
await node.delete();
continue;
}
- await node.migrateToSqlite(
- isPow: false,
- isBuiltin: false,
- isOfficial: false);
+ await node.migrateToSqlite(isPow: false, isBuiltin: false, isOfficial: false);
await node.delete();
}
for (final node in powList) {
- if(defaultPowNodes.any((item)=>item.uri == node.uri)) {
+ if (defaultPowNodes.any((item) => item.uri == node.uri)) {
await node.delete();
continue;
}
- await node.migrateToSqlite(
- isPow: true,
- isBuiltin: false,
- isOfficial: false);
+ await node.migrateToSqlite(isPow: true, isBuiltin: false, isOfficial: false);
await node.delete();
}
}
- Future<void> migrateToSqlite({required bool isPow, required bool isBuiltin, required bool isOfficial}) async {
+ Future<void> migrateToSqlite(
+ {required bool isPow, required bool isBuiltin, required bool isOfficial}) async {
final newNode = node_new.Node(
id: key as int,
login: login,
@@ -106,7 +99,6 @@ class Node extends HiveObject with Keyable {
await newNode.save();
}
-
Node.fromMap(Map<String, Object?> map)
: uriRaw = map['uri'] as String? ?? '',
path = map['path'] as String? ?? '',
@@ -208,15 +200,15 @@ class Node extends HiveObject with Keyable {
@override
bool operator ==(other) =>
other is Node &&
- (other.uriRaw == uriRaw &&
- other.login == login &&
- other.label == label &&
- other.password == password &&
- other.typeRaw == typeRaw &&
- other.useSSL == useSSL &&
- other.trusted == trusted &&
- other.socksProxyAddress == socksProxyAddress &&
- other.path == path);
+ (other.uriRaw == uriRaw &&
+ other.login == login &&
+ other.label == label &&
+ other.password == password &&
+ other.typeRaw == typeRaw &&
+ other.useSSL == useSSL &&
+ other.trusted == trusted &&
+ other.socksProxyAddress == socksProxyAddress &&
+ other.path == path);
@override
int get hashCode =>
@@ -241,6 +233,4 @@ class Node extends HiveObject with Keyable {
set type(WalletType type) => typeRaw = serializeToInt(type);
dynamic _keyIndex;
-
-
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/node_legacy.part.dart b/cw_core/lib/node_legacy.part.dart
index 9550c1d..3053125 100644
--- a/cw_core/lib/node_legacy.part.dart
+++ b/cw_core/lib/node_legacy.part.dart
@@ -24,8 +24,7 @@ class NodeAdapter extends TypeAdapter<Node> {
trusted: fields[5] == null ? false : fields[5] as bool,
socksProxyAddress: fields[6] as String?,
path: fields[7] == null ? '' : fields[7] as String?,
- isEnabledForAutoSwitching:
- fields[11] == null ? false : fields[11] as bool,
+ isEnabledForAutoSwitching: fields[11] == null ? false : fields[11] as bool,
)
..uriRaw = fields[0] == null ? '' : fields[0] as String
..typeRaw = fields[3] == null ? 0 : fields[3] as int
@@ -72,7 +71,5 @@ class NodeAdapter extends TypeAdapter<Node> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is NodeAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is NodeAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/node_list.dart b/cw_core/lib/node_list.dart
index 2c5007b..899d1ed 100644
--- a/cw_core/lib/node_list.dart
+++ b/cw_core/lib/node_list.dart
@@ -18,7 +18,7 @@ Future<List<Node>> loadDefaultNodes(WalletType type) async {
case WalletType.haven:
path = 'assets/haven_node_list.yml';
break;
- // TODO: (refactoring) each wallet would have its path, so `wallet.nodePath` would be decided based on chain id in Evm wallet
+ // TODO: (refactoring) each wallet would have its path, so `wallet.nodePath` would be decided based on chain id in Evm wallet
case WalletType.ethereum:
path = 'assets/ethereum_server_list.yml';
break;
@@ -147,7 +147,6 @@ Future<List<Node>> loadAllDefaultNodes() async {
}
Future<void> resetToDefault() async {
-
final nodes = await loadAllDefaultNodes();
final currentNodes = await Node.getAll();
@@ -157,15 +156,14 @@ Future<void> resetToDefault() async {
for (final node in nodes) {
try {
final curr = currentNodes.firstWhere(
- (item) => item.uri == node.uri && item.typeRaw == node.typeRaw,
+ (item) => item.uri == node.uri && item.typeRaw == node.typeRaw,
);
- node.id = curr.id;
- } catch(e) {}
-
+ node.id = curr.id;
+ } catch (e) {}
}
await Node.deleteAll();
- for(final node in nodes) {
+ for (final node in nodes) {
await node.save();
}
}
@@ -173,7 +171,7 @@ Future<void> resetToDefault() async {
Future<void> resetPowToDefault() async {
final nanoPowNodes = await loadDefaultNanoPowNodes();
await Node.deleteAllPow();
- for(final node in nanoPowNodes) {
+ for (final node in nanoPowNodes) {
node.save();
}
}
@@ -181,12 +179,9 @@ Future<void> resetPowToDefault() async {
Future<Node> getDefaultNodeFromFiles(WalletType type, {bool isPow = false}) async {
final nodes = isPow ? await loadDefaultNanoPowNodes() : await loadDefaultNodes(type);
try {
- return nodes.firstWhere((item)=>item.isDefault);
- } catch(e) {
+ return nodes.firstWhere((item) => item.isDefault);
+ } catch (e) {
// ideally the yamls would always have a default, but this is better than nothing
return nodes.first;
}
}
-
-
-
diff --git a/cw_core/lib/parseBoolFromString.dart b/cw_core/lib/parseBoolFromString.dart
index dbcbded..7dfb438 100644
--- a/cw_core/lib/parseBoolFromString.dart
+++ b/cw_core/lib/parseBoolFromString.dart
@@ -1,3 +1,3 @@
bool parseBoolFromString(String string) {
return string.toString() == 'true';
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/parse_fixed.dart b/cw_core/lib/parse_fixed.dart
index 51a6a7a..76c74dc 100644
--- a/cw_core/lib/parse_fixed.dart
+++ b/cw_core/lib/parse_fixed.dart
@@ -52,7 +52,8 @@ BigInt parseFixed(String value, int decimals) {
var fraction = (comps.length == 2 ? comps[1] : "0").padRight(decimals, "0");
if (fraction.length > multiplier.length - 1) {
- throw FormatException("fractional component(${fraction.length}) exceeds decimals(${decimals}), underflow, parseFixed");
+ throw FormatException(
+ "fractional component(${fraction.length}) exceeds decimals(${decimals}), underflow, parseFixed");
}
final wholeValue = BigInt.parse(whole);
diff --git a/cw_core/lib/pathForWallet.dart b/cw_core/lib/pathForWallet.dart
index 9fe5f71..10cbb28 100644
--- a/cw_core/lib/pathForWallet.dart
+++ b/cw_core/lib/pathForWallet.dart
@@ -28,8 +28,7 @@ Future<String> pathForWalletDir({required String name, required WalletType type}
}
Future<String> pathForWallet({required String name, required WalletType type}) async =>
- await pathForWalletDir(name: name, type: type)
- .then((path) => path + '/$name');
+ await pathForWalletDir(name: name, type: type).then((path) => path + '/$name');
Future<String> outdatedAndroidPathForWalletDir({required String name}) async {
final directory = await getAppDir();
diff --git a/cw_core/lib/payjoin_session.dart b/cw_core/lib/payjoin_session.dart
index 6acb0ca..c68902d 100644
--- a/cw_core/lib/payjoin_session.dart
+++ b/cw_core/lib/payjoin_session.dart
@@ -56,7 +56,6 @@ class PayjoinSession extends HiveObject {
BigInt get amount => BigInt.parse(rawAmount ?? "0");
set amount(BigInt amount) => rawAmount = amount.toString();
-
}
enum PayjoinSessionStatus {
diff --git a/cw_core/lib/payjoin_session.part.dart b/cw_core/lib/payjoin_session.part.dart
index 09dc619..aa796c0 100644
--- a/cw_core/lib/payjoin_session.part.dart
+++ b/cw_core/lib/payjoin_session.part.dart
@@ -59,7 +59,5 @@ class PayjoinSessionAdapter extends TypeAdapter<PayjoinSession> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is PayjoinSessionAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is PayjoinSessionAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/payment_uris.dart b/cw_core/lib/payment_uris.dart
index 9e41910..2703d5e 100644
--- a/cw_core/lib/payment_uris.dart
+++ b/cw_core/lib/payment_uris.dart
@@ -408,14 +408,14 @@ class ERC681URI extends PaymentURI {
static int _getChainID(String path) {
return int.parse(RegExp(
- r'@\d*',
- ).firstMatch(path)?.group(0)?.replaceAll("@", "") ??
+ r'@\d*',
+ ).firstMatch(path)?.group(0)?.replaceAll("@", "") ??
"1");
}
static (bool, String) _getTargetAddress(String path) {
final targetAddress =
- RegExp(r'^(0x)?[0-9a-f]{40}', caseSensitive: false).firstMatch(path)!.group(0)!;
+ RegExp(r'^(0x)?[0-9a-f]{40}', caseSensitive: false).firstMatch(path)!.group(0)!;
return (path.contains("/"), targetAddress);
}
@@ -508,4 +508,3 @@ class LightningPaymentRequest extends PaymentURI {
@override
String toString() => bolt11Invoice ?? "lightning:$lnURL";
}
-
diff --git a/cw_core/lib/root_dir.dart b/cw_core/lib/root_dir.dart
index 7f75b20..2f9eed8 100644
--- a/cw_core/lib/root_dir.dart
+++ b/cw_core/lib/root_dir.dart
@@ -23,12 +23,11 @@ bool get isNonAmnesticTails {
bool showNotice = true;
-void setRootDirFromEnv() =>
- _rootDirPath = Platform.environment['CAKE_WALLET_DIR'];
+void setRootDirFromEnv() => _rootDirPath = Platform.environment['CAKE_WALLET_DIR'];
void copyDirectory(Directory source, Directory destination) {
source.listSync(recursive: false).forEach((var entity) {
- if (entity is Directory) {
+ if (entity is Directory) {
var newDirectory = Directory(p.join(destination.absolute.path, p.basename(entity.path)));
newDirectory.createSync(recursive: true);
copyDirectory(entity.absolute, newDirectory);
@@ -41,7 +40,8 @@ void copyDirectory(Directory source, Directory destination) {
Future<void> linuxSymlinkSharedPreferences() async {
if (!Platform.isLinux) return; // nuh-uh
- final dataHome = Platform.environment["XDG_DATA_HOME"] ?? p.join(Platform.environment["HOME"] ?? "", ".local", "share");
+ final dataHome = Platform.environment["XDG_DATA_HOME"] ??
+ p.join(Platform.environment["HOME"] ?? "", ".local", "share");
var cakeNames = ['com.example.cake_wallet', 'cake_wallet'];
for (String name in cakeNames) {
final oldPath = p.join(dataHome, name);
@@ -53,8 +53,8 @@ Future<void> linuxSymlinkSharedPreferences() async {
if (oldLink.existsSync()) {
printV("not creating, link exists");
} else {
- if (newDir.existsSync()) {
- newDir.renameSync("${newPath}_${DateTime.now().millisecondsSinceEpoch~/1000}");
+ if (newDir.existsSync()) {
+ newDir.renameSync("${newPath}_${DateTime.now().millisecondsSinceEpoch ~/ 1000}");
}
copyDirectory(oldDir, newDir);
oldDir.deleteSync(recursive: true);
@@ -94,14 +94,16 @@ Future<Directory> getAppDir() async {
// for storing things that users in general back-up
var linuxAppPath = [
if (appDirPath != null) appDirPath, // old preferred
- p.join('/home', Platform.environment['USER']??"null", appName), // old fallback
- if (Platform.environment['HOME'] != null) p.join(Platform.environment['HOME']!, ".$appName"), // old fallback but using HOME
- if (Platform.environment['HOME'] != null) p.join(Platform.environment['HOME']!, '.config', appName), // old fallback but using HOME
+ p.join('/home', Platform.environment['USER'] ?? "null", appName), // old fallback
+ if (Platform.environment['HOME'] != null)
+ p.join(Platform.environment['HOME']!, ".$appName"), // old fallback but using HOME
+ if (Platform.environment['HOME'] != null)
+ p.join(Platform.environment['HOME']!, '.config', appName), // old fallback but using HOME
if (isNonAmnesticTails) p.join(_tailsData, ".$appName") // tails (if persistance is enabled)
];
String preferredPath = linuxAppPath.last;
-
+
preferredLoop:
for (String notSoPreferredPath in linuxAppPath) {
if (notSoPreferredPath == linuxAppPath.last) continue;
@@ -109,8 +111,10 @@ Future<Directory> getAppDir() async {
if (useThisOne) {
if (showNotice) {
showNotice = false;
- printV("Not using $preferredPath because $notSoPreferredPath exists, falling back for backwards compatibility");
- printV("Can't see your wallet? Check\n - ${linuxAppPath.join("\n - ")}\n and move directory that to $preferredPath");
+ printV(
+ "Not using $preferredPath because $notSoPreferredPath exists, falling back for backwards compatibility");
+ printV(
+ "Can't see your wallet? Check\n - ${linuxAppPath.join("\n - ")}\n and move directory that to $preferredPath");
printV("Or use CAKE_WALLET_DIR=/path/to/app/ ${Platform.executable}");
}
preferredPath = notSoPreferredPath;
diff --git a/cw_core/lib/sec_random_native.dart b/cw_core/lib/sec_random_native.dart
index 2011602..e195938 100644
--- a/cw_core/lib/sec_random_native.dart
+++ b/cw_core/lib/sec_random_native.dart
@@ -14,7 +14,8 @@ Future<Uint8List> secRandom(int count) async {
final rng = Random.secure();
return Uint8List.fromList(List<int>.generate(count, (_) => rng.nextInt(byteSize)));
}
- return await utils.invokeMethod<Uint8List>('sec_random', {'count': count}) ?? Uint8List.fromList([]);
+ return await utils.invokeMethod<Uint8List>('sec_random', {'count': count}) ??
+ Uint8List.fromList([]);
} on PlatformException catch (_) {
return Uint8List.fromList([]);
}
diff --git a/cw_core/lib/solana_rpc_http_service.dart b/cw_core/lib/solana_rpc_http_service.dart
index 1c6e975..22d1a8c 100644
--- a/cw_core/lib/solana_rpc_http_service.dart
+++ b/cw_core/lib/solana_rpc_http_service.dart
@@ -4,14 +4,12 @@ import 'package:on_chain/solana/solana.dart';
class SolanaRPCHTTPService implements SolanaJSONRPCService {
SolanaRPCHTTPService(
- {required this.url,
- this.defaultRequestTimeout = const Duration(seconds: 30)});
+ {required this.url, this.defaultRequestTimeout = const Duration(seconds: 30)});
@override
final String url;
final Duration defaultRequestTimeout;
- Future<Map<String, dynamic>> call(SolanaRequestDetails params,
- [Duration? timeout]) async {
+ Future<Map<String, dynamic>> call(SolanaRequestDetails params, [Duration? timeout]) async {
final response = await ProxyWrapper().post(
clearnetUri: Uri.parse(url),
body: params.toRequestBody(),
diff --git a/cw_core/lib/spl_token.part.dart b/cw_core/lib/spl_token.part.dart
index d3da96c..cede960 100644
--- a/cw_core/lib/spl_token.part.dart
+++ b/cw_core/lib/spl_token.part.dart
@@ -58,7 +58,5 @@ class SPLTokenAdapter extends TypeAdapter<SPLToken> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is SPLTokenAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is SPLTokenAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/transaction_direction.dart b/cw_core/lib/transaction_direction.dart
index 8d1ddfe..a12c79e 100644
--- a/cw_core/lib/transaction_direction.dart
+++ b/cw_core/lib/transaction_direction.dart
@@ -7,7 +7,8 @@ TransactionDirection parseTransactionDirectionFromInt(int raw) {
case 1:
return TransactionDirection.outgoing;
default:
- throw Exception('Unexpected token: raw for TransactionDirection parseTransactionDirectionFromInt');
+ throw Exception(
+ 'Unexpected token: raw for TransactionDirection parseTransactionDirectionFromInt');
}
}
@@ -18,6 +19,7 @@ TransactionDirection parseTransactionDirectionFromNumber(String raw) {
case "1":
return TransactionDirection.outgoing;
default:
- throw Exception('Unexpected token: raw for TransactionDirection parseTransactionDirectionFromNumber');
+ throw Exception(
+ 'Unexpected token: raw for TransactionDirection parseTransactionDirectionFromNumber');
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/transaction_history.dart b/cw_core/lib/transaction_history.dart
index a88d6df..e71c4ba 100644
--- a/cw_core/lib/transaction_history.dart
+++ b/cw_core/lib/transaction_history.dart
@@ -2,8 +2,7 @@ import 'package:mobx/mobx.dart';
import 'package:cw_core/transaction_info.dart';
abstract class TransactionHistoryBase<TransactionType extends TransactionInfo> {
- TransactionHistoryBase()
- : transactions = ObservableMap<String, TransactionType>();
+ TransactionHistoryBase() : transactions = ObservableMap<String, TransactionType>();
@observable
ObservableMap<String, TransactionType> transactions;
diff --git a/cw_core/lib/transaction_priority.dart b/cw_core/lib/transaction_priority.dart
index ddd2752..c654028 100644
--- a/cw_core/lib/transaction_priority.dart
+++ b/cw_core/lib/transaction_priority.dart
@@ -1,9 +1,9 @@
import 'package:cw_core/enumerable_item.dart';
-abstract class TransactionPriority extends EnumerableItem<int>
- with Serializable<int> {
+abstract class TransactionPriority extends EnumerableItem<int> with Serializable<int> {
final String? description;
final String? hint;
- const TransactionPriority({required String title, required int raw, this.description, this.hint}) : super(title: title, raw: raw);
+ const TransactionPriority({required String title, required int raw, this.description, this.hint})
+ : super(title: title, raw: raw);
}
diff --git a/cw_core/lib/tron_token.part.dart b/cw_core/lib/tron_token.part.dart
index e719c18..c848653 100644
--- a/cw_core/lib/tron_token.part.dart
+++ b/cw_core/lib/tron_token.part.dart
@@ -55,7 +55,5 @@ class TronTokenAdapter extends TypeAdapter<TronToken> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
- other is TronTokenAdapter &&
- runtimeType == other.runtimeType &&
- typeId == other.typeId;
+ other is TronTokenAdapter && runtimeType == other.runtimeType && typeId == other.typeId;
}
diff --git a/cw_core/lib/utils/file.dart b/cw_core/lib/utils/file.dart
index 0b1c5cf..72fc948 100644
--- a/cw_core/lib/utils/file.dart
+++ b/cw_core/lib/utils/file.dart
@@ -6,9 +6,7 @@ Future<void> write({required String path, required String password, required Str
writeData(path: path, password: password, data: data);
Future<void> writeData(
- {required String path,
- required String password,
- required String data}) async {
+ {required String path, required String password, required String data}) async {
final keys = extractKeys(password);
final key = encrypt.Key.fromBase64(keys.first);
final iv = encrypt.IV.fromBase64(keys.last);
diff --git a/cw_core/lib/utils/proxy_logger/abstract.dart b/cw_core/lib/utils/proxy_logger/abstract.dart
index 303b640..bf06c92 100644
--- a/cw_core/lib/utils/proxy_logger/abstract.dart
+++ b/cw_core/lib/utils/proxy_logger/abstract.dart
@@ -11,7 +11,7 @@ enum RequestMethod {
post,
put,
delete,
-
+
newHttpClient,
newHttpIOClient,
newProxySocket,
@@ -23,7 +23,7 @@ abstract class ProxyLogger {
required RequestMethod method,
required Uint8List body,
required very_insecure_http_do_not_use.Response? response,
- required RequestNetwork network,
+ required RequestNetwork network,
required String? error,
});
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/proxy_logger/memory_proxy_logger.dart b/cw_core/lib/utils/proxy_logger/memory_proxy_logger.dart
index e2929da..955275d 100644
--- a/cw_core/lib/utils/proxy_logger/memory_proxy_logger.dart
+++ b/cw_core/lib/utils/proxy_logger/memory_proxy_logger.dart
@@ -46,18 +46,20 @@ class MemoryProxyLogger implements ProxyLogger {
required RequestMethod method,
required Uint8List body,
required very_insecure_http_do_not_use.Response? response,
- required RequestNetwork network,
+ required RequestNetwork network,
required String? error,
}) {
final trace = StackTrace.current;
- logs.add(MemoryProxyLoggerEntry(
- method: method,
- trace: trace,
- uri: uri,
- body: body,
- network: network,
- response: response,
- error: error,),
+ logs.add(
+ MemoryProxyLoggerEntry(
+ method: method,
+ trace: trace,
+ uri: uri,
+ body: body,
+ network: network,
+ response: response,
+ error: error,
+ ),
);
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/proxy_logger/silent_logger.dart b/cw_core/lib/utils/proxy_logger/silent_logger.dart
index 1cea0d0..45bfe79 100644
--- a/cw_core/lib/utils/proxy_logger/silent_logger.dart
+++ b/cw_core/lib/utils/proxy_logger/silent_logger.dart
@@ -11,7 +11,7 @@ class SilentProxyLogger implements ProxyLogger {
required RequestMethod method,
required Uint8List body,
required very_insecure_http_do_not_use.Response? response,
- required RequestNetwork network,
+ required RequestNetwork network,
required String? error,
}) {}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/proxy_socket/abstract.dart b/cw_core/lib/utils/proxy_socket/abstract.dart
index 9e704c2..770ddc9 100644
--- a/cw_core/lib/utils/proxy_socket/abstract.dart
+++ b/cw_core/lib/utils/proxy_socket/abstract.dart
@@ -16,19 +16,21 @@ class ProxyAddress {
}
abstract class ProxySocket {
- static Future<ProxySocket> connect(bool sslEnabled, ProxyAddress address, {Duration? connectionTimeout}) async {
+ static Future<ProxySocket> connect(bool sslEnabled, ProxyAddress address,
+ {Duration? connectionTimeout}) async {
if (CakeTor.instance!.started) {
var socksSocket = await SOCKSSocket.create(
- proxyHost: InternetAddress.loopbackIPv4.address,
- proxyPort: CakeTor.instance!.port,
- sslEnabled: sslEnabled,
+ proxyHost: InternetAddress.loopbackIPv4.address,
+ proxyPort: CakeTor.instance!.port,
+ sslEnabled: sslEnabled,
);
await socksSocket.connect();
await socksSocket.connectTo(address.host, address.port);
return ProxySocketSocks(socksSocket);
}
if (sslEnabled == false) {
- return ProxySocketInsecure(await Socket.connect(address.host, address.port, timeout: connectionTimeout));
+ return ProxySocketInsecure(
+ await Socket.connect(address.host, address.port, timeout: connectionTimeout));
} else {
return ProxySocketSecure(await SecureSocket.connect(
address.host,
@@ -43,6 +45,7 @@ abstract class ProxySocket {
void destroy();
void write(String data);
bool get isClosed;
- StreamSubscription<List<int>> listen(Function(Uint8List event) onData, {Function (Object error)? onError, Function ()? onDone, bool cancelOnError = true});
+ StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
+ {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true});
ProxyAddress get address;
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/proxy_socket/insecure.dart b/cw_core/lib/utils/proxy_socket/insecure.dart
index 1b1b189..ac75a46 100644
--- a/cw_core/lib/utils/proxy_socket/insecure.dart
+++ b/cw_core/lib/utils/proxy_socket/insecure.dart
@@ -1,4 +1,3 @@
-
import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/utils/proxy_socket/abstract.dart';
import 'dart:async';
@@ -9,15 +8,16 @@ class ProxySocketInsecure implements ProxySocket {
final Socket socket;
ProxySocketInsecure(this.socket);
-
+
bool isClosed = false;
- ProxyAddress get address => ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort);
-
+ ProxyAddress get address =>
+ ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort);
+
@override
Future<void> close() async {
try {
- if (isClosed) return;
+ if (isClosed) return;
isClosed = true;
return socket.close();
} catch (e) {
@@ -25,7 +25,7 @@ class ProxySocketInsecure implements ProxySocket {
return;
}
}
-
+
@override
void destroy() async {
try {
@@ -37,7 +37,7 @@ class ProxySocketInsecure implements ProxySocket {
return;
}
}
-
+
@override
void write(String data) {
try {
@@ -51,9 +51,10 @@ class ProxySocketInsecure implements ProxySocket {
return;
}
}
-
+
@override
- StreamSubscription<List<int>> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
+ StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
+ {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
return socket.listen(
(data) {
onData(Uint8List.fromList(data));
@@ -63,4 +64,4 @@ class ProxySocketInsecure implements ProxySocket {
cancelOnError: cancelOnError,
);
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/proxy_socket/secure.dart b/cw_core/lib/utils/proxy_socket/secure.dart
index d35a25a..5cd3a1b 100644
--- a/cw_core/lib/utils/proxy_socket/secure.dart
+++ b/cw_core/lib/utils/proxy_socket/secure.dart
@@ -11,9 +11,10 @@ class ProxySocketSecure implements ProxySocket {
bool isClosed = false;
ProxySocketSecure(this.socket);
-
- ProxyAddress get address => ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort);
-
+
+ ProxyAddress get address =>
+ ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort);
+
@override
Future<void> close() async {
try {
@@ -25,11 +26,11 @@ class ProxySocketSecure implements ProxySocket {
return;
}
}
-
+
@override
void destroy() async {
try {
- if (isClosed) return;
+ if (isClosed) return;
isClosed = true;
socket.destroy();
} catch (e) {
@@ -37,7 +38,7 @@ class ProxySocketSecure implements ProxySocket {
return;
}
}
-
+
@override
void write(String data) {
runZonedGuarded(() {
@@ -57,9 +58,10 @@ class ProxySocketSecure implements ProxySocket {
printV("ProxySocketSecure: write (async error): $e");
});
}
-
+
@override
- StreamSubscription<List<int>> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
+ StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
+ {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
return socket.listen(
(data) {
onData(Uint8List.fromList(data));
diff --git a/cw_core/lib/utils/proxy_socket/socks.dart b/cw_core/lib/utils/proxy_socket/socks.dart
index e62b84b..99ae8f0 100644
--- a/cw_core/lib/utils/proxy_socket/socks.dart
+++ b/cw_core/lib/utils/proxy_socket/socks.dart
@@ -9,10 +9,10 @@ class ProxySocketSocks implements ProxySocket {
final SOCKSSocket socket;
bool isClosed = false;
ProxySocketSocks(this.socket);
-
+
@override
ProxyAddress get address => ProxyAddress(host: socket.proxyHost, port: socket.proxyPort);
-
+
@override
Future<void> close() async {
try {
@@ -24,10 +24,10 @@ class ProxySocketSocks implements ProxySocket {
return;
}
}
-
+
@override
void destroy() => close();
-
+
@override
void write(String data) {
try {
@@ -43,7 +43,8 @@ class ProxySocketSocks implements ProxySocket {
}
@override
- StreamSubscription<List<int>> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
+ StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
+ {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
return socket.listen(
(data) {
onData(Uint8List.fromList(data));
@@ -54,4 +55,3 @@ class ProxySocketSocks implements ProxySocket {
);
}
}
-
diff --git a/cw_core/lib/utils/proxy_wrapper.dart b/cw_core/lib/utils/proxy_wrapper.dart
index 55d84d7..bd490c1 100644
--- a/cw_core/lib/utils/proxy_wrapper.dart
+++ b/cw_core/lib/utils/proxy_wrapper.dart
@@ -16,22 +16,23 @@ class ProxyWrapper {
factory ProxyWrapper() {
return _proxyWrapper;
}
-
+
ProxyWrapper._internal();
- Future<ProxySocket> getSocksSocket(bool sslEnabled, String host, int port, {Duration? connectionTimeout}) async {
+ Future<ProxySocket> getSocksSocket(bool sslEnabled, String host, int port,
+ {Duration? connectionTimeout}) async {
logger?.log(
- uri: Uri(
- scheme: sslEnabled ? "https" : "http",
- host: host,
- port: port,
- ),
- method: RequestMethod.newProxySocket,
- body: Uint8List(0),
- response: null,
- network: requestNetwork(),
- error: null
- );
- return ProxySocket.connect(sslEnabled, ProxyAddress(host: host, port: port), connectionTimeout: connectionTimeout);
+ uri: Uri(
+ scheme: sslEnabled ? "https" : "http",
+ host: host,
+ port: port,
+ ),
+ method: RequestMethod.newProxySocket,
+ body: Uint8List(0),
+ response: null,
+ network: requestNetwork(),
+ error: null);
+ return ProxySocket.connect(sslEnabled, ProxyAddress(host: host, port: port),
+ connectionTimeout: connectionTimeout);
}
RequestNetwork requestNetwork() {
@@ -56,17 +57,17 @@ class ProxyWrapper {
int getPort() => CakeTor.instance!.port;
- @Deprecated('Use ProxyWrapper().get/post/put methods instead, and provide proper clearnet and onion uri.')
+ @Deprecated(
+ 'Use ProxyWrapper().get/post/put methods instead, and provide proper clearnet and onion uri.')
HttpClient getHttpClient({int? portOverride, bool internal = false}) {
if (!internal) {
logger?.log(
- uri: null,
- method: RequestMethod.newProxySocket,
- body: Uint8List(0),
- response: null,
- network: requestNetwork(),
- error: null
- );
+ uri: null,
+ method: RequestMethod.newProxySocket,
+ body: Uint8List(0),
+ response: null,
+ network: requestNetwork(),
+ error: null);
}
if (CakeTor.instance!.started) {
// Assign connection factory.
@@ -84,8 +85,6 @@ class ProxyWrapper {
}
}
-
-
Future<Response> _make({
required RequestMethod method,
required ioc.IOClient client,
@@ -216,7 +215,6 @@ class ProxyWrapper {
throw Exception("Unable to connect to server");
}
-
Future<Response> post({
Map<String, String>? headers,
@@ -235,7 +233,6 @@ class ProxyWrapper {
ioc.IOClient clearnetClient = ioc.IOClient(cleatnetHttpClient);
-
bool torEnabled = CakeTor.instance!.started;
if (torEnabled) {
@@ -439,7 +436,6 @@ class ProxyWrapper {
}
}
-
class CakeTor {
static CakeTorInstance? instance;
}
diff --git a/cw_core/lib/utils/tor/abstract.dart b/cw_core/lib/utils/tor/abstract.dart
index 70272e4..dbcbe03 100644
--- a/cw_core/lib/utils/tor/abstract.dart
+++ b/cw_core/lib/utils/tor/abstract.dart
@@ -65,4 +65,4 @@ CakeTorInstance(
)
""";
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/tor/disabled.dart b/cw_core/lib/utils/tor/disabled.dart
index 88a23ce..05cc2f2 100644
--- a/cw_core/lib/utils/tor/disabled.dart
+++ b/cw_core/lib/utils/tor/disabled.dart
@@ -30,4 +30,4 @@ CakeTorDisabled(
)
""";
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/tor/socks.dart b/cw_core/lib/utils/tor/socks.dart
index 3e01a60..d53bcd9 100644
--- a/cw_core/lib/utils/tor/socks.dart
+++ b/cw_core/lib/utils/tor/socks.dart
@@ -31,4 +31,4 @@ CakeTorSocks(
)
""";
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/tor/torch.dart b/cw_core/lib/utils/tor/torch.dart
index 7fb4826..0d972dc 100644
--- a/cw_core/lib/utils/tor/torch.dart
+++ b/cw_core/lib/utils/tor/torch.dart
@@ -88,4 +88,4 @@ CakeTorTorch(
)
""";
}
-}
\ No newline at end of file
+}
diff --git a/cw_core/lib/utils/zpub.dart b/cw_core/lib/utils/zpub.dart
index a64f902..f4fe352 100644
--- a/cw_core/lib/utils/zpub.dart
+++ b/cw_core/lib/utils/zpub.dart
@@ -1,4 +1,3 @@
-
import 'dart:typed_data';
import 'package:blockchain_utils/blockchain_utils.dart';
@@ -15,31 +14,32 @@ String convertAnyToXpub(String any) {
String convertZpubToXpub(String zpub) {
try {
final decoded = Base58Decoder.checkDecode(zpub);
-
+
if (decoded.length < 4) {
throw ArgumentError('Invalid extended public key length');
}
-
+
final versionBytes = decoded.sublist(0, 4);
final zpubVersionBytes = [0x04, 0xb2, 0x47, 0x46]; // zpub mainnet version
final zpubTestnetVersionBytes = [0x04, 0x5f, 0x1c, 0xf6]; // vpub testnet version
-
+
bool isZpub = listEquals(versionBytes, zpubVersionBytes);
bool isVpub = listEquals(versionBytes, zpubTestnetVersionBytes);
-
+
if (!isZpub && !isVpub) {
return zpub;
}
-
- final xpubVersionBytes = isZpub ?
- [0x04, 0x88, 0xb2, 0x1e] : // xpub mainnet
- [0x04, 0x35, 0x87, 0xcf]; // tpub testnet
-
+
+ final xpubVersionBytes = isZpub
+ ? [0x04, 0x88, 0xb2, 0x1e]
+ : // xpub mainnet
+ [0x04, 0x35, 0x87, 0xcf]; // tpub testnet
+
final newExtendedKey = Uint8List.fromList([
...xpubVersionBytes,
...decoded.sublist(4),
]);
-
+
return Base58Encoder.checkEncode(newExtendedKey);
} catch (e) {
throw ArgumentError('Failed to convert zpub to xpub: $e');
diff --git a/cw_core/lib/wallet_info.dart b/cw_core/lib/wallet_info.dart
index a43bfa1..aa4b258 100644
--- a/cw_core/lib/wallet_info.dart
+++ b/cw_core/lib/wallet_info.dart
@@ -327,79 +327,77 @@ class DerivationInfo {
class WalletInfo {
WalletInfo(
- this.internalId,
- this.id,
- this.name,
- this.type,
- this.isRecovery,
- this.restoreHeight,
- this.timestamp,
- this.dirPath,
- this.path,
- this.address,
- this.yatEid,
- this.yatLastUsedAddressRaw,
- this.showIntroCakePayCard,
- this.derivationInfoId,
- this.hardwareWalletType,
- this.parentAddress,
- this.hashedWalletIdentifier,
- this.isNonSeedWallet,
- this.sortOrder,
- this.addressPageType,
- this.receiveInfoboxDismissed,
- this.showCombinedBalance,
- this.favoriteTokenAddress
- ) : _yatLastUsedAddressController = StreamController<String>.broadcast();
-
- factory WalletInfo.external({
- required String id,
- required String name,
- required WalletType type,
- required bool isRecovery,
- required int restoreHeight,
- required DateTime date,
- required String dirPath,
- required String path,
- required String address,
- bool? showIntroCakePayCard,
- String yatEid = '',
- String yatLastUsedAddressRaw = '',
- int? derivationInfoId,
- HardwareWalletType? hardwareWalletType,
- String? parentAddress,
- String? hashedWalletIdentifier,
- bool? isNonSeedWallet,
- int? sortOrder,
- bool? receiveInfoboxDismissed,
- bool? showCombinedBalance,
- String? favoriteTokenAddress
- }) {
+ this.internalId,
+ this.id,
+ this.name,
+ this.type,
+ this.isRecovery,
+ this.restoreHeight,
+ this.timestamp,
+ this.dirPath,
+ this.path,
+ this.address,
+ this.yatEid,
+ this.yatLastUsedAddressRaw,
+ this.showIntroCakePayCard,
+ this.derivationInfoId,
+ this.hardwareWalletType,
+ this.parentAddress,
+ this.hashedWalletIdentifier,
+ this.isNonSeedWallet,
+ this.sortOrder,
+ this.addressPageType,
+ this.receiveInfoboxDismissed,
+ this.showCombinedBalance,
+ this.favoriteTokenAddress)
+ : _yatLastUsedAddressController = StreamController<String>.broadcast();
+
+ factory WalletInfo.external(
+ {required String id,
+ required String name,
+ required WalletType type,
+ required bool isRecovery,
+ required int restoreHeight,
+ required DateTime date,
+ required String dirPath,
+ required String path,
+ required String address,
+ bool? showIntroCakePayCard,
+ String yatEid = '',
+ String yatLastUsedAddressRaw = '',
+ int? derivationInfoId,
+ HardwareWalletType? hardwareWalletType,
+ String? parentAddress,
+ String? hashedWalletIdentifier,
+ bool? isNonSeedWallet,
+ int? sortOrder,
+ bool? receiveInfoboxDismissed,
+ bool? showCombinedBalance,
+ String? favoriteTokenAddress}) {
return WalletInfo(
- 0,
- id,
- name,
- type,
- isRecovery,
- restoreHeight,
- date.millisecondsSinceEpoch,
- dirPath,
- path,
- address,
- yatEid,
- yatLastUsedAddressRaw,
- showIntroCakePayCard,
- derivationInfoId ?? -1,
- hardwareWalletType,
- parentAddress,
- hashedWalletIdentifier,
- isNonSeedWallet ?? false,
- sortOrder ?? 0,
- null,
- receiveInfoboxDismissed ?? false,
- showCombinedBalance ?? true,
- favoriteTokenAddress
- );
+ 0,
+ id,
+ name,
+ type,
+ isRecovery,
+ restoreHeight,
+ date.millisecondsSinceEpoch,
+ dirPath,
+ path,
+ address,
+ yatEid,
+ yatLastUsedAddressRaw,
+ showIntroCakePayCard,
+ derivationInfoId ?? -1,
+ hardwareWalletType,
+ parentAddress,
+ hashedWalletIdentifier,
+ isNonSeedWallet ?? false,
+ sortOrder ?? 0,
+ null,
+ receiveInfoboxDismissed ?? false,
+ showCombinedBalance ?? true,
+ favoriteTokenAddress);
}
static String get tableName => 'walletInfo';
@@ -565,59 +563,59 @@ class WalletInfo {
StreamController<String> _yatLastUsedAddressController;
Map<String, dynamic> toJson() => {
- selfIdColumn: internalId,
- "id": id,
- "name": name,
- "type": type.index,
- "isRecovery": isRecovery ? 1 : 0,
- "restoreHeight": restoreHeight,
- "timestamp": timestamp,
- "dirPath": dirPath,
- "path": path,
- "address": address,
- "yatEid": yatEid,
- "yatLastUsedAddressRaw": yatLastUsedAddressRaw,
- "showIntroCakePayCard": showIntroCakePayCard == true ? 1 : 0, // SQL regression: null -> false
- "walletInfoDerivationInfoId": derivationInfoId,
- "hardwareWalletType": hardwareWalletType?.index,
- "parentAddress": parentAddress,
- "hashedWalletIdentifier": hashedWalletIdentifier,
- "isNonSeedWallet": isNonSeedWallet ? 1 : 0,
- "sortOrder": sortOrder,
- "addressPageType": addressPageType,
- "receiveInfoboxDismissed": receiveInfoboxDismissed ? 1 : 0,
- "showCombinedBalance": showCombinedBalance ? 1 : 0,
- "favoriteTokenAddress": favoriteTokenAddress
- };
+ selfIdColumn: internalId,
+ "id": id,
+ "name": name,
+ "type": type.index,
+ "isRecovery": isRecovery ? 1 : 0,
+ "restoreHeight": restoreHeight,
+ "timestamp": timestamp,
+ "dirPath": dirPath,
+ "path": path,
+ "address": address,
+ "yatEid": yatEid,
+ "yatLastUsedAddressRaw": yatLastUsedAddressRaw,
+ "showIntroCakePayCard":
+ Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.