Store FeeCalculator with blockhash in nonce accounts (#8650)
* Copy current state version to v0 * Add `FeeCalculator` to nonce state * fixup compile * Dump v0 handling... Since we new account data is all zeros, new `Current` versioned accounts look like v0. We could hack around this with some data size checks, but the `account_utils::*State` traits are applied to `Account`, not the state data, so we're kind SOL... * Create more representative test `RecentBlockhashes` * Improve CLI nonce account display Co-Authored-By: Michael Vines <mvines@gmail.com> * Fix that last bank test... * clippy/fmt Co-authored-by: Michael Vines <mvines@gmail.com>
This commit is contained in:
@ -306,8 +306,13 @@ pub fn get_system_account_kind(account: &Account) -> Option<SystemAccountKind> {
|
||||
if system_program::check_id(&account.owner) {
|
||||
if account.data.is_empty() {
|
||||
Some(SystemAccountKind::System)
|
||||
} else if let Ok(nonce::State::Initialized(_)) = account.state() {
|
||||
Some(SystemAccountKind::Nonce)
|
||||
} else if account.data.len() == nonce::State::size() {
|
||||
match account.state().ok()? {
|
||||
nonce::state::Versions::Current(state) => match *state {
|
||||
nonce::State::Initialized(_) => Some(SystemAccountKind::Nonce),
|
||||
_ => None,
|
||||
},
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
@ -735,10 +740,9 @@ mod tests {
|
||||
let nonce = Pubkey::new_rand();
|
||||
let nonce_account = Account::new_ref_data(
|
||||
42,
|
||||
&nonce::State::Initialized(nonce::state::Data {
|
||||
authority: Pubkey::default(),
|
||||
blockhash: Hash::default(),
|
||||
}),
|
||||
&nonce::state::Versions::new_current(nonce::State::Initialized(
|
||||
nonce::state::Data::default(),
|
||||
)),
|
||||
&system_program::id(),
|
||||
)
|
||||
.unwrap();
|
||||
@ -877,10 +881,10 @@ mod tests {
|
||||
let from = Pubkey::new_rand();
|
||||
let from_account = Account::new_ref_data(
|
||||
100,
|
||||
&nonce::State::Initialized(nonce::state::Data {
|
||||
&nonce::state::Versions::new_current(nonce::State::Initialized(nonce::state::Data {
|
||||
authority: from,
|
||||
blockhash: Hash::default(),
|
||||
}),
|
||||
..nonce::state::Data::default()
|
||||
})),
|
||||
&system_program::id(),
|
||||
)
|
||||
.unwrap();
|
||||
@ -1382,10 +1386,9 @@ mod tests {
|
||||
fn test_get_system_account_kind_nonce_ok() {
|
||||
let nonce_account = Account::new_data(
|
||||
42,
|
||||
&nonce::State::Initialized(nonce::state::Data {
|
||||
authority: Pubkey::default(),
|
||||
blockhash: Hash::default(),
|
||||
}),
|
||||
&nonce::state::Versions::new_current(nonce::State::Initialized(
|
||||
nonce::state::Data::default(),
|
||||
)),
|
||||
&system_program::id(),
|
||||
)
|
||||
.unwrap();
|
||||
@ -1413,10 +1416,9 @@ mod tests {
|
||||
fn test_get_system_account_kind_nonsystem_owner_with_nonce_data_fail() {
|
||||
let nonce_account = Account::new_data(
|
||||
42,
|
||||
&nonce::State::Initialized(nonce::state::Data {
|
||||
authority: Pubkey::default(),
|
||||
blockhash: Hash::default(),
|
||||
}),
|
||||
&nonce::state::Versions::new_current(nonce::State::Initialized(
|
||||
nonce::state::Data::default(),
|
||||
)),
|
||||
&Pubkey::new_rand(),
|
||||
)
|
||||
.unwrap();
|
||||
|
Reference in New Issue
Block a user