Skip to content
  1. Feb 03, 2023
    • Adrian Catangiu's avatar
      BEEFY: define on-chain beefy-genesis and use it to coordinate voter initialization (#13215) · 981ffb29
      Adrian Catangiu authored
      * beefy: add support to configure BEEFY genesis
      
      * client/beefy: more flexible test runtime api
      
      * client/beefy: add tests for custom BEEFY genesis
      
      * client/beefy: ignore old state that didn't account for pallet genesis
      
      * client/beefy: fix clippy
      
      * frame/beefy: default BEEFY-genesis is block One::one()
      
      * frame/beefy: add extra doc comments
      
      ---------
      
      Co-authored-by: parity-processbot <>
      981ffb29
  2. Jan 27, 2023
  3. Jan 24, 2023
  4. Jan 13, 2023
  5. Jan 12, 2023
  6. Dec 23, 2022
  7. Dec 20, 2022
    • Michal Kucharczyk's avatar
      `BlockId` removal: refactor: `HeaderBackend::header` (#12874) · 548955a7
      Michal Kucharczyk authored
      * BlockId removal: refactor: HeaderBackend::header
      
      It changes the arguments of:
      - `HeaderBackend::header`,
      - `Client::header`,
      - `PeersClient::header`
      - `ChainApi::block_header`
      
      methods from: `BlockId<Block>` to: `Block::Hash`
      
      This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292)
      
      * non-trivial usages of haeder(block_id) refactored
      
      This may required introduction of dedicated function:
      header_for_block_num
      
      * fmt
      
      * fix
      
      * doc fixed
      
      * ".git/.scripts/fmt.sh"
      
      * BlockId removal: refactor: HeaderBackend::expect_header
      
      It changes the arguments of `HeaderBackend::expect_header` method from: `BlockId<Block>` to: `Block::Hash`
      
      * ".git/.scripts/fmt.sh"
      
      * readme updated
      
      * ".git/.scripts/fmt.sh"
      
      * fix
      
      Co-authored-by: parity-processbot <>
      548955a7
  8. Dec 19, 2022
  9. Dec 16, 2022
  10. Dec 05, 2022
    • dharjeezy's avatar
      client/beefy: add some bounds on enqueued votes (#12562) · 91e6de05
      dharjeezy authored
      
      
      Introduce bounds on the justifications and votes queues, so they do not grow forever if voter cannot make progress and consume from them. When bounds are hit, new votes or justifications get dropped.
      
      * use a BTreeMap and check for bounds
      
      * cargo fmt
      
      * use usize
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      91e6de05
    • Dmitry Markin's avatar
      Upgrade tokio to 1.22.0 and replace async-std with tokio (#12646) · 5eb84f9c
      Dmitry Markin authored
      * Replace deprecated libp2p feature specs with correct ones
      
      * Bump tokio to 1.21.2
      
      * Replace async-std libp2p primitives with tokio ones
      
      * minor: rustfmt
      
      * Fix TestNet to run initialization in the tokio context
      
      * Convert telemetry test from async-std to tokio
      
      * Convert notifications tests from async-std to tokio
      
      * Convert chain sync tests from async-std to tokio
      
      * Ditch async-std completely
      
      * Make executor mandatory
      
      * Bump tokio to 1.22.0
      
      * minor: rustfmt
      
      * Explicitly use tokio runtime in tests
      
      * Move more tests to explicit tokio runtime
      
      * Explicitly set multithreaded runtime in tokio test
      
      * minor: rustfmt
      
      * minor: fix comment
      
      * Replace async-std with tokio in MMR tests
      5eb84f9c
  11. Nov 28, 2022
  12. Nov 23, 2022
  13. Nov 21, 2022
    • Adrian Catangiu's avatar
      client/beefy: persist voter state (#12712) · 3e7a2778
      Adrian Catangiu authored
      
      
      * client/beefy: prepare worker for persisting state
      
      * client/beefy: persist voter state
      
      * client/beefy: initialize persistent state
      
      * client/beefy: try to vote from the very beginning
      
      Now that voter is initialized from persistent state, it makes
      sense that it can attempt voting right away. This also helps
      the genesis case when we consider block `One` as mandatory.
      
      * client/beefy: add tests for voter state db
      * client/beefy: persist voter state as soon as initialized
      * client/beefy: make sure min-block-delta is at least 1
      * client/beefy: persist state after voting
      
      Persist state after handling self vote to avoid double voting in case
      of voter restarts.
      
      * client/beefy: persist state after handling mandatory block vote
      
      For mandatory blocks we want to make sure we're not losing votes
      in case of crashes or restarts, since voter will not make further
      progress without finalizing them.
      
      * frame/beefy: use GENESIS_AUTHORITY_SET_ID on pallet genesis
      
      * client/beefy: initialize voter at either genesis or last finalized
      To guarantee unbroken chain of mandatory blocks justifications, voter
      will always resume from either last BEEFY-justified block or
      `pallet-beefy` genesis, whichever is more recent.
      
      Initialization walks back the chain from latest GRANDPA finalized
      block looking for one of the above. Along the way, it also records
      and enqueues for processing any BEEFY mandatory blocks that have
      been already GRANDPA finalized but not BEEFY finalized.
      
      * client/beefy: decouple voter init from aux db state load
      * client/beefy: fix voter init tests
      * remove debug prints
      * gadget future must be type ()
      * fix init from last justification
      
      Signed-off-by: default avatarAdrian Catangiu <[email protected]>
      3e7a2778
  14. Nov 09, 2022
    • Robert Hambrock's avatar
      Consolidate and deduplicate MMR API methods (#12530) · 53f97350
      Robert Hambrock authored
      
      
      * histor. batch proof: make best block arg optional
      
      * correct testing range
      
      * make generate_batch_proof stub for historical
      
      * merge generate_{historical_}batch_proof functions
      
      * merge generate_{batch_}proof functions
      
      * merge verify_{batch_}proof functions
      
      * merge verify_{batch_}proof_stateless functions
      
      * remove {Leaf}Proof
      
      Not utilized by API anymore, so superfluous.
      Removal consistent with prior changes to just use "batch" proof API.
      
      * rename BatchProof->Proof
      
      no need to qualify if only one universal proof type.
      
      * cleanup
      
      * expose verify_proof rpc api
      
      * document verify_proof
      
      * expose verify_proof_stateless rpc api
      
      * add optional BlockHash to mmr_root rpc api
      
      * fixup! expose verify_proof rpc api
      
      * fix documentation phrasing
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      
      * documentation grammar
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      
      * define mmr error msgs together with error enum
      
      Co-authored-by: default avatarSerban Iorga <[email protected]>
      
      * fixup! define mmr error msgs together with error enum
      
      * map decoding errors to CallError::InvalidParams
      
      Co-authored-by: default avatarSerban Iorga <[email protected]>
      
      * fixup! map decoding errors to CallError::InvalidParams
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      Co-authored-by: parity-processbot <>
      Co-authored-by: default avatarSerban Iorga <[email protected]>
      53f97350
  15. Nov 07, 2022
  16. Nov 02, 2022
  17. Oct 31, 2022
  18. Oct 30, 2022
  19. Oct 24, 2022
  20. Oct 20, 2022
    • Michal Kucharczyk's avatar
      BlockId removal: refactor: BlockImportOperation+Bknd::finalize_block (#12535) · 42215038
      Michal Kucharczyk authored
      * BlockId removal: refactor: BlockImportOperation+Bknd::finalize_block
      
      It changes the arguments of methods of `BlockImportOperation` trait
      from: block: `BlockId<Block>` to: hash: `&Block::Hash`
      `Backend::finalize_block` was also changed.
      
      This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292)
      
      * Review suggestion applied
      
      thx to @davxy
      
      * trigger CI job
      42215038
    • Michal Kucharczyk's avatar
      BlockId removal: refactor: Finalizer (#12528) · 749bcd19
      Michal Kucharczyk authored
      * BlockId removal: refactor: Finalizer
      
      It changes the arguments of methods of `Finalizer` trait from:
      block: `BlockId<Block>` to: hash: `&Block::Hash`
      
      This PR is part of BlockId::Number refactoring analysis (paritytech/substrate#11292)
      
      * minor corrections
      
      * failing test corrected
      
      * minor rework
      749bcd19
  21. Oct 17, 2022
  22. Oct 13, 2022
  23. Oct 07, 2022
  24. Oct 06, 2022
    • Adrian Catangiu's avatar
      Add pluggable BEEFY payload constructors (#12428) · b91d2dfd
      Adrian Catangiu authored
      * primitives/beefy: move Payload to its own file
      
      * primitives/beefy: add Payload tests
      
      * primitives/beefy: add MmrRootProvider as custom BEEFY payload provider
      
      * client/beefy: use generic BEEFY 'PayloadProvider'
      
      * primitives/beefy: rename Payload::new to Payload::from_single_entry for clarity
      
      * fix visibility
      
      * fix cargo doc
      b91d2dfd
  25. Oct 05, 2022
  26. Oct 04, 2022
  27. Oct 03, 2022
    • Adrian Catangiu's avatar
      Beefy on-demand justifications as a custom RequestResponse protocol (#12124) · 2a27545a
      Adrian Catangiu authored
      
      
      * client/beefy: create communication module and move gossip there
      
      * client/beefy: move beefy_protocol_name module to communication
      
      * client/beefy: move notification module under communication
      
      * client/beefy: add incoming request_response protocol handler
      
      * client/beefy: keep track of connected peers and their progress
      
      * client/beefy: add logic for generating Justif requests
      
      * client/beefy: cancel outdated on-demand justification requests
      
      * try Andre's suggestion for JustificationEngine
      
      * justif engine add justifs validation
      
      * client/beefy: impl OnDemandJustificationsEngine async next()
      
      * move beefy proto name test
      
      * client/beefy: initialize OnDemandJustificationsEngine
      
      * client/tests: allow for custom req-resp protocols
      
      * client/beefy: on-demand-justif: implement simple peer selection strategy
      
      * client/beefy: fix voter initialization
      
      Fix corner case where voter gets a single burst of finality
      notifications just when it starts.
      
      The notification stream was consumed by "wait_for_pallet" logic,
      then main loop would subscribe to finality notifications, but by that
      time some notifications might've been lost.
      
      Fix this by subscribing the main loop to notifications before waiting
      for pallet to become available. Share the same stream with the main loop
      so that notifications for blocks before pallet available are ignored,
      while _all_ notifications after pallet available are processed.
      
      Add regression test for this.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: make sure justif requests are always out for mandatory blocks
      
      * client/beefy: add test for on-demand justifications sync
      
      * client/beefy: tweak main loop event processing order
      
      * client/beefy: run on-demand-justif-handler under same async task as voter
      
      * client/beefy: add test for known-peers
      
      * client/beefy: reorg request-response module
      
      * client/beefy: add issue references for future work todos
      
      * client/beefy: consolidate on-demand-justifications engine state machine
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: fix for polkadot companion
      
      * client/beefy: implement review suggestions
      
      * cargo fmt and clippy
      
      * fix merge damage
      
      * fix rust-doc
      
      * fix merge damage
      
      * fix merge damage
      
      * client/beefy: add test for justif proto name
      
      Signed-off-by: default avataracatangiu <[email protected]>
      2a27545a
  28. Sep 30, 2022
  29. Sep 26, 2022
  30. Sep 21, 2022
  31. Sep 16, 2022
    • Adrian Catangiu's avatar
      client/beefy: fix voter initialization (#12274) · d9a4d835
      Adrian Catangiu authored
      
      
      Fix corner case where voter gets a single burst of finality
      notifications just when it starts.
      
      The notification stream was consumed by "wait_for_pallet" logic,
      then main loop would subscribe to finality notifications, but by that
      time some notifications might've been lost.
      
      Fix this by subscribing the main loop to notifications before waiting
      for pallet to become available. Share the same stream with the main loop
      so that notifications for blocks before pallet available are ignored,
      while _all_ notifications after pallet available are processed.
      
      Add regression test for this.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      d9a4d835
  32. Sep 05, 2022
    • Adrian Catangiu's avatar
      beefy: initialize voter from genesis and fix initial sync (#11959) · 84acfd5f
      Adrian Catangiu authored
      
      
      * client/beefy: use backend instead of client where possible
      
      * client/beefy: initialize voter from genesis
      
      Now that we have justifications import, we can drop the "lean beefy"
      behaviour and start building justifications chain from Genesis with
      containing all past sessions' mandatory blocks justifications.
      
      * client/beefy: walk finality tree_route to catch session changes
      
      * client/beefy: fix block import
      
      During initial block import blocks are not finalized, so trying to
      validate and append justifications within block import fails (for
      initial network sync imported blocks).
      
      Changes:
      
      - Move justification validation to _after_ `inner.block_import()`,
        so block is imported in backend and runtime api can be called to
        get the BEEFY authorities for said block.
      - Move append-to-backend for imported BEEFY justification to voter,
        because it already has the required logic to BEEFY-finalize blocks
        only after GRANDPA finalized them.
      - Mark voting rounds as concluded when finalizing through
        imported justifications as well as when finalizing through voting.
      
      * client/beefy: valid justifications are one per block number
      
      The only way we'd get _different_ _validated_ justifications for same
      block number is if authorities are double voting, which will be handled
      later.
      
      * client/beefy: process incoming justifs during major sync
      
      * client/beefy: correct voter initialization
      
      BEEFY voter should resume voting from either:
        - last BEEFY finalized block,
        - session start,
      whichever is closest to head.
      
      * client/beefy: test voter initialization
      
      * client/beefy: impl review suggestions
      
      Signed-off-by: default avataracatangiu <[email protected]>
      84acfd5f
  33. Sep 03, 2022
    • Dmitry Markin's avatar
      Use custom type for ProtocolName (#12172) · 24d09fe8
      Dmitry Markin authored
      * Add ProtocolName custom type
      
      * Use new ProtocolName in sc_network_common
      
      * Use new ProtocolName in sc_network
      
      * Use new ProtocolName for BEEFY and GRANDPA
      
      * Use new ProtocolName for notifications
      
      * Use new ProtocolName in sc_network (part 2)
      
      * Use new ProtocolName in sc_network_gossip
      
      * Use new ProtocolName in sc_offchain
      
      * Remove unused imports
      
      * Some more fixes
      
      * Add tests
      
      * Fix minor import issues
      
      * Re-export ProtocolName in sc_network
      
      * Revert "Re-export ProtocolName in sc_network"
      
      This reverts commit 8d8ff71927e7750757f29c9bbd88dc0ba181d214.
      
      * Re-export ProtocolName in sc_network
      
      * Remove dependency on sc-network-common from beefy-gadget
      24d09fe8
  34. Aug 15, 2022
  35. Aug 04, 2022
  36. Jul 29, 2022
    • Adrian Catangiu's avatar
      Lean BEEFY to Full BEEFY - don't skip (older) mandatory blocks and import justifications (#11821) · 1c6867c6
      Adrian Catangiu authored
      
      
      * client/beefy: don't accept vote for older rounds
      
      * client/beefy: clean up and reorg the worker struct
      
      * client/beefy: first step towards Full BEEFY
      
      The first step from Lean->Full BEEFY is to have the worker
      enforce uninterrupted line of BEEFY finalized mandatory blocks.
      
      There is one mandatory block per session (the first block in the
      session). As such, votes processing and votes generation now
      enforces that all mandatory blocks are finalized in strict
      monotonically increasing sequence and no block 'N' will be worked
      on if there is any GRANDPA finalized but BEEFY non-final mandatory
      block 'M', where 'M < N'.
      
      Implementation details:
      
      - Introduced 'VoterOracle' to separate the voting decisions logic,
        and track new/pending sessions.
      
      - New sessions get queued up with the worker operating either:
        1. up-to-date - all mandatory blocks leading up to current GRANDPA
           finalized: queue has ONE element, the 'current session' where
           `mandatory_done == true`,
        2. lagging behind GRANDPA: queue has [1, N] elements, where all
           `mandatory_done == false`.
           In this state, everytime a session gets its mandatory block
           BEEFY finalized, the session is popped off the queue,
           eventually getting to operating mode `1. up-to-date`.
      
      - Votes get triaged and those that fall withing the `VoterOracle`
        allowed window get processed, the others get dropped if stale,
        or buffered for later processing (when they reach the window).
      
      - Worker general code was also updated to fall in one of two roles:
        1. react to external events and change internal 'state',
        2. generate events/votes based on internal 'state'.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: sketch idea for block import and sync
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: add BEEFY block import
      
      * client/beefy: process justifications from block import
      
      * client/beefy: add TODOs for sync protocol
      
      * client/beefy: add more docs and comments
      
      * client/beefy-rpc: fix RPC error
      
      * client/beefy: verify justification validity on block import
      
      * client/beefy: more tests
      
      * client/beefy: small fixes
      
      - first handle and note the self vote before gossiping it,
      - don't shortcircuit on err when processing pending votes.
      
      * client/beefy: remove invalid justifications at block import
      
      * todo: beefy block import tests
      
      * RFC: ideas for multiple justifications per block
      
      * Revert "RFC: ideas for multiple justifications per block"
      
      This reverts commit 8256fb07d3124db69daf252720b3c0208202624d.
      
      * client/beefy: append justif to backend on block import
      
      * client/beefy: groundwork for block import test
      
      * client/beefy: groundwork2 for block import test
      
      * client/beefy: groundwork3 for block import test
      
      * client/beefy: add block import test
      
      * client/beefy: add required trait bounds to block import builder
      
      * remove client from beefy block import, backend gets the job done
      
      Signed-off-by: default avataracatangiu <[email protected]>
      1c6867c6
  37. Jul 26, 2022
    • Sebastian Kunert's avatar
      Prepare for rust 1.62.1 (#11903) · 9f409dc0
      Sebastian Kunert authored
      
      
      * Update UI test output for rust 1.62.1
      
      * switch ci to staging image to check that everything works
      
      * fix artifacts node-bench-regression-guard
      
      * Imeplement `scale_info::TypeInfo` manually to silence aggressive rust warning
      
      * Fix more clippy lints
      
      * Make clippy happy by relying on auto-deref were possible
      
      * Add tracking issue to the comments
      
      * pin ci image
      
      Co-authored-by: default avataralvicsam <[email protected]>
      9f409dc0
  38. Jul 12, 2022
    • Nazar Mokrynskyi's avatar
      Network sync refactoring (part 4) (#11412) · 5896072b
      Nazar Mokrynskyi authored
      
      
      * Remove direct dependency of `sc-network` on `sc-network-light`
      
      * Move `WarpSyncProvider` trait and surrounding data structures into `sc-network-common`
      
      * Move `WarpSyncProvider` trait and surrounding data structures into `sc-network-common`
      
      * Create `sync` module in `sc-network-common`, create `ChainSync` trait there (not used yet), move a bunch of associated data structures from `sc-network-sync`
      
      * Switch from concrete implementation to `ChainSync` trait from `sc-network-common`
      
      * Introduce `OpaqueStateRequest`/`OpaqueStateResponse` to remove generics from `StateSync` trait
      
      * Introduce `OpaqueBlockRequest`/`OpaqueBlockResponse`, make `scheme` module of `sc-network-sync` private
      
      * Surface `sc-network-sync` into `sc-service` and make `sc-network` not depend on it anymore
      
      * Remove now unnecessary dependency from `sc-network`
      
      * Replace crate links with just text since dependencies are gone now
      
      * Remove `warp_sync` re-export from `sc-network-common`
      
      * Update copyright in network-related files
      
      * Address review comments about documentation
      
      * Apply review suggestion
      
      * Rename `extra_requests` module to `metrics`
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      5896072b