-
* allow clippy needless_pass_by_ref_mut * fix clippy °_° * fix provider behavior * fix build errors * change behavior of going below ED * fix provider initialization * add mock epoch change * add session number test * add session number test * WIP fix tests * fix time-based ud test * update metadata * FIX apply all fix from flash branch * partial fix clippy other suggestions are not legit * fix metadata and end2end test * fix build tests * fix build and clippy * remove benchmark of upgrade_accounts this happens in substrate dependency I also updated other packages because why not :D and I removed a useless implementation in mock but the test do not compile with feature runtime benchmarks anyway * test_total_issuance_vs_monetary_mass * proofreading comment * fix total issuance differently this actually fixes total issuance at genesis instead of creating duplicate account data * fix test scenario the thing tested here was not the ability to call the function, but the impossibility of deleting the account * add comment to explain test * fix providers and sufficients counts * fix initial balance * fix initial TotalIssuance * fix clippy warnings and optimization * fix xtask * update docs * add DustHandle * fix pallets config * fix tests * fix pallet_balance genesis config * wip: fix end2end-test * fix manual and instant sealing * fix live-tests * fix offences after rebase * generate all weights * add rust toolchain file * fix benchmarks Pallet balances benchmarks need https://github.com/duniter/substrate/commit/c36ab4f32454318a47777b24b6533c44121fc10b because pallet duniter-account add another provider. * fix babe-worker * fix subxt dependency * fix ImplicitCallIndex and Weight::from_ref_time deprecation * fix consensus_babe dependency * regenerate weights Regenerate all weights except for pallet-balance failing on one extrinsic * workaround pallet_duniter_account Workaround to be able to pass https://github.com/paritytech/substrate/blob/6ef184e33f6ce0f56999ae84b212ea6148c0624d/frame/balances/src/benchmarking.rs#L271 in the benchmark. ExtraFlags is private and Default is always new_logic not suitable for the benchmark. * wip fix node errors * wip fix runtime errors * fix pallet-duniter-account errors * fix pallet-balance errors * fix pallet-identity errors * fix pallet-duniter-account errors * upgrade Cargo files * update docs
* allow clippy needless_pass_by_ref_mut * fix clippy °_° * fix provider behavior * fix build errors * change behavior of going below ED * fix provider initialization * add mock epoch change * add session number test * add session number test * WIP fix tests * fix time-based ud test * update metadata * FIX apply all fix from flash branch * partial fix clippy other suggestions are not legit * fix metadata and end2end test * fix build tests * fix build and clippy * remove benchmark of upgrade_accounts this happens in substrate dependency I also updated other packages because why not :D and I removed a useless implementation in mock but the test do not compile with feature runtime benchmarks anyway * test_total_issuance_vs_monetary_mass * proofreading comment * fix total issuance differently this actually fixes total issuance at genesis instead of creating duplicate account data * fix test scenario the thing tested here was not the ability to call the function, but the impossibility of deleting the account * add comment to explain test * fix providers and sufficients counts * fix initial balance * fix initial TotalIssuance * fix clippy warnings and optimization * fix xtask * update docs * add DustHandle * fix pallets config * fix tests * fix pallet_balance genesis config * wip: fix end2end-test * fix manual and instant sealing * fix live-tests * fix offences after rebase * generate all weights * add rust toolchain file * fix benchmarks Pallet balances benchmarks need https://github.com/duniter/substrate/commit/c36ab4f32454318a47777b24b6533c44121fc10b because pallet duniter-account add another provider. * fix babe-worker * fix subxt dependency * fix ImplicitCallIndex and Weight::from_ref_time deprecation * fix consensus_babe dependency * regenerate weights Regenerate all weights except for pallet-balance failing on one extrinsic * workaround pallet_duniter_account Workaround to be able to pass https://github.com/paritytech/substrate/blob/6ef184e33f6ce0f56999ae84b212ea6148c0624d/frame/balances/src/benchmarking.rs#L271 in the benchmark. ExtraFlags is private and Default is always new_logic not suitable for the benchmark. * wip fix node errors * wip fix runtime errors * fix pallet-duniter-account errors * fix pallet-balance errors * fix pallet-identity errors * fix pallet-duniter-account errors * upgrade Cargo files * update docs
rpc.rs 4.50 KiB
// Copyright 2021 Axiom-Team
//
// This file is part of Duniter-v2S.
//
// Duniter-v2S is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// Duniter-v2S 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
//! A collection of node-specific RPC methods.
//! Substrate provides the `sc-rpc` crate, which defines the core RPC layer
//! used by Substrate nodes. This file extends those RPC definitions with
//! capabilities that are specific to this project's runtime configuration.
#![warn(missing_docs)]
pub use sc_rpc_api::DenyUnsafe;
use common_runtime::Block;
use common_runtime::{AccountId, Balance, Index};
use jsonrpsee::RpcModule;
use sc_consensus_babe::BabeApi;
use sc_consensus_babe::BabeWorkerHandle;
use sc_transaction_pool_api::TransactionPool;
use sp_api::ProvideRuntimeApi;
use sp_block_builder::BlockBuilder;
use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
use sp_consensus::SelectChain;
use sp_keystore::KeystorePtr;
use std::sync::Arc;
/// Extra dependencies for BABE.
#[derive(Clone)]
pub struct BabeDeps {
/// A handle to the BABE worker for issuing requests.
pub babe_worker_handle: BabeWorkerHandle<Block>,
/// The keystore that manages the keys of the node.
pub keystore: KeystorePtr,
}
/// Full client dependencies.
pub struct FullDeps<C, P, SC> {
/// The client instance to use.
pub client: Arc<C>,
/// Transaction pool instance.
pub pool: Arc<P>,
/// The SelectChain Strategy
pub select_chain: SC,
/// A copy of the chain spec.
pub chain_spec: Box<dyn sc_chain_spec::ChainSpec>,
/// Whether to deny unsafe calls
pub deny_unsafe: DenyUnsafe,
/// Manual seal command sink
pub command_sink_opt: Option<
futures::channel::mpsc::Sender<sc_consensus_manual_seal::EngineCommand<sp_core::H256>>,
>,
/// BABE specific dependencies.
pub babe: Option<BabeDeps>,
}
/// Instantiate all full RPC extensions.
pub fn create_full<C, P, SC>(
deps: FullDeps<C, P, SC>,
) -> Result<RpcModule<()>, Box<dyn std::error::Error + Send + Sync>>
where
C: ProvideRuntimeApi<Block>,
C: HeaderBackend<Block> + HeaderMetadata<Block, Error = BlockChainError> + 'static,
C: Send + Sync + 'static,
C::Api: substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>,
C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>,
C::Api: BabeApi<Block>,
C::Api: BlockBuilder<Block>,
P: TransactionPool + 'static,
SC: SelectChain<Block> + 'static,
{
use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer};
use sc_consensus_babe_rpc::{Babe, BabeApiServer};
use sc_consensus_manual_seal::rpc::{ManualSeal, ManualSealApiServer};
use substrate_frame_rpc_system::{System, SystemApiServer};
let mut module = RpcModule::new(());
let FullDeps {
client,
pool,
select_chain,
chain_spec: _,
deny_unsafe,
command_sink_opt,
babe,
} = deps;
if let Some(babe) = babe {
let BabeDeps {
babe_worker_handle,
keystore,
} = babe;
module.merge(
Babe::new(
client.clone(),
babe_worker_handle,
keystore,
select_chain,
deny_unsafe,
)
.into_rpc(),
)?;
}
module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?;
module.merge(TransactionPayment::new(client).into_rpc())?;
if let Some(command_sink) = command_sink_opt {
// We provide the rpc handler with the sending end of the channel to allow the rpc
// send EngineCommands to the background block authorship task.
module.merge(ManualSeal::new(command_sink).into_rpc())?;
};
// Extend this RPC with a custom API by using the following syntax.
// `YourRpcStruct` should have a reference to a client, which is needed
// to call into the runtime.
// `module.merge(YourRpcTrait::into_rpc(YourRpcStruct::new(ReferenceToClient, ...)))?;`
Ok(module)
}