Skip to content

Commit 7c9fc40

Browse files
committed
chore: sdk-7167
1 parent a5479ce commit 7c9fc40

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

runtime/mainnet/src/apis.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,67 @@ impl_runtime_apis! {
499499
key
500500
)
501501
}
502+
503+
fn trace_block(
504+
block: Block,
505+
config: pallet_revive::evm::TracerConfig
506+
) -> Vec<(u32, pallet_revive::evm::CallTrace)> {
507+
use pallet_revive::tracing::trace;
508+
let mut tracer = config.build(Revive::evm_gas_from_weight);
509+
let mut traces = vec![];
510+
let (header, extrinsics) = block.deconstruct();
511+
512+
Executive::initialize_block(&header);
513+
for (index, ext) in extrinsics.into_iter().enumerate() {
514+
trace(&mut tracer, || {
515+
let _ = Executive::apply_extrinsic(ext);
516+
});
517+
518+
if let Some(tx_trace) = tracer.collect_traces().pop() {
519+
traces.push((index as u32, tx_trace));
520+
}
521+
}
522+
523+
traces
524+
}
525+
526+
fn trace_tx(
527+
block: Block,
528+
tx_index: u32,
529+
config: pallet_revive::evm::TracerConfig
530+
) -> Option<pallet_revive::evm::CallTrace> {
531+
use pallet_revive::tracing::trace;
532+
let mut tracer = config.build(Revive::evm_gas_from_weight);
533+
let (header, extrinsics) = block.deconstruct();
534+
535+
Executive::initialize_block(&header);
536+
for (index, ext) in extrinsics.into_iter().enumerate() {
537+
if index as u32 == tx_index {
538+
trace(&mut tracer, || {
539+
let _ = Executive::apply_extrinsic(ext);
540+
});
541+
break;
542+
} else {
543+
let _ = Executive::apply_extrinsic(ext);
544+
}
545+
}
546+
547+
tracer.collect_traces().pop()
548+
}
549+
550+
fn trace_call(
551+
tx: pallet_revive::evm::GenericTransaction,
552+
config: pallet_revive::evm::TracerConfig)
553+
-> Result<pallet_revive::evm::CallTrace, pallet_revive::EthTransactError>
554+
{
555+
use pallet_revive::tracing::trace;
556+
let mut tracer = config.build(Revive::evm_gas_from_weight);
557+
trace(&mut tracer, || {
558+
Self::eth_transact(tx)
559+
})?;
560+
561+
Ok(tracer.collect_traces().pop().expect("eth_transact succeeded, trace must exist, qed"))
562+
}
502563
}
503564
}
504565

runtime/testnet/src/lib.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,67 @@ impl_runtime_apis! {
786786
key
787787
)
788788
}
789+
790+
fn trace_block(
791+
block: Block,
792+
config: pallet_revive::evm::TracerConfig
793+
) -> Vec<(u32, pallet_revive::evm::CallTrace)> {
794+
use pallet_revive::tracing::trace;
795+
let mut tracer = config.build(Revive::evm_gas_from_weight);
796+
let mut traces = vec![];
797+
let (header, extrinsics) = block.deconstruct();
798+
799+
Executive::initialize_block(&header);
800+
for (index, ext) in extrinsics.into_iter().enumerate() {
801+
trace(&mut tracer, || {
802+
let _ = Executive::apply_extrinsic(ext);
803+
});
804+
805+
if let Some(tx_trace) = tracer.collect_traces().pop() {
806+
traces.push((index as u32, tx_trace));
807+
}
808+
}
809+
810+
traces
811+
}
812+
813+
fn trace_tx(
814+
block: Block,
815+
tx_index: u32,
816+
config: pallet_revive::evm::TracerConfig
817+
) -> Option<pallet_revive::evm::CallTrace> {
818+
use pallet_revive::tracing::trace;
819+
let mut tracer = config.build(Revive::evm_gas_from_weight);
820+
let (header, extrinsics) = block.deconstruct();
821+
822+
Executive::initialize_block(&header);
823+
for (index, ext) in extrinsics.into_iter().enumerate() {
824+
if index as u32 == tx_index {
825+
trace(&mut tracer, || {
826+
let _ = Executive::apply_extrinsic(ext);
827+
});
828+
break;
829+
} else {
830+
let _ = Executive::apply_extrinsic(ext);
831+
}
832+
}
833+
834+
tracer.collect_traces().pop()
835+
}
836+
837+
fn trace_call(
838+
tx: pallet_revive::evm::GenericTransaction,
839+
config: pallet_revive::evm::TracerConfig)
840+
-> Result<pallet_revive::evm::CallTrace, pallet_revive::EthTransactError>
841+
{
842+
use pallet_revive::tracing::trace;
843+
let mut tracer = config.build(Revive::evm_gas_from_weight);
844+
trace(&mut tracer, || {
845+
Self::eth_transact(tx)
846+
})?;
847+
848+
Ok(tracer.collect_traces().pop().expect("eth_transact succeeded, trace must exist, qed"))
849+
}
789850
}
790851

791852
impl pallet_ismp_runtime_api::IsmpRuntimeApi<Block, <Block as BlockT>::Hash> for Runtime {

0 commit comments

Comments
 (0)