From 82b14a776f50769176c45327b7878bdfca04f60e Mon Sep 17 00:00:00 2001 From: Some Random Crypto Guy Date: Wed, 6 Aug 2025 11:27:23 +0100 Subject: [PATCH] fixed background syncing issue with Carrot account keys --- src/carrot_core/account.cpp | 21 +++++++++++++++++++++ src/carrot_core/account.h | 2 ++ src/cryptonote_basic/account.cpp | 3 +++ src/wallet/wallet2.cpp | 5 ++--- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/carrot_core/account.cpp b/src/carrot_core/account.cpp index 69e48a3..67e086d 100644 --- a/src/carrot_core/account.cpp +++ b/src/carrot_core/account.cpp @@ -315,6 +315,27 @@ crypto::secret_key carrot_and_legacy_account::generate( return retval; } //---------------------------------------------------------------------------------------------------------------------- +void carrot_and_legacy_account::set_keys(const cryptonote::account_keys& keys, bool copy_spend_secret_keys) +{ + // CN keys + m_keys.m_account_address = keys.m_account_address; + if (copy_spend_secret_keys) m_keys.m_spend_secret_key = keys.m_spend_secret_key; + m_keys.m_view_secret_key = keys.m_view_secret_key; + if (copy_spend_secret_keys) m_keys.m_multisig_keys = keys.m_multisig_keys; + m_keys.m_device = keys.m_device; + m_keys.m_encryption_iv = keys.m_encryption_iv; + + // Carrot keys + if (copy_spend_secret_keys) m_keys.s_master = keys.s_master; + if (copy_spend_secret_keys) m_keys.k_prove_spend = keys.k_prove_spend; + m_keys.s_view_balance = keys.s_view_balance; + m_keys.k_view_incoming = keys.k_view_incoming; + m_keys.k_generate_image = keys.k_generate_image; + m_keys.s_generate_address = keys.s_generate_address; + m_keys.m_carrot_account_address = keys.m_carrot_account_address; + m_keys.m_carrot_main_address = keys.m_carrot_main_address; +} +//---------------------------------------------------------------------------------------------------------------------- void carrot_and_legacy_account::set_carrot_keys(const AddressDeriveType default_derive_type) { // top level keys diff --git a/src/carrot_core/account.h b/src/carrot_core/account.h index 3d85e71..e102ca3 100644 --- a/src/carrot_core/account.h +++ b/src/carrot_core/account.h @@ -82,6 +82,8 @@ namespace carrot s_generate_address_dev(get_keys().s_generate_address) {} + void set_keys(const cryptonote::account_keys& keys, bool copy_spend_secret_keys); + carrot_and_legacy_account(const carrot_and_legacy_account &k) = delete; carrot_and_legacy_account(carrot_and_legacy_account&&) = delete; diff --git a/src/cryptonote_basic/account.cpp b/src/cryptonote_basic/account.cpp index 3b66a90..5572bf9 100644 --- a/src/cryptonote_basic/account.cpp +++ b/src/cryptonote_basic/account.cpp @@ -151,6 +151,8 @@ DISABLE_VS_WARNINGS(4244 4345) void account_base::forget_spend_key() { m_keys.m_spend_secret_key = crypto::secret_key(); + m_keys.s_master = m_keys.m_spend_secret_key; + m_keys.k_prove_spend = m_keys.m_spend_secret_key; m_keys.m_multisig_keys.clear(); } //----------------------------------------------------------------- @@ -163,6 +165,7 @@ DISABLE_VS_WARNINGS(4244 4345) "Unexpected derived public spend key"); m_keys.m_spend_secret_key = spend_secret_key; + m_keys.s_master = m_keys.m_spend_secret_key; } //----------------------------------------------------------------- crypto::secret_key account_base::generate(const crypto::secret_key& recovery_key, bool recover, bool two_random) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 10238a3..92fe73c 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -6813,9 +6813,8 @@ void wallet2::process_background_cache_on_open() background_w2->m_custom_background_key = m_custom_background_key; // TODO: uncommet this block - // carrot::carrot_and_legacy_account account = m_account; - // account.forget_spend_key(); - // background_w2->m_account = account; + background_w2->m_account.set_keys(m_account.get_keys(), false); + background_w2->m_account.forget_spend_key(); // Load background cache from file background_w2->clear();