@@ -60,6 +60,7 @@ use ink_primitives::{
6060 DepositLimit ,
6161 H160 ,
6262 abi:: AbiEncodeWith ,
63+ U256
6364} ;
6465use ink_sandbox:: {
6566 AccountIdFor ,
@@ -73,19 +74,24 @@ use ink_sandbox::{
7374 pallet_revive,
7475} ;
7576use jsonrpsee:: core:: async_trait;
76- use pallet_revive :: {
77- AddressMapper ,
77+ use ink_revive :: {
78+ ExecReturnValue ,
7879 CodeUploadReturnValue ,
7980 InstantiateReturnValue ,
80- MomentOf ,
8181 evm:: {
8282 CallTrace ,
83- CallTracerConfig ,
84- Trace ,
85- TracerType ,
86- U256 ,
83+ CallLog
8784 } ,
8885} ;
86+ use pallet_revive:: {
87+ AddressMapper ,
88+ MomentOf ,
89+ evm:: {
90+ TracerType ,
91+ Trace ,
92+ CallTracerConfig ,
93+ }
94+ } ;
8995use scale:: Decode ;
9096use sp_core:: {
9197 Pair as _,
@@ -360,7 +366,7 @@ where
360366 } ;
361367
362368 let trace = match tracer. collect_trace ( ) {
363- Some ( Trace :: Call ( call_trace) ) => Some ( call_trace) ,
369+ Some ( Trace :: Call ( call_trace) ) => Some ( to_revive_trace ( call_trace) ) ,
364370 _ => None ,
365371 } ;
366372
@@ -444,10 +450,13 @@ where
444450 let result = ContractResult :: < InstantiateReturnValue , E :: Balance > {
445451 gas_consumed : dry_run_result. gas_consumed ,
446452 gas_required : dry_run_result. gas_required ,
447- storage_deposit : dry_run_result. storage_deposit ,
453+ storage_deposit : to_revive_storage_deposit ( dry_run_result. storage_deposit ) ,
448454 result : dry_run_result. result . map ( |res| {
449455 InstantiateReturnValue {
450- result : res. result ,
456+ result : ExecReturnValue {
457+ flags : res. result . flags ,
458+ data : res. result . data ,
459+ } ,
451460 addr : res. addr ,
452461 }
453462 } ) ,
@@ -556,7 +565,7 @@ where
556565 . map_err ( |err| SandboxErr :: new ( format ! ( "bare_call: {err:?}" ) ) )
557566 } ) ?;
558567 let trace = match tracer. collect_trace ( ) {
559- Some ( Trace :: Call ( call_trace) ) => Some ( call_trace) ,
568+ Some ( Trace :: Call ( call_trace) ) => Some ( to_revive_trace ( call_trace) ) ,
560569 _ => None ,
561570 } ;
562571
@@ -630,8 +639,13 @@ where
630639 exec_result : ContractExecResultFor :: < E > {
631640 gas_consumed : result. gas_consumed ,
632641 gas_required : result. gas_required ,
633- storage_deposit : result. storage_deposit ,
634- result : result. result ,
642+ storage_deposit : to_revive_storage_deposit ( result. storage_deposit ) ,
643+ result : result. result . map ( |res| {
644+ ExecReturnValue {
645+ flags : res. flags ,
646+ data : res. data ,
647+ }
648+ } ) ,
635649 } ,
636650 trace : None , // todo
637651 _marker : Default :: default ( ) ,
@@ -829,3 +843,48 @@ where
829843 let origin = RawOrigin :: Signed ( caller) ;
830844 OriginFor :: < S :: Runtime > :: from ( origin)
831845}
846+
847+
848+ /// Convert a `pallet_revive::CallTrace` (sandbox) into an `ink_revive::CallTrace` (API).
849+ fn to_revive_trace ( t : pallet_revive:: evm:: CallTrace ) -> CallTrace {
850+ CallTrace {
851+ from : t. from ,
852+ gas : t. gas ,
853+ gas_used : t. gas_used ,
854+ to : t. to ,
855+ input : t. input . 0 ,
856+ output : t. output . 0 ,
857+ error : t. error ,
858+ revert_reason : t. revert_reason ,
859+ calls : t. calls . into_iter ( ) . map ( to_revive_trace) . collect ( ) ,
860+ logs : t. logs . into_iter ( ) . map ( |log| CallLog {
861+ address : log. address ,
862+ topics : log. topics ,
863+ data : log. data . 0 ,
864+ ..Default :: default ( )
865+ } ) . collect ( ) ,
866+ value : t. value ,
867+ call_type : to_revive_call_type ( t. call_type ) ,
868+ }
869+ }
870+
871+ /// Convert a `pallet_revive::CallType` into an `ink_revive::evm::CallType`.
872+ fn to_revive_call_type ( ct : pallet_revive:: evm:: CallType ) -> ink_revive:: evm:: CallType {
873+ match ct {
874+ pallet_revive:: evm:: CallType :: Call => ink_revive:: evm:: CallType :: Call ,
875+ pallet_revive:: evm:: CallType :: StaticCall => ink_revive:: evm:: CallType :: StaticCall ,
876+ pallet_revive:: evm:: CallType :: DelegateCall => ink_revive:: evm:: CallType :: DelegateCall ,
877+ pallet_revive:: evm:: CallType :: Create => ink_revive:: evm:: CallType :: Create ,
878+ pallet_revive:: evm:: CallType :: Create2 => ink_revive:: evm:: CallType :: Create2 ,
879+ }
880+ }
881+
882+ /// Convert a `ink_revive::StorageDeposit` into an `ink_revive::StorageDeposit`.
883+ fn to_revive_storage_deposit < B > (
884+ sd : pallet_revive:: StorageDeposit < B > ,
885+ ) -> ink_revive:: StorageDeposit < B > {
886+ match sd {
887+ pallet_revive:: StorageDeposit :: Charge ( b) => ink_revive:: StorageDeposit :: Charge ( b) ,
888+ pallet_revive:: StorageDeposit :: Refund ( b) => ink_revive:: StorageDeposit :: Refund ( b) ,
889+ }
890+ }
0 commit comments