Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Introduce interface for relay chain interaction #835

Merged
merged 63 commits into from
Dec 22, 2021
Merged
Changes from 1 commit
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
c3f77d1
Move `retrieve_dmq_contents` and `retrieve_all_inbound_hrmp_channel_c…
skunert Oct 14, 2021
6260554
Add cumulus-client-collator to polkadot-parachains package
skunert Oct 15, 2021
830f8e0
Remove more direct references to clients
skunert Oct 18, 2021
387b32f
Remove more direct references to clients
skunert Oct 19, 2021
b178df1
Move interface to its own crate
skunert Oct 20, 2021
5b4b9d7
Remove more direct references to clients
skunert Oct 20, 2021
cc66c2f
Remove more direct references to clients
skunert Oct 22, 2021
91c6a5c
revert network changes
skunert Oct 22, 2021
8d991cf
Merge branch 'master' into relay-chain-interface
skunert Nov 11, 2021
ea57405
Implement relaychaininterface for Arc<dyn RelayChainInterface>
skunert Nov 15, 2021
d7a7ffb
Remove unused code. Clean up imports.
skunert Nov 17, 2021
1c14ea5
Extract cumulu-client-network usages of polkadot-client
skunert Nov 17, 2021
2ffa0c3
Change edition to string in rustfmt
skunert Nov 17, 2021
026832d
Change BlockchainEvent parameters
skunert Nov 17, 2021
6350c8a
Remove polkadot-client dependency from cumulus-network
skunert Nov 18, 2021
0fabdf0
Modify tests to compile again
skunert Nov 23, 2021
1a810d4
Merge branch 'master' into relay-chain-interface
skunert Nov 23, 2021
3d0af0c
Cleanup
skunert Nov 23, 2021
1033b8b
Implement BlockchainEvents for TestApi
skunert Nov 23, 2021
d40f328
Remove references to backend from BlockAnnounceValidator
skunert Nov 24, 2021
a938b70
Extract get_state to RelayChainInterface
skunert Nov 25, 2021
9c865fe
Remove backend references from consensus structs
skunert Nov 25, 2021
054d22d
Move network to relay-chain-interface
skunert Nov 25, 2021
14ec0a1
Move network to RelayChainInterface
skunert Nov 30, 2021
5e42e77
Remove TestApi and add DummyRelayChainInterface
skunert Nov 30, 2021
06815ee
Remove network from BlockAnnounceValidator
skunert Nov 30, 2021
ce860cf
Remove references to full node from service.rs
skunert Nov 30, 2021
f8c8325
Move StartCollator and StartConsensus to RelayChainInterface
skunert Dec 1, 2021
b1b3814
Replace more references to full_node
skunert Dec 1, 2021
4b37786
Clean up and fix overseer handle
skunert Dec 2, 2021
00c1622
Merge branch 'master' into relay-chain-interface
skunert Dec 3, 2021
b619397
Remove unused import, commented code
skunert Dec 3, 2021
84fc3c1
Move relay_chain_full instantiation to interface crate
skunert Dec 3, 2021
6dfa4e6
Remove AuraConsensusBuilder
skunert Dec 3, 2021
ada4b06
Remove duplicate relay-chain-interface from test service
skunert Dec 3, 2021
6b4930c
Format
skunert Dec 6, 2021
8614027
Adjust naming and remove duplicate trait implementation
skunert Dec 6, 2021
0117359
Improve naming
skunert Dec 6, 2021
d0bc375
Fix type parameter name
skunert Dec 6, 2021
98ad008
Replace todo macro by unimplemented
skunert Dec 8, 2021
f9041f6
Remove `get_state_at` from interface
skunert Dec 10, 2021
197e400
Remove slot_duration from interface
skunert Dec 10, 2021
926d9fb
Extract checking for blocks into relay-chain-interface
skunert Dec 13, 2021
f18c5da
Minor adjustments suggested by the comments
skunert Dec 13, 2021
94a8a50
Improve naming, remove block generics
skunert Dec 13, 2021
6b250ba
Merge branch 'master' into relay-chain-interface
skunert Dec 13, 2021
f020868
Introduce constructor for RelayChainLocal
skunert Dec 13, 2021
f5967b3
Extract relay-chain-local to own crate
skunert Dec 20, 2021
4e6fbad
Remove polkadot-service dependency from relay-chain-interface
skunert Dec 20, 2021
4768ad9
Fix test
skunert Dec 20, 2021
9ec6cf8
Merge branch 'master' into relay-chain-interface
skunert Dec 20, 2021
dd64161
Move relay-chain-local to dev dependency in network
skunert Dec 20, 2021
b1b07b5
Remove unused dependency
skunert Dec 20, 2021
9ccc9bf
Remove unused relay-chain reference in AuraConsensus
skunert Dec 21, 2021
481d7e9
Remove unused builders, move wait_on_block to relaychain
skunert Dec 21, 2021
67ce2f2
Remove WaitOnRelayChain and add docs
skunert Dec 21, 2021
6f7094a
Remove unused dep
skunert Dec 22, 2021
d3599c2
Merge branch 'master' into relay-chain-interface
skunert Dec 22, 2021
83c977f
Format
skunert Dec 22, 2021
2f51a3e
Remove unused dependencies, fix lock issue
skunert Dec 22, 2021
aebfcda
Fix log output
skunert Dec 22, 2021
117ba4c
Remove `build_block_announce_validator` function
skunert Dec 22, 2021
f3af41d
Merge branch 'master' into relay-chain-interface
skunert Dec 22, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Move network to RelayChainInterface
skunert committed Nov 30, 2021

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 14ec0a1f3bead7222d755b973bc75a7771342f91
20 changes: 18 additions & 2 deletions Cargo.lock

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

2 changes: 1 addition & 1 deletion client/consensus/aura/src/lib.rs
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@ use cumulus_primitives_core::{
PersistedValidationData,
};
use futures::lock::Mutex;
use sc_client_api::{backend::AuxStore, Backend, BlockOf};
use sc_client_api::{backend::AuxStore, BlockOf};
use sc_consensus::BlockImport;
use sc_consensus_slots::{BackoffAuthoringBlocksStrategy, SlotInfo};
use sc_telemetry::TelemetryHandle;
2 changes: 1 addition & 1 deletion client/consensus/relay-chain/src/lib.rs
Original file line number Diff line number Diff line change
@@ -42,7 +42,7 @@ use cumulus_primitives_core::{
};
use cumulus_relay_chain_interface::RelayChainInterface;
use parking_lot::Mutex;
use sc_client_api::Backend;

use sc_consensus::{BlockImport, BlockImportParams};
use sp_consensus::{
BlockOrigin, EnableProofRecording, Environment, ProofRecording, Proposal, Proposer,
4 changes: 2 additions & 2 deletions client/network/Cargo.toml
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ codec = { package = "parity-scale-codec", version = "2.3.0", features = [ "deriv
futures = { version = "0.3.1", features = ["compat"] }
futures-timer = "3.0.2"
tracing = "0.1.22"
parking_lot = "0.10.2"
parking_lot = "0.11.1"
derive_more = "0.99.2"

[dev-dependencies]
@@ -35,9 +35,9 @@ tokio = { version = "1.10", features = ["macros"] }
# Cumulus deps
cumulus-test-service = { path = "../../test/service" }
cumulus-primitives-core = { path = "../../primitives/core" }

# Polkadot deps
polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "master" }
polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "master" }

# substrate deps
sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
10 changes: 7 additions & 3 deletions client/network/src/tests.rs
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ use sp_core::H256;
use sp_keyring::Sr25519Keyring;
use sp_keystore::{testing::KeyStore, SyncCryptoStore, SyncCryptoStorePtr};
use sp_runtime::{OpaqueExtrinsic, RuntimeAppPublic};
use std::collections::BTreeMap;
use std::{collections::BTreeMap, sync::Mutex as StdMutex};

fn check_error(error: crate::BoxedError, check_error: impl Fn(&BlockAnnounceError) -> bool) {
let error = *error
@@ -67,8 +67,12 @@ impl SyncOracle for DummyCollatorNetwork {
fn make_validator_and_api(
) -> (BlockAnnounceValidator<Block, RelayChainDirect<TestApi>>, Arc<TestApi>) {
let api = Arc::new(TestApi::new());
let relay_chain_interface =
RelayChainDirect { polkadot_client: api.clone(), backend: api.relay_backend.clone() };
let network: Box<dyn SyncOracle + Sync + Send> = Box::new(DummyCollatorNetwork {});
let relay_chain_interface = RelayChainDirect {
polkadot_client: api.clone(),
backend: api.relay_backend.clone(),
network: Arc::new(StdMutex::new(network)),
};
(
BlockAnnounceValidator::new(
relay_chain_interface,
24 changes: 22 additions & 2 deletions client/network/src/wait_on_relay_chain_block.rs
Original file line number Diff line number Diff line change
@@ -20,6 +20,7 @@ use cumulus_relay_chain_interface::RelayChainInterface;
use futures::{future::ready, Future, FutureExt, StreamExt};
use polkadot_primitives::v1::{Block as PBlock, Hash as PHash};
use sc_client_api::blockchain::{self, BlockStatus};
use sp_consensus::SyncOracle;
use sp_runtime::generic::BlockId;
use std::time::Duration;

@@ -121,9 +122,23 @@ where
}
}

struct DummyNetwork {}

impl SyncOracle for DummyNetwork {
fn is_major_syncing(&mut self) -> bool {
todo!()
}

fn is_offline(&mut self) -> bool {
todo!()
}
}

#[cfg(test)]
mod tests {
use super::*;
use std::sync::Mutex;

use super::*;

use cumulus_relay_chain_interface::RelayChainDirect;
use polkadot_test_client::{
@@ -145,11 +160,16 @@ mod tests {

let block_builder = client.init_polkadot_block_builder();
let block = block_builder.build().expect("Finalizes the block").block;
let dummy_network: Box<dyn SyncOracle + Sync + Send> = Box::new(DummyNetwork {});

(
client.clone(),
block,
RelayChainDirect { polkadot_client: client, backend: backend.clone() },
RelayChainDirect {
polkadot_client: client,
backend: backend.clone(),
network: Arc::new(Mutex::new(dummy_network)),
},
)
}

4 changes: 3 additions & 1 deletion client/relay-chain-interface/Cargo.toml
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ edition = "2021"

[dependencies]
polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "master" }
polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" }

cumulus-primitives-core = { path = "../../primitives/core" }

@@ -17,6 +18,7 @@ sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "mas
sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" }
parking_lot = "0.11.1"

enum_dispatch = "0.3.7"
tracing = "0.1.25"
25 changes: 19 additions & 6 deletions client/relay-chain-interface/src/lib.rs
Original file line number Diff line number Diff line change
@@ -13,11 +13,12 @@ use cumulus_primitives_core::{
use parking_lot::RwLock;
use polkadot_client::{ClientHandle, ExecuteWithClient, FullBackend};
use sc_client_api::{blockchain::BlockStatus, Backend, BlockchainEvents, HeaderBackend};
use sc_network::NetworkService;
use sp_api::{ApiError, BlockT, ProvideRuntimeApi};
use sp_consensus::SyncOracle;
use sp_core::sp_std::collections::btree_map::BTreeMap;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

std::collections::BTreeMap

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be used here.

use std::sync::Mutex;

const LOG_TARGET: &str = "cumulus-collator";
const LOG_TARGET: &str = "relay-chain-interface";

pub trait RelayChainInterface<Block: BlockT> {
fn get_state_at(
@@ -83,7 +84,7 @@ pub trait RelayChainInterface<Block: BlockT> {
pub struct RelayChainDirect<Client> {
pub polkadot_client: Arc<Client>,
pub backend: Arc<FullBackend>,
pub network: Arc<NetworkService<PBlock, PHash>>,
pub network: Arc<Mutex<Box<dyn SyncOracle + Send + Sync>>>,
}

impl<T> Clone for RelayChainDirect<T> {
@@ -218,14 +219,15 @@ where
}

fn is_major_syncing(&self) -> bool {
self.network.is_major_syncing()
let mut network = self.network.lock().unwrap();
network.is_major_syncing()
}
}

pub struct RelayChainDirectBuilder {
polkadot_client: polkadot_client::Client,
backend: Arc<FullBackend>,
network: Arc<NetworkService<PBlock, PHash>>,
network: Arc<Mutex<Box<dyn SyncOracle + Send + Sync>>>,
}

impl RelayChainDirectBuilder {
@@ -427,8 +429,19 @@ where
pub fn build_relay_chain_direct(
client: polkadot_client::Client,
backend: Arc<FullBackend>,
network: Arc<NetworkService<PBlock, PHash>>,
network: Arc<Mutex<Box<dyn SyncOracle + Send + Sync>>>,
) -> Arc<(dyn RelayChainInterface<PBlock> + Send + Sync + 'static)> {
let relay_chain_builder = RelayChainDirectBuilder { polkadot_client: client, backend, network };
relay_chain_builder.build()
}

pub fn build_relay_chain_direct_from_full(
full_node: &polkadot_service::NewFull<polkadot_client::Client>,
) -> Arc<(dyn RelayChainInterface<PBlock> + Send + Sync + 'static)> {
let client = full_node.client.clone();
let backend = full_node.backend.clone();
let test: Box<dyn SyncOracle + Send + Sync> = Box::new(full_node.network.clone());
let network = Arc::new(Mutex::new(test));
let relay_chain_builder = RelayChainDirectBuilder { polkadot_client: client, backend, network };
relay_chain_builder.build()
}
14 changes: 3 additions & 11 deletions parachain-template/node/src/service.rs
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ use cumulus_client_service::{
use cumulus_primitives_core::ParaId;

// Substrate Imports
use cumulus_relay_chain_interface::build_relay_chain_direct;
use cumulus_relay_chain_interface::build_relay_chain_direct_from_full;
use sc_client_api::ExecutorProvider;
use sc_executor::NativeElseWasmExecutor;
use sc_network::NetworkService;
@@ -246,11 +246,7 @@ where

let client = params.client.clone();
let backend = params.backend.clone();
let relay_chain_interface = build_relay_chain_direct(
relay_chain_full_node.client.clone(),
relay_chain_full_node.backend.clone(),
relay_chain_full_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_full_node);

let block_announce_validator = build_block_announce_validator(
relay_chain_interface,
@@ -433,11 +429,7 @@ pub async fn start_parachain_node(
telemetry.clone(),
);

let relay_chain_interface = build_relay_chain_direct(
relay_chain_node.client.clone(),
relay_chain_node.backend.clone(),
relay_chain_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_node);

let relay_chain_interface2 = relay_chain_interface.clone();
Ok(build_aura_consensus::<
35 changes: 8 additions & 27 deletions polkadot-parachains/src/service.rs
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ use cumulus_primitives_core::{
relay_chain::v1::{Hash as PHash, PersistedValidationData},
ParaId,
};
use cumulus_relay_chain_interface::build_relay_chain_direct;
use cumulus_relay_chain_interface::build_relay_chain_direct_from_full;
use polkadot_service::NativeExecutionDispatch;

use crate::rpc;
@@ -330,11 +330,7 @@ where
let client = params.client.clone();
let backend = params.backend.clone();

let relay_chain_interface = build_relay_chain_direct(
relay_chain_full_node.client.clone(),
relay_chain_full_node.backend.clone(),
relay_chain_full_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_full_node);

let block_announce_validator = build_block_announce_validator(
relay_chain_interface,
@@ -510,11 +506,7 @@ where

let client = params.client.clone();
let backend = params.backend.clone();
let relay_chain_interface = build_relay_chain_direct(
relay_chain_full_node.client.clone(),
relay_chain_full_node.backend.clone(),
relay_chain_full_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_full_node);

let block_announce_validator = build_block_announce_validator(
relay_chain_interface,
@@ -712,7 +704,8 @@ pub async fn start_rococo_parachain_node(
telemetry.clone(),
);

let relay_chain_direct = build_relay_chain_direct(relay_chain_node.client.clone(), relay_chain_node.backend.clone(), relay_chain_node.network.clone());
// let relay_chain_direct = build_relay_chain_direct(relay_chain_node.client.clone(), relay_chain_node.backend.clone(), );
let relay_chain_direct = build_relay_chain_direct_from_full(&relay_chain_node);
let relay_chain_direct_for_aura_consensus = relay_chain_direct.clone();

Ok(build_aura_consensus::<
@@ -831,11 +824,7 @@ pub async fn start_shell_node(
telemetry.clone(),
);

let relay_chain_interface = build_relay_chain_direct(
relay_chain_node.client.clone(),
relay_chain_node.backend.clone(),
relay_chain_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_node);

Ok(cumulus_client_consensus_relay_chain::build_relay_chain_consensus(
cumulus_client_consensus_relay_chain::BuildRelayChainConsensusParams {
@@ -1100,11 +1089,7 @@ where
let telemetry2 = telemetry.clone();
let prometheus_registry2 = prometheus_registry.map(|r| (*r).clone());

let relay_chain_interface = build_relay_chain_direct(
relay_chain_node.client.clone(),
relay_chain_node.backend.clone(),
relay_chain_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_node);

let aura_consensus = BuildOnAccess::Uninitialized(Some(Box::new(move || {
let slot_duration =
@@ -1182,11 +1167,7 @@ where
telemetry.clone(),
);

let relay_chain_interface = build_relay_chain_direct(
relay_chain_node.client.clone(),
relay_chain_node.backend.clone(),
relay_chain_node.network.clone(),
);
let relay_chain_interface = build_relay_chain_direct_from_full(&relay_chain_node);

let relay_chain_consensus =
cumulus_client_consensus_relay_chain::build_relay_chain_consensus(
6 changes: 3 additions & 3 deletions test/service/src/lib.rs
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ use sp_keyring::Sr25519Keyring;
use sp_runtime::{codec::Encode, generic, traits::BlakeTwo256};
use sp_state_machine::BasicExternalities;
use sp_trie::PrefixedMemoryDB;
use std::sync::Arc;
use std::sync::{Arc, Mutex};
use substrate_test_client::{
BlockchainEventsExt, RpcHandlersExt, RpcTransactionError, RpcTransactionOutput,
};
@@ -218,7 +218,7 @@ where
let relay_chain_interface = Arc::new(RelayChainDirect {
polkadot_client: relay_chain_full_node.client.clone(),
backend: relay_chain_full_node.backend.clone(),
network: relay_chain_full_node.network.clone(),
network: Arc::new(Mutex::new(Box::new(relay_chain_full_node.network.clone()))),
});
let block_announce_validator = BlockAnnounceValidator::new(
relay_chain_interface,
@@ -281,7 +281,7 @@ where
let relay_chain_interface = Arc::new(RelayChainDirect {
polkadot_client: relay_chain_full_node.client.clone(),
backend: relay_chain_full_node.backend.clone(),
network: relay_chain_full_node.network.clone(),
network: Arc::new(Mutex::new(Box::new(relay_chain_full_node.network.clone()))),
});

let relay_chain_interface2 = relay_chain_interface.clone();