@@ -21,7 +21,8 @@ use revm::{
2121use serde:: { Deserialize , Serialize } ;
2222
2323use crate :: {
24- account:: AccountInfoExtended ,
24+ account:: { AccountInfoExtended , StoredAccountInfo } ,
25+ bytecode:: StoredBytecode ,
2526 compression:: CompressedBincode ,
2627 historical:: { AccountHistory , HistoricalAccountData } ,
2728 legacy:: { LegacyAccountAttributes , LegacyAddress , LegacyColdWallet } ,
@@ -155,15 +156,15 @@ pub(crate) struct CommitReceipts {
155156}
156157
157158pub ( crate ) struct InnerStorage {
158- pub accounts : heed:: Database < AddressWrapper , CompressedBincode < AccountInfo > > ,
159+ pub accounts : heed:: Database < AddressWrapper , CompressedBincode < StoredAccountInfo > > ,
159160 pub accounts_history : Option <
160161 heed:: Database <
161162 HeedBlockNumber ,
162163 CompressedBincode < BTreeMap < Address , HistoricalAccountData > > ,
163164 > ,
164165 > ,
165166 pub commits : heed:: Database < HeedBlockNumber , CompressedBincode < CommitReceipts > > ,
166- pub contracts : heed:: Database < HashWrapper , CompressedBincode < Bytecode > > ,
167+ pub contracts : heed:: Database < HashWrapper , CompressedBincode < StoredBytecode > > ,
167168 pub legacy_attributes :
168169 heed:: Database < AddressWrapper , CompressedBincode < LegacyAccountAttributes > > ,
169170 pub legacy_cold_wallets :
@@ -316,6 +317,8 @@ impl PersistentDBOptions {
316317pub enum Error {
317318 #[ error( "IO error: {0}" ) ]
318319 IO ( #[ from] std:: io:: Error ) ,
320+ #[ error( "BytecodeDecode error: {0}" ) ]
321+ BytecodeDecode ( #[ from] revm:: bytecode:: BytecodeDecodeError ) ,
319322 #[ error( "heed error: {0}" ) ]
320323 Heed ( #[ from] heed:: Error ) ,
321324 #[ error( "state error: {0}" ) ]
@@ -376,10 +379,11 @@ impl PersistentDB {
376379 let tx_env = env. clone ( ) ;
377380 let mut wtxn = tx_env. write_txn ( ) ?;
378381
379- let accounts = env. create_database :: < AddressWrapper , CompressedBincode < AccountInfo > > (
380- & mut wtxn,
381- Some ( "accounts" ) ,
382- ) ?;
382+ let accounts = env
383+ . create_database :: < AddressWrapper , CompressedBincode < StoredAccountInfo > > (
384+ & mut wtxn,
385+ Some ( "accounts" ) ,
386+ ) ?;
383387
384388 let ( accounts_history_db, accounts_history) = match opts. history_size {
385389 Some ( history_size) if history_size > 0 => {
@@ -394,7 +398,7 @@ impl PersistentDB {
394398 & mut wtxn,
395399 Some ( "commits" ) ,
396400 ) ?;
397- let contracts = env. create_database :: < HashWrapper , CompressedBincode < Bytecode > > (
401+ let contracts = env. create_database :: < HashWrapper , CompressedBincode < StoredBytecode > > (
398402 & mut wtxn,
399403 Some ( "contracts" ) ,
400404 ) ?;
@@ -757,7 +761,7 @@ impl DatabaseRef for PersistentDB {
757761 let inner = self . inner . borrow ( ) ;
758762
759763 let basic = match inner. accounts . get ( & txn, & AddressWrapper ( address) ) ? {
760- Some ( account) => account. 0 ,
764+ Some ( account) => account. 0 . into ( ) ,
761765 None => match & self . genesis_info {
762766 Some ( genesis) if genesis. account == address => revm:: state:: AccountInfo {
763767 balance : genesis. initial_supply ,
@@ -779,7 +783,7 @@ impl DatabaseRef for PersistentDB {
779783 None => Default :: default ( ) ,
780784 } ;
781785
782- Ok ( contract)
786+ Ok ( contract. try_into ( ) ? )
783787 }
784788
785789 fn storage_ref ( & self , address : Address , index : U256 ) -> Result < U256 , Self :: Error > {
@@ -858,9 +862,15 @@ impl PersistentDB {
858862 let address = AddressWrapper ( * address) ;
859863
860864 if let Some ( account) = account {
861- inner
862- . accounts
863- . put ( rwtxn, & address, & CompressedBincode ( account) ) ?;
865+ inner. accounts . put (
866+ rwtxn,
867+ & address,
868+ & CompressedBincode ( & StoredAccountInfo :: new (
869+ account. balance ,
870+ account. nonce ,
871+ account. code_hash ,
872+ ) ) ,
873+ ) ?;
864874 } else {
865875 inner. accounts . delete ( rwtxn, & address) ?;
866876 }
@@ -904,9 +914,11 @@ impl PersistentDB {
904914
905915 // Update contracts
906916 for ( hash, bytecode) in contracts. into_iter ( ) {
907- inner
908- . contracts
909- . put ( rwtxn, & HashWrapper ( * hash) , & CompressedBincode ( & bytecode) ) ?;
917+ inner. contracts . put (
918+ rwtxn,
919+ & HashWrapper ( * hash) ,
920+ & CompressedBincode ( & bytecode. clone ( ) . into ( ) ) ,
921+ ) ?;
910922 }
911923
912924 // Update storage
@@ -1656,7 +1668,7 @@ fn test_read_accounts() {
16561668 . put (
16571669 & mut wtxn,
16581670 & AddressWrapper ( * address) ,
1659- & CompressedBincode ( & AccountInfo {
1671+ & CompressedBincode ( & StoredAccountInfo {
16601672 balance : U256 :: from ( index) ,
16611673 nonce : index as u64 ,
16621674 ..Default :: default ( )
0 commit comments