Skip to content

Commit

Permalink
add sentioTracer, sentioPrestateTracer and debug_storageRange api
Browse files Browse the repository at this point in the history
  • Loading branch information
zfy0701 committed Mar 2, 2024
1 parent 4f1b313 commit 2a6abc0
Show file tree
Hide file tree
Showing 19 changed files with 2,332 additions and 4 deletions.
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions runtime/astar/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1413,6 +1413,18 @@ impl_runtime_apis! {
pallet_evm::AccountStorages::<Runtime>::get(address, H256::from_slice(&tmp[..]))
}

fn storage_range_at(address: H160, start_key: H256, limit: u64) -> (Vec<(H256, H256)>, Option<H256>) {
let iter = pallet_evm::AccountStorages::<Runtime>::iter_prefix_from(address, start_key.as_bytes().to_vec());
let mut res: Vec<(H256, H256)> = vec![];
for (key, value) in iter {
if res.len() == limit as usize {
return (res, Some(key));
}
res.push((key, value));
}
return (res, None);
}

fn call(
from: H160,
to: H160,
Expand Down
12 changes: 12 additions & 0 deletions runtime/local/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1451,6 +1451,18 @@ impl_runtime_apis! {
pallet_evm::AccountStorages::<Runtime>::get(address, H256::from_slice(&tmp[..]))
}

fn storage_range_at(address: H160, start_key: H256, limit: u64) -> (Vec<(H256, H256)>, Option<H256>) {
let iter = pallet_evm::AccountStorages::<Runtime>::iter_prefix_from(address, start_key.as_bytes().to_vec());
let mut res: Vec<(H256, H256)> = vec![];
for (key, value) in iter {
if res.len() == limit as usize {
return (res, Some(key));
}
res.push((key, value));
}
return (res, None);
}

fn call(
from: H160,
to: H160,
Expand Down
12 changes: 12 additions & 0 deletions runtime/shibuya/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1629,6 +1629,18 @@ impl_runtime_apis! {
pallet_evm::AccountStorages::<Runtime>::get(address, H256::from_slice(&tmp[..]))
}

fn storage_range_at(address: H160, start_key: H256, limit: u64) -> (Vec<(H256, H256)>, Option<H256>) {
let iter = pallet_evm::AccountStorages::<Runtime>::iter_prefix_from(address, start_key.as_bytes().to_vec());
let mut res: Vec<(H256, H256)> = vec![];
for (key, value) in iter {
if res.len() == limit as usize {
return (res, Some(key));
}
res.push((key, value));
}
return (res, None);
}

fn call(
from: H160,
to: H160,
Expand Down
12 changes: 12 additions & 0 deletions runtime/shiden/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1391,6 +1391,18 @@ impl_runtime_apis! {
pallet_evm::AccountStorages::<Runtime>::get(address, H256::from_slice(&tmp[..]))
}

fn storage_range_at(address: H160, start_key: H256, limit: u64) -> (Vec<(H256, H256)>, Option<H256>) {
let iter = pallet_evm::AccountStorages::<Runtime>::iter_prefix_from(address, start_key.as_bytes().to_vec());
let mut res: Vec<(H256, H256)> = vec![];
for (key, value) in iter {
if res.len() == limit as usize {
return (res, Some(key));
}
res.push((key, value));
}
return (res, None);
}

fn call(
from: H160,
to: H160,
Expand Down
9 changes: 9 additions & 0 deletions vendor/evm-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@ version = "0.1.0"

[dependencies]
ethereum-types = { workspace = true, features = ["std"] }
log = { workspace = true }
hex = { workspace = true, features = ["serde"] }
serde = { workspace = true }
serde_json = { workspace = true }
sha3 = { workspace = true }
rlp = { workspace = true }

# Moonbeam
evm-tracing-events = { workspace = true, features = ["std"] }
Expand All @@ -20,3 +23,9 @@ moonbeam-rpc-primitives-debug = { workspace = true }
# Substrate
parity-scale-codec = { workspace = true }
sp-std = { workspace = true, features = ["std"] }
sp-api = { workspace = true, features = [ "std" ] }
sp-runtime = { workspace = true, features = [ "std" ] }
sp-block-builder = { workspace = true, features = [ "std" ] }

# Frontier
fp-rpc = { workspace = true, features = [ "std" ] }
5 changes: 5 additions & 0 deletions vendor/evm-tracing/src/formatters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,15 @@ pub mod call_tracer;
pub mod raw;
pub mod trace_filter;

pub mod sentio_call_tracer;
pub mod sentio_prestate_tracer;

pub use blockscout::Formatter as Blockscout;
pub use call_tracer::Formatter as CallTracer;
pub use raw::Formatter as Raw;
pub use trace_filter::Formatter as TraceFilter;
pub use sentio_call_tracer::Formatter as SentioTracer;
pub use sentio_prestate_tracer::Formatter as SentioPrestateTracer;

use evm_tracing_events::Listener;
use serde::Serialize;
Expand Down
34 changes: 34 additions & 0 deletions vendor/evm-tracing/src/formatters/sentio_call_tracer.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2019-2022 PureStake Inc.
// This file is part of Moonbeam.

// Moonbeam is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Moonbeam is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Moonbeam. If not, see <http://www.gnu.org/licenses/>.

use crate::types::single::TransactionTrace;

use crate::listeners::sentio_call_list::Listener;

pub struct Formatter;

impl super::ResponseFormatter for Formatter {
type Listener = Listener;
type Response = Vec<TransactionTrace>;

fn format(listener: Listener) -> Option<Vec<TransactionTrace>> {
if listener.results.is_empty() {
None
} else {
Some(listener.results.into_iter().map(|call| TransactionTrace::SentioCallTrace(call)).collect())
}
}
}
52 changes: 52 additions & 0 deletions vendor/evm-tracing/src/formatters/sentio_prestate_tracer.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright 2019-2022 PureStake Inc.
// This file is part of Moonbeam.

// Moonbeam is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Moonbeam is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Moonbeam. If not, see <http://www.gnu.org/licenses/>.

use std::marker::PhantomData;
use fp_rpc::EthereumRuntimeRPCApi;
use sp_api::{BlockT, ProvideRuntimeApi};
use sp_block_builder::BlockBuilder;
use crate::types::single::TransactionTrace;

use crate::listeners::sentio_prestate::Listener;

pub struct Formatter<B, C>
where
B: BlockT,
C:ProvideRuntimeApi<B>,
C::Api: EthereumRuntimeRPCApi<B>,
C::Api: BlockBuilder<B> {
_b: PhantomData<B>,
_c: PhantomData<C>
}

impl<B, C> super::ResponseFormatter for Formatter<B, C>
where
B: BlockT,
C:ProvideRuntimeApi<B> + 'static,
C::Api: EthereumRuntimeRPCApi<B>,
C::Api: BlockBuilder<B>
{
type Listener = Listener<B, C>;
type Response = Vec<TransactionTrace>;

fn format(listener: Listener<B, C>) -> Option<Vec<TransactionTrace>> {
if listener.results.is_empty() {
None
} else {
Some(listener.results.into_iter().map(|trace| TransactionTrace::SentioPrestateTrace(trace)).collect())
}
}
}
6 changes: 6 additions & 0 deletions vendor/evm-tracing/src/listeners/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,11 @@
pub mod call_list;
pub mod raw;

pub mod sentio_call_list;
pub mod sentio_prestate;
mod sentio_util;

pub use call_list::Listener as CallList;
pub use raw::Listener as Raw;
pub use sentio_call_list::Listener as SentioCallList;
pub use sentio_prestate::Listener as SentioPrestate;
Loading

0 comments on commit 2a6abc0

Please sign in to comment.