From f9940c9d8e081a5e0647230666238316ca7518a7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Fri, 9 Oct 2020 22:23:47 +0300 Subject: [PATCH] Expose GRANDPA RPC API from Millau node (#408) * expose GRANDPA RPC API from Millau node * fmt --- bridges/bin/millau/node/Cargo.toml | 1 + bridges/bin/millau/node/src/service.rs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/bridges/bin/millau/node/Cargo.toml b/bridges/bin/millau/node/Cargo.toml index 5051d0dba7ce9..551c19b32c221 100644 --- a/bridges/bin/millau/node/Cargo.toml +++ b/bridges/bin/millau/node/Cargo.toml @@ -28,6 +28,7 @@ sc-consensus = "0.8" sc-consensus-aura = "0.8" sc-executor = "0.8" sc-finality-grandpa = "0.8" +sc-finality-grandpa-rpc = "0.8" sc-service = "0.8" sc-rpc = "2.0" sc-transaction-pool = "2.0" diff --git a/bridges/bin/millau/node/src/service.rs b/bridges/bin/millau/node/src/service.rs index e2e83d5a721ea..fe1686fdda965 100644 --- a/bridges/bin/millau/node/src/service.rs +++ b/bridges/bin/millau/node/src/service.rs @@ -33,6 +33,7 @@ use sc_client_api::{ExecutorProvider, RemoteBackend}; use sc_executor::native_executor_instance; pub use sc_executor::NativeExecutor; use sc_finality_grandpa::{FinalityProofProvider as GrandpaFinalityProofProvider, SharedVoterState}; +use sc_finality_grandpa_rpc::GrandpaRpcHandler; use sc_service::{error::Error as ServiceError, Configuration, TaskManager}; use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; use sp_inherents::InherentDataProviders; @@ -160,19 +161,33 @@ pub fn new_full(config: Configuration) -> Result { let telemetry_connection_sinks = sc_service::TelemetryConnectionSinks::default(); let rpc_extensions_builder = { + use sc_finality_grandpa_rpc::GrandpaApi; use sc_rpc::DenyUnsafe; use substrate_frame_rpc_system::{FullSystem, SystemApi}; let client = client.clone(); let pool = transaction_pool.clone(); - Box::new(move |_, _| { + let justification_stream = grandpa_link.justification_stream(); + let shared_authority_set = grandpa_link.shared_authority_set().clone(); + let finality_proof_provider = GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone()); + + Box::new(move |_, subscription_executor| { + let shared_voter_state = SharedVoterState::empty(); + let mut io = jsonrpc_core::IoHandler::default(); io.extend_with(SystemApi::to_delegate(FullSystem::new( client.clone(), pool.clone(), DenyUnsafe::No, ))); + io.extend_with(GrandpaApi::to_delegate(GrandpaRpcHandler::new( + shared_authority_set.clone(), + shared_voter_state, + justification_stream.clone(), + subscription_executor, + finality_proof_provider.clone(), + ))); io })