refactor wallet config to use identifiers instead of the redundant account_id field

This commit is contained in:
Sergio Chouhy 2026-04-27 23:11:58 -03:00
parent f0b89f8acb
commit f512a3bf0f
5 changed files with 15 additions and 13 deletions

View File

@ -139,9 +139,7 @@ impl InitialData {
}) })
}) })
.chain(self.private_accounts.iter().map(|(key_chain, account)| { .chain(self.private_accounts.iter().map(|(key_chain, account)| {
let account_id = AccountId::from((&key_chain.nullifier_public_key, 0));
InitialAccountData::Private(Box::new(PrivateAccountPrivateInitialData { InitialAccountData::Private(Box::new(PrivateAccountPrivateInitialData {
account_id,
account: account.clone(), account: account.clone(),
key_chain: key_chain.clone(), key_chain: key_chain.clone(),
identifier: 0, identifier: 0,

View File

@ -95,12 +95,18 @@ pub struct PublicAccountPrivateInitialData {
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrivateAccountPrivateInitialData { pub struct PrivateAccountPrivateInitialData {
pub account_id: nssa::AccountId,
pub account: nssa_core::account::Account, pub account: nssa_core::account::Account,
pub key_chain: KeyChain, pub key_chain: KeyChain,
pub identifier: nssa_core::Identifier, pub identifier: nssa_core::Identifier,
} }
impl PrivateAccountPrivateInitialData {
#[must_use]
pub fn account_id(&self) -> nssa::AccountId {
nssa::AccountId::from((&self.key_chain.nullifier_public_key, self.identifier))
}
}
#[must_use] #[must_use]
pub fn initial_pub_accounts_private_keys() -> Vec<PublicAccountPrivateInitialData> { pub fn initial_pub_accounts_private_keys() -> Vec<PublicAccountPrivateInitialData> {
let acc1_pub_sign_key = PrivateKey::try_new(PRIVATE_KEY_PUB_ACC_A).unwrap(); let acc1_pub_sign_key = PrivateKey::try_new(PRIVATE_KEY_PUB_ACC_A).unwrap();
@ -143,7 +149,6 @@ pub fn initial_priv_accounts_private_keys() -> Vec<PrivateAccountPrivateInitialD
vec![ vec![
PrivateAccountPrivateInitialData { PrivateAccountPrivateInitialData {
account_id: AccountId::from((&key_chain_1.nullifier_public_key, 0)),
account: Account { account: Account {
program_owner: DEFAULT_PROGRAM_OWNER, program_owner: DEFAULT_PROGRAM_OWNER,
balance: PRIV_ACC_A_INITIAL_BALANCE, balance: PRIV_ACC_A_INITIAL_BALANCE,
@ -154,7 +159,6 @@ pub fn initial_priv_accounts_private_keys() -> Vec<PrivateAccountPrivateInitialD
identifier: 0, identifier: 0,
}, },
PrivateAccountPrivateInitialData { PrivateAccountPrivateInitialData {
account_id: AccountId::from((&key_chain_2.nullifier_public_key, 0)),
account: Account { account: Account {
program_owner: DEFAULT_PROGRAM_OWNER, program_owner: DEFAULT_PROGRAM_OWNER,
balance: PRIV_ACC_B_INITIAL_BALANCE, balance: PRIV_ACC_B_INITIAL_BALANCE,
@ -358,11 +362,11 @@ mod tests {
); );
assert_eq!( assert_eq!(
init_private_accs_keys[0].account_id.to_string(), init_private_accs_keys[0].account_id().to_string(),
PRIV_ACC_A_TEXT_ADDR PRIV_ACC_A_TEXT_ADDR
); );
assert_eq!( assert_eq!(
init_private_accs_keys[1].account_id.to_string(), init_private_accs_keys[1].account_id().to_string(),
PRIV_ACC_B_TEXT_ADDR PRIV_ACC_B_TEXT_ADDR
); );

View File

@ -84,7 +84,7 @@ impl WalletChainStore {
} }
InitialAccountData::Private(data) => { InitialAccountData::Private(data) => {
private_init_acc_map.insert( private_init_acc_map.insert(
data.account_id, data.account_id(),
UserPrivateAccountData { UserPrivateAccountData {
key_chain: data.key_chain, key_chain: data.key_chain,
accounts: vec![(data.identifier, data.account)], accounts: vec![(data.identifier, data.account)],
@ -122,6 +122,7 @@ impl WalletChainStore {
public_init_acc_map.insert(data.account_id, data.pub_sign_key); public_init_acc_map.insert(data.account_id, data.pub_sign_key);
} }
InitialAccountData::Private(data) => { InitialAccountData::Private(data) => {
let account_id = data.account_id();
let mut account = data.account; let mut account = data.account;
// TODO: Program owner is only known after code is compiled and can't be set // TODO: Program owner is only known after code is compiled and can't be set
// in the config. Therefore we overwrite it here on // in the config. Therefore we overwrite it here on
@ -129,7 +130,7 @@ impl WalletChainStore {
// from the node and queried from the wallet. // from the node and queried from the wallet.
account.program_owner = Program::authenticated_transfer_program().id(); account.program_owner = Program::authenticated_transfer_program().id();
private_init_acc_map.insert( private_init_acc_map.insert(
data.account_id, account_id,
UserPrivateAccountData { UserPrivateAccountData {
key_chain: data.key_chain, key_chain: data.key_chain,
accounts: vec![(data.identifier, account)], accounts: vec![(data.identifier, account)],

View File

@ -44,10 +44,10 @@ pub enum InitialAccountData {
impl InitialAccountData { impl InitialAccountData {
#[must_use] #[must_use]
pub const fn account_id(&self) -> nssa::AccountId { pub fn account_id(&self) -> nssa::AccountId {
match &self { match &self {
Self::Public(acc) => acc.account_id, Self::Public(acc) => acc.account_id,
Self::Private(acc) => acc.account_id, Self::Private(acc) => acc.account_id(),
} }
} }

View File

@ -187,11 +187,10 @@ pub fn produce_data_for_storage(
); );
} }
for (account_id, entry) in &user_data.default_user_private_accounts { for (_, entry) in &user_data.default_user_private_accounts {
for (identifier, account) in &entry.accounts { for (identifier, account) in &entry.accounts {
vec_for_storage.push( vec_for_storage.push(
InitialAccountData::Private(Box::new(PrivateAccountPrivateInitialData { InitialAccountData::Private(Box::new(PrivateAccountPrivateInitialData {
account_id: *account_id,
account: account.clone(), account: account.clone(),
key_chain: entry.key_chain.clone(), key_chain: entry.key_chain.clone(),
identifier: *identifier, identifier: *identifier,