feat: bip39 decred (#3348)

This commit is contained in:
cyan
2026-08-26 01:01:52 +08:00
committed by GitHub
parent b72c5c3232
commit 3d9b79f536
20 changed files with 208 additions and 43 deletions
+1 -1
View File
@@ -86,6 +86,7 @@ class WalletCreationService {
case WalletType.dogecoin:
case WalletType.nano:
case WalletType.zcash:
case WalletType.decred:
return true;
case WalletType.monero:
case WalletType.wownero:
@@ -93,7 +94,6 @@ class WalletCreationService {
case WalletType.haven:
case WalletType.banano:
case WalletType.zano:
case WalletType.decred:
return false;
}
}
+19 -6
View File
@@ -5,13 +5,26 @@ class CWDecred extends Decred {
@override
WalletCredentials createDecredNewWalletCredentials(
{required String name, WalletInfo? walletInfo}) =>
DecredNewWalletCredentials(name: name, walletInfo: walletInfo);
{required String name,
String? password,
String? passphrase,
String? mnemonic,
WalletInfo? walletInfo}) =>
DecredNewWalletCredentials(
name: name,
password: password,
passphrase: passphrase,
mnemonic: mnemonic,
walletInfo: walletInfo);
@override
WalletCredentials createDecredRestoreWalletFromSeedCredentials(
{required String name, required String mnemonic, required String password}) =>
DecredRestoreWalletFromSeedCredentials(name: name, mnemonic: mnemonic, password: password);
{required String name,
required String mnemonic,
required String password,
String? passphrase}) =>
DecredRestoreWalletFromSeedCredentials(
name: name, mnemonic: mnemonic, password: password, passphrase: passphrase);
@override
WalletCredentials createDecredRestoreWalletFromPubkeyCredentials(
@@ -19,8 +32,8 @@ class CWDecred extends Decred {
DecredRestoreWalletFromPubkeyCredentials(name: name, pubkey: pubkey, password: password);
@override
WalletService createDecredWalletService(Box<UnspentCoinsInfo> unspentCoinSource) =>
DecredWalletService(unspentCoinSource);
WalletService createDecredWalletService(Box<UnspentCoinsInfo> unspentCoinSource, bool isDirect) =>
DecredWalletService(unspentCoinSource, isDirect);
@override
List<TransactionPriority> getTransactionPriorities() => DecredTransactionPriority.all;
+2 -1
View File
@@ -1343,7 +1343,8 @@ Future<void> setup({
case WalletType.zano:
return zano!.createZanoWalletService();
case WalletType.decred:
return decred!.createDecredWalletService(_unspentCoinsInfoSource);
return decred!.createDecredWalletService(
_unspentCoinsInfoSource, SettingsStoreBase.walletPasswordDirectInput);
case WalletType.haven:
return HavenWalletService();
case WalletType.zcash:
+1 -1
View File
@@ -17,11 +17,11 @@ bool isBIP39Wallet(WalletType walletType) {
case WalletType.monero:
case WalletType.dogecoin:
case WalletType.zcash:
case WalletType.decred:
return true;
case WalletType.wownero:
case WalletType.haven:
case WalletType.zano:
case WalletType.decred:
case WalletType.none:
return false;
}
@@ -630,7 +630,7 @@ class _WalletRestorePageBodyState extends State<_WalletRestorePageBody>
}
if ((walletRestoreViewModel.type == WalletType.decred) &&
seedWords.length != WalletRestoreViewModelBase.decredSeedMnemonicLength) {
![12, 15, 24].contains(seedWords.length)) {
return false;
}
@@ -59,6 +59,7 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
case WalletType.solana:
case WalletType.tron:
case WalletType.zcash:
case WalletType.decred:
return true;
case WalletType.bitcoin:
@@ -74,7 +75,6 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
case WalletType.none:
case WalletType.haven:
case WalletType.zano:
case WalletType.decred:
return false;
}
}
@@ -107,7 +107,8 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
WalletType.zano,
WalletType.dogecoin,
WalletType.zcash,
].contains(type);
WalletType.decred,
].contains(type);
@computed
bool get addCustomNode => _addCustomNode;
+2
View File
@@ -179,6 +179,8 @@ abstract class WalletCreationVMBase with Store {
);
}
return bitcoin!.getElectrumDerivations()[DerivationType.electrum]!.first;
case WalletType.decred:
return DerivationInfo(derivationType: DerivationType.bip39);
default:
return DerivationInfo(derivationType: DerivationType.unknown);
}
@@ -131,6 +131,10 @@ abstract class WalletGroupsDisplayViewModelBase with Store {
bool isNotMoneroBip39Wallet =
wallet.type == WalletType.monero && di.derivationType != DerivationType.bip39;
bool isNotDecredBip39Wallet = wallet.type == WalletType.decred &&
di.derivationType != DerivationType.bip39 &&
di.derivationType != DerivationType.unknown;
// Exclude if any of these conditions are true
shouldExcludeGroup = shouldExcludeGroup ||
isNonBIP39Wallet ||
@@ -138,7 +142,8 @@ abstract class WalletGroupsDisplayViewModelBase with Store {
isElectrumDerivationType ||
isSameTypeAsSelectedWallet ||
isNonSeedWallet ||
isNotMoneroBip39Wallet;
isNotMoneroBip39Wallet ||
isNotDecredBip39Wallet;
}
if (shouldExcludeGroup) continue;
+5 -1
View File
@@ -149,7 +149,11 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
network: zcashNetwork,
);
case WalletType.decred:
return decred!.createDecredNewWalletCredentials(name: name);
return decred!.createDecredNewWalletCredentials(
name: name,
password: walletPassword,
passphrase: passphrase,
mnemonic: newWalletArguments!.mnemonic);
case WalletType.none:
case WalletType.haven:
throw Exception('Unexpected type: ${type.toString()}');
@@ -216,6 +216,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
name: name,
mnemonic: seed,
password: password,
passphrase: passphrase,
);
case WalletType.zcash:
return zcash!.createZcashRestoreWalletFromSeedCredentials(