// This file is part of Substrate.
// Copyright (C) Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
// This program 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.
// This program 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 this program. If not, see .
//! Implementation of the [`DevApiServer`] trait providing debug utilities for Substrate based
//! blockchains.
#[cfg(test)]
mod tests;
use jsonrpsee::core::RpcResult;
use sc_client_api::{BlockBackend, HeaderBackend};
use sc_rpc_api::{dev::error::Error, DenyUnsafe};
use sp_api::{ApiExt, Core, ProvideRuntimeApi};
use sp_core::Encode;
use sp_runtime::{
generic::DigestItem,
traits::{Block as BlockT, Header},
};
use std::{
marker::{PhantomData, Send, Sync},
sync::Arc,
};
pub use sc_rpc_api::dev::{BlockStats, DevApiServer};
type HasherOf = <::Header as Header>::Hashing;
/// The Dev API. All methods are unsafe.
pub struct Dev {
client: Arc,
deny_unsafe: DenyUnsafe,
_phantom: PhantomData,
}
impl Dev {
/// Create a new Dev API.
pub fn new(client: Arc, deny_unsafe: DenyUnsafe) -> Self {
Self { client, deny_unsafe, _phantom: PhantomData::default() }
}
}
impl DevApiServer for Dev
where
Block: BlockT + 'static,
Client: BlockBackend
+ HeaderBackend
+ ProvideRuntimeApi
+ Send
+ Sync
+ 'static,
Client::Api: Core,
{
fn block_stats(&self, hash: Block::Hash) -> RpcResult