implement custom proposer (#1320)
* network bridge skeleton * move some primitives around and add debug impls * protocol registration glue & abstract network interface * add send_msgs to subsystemctx * select logic * transform different events into actions and handle * implement remaining network bridge state machine * start test skeleton * make network methods asynchronous * extract subsystem out to subsystem crate * port over overseer to subsystem context trait * fix minimal example * fix overseer doc test * update network-bridge crate * write a subsystem test-helpers crate * write a network test helper for network-bridge * set up (broken) view test * Revamp network to be more async-friendly and not require Sync * fix spacing * fix test compilation * insert side-channel for actions * Add some more message types to AllMessages * introduce a test harness * impl ProvideInherent for InclusionInherent * reduce import churn; correct expect message * move inclusion inherent identifier into primitives It's not clear precisely why this is desired, but it's a pattern I've seen in several places, so I'm going this to be on the safe side. Worst case, we can revert this commit pretty easily. * bump kusama spec_version to placate CI * copy sc_basic_authorship::{ProposerFactory, Proposer} We have from the problem description: > This Proposer will require an OverseerHandle to make requests via. That's next on the plate. * use polkadot custom proposer instead of basic-authorship one * add some tests * ensure service compiles and passes tests * fix typo * fix service-new compilation * Subsystem test helpers send messages synchronously * remove smelly action inspector * remove superfluous let binding * fix warnings * add license header * empty commit; maybe github will notice the one with changes * Update node/network/bridge/src/lib.rs Co-authored-by:Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com> * add sanity check to only include valid inherents * stub: encapsulate block production mechanics instead of copying them The goal is to end up with something like what's in validation::block_production::*, which encapsulates basic block production mechanics. This is a better idea than just straight-up copying those mechanics. * partial implementation of propose fn Doesn't actually compile yet; need to bring in some other commits to ensure ProvisionerMessage is a thing, and also figure out how to get the block hash given the current context. * fix compilation * clear a few more compile errors * finish fn propose * broken: add timeout to proposal * add timeout to proposal * guide: provisioner is responsible for selecting parachain candidates * implement ProvisionerMessage::RequestInherentData & update fn propose * impl CreateProposer::init; clean up * impl std::error::Error for Error * document error-handling rationale * cause polkadot-service-new to compile correctly * Move potentially-blocking call from fn init -> fn propose This means that we can wrap the delayed call into the same timeout check used elsewhere. * document struct Proposer * extract provisioner data fetch This satisfies two requirements: - only applies the timeout to actually fetching the provisioner data, not to constructing the block after - simplifies the problem of injecting default data if we could not get the real provisioner data in time. Co-authored-by:
Robert Habermeier <rphmeier@gmail.com> Co-authored-by:
Gavin Wood <gavin@parity.io>
Showing
- polkadot/Cargo.lock 27 additions, 1 deletionpolkadot/Cargo.lock
- polkadot/Cargo.toml 1 addition, 0 deletionspolkadot/Cargo.toml
- polkadot/node/core/proposer/Cargo.toml 27 additions, 0 deletionspolkadot/node/core/proposer/Cargo.toml
- polkadot/node/core/proposer/src/lib.rs 262 additions, 0 deletionspolkadot/node/core/proposer/src/lib.rs
- polkadot/node/service/Cargo.toml 1 addition, 1 deletionpolkadot/node/service/Cargo.toml
- polkadot/node/service/src/lib.rs 4 additions, 3 deletionspolkadot/node/service/src/lib.rs
- polkadot/node/subsystem/src/messages.rs 12 additions, 1 deletionpolkadot/node/subsystem/src/messages.rs
- polkadot/primitives/src/parachain.rs 1 addition, 1 deletionpolkadot/primitives/src/parachain.rs
- polkadot/roadmap/implementors-guide/src/node/utility/provisioner.md 6 additions, 0 deletions...oadmap/implementors-guide/src/node/utility/provisioner.md
- polkadot/roadmap/implementors-guide/src/types/overseer-protocol.md 11 additions, 0 deletions...roadmap/implementors-guide/src/types/overseer-protocol.md
Please register or sign in to comment