@@ -41,7 +41,6 @@ use casper_types::{
4141 MessageLimits , Package , PackageHash , PackageStatus , Phase , ProtocolVersion , StorageCosts ,
4242 StoredValue , TransactionInvocationTarget , URef , WasmV2Config , U512 ,
4343} ;
44- use either:: Either ;
4544use install:: { InstallContractError , InstallContractRequest , InstallContractResult } ;
4645use parking_lot:: RwLock ;
4746use system:: { MintArgs , MintTransferArgs } ;
@@ -201,14 +200,13 @@ impl ExecutorV2 {
201200 ) ;
202201
203202 let protocol_version = ProtocolVersion :: V2_0_0 ;
204-
205203 let protocol_version_major = protocol_version. value ( ) . major ;
204+
206205 let next_version = smart_contract. next_entity_version_for ( protocol_version_major) ;
207- let entity_hash =
208- chain_utils:: compute_next_contract_hash_version ( smart_contract_addr, next_version) ;
206+
209207 let entity_version_key = smart_contract. insert_entity_version (
210208 protocol_version_major,
211- EntityAddr :: SmartContract ( entity_hash ) ,
209+ EntityAddr :: SmartContract ( smart_contract_addr ) ,
212210 ) ;
213211 debug_assert_eq ! ( entity_version_key. entity_version( ) , next_version) ;
214212
@@ -235,7 +233,8 @@ impl ExecutorV2 {
235233 ) ;
236234
237235 // 3. Store addressable entity
238- let addressable_entity_key = Key :: AddressableEntity ( EntityAddr :: SmartContract ( entity_hash) ) ;
236+ let addressable_entity_key =
237+ Key :: AddressableEntity ( EntityAddr :: SmartContract ( smart_contract_addr) ) ;
239238
240239 // TODO: abort(str) as an alternative to trap
241240 let main_purse: URef = match system:: mint_mint (
@@ -316,9 +315,9 @@ impl ExecutorV2 {
316315
317316 gas_usage
318317 }
319- Err ( error ) => {
320- error ! ( %error , "unable to execute constructor" ) ;
321- return Err ( InstallContractError :: Execute ( error ) ) ;
318+ Err ( execute_error ) => {
319+ error ! ( %execute_error , "unable to execute constructor" ) ;
320+ return Err ( InstallContractError :: Execute ( execute_error ) ) ;
322321 }
323322 }
324323 }
@@ -367,10 +366,10 @@ impl ExecutorV2 {
367366 // supported. let caller_entity_addr = EntityAddr::new_account(caller);
368367 let source_purse = get_purse_for_entity ( & mut tracking_copy, caller_key) ;
369368
370- let ( wasm_bytes, export_or_selector ) : ( _ , Either < & str , u32 > ) = match & execution_kind {
369+ let ( wasm_bytes, export_name ) = match & execution_kind {
371370 ExecutionKind :: SessionBytes ( wasm_bytes) => {
372371 // self.execute_wasm(tracking_copy, address, gas_limit, wasm_bytes, input)
373- ( wasm_bytes. clone ( ) , Either :: Left ( DEFAULT_WASM_ENTRY_POINT ) )
372+ ( wasm_bytes. clone ( ) , DEFAULT_WASM_ENTRY_POINT )
374373 }
375374 ExecutionKind :: Stored {
376375 address : smart_contract_addr,
@@ -383,19 +382,14 @@ impl ExecutorV2 {
383382 . read_first ( & [ & legacy_key, & smart_contract_key] )
384383 . expect ( "should read contract" ) ;
385384
386- // let entity_addr: EntityAddr;
387-
388- // Resolve indirection - get the latest version from the smart contract package
389- // versions. let old_contract = contract.clone();
390- // let latest_version_key;
391385 if let Some ( StoredValue :: SmartContract ( smart_contract_package) ) = & contract {
392386 let contract_hash = smart_contract_package
393387 . versions ( )
394388 . latest ( )
395389 . expect ( "should have last entry" ) ;
396390 let entity_addr = EntityAddr :: SmartContract ( contract_hash. value ( ) ) ;
397391 let latest_version_key = Key :: AddressableEntity ( entity_addr) ;
398- assert_ne ! ( & entity_addr. value( ) , smart_contract_addr) ;
392+ assert_eq ! ( & entity_addr. value( ) , smart_contract_addr) ;
399393 let new_contract = tracking_copy
400394 . read ( & latest_version_key)
401395 . expect ( "should read latest version" ) ;
@@ -491,7 +485,7 @@ impl ExecutorV2 {
491485 }
492486 }
493487
494- ( Bytes :: from ( wasm_bytes) , Either :: Left ( entry_point. as_str ( ) ) )
488+ ( Bytes :: from ( wasm_bytes) , entry_point. as_str ( ) )
495489 }
496490 Some ( StoredValue :: Contract ( _legacy_contract) ) => {
497491 let block_info = BlockInfo :: new (
@@ -522,7 +516,12 @@ impl ExecutorV2 {
522516 ) ;
523517 }
524518 None => {
525- panic ! ( "No code found in {smart_contract_key:?}" ) ;
519+ error ! (
520+ smart_contract_addr = base16:: encode_lower( & smart_contract_addr) ,
521+ ?execution_kind,
522+ "No contract code found" ,
523+ ) ;
524+ return Err ( ExecuteError :: CodeNotFound ( * smart_contract_addr) ) ;
526525 }
527526 }
528527 }
@@ -566,11 +565,7 @@ impl ExecutorV2 {
566565 let mut instance = vm. instantiate ( wasm_bytes, context, wasm_instance_config) ?;
567566
568567 self . push_execution_stack ( execution_kind. clone ( ) ) ;
569- let ( vm_result, gas_usage) = match export_or_selector {
570- Either :: Left ( export_name) => instance. call_export ( export_name) ,
571- Either :: Right ( _entry_point) => todo ! ( "Restore selectors" ) , /* instance.call_export(&
572- * entry_point), */
573- } ;
568+ let ( vm_result, gas_usage) = instance. call_export ( export_name) ;
574569
575570 let top_execution_kind = self
576571 . pop_execution_stack ( )
@@ -644,16 +639,23 @@ impl ExecutorV2 {
644639 messages : initial_tracking_copy. messages ( ) ,
645640 } )
646641 }
647- Err ( VMError :: Internal ( host_error) ) => {
648- error ! ( ?host_error, "host error" ) ;
649- Ok ( ExecuteResult {
650- host_error : Some ( CallError :: InternalHost ) ,
651- output : None ,
652- gas_usage,
653- effects : initial_tracking_copy. effects ( ) ,
654- cache : initial_tracking_copy. cache ( ) ,
655- messages : initial_tracking_copy. messages ( ) ,
656- } )
642+ Err ( VMError :: Execute ( execute_error) ) => {
643+ let effects = initial_tracking_copy. effects ( ) ;
644+ let cache = initial_tracking_copy. cache ( ) ;
645+ let messages = initial_tracking_copy. messages ( ) ;
646+ error ! (
647+ ?execute_error,
648+ ?gas_usage,
649+ ?effects,
650+ ?cache,
651+ ?messages,
652+ "host error"
653+ ) ;
654+ Err ( execute_error)
655+ }
656+ Err ( VMError :: Internal ( internal_error) ) => {
657+ error ! ( ?internal_error, "internal host error" ) ;
658+ Err ( ExecuteError :: InternalHost ( internal_error) )
657659 }
658660 }
659661 }
0 commit comments