Increases account hash's stack buffer to hold 200 bytes of data (#56)

This commit is contained in:
Brooks 2024-03-05 12:02:47 -05:00 committed by GitHub
parent b78c0703ff
commit 1e133bc067
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 6 deletions

View File

@ -42,7 +42,7 @@ regex = { workspace = true }
seqlock = { workspace = true }
serde = { workspace = true, features = ["rc"] }
serde_derive = { workspace = true }
smallvec = { workspace = true }
smallvec = { workspace = true, features = ["const_generics"] }
solana-bucket-map = { workspace = true }
solana-config-program = { workspace = true }
solana-frozen-abi = { workspace = true }

View File

@ -6119,17 +6119,18 @@ impl AccountsDb {
}
let mut hasher = blake3::Hasher::new();
// allocate 128 bytes buffer on the stack
const BUFFER_SIZE: usize = 128;
const METADATA_SIZE: usize = 8 /* lamports */ + 8 /* rent_epoch */ + 1 /* executable */ + 32 /* owner */ + 32 /* pubkey */;
const REMAINING_SIZE: usize = BUFFER_SIZE - METADATA_SIZE;
// allocate a buffer on the stack that's big enough
// to hold a token account or a stake account
const META_SIZE: usize = 8 /* lamports */ + 8 /* rent_epoch */ + 1 /* executable */ + 32 /* owner */ + 32 /* pubkey */;
const DATA_SIZE: usize = 200; // stake acounts are 200 B and token accounts are 165-182ish B
const BUFFER_SIZE: usize = META_SIZE + DATA_SIZE;
let mut buffer = SmallVec::<[u8; BUFFER_SIZE]>::new();
// collect lamports, rent_epoch into buffer to hash
buffer.extend_from_slice(&lamports.to_le_bytes());
buffer.extend_from_slice(&rent_epoch.to_le_bytes());
if data.len() > REMAINING_SIZE {
if data.len() > DATA_SIZE {
// For larger accounts whose data can't fit into the buffer, update the hash now.
hasher.update(&buffer);
buffer.clear();