Clean up handling of mnemonic seed metadata.
This commit is contained in:
parent
4080f48868
commit
d84845d199
|
@ -31,13 +31,9 @@ TEST(WalletZkeysTest, StoreAndLoadSaplingZkeys) {
|
|||
// No HD seed in the wallet
|
||||
EXPECT_ANY_THROW(wallet.GenerateNewLegacySaplingZKey());
|
||||
|
||||
// Load the all-zeroes seed
|
||||
SecureString mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art");
|
||||
MnemonicSeed seed(English, mnemonic);
|
||||
// The legacy seed used to be automatically derived from randomness; since
|
||||
// non-mnemonic random generation has been removed we just use the
|
||||
// all-zeros mnemonic for these tests.
|
||||
wallet.LoadMnemonicSeed(seed);
|
||||
// Add a random seed to the wallet.
|
||||
wallet.GenerateNewSeed();
|
||||
auto seed = wallet.GetMnemonicSeed().value();
|
||||
|
||||
// Now this call succeeds
|
||||
auto address = wallet.GenerateNewLegacySaplingZKey();
|
||||
|
@ -432,10 +428,8 @@ TEST(WalletZkeysTest, WriteCryptedSaplingZkeyDirectToDb) {
|
|||
|
||||
ASSERT_FALSE(wallet.HaveMnemonicSeed());
|
||||
|
||||
// Load the all-zeroes seed as the legacy seed
|
||||
SecureString mnemonic("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art");
|
||||
MnemonicSeed seed(English, mnemonic);
|
||||
wallet.LoadMnemonicSeed(seed);
|
||||
// Add a mnemonic seed to the wallet.
|
||||
wallet.GenerateNewSeed();
|
||||
ASSERT_TRUE(wallet.HaveMnemonicSeed());
|
||||
|
||||
// wallet should be empty
|
||||
|
|
|
@ -121,7 +121,8 @@ SaplingPaymentAddress CWallet::GenerateNewLegacySaplingZKey() {
|
|||
AssertLockHeld(cs_wallet);
|
||||
|
||||
if (!mnemonicHDChain.has_value()) {
|
||||
mnemonicHDChain = CHDChain(GetMnemonicSeed().value().Fingerprint(), GetTime());
|
||||
throw std::runtime_error(
|
||||
"CWallet::GenerateNewLegacySaplingZKey(): Wallet is missing mnemonic seed metadata.");
|
||||
}
|
||||
CHDChain& hdChain = mnemonicHDChain.value();
|
||||
|
||||
|
@ -140,7 +141,7 @@ SaplingPaymentAddress CWallet::GenerateNewLegacySaplingZKey() {
|
|||
// Update the persisted chain information
|
||||
if (fFileBacked && !CWalletDB(strWalletFile).WriteMnemonicHDChain(hdChain)) {
|
||||
throw std::runtime_error(
|
||||
"CWallet::GenerateLegacySaplingZKey(): Writing HD chain model failed");
|
||||
"CWallet::GenerateNewLegacySaplingZKey(): Writing HD chain model failed");
|
||||
}
|
||||
|
||||
return xfvk.DefaultAddress();
|
||||
|
@ -267,7 +268,8 @@ CPubKey CWallet::GenerateNewKey()
|
|||
auto seed = seedOpt.value();
|
||||
|
||||
if (!mnemonicHDChain.has_value()) {
|
||||
mnemonicHDChain = CHDChain(seed.Fingerprint(), GetTime());
|
||||
throw std::runtime_error(
|
||||
"CWallet::GenerateNewKey(): Wallet is missing mnemonic seed metadata.");
|
||||
}
|
||||
CHDChain& hdChain = mnemonicHDChain.value();
|
||||
|
||||
|
@ -409,6 +411,10 @@ bool CWallet::AddCryptedSaplingSpendingKey(const libzcash::SaplingExtendedFullVi
|
|||
ZcashdUnifiedSpendingKey CWallet::GenerateNewUnifiedSpendingKey() {
|
||||
AssertLockHeld(cs_wallet);
|
||||
|
||||
if (!mnemonicHDChain.has_value()) {
|
||||
throw std::runtime_error(
|
||||
"CWallet::GenerateNewUnifiedSpendingKey(): Wallet is missing mnemonic seed metadata.");
|
||||
}
|
||||
CHDChain& hdChain = mnemonicHDChain.value();
|
||||
while (true) {
|
||||
auto usk = GenerateUnifiedSpendingKeyForAccount(hdChain.GetAccountCounter());
|
||||
|
@ -2359,10 +2365,7 @@ bool CWallet::VerifyMnemonicSeed(const SecureString& mnemonic) {
|
|||
LOCK(cs_wallet);
|
||||
|
||||
auto seed = GetMnemonicSeed();
|
||||
if (seed.has_value() && seed.value().GetMnemonic() == mnemonic) {
|
||||
if (!mnemonicHDChain.has_value()) {
|
||||
mnemonicHDChain = CHDChain(seed.value().Fingerprint(), GetTime());
|
||||
}
|
||||
if (seed.has_value() && mnemonicHDChain.has_value() && seed.value().GetMnemonic() == mnemonic) {
|
||||
CHDChain& hdChain = mnemonicHDChain.value();
|
||||
hdChain.SetMnemonicSeedBackupConfirmed();
|
||||
// Update the persisted chain information
|
||||
|
|
Loading…
Reference in New Issue