@@ -17,6 +17,10 @@ use frame_system::{
1717 } ,
1818} ;
1919use ink_primitives:: U256 ;
20+ use ink_revive_types:: evm:: {
21+ CallLog ,
22+ CallTrace ,
23+ } ;
2024pub use macros:: {
2125 BlockBuilder ,
2226 DefaultSandbox ,
@@ -170,3 +174,64 @@ where
170174 let evm_value: U256 = value. into ( ) ;
171175 native_to_eth_ratio. saturating_mul ( evm_value)
172176}
177+
178+ /// Convert a `pallet_revive::CallTrace` (sandbox) into an `ink_revive_types::CallTrace`
179+ /// (API).
180+ pub fn to_revive_trace ( t : pallet_revive:: evm:: CallTrace ) -> CallTrace {
181+ CallTrace {
182+ from : t. from ,
183+ gas : t. gas ,
184+ gas_used : t. gas_used ,
185+ to : t. to ,
186+ input : t. input . 0 ,
187+ output : t. output . 0 ,
188+ error : t. error ,
189+ revert_reason : t. revert_reason ,
190+ calls : t. calls . into_iter ( ) . map ( to_revive_trace) . collect ( ) ,
191+ logs : t
192+ . logs
193+ . into_iter ( )
194+ . map ( |log| {
195+ CallLog {
196+ address : log. address ,
197+ topics : log. topics ,
198+ data : log. data . 0 ,
199+ ..Default :: default ( )
200+ }
201+ } )
202+ . collect ( ) ,
203+ value : t. value ,
204+ call_type : to_revive_call_type ( t. call_type ) ,
205+ }
206+ }
207+
208+ /// Convert a `pallet_revive::CallType` into an `ink_revive_types::evm::CallType`.
209+ fn to_revive_call_type (
210+ ct : pallet_revive:: evm:: CallType ,
211+ ) -> ink_revive_types:: evm:: CallType {
212+ match ct {
213+ pallet_revive:: evm:: CallType :: Call => ink_revive_types:: evm:: CallType :: Call ,
214+ pallet_revive:: evm:: CallType :: StaticCall => {
215+ ink_revive_types:: evm:: CallType :: StaticCall
216+ }
217+ pallet_revive:: evm:: CallType :: DelegateCall => {
218+ ink_revive_types:: evm:: CallType :: DelegateCall
219+ }
220+ pallet_revive:: evm:: CallType :: Create => ink_revive_types:: evm:: CallType :: Create ,
221+ pallet_revive:: evm:: CallType :: Create2 => ink_revive_types:: evm:: CallType :: Create2 ,
222+ }
223+ }
224+
225+ /// Convert a `pallet_revive::StorageDeposit` into an `ink_revive_types::StorageDeposit`.
226+ pub fn to_revive_storage_deposit < B > (
227+ sd : pallet_revive:: StorageDeposit < B > ,
228+ ) -> ink_revive_types:: StorageDeposit < B > {
229+ match sd {
230+ pallet_revive:: StorageDeposit :: Charge ( b) => {
231+ ink_revive_types:: StorageDeposit :: Charge ( b)
232+ }
233+ pallet_revive:: StorageDeposit :: Refund ( b) => {
234+ ink_revive_types:: StorageDeposit :: Refund ( b)
235+ }
236+ }
237+ }
0 commit comments