• Peter Goodspeed-Niklaus's avatar
    implement custom proposer (#1320) · 69ce9ff3
    Peter Goodspeed-Niklaus authored
    
    
    * 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: default avatarPeter 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: asynchronous rob's avatarRobert Habermeier <rphmeier@gmail.com>
    Co-authored-by: default avatarGavin Wood <gavin@parity.io>
    69ce9ff3