perf(trie): use mem::take instead of clone for account RLP buffer

Replace self.account_rlp_buf.clone() with core::mem::take() to avoid
allocation and copy when updating account leaves. The buffer is
re-used on the next encode operation.
This commit is contained in:
yongkangc
2026-01-05 04:13:08 +00:00
parent 3d4efdb271
commit e75dc67dc1

View File

@@ -728,7 +728,8 @@ where
let nibbles = Nibbles::unpack(address);
self.account_rlp_buf.clear();
account.into_trie_account(storage_root).encode(&mut self.account_rlp_buf);
self.update_account_leaf(nibbles, self.account_rlp_buf.clone(), provider_factory)?;
let rlp_encoded_account = core::mem::take(&mut self.account_rlp_buf);
self.update_account_leaf(nibbles, rlp_encoded_account, provider_factory)?;
Ok(true)
}
@@ -781,7 +782,8 @@ where
let nibbles = Nibbles::unpack(address);
self.account_rlp_buf.clear();
trie_account.encode(&mut self.account_rlp_buf);
self.update_account_leaf(nibbles, self.account_rlp_buf.clone(), provider_factory)?;
let rlp_encoded_account = core::mem::take(&mut self.account_rlp_buf);
self.update_account_leaf(nibbles, rlp_encoded_account, provider_factory)?;
Ok(true)
}