* Move on to next validator after timeout.
* Better naming.
* Wrong implementation of validator fetch timeouts.
* Validator side: Move on to next collator
if download takes too long.
* Drop multiple requests from same validator.
* Add test that next response is sent after timeout.
* Multiple requests by same validator should get dropped.
* Test that another collator is tried
after exclusive download time.
* Add dep.
* Cleanup.
* Merge fix.
* Review remarks.
* Fixes.
* Add log targets to trace logs
Co-authored-by: Andronik Ordian <write@reusable.software>
* node/approval-voting: Introduce Backend trait and Overlaybackend
This commit introduces a Backend trait and attempts to move away
from the Action model via an OverlayBackend as in the ChainSelection
subsystem.
* node/approval-voting: Add WriteOps for StoredBlockRange and BlocksAtHeight
* node/approval-voting: Add load_all_blocks to overlay
* node/approval-voting: Get all module tests to pass.
This commit modifies all tests to ensure tests are passing.
* node/approval-voting: Address oversights in the previous commit
This commit addresses some oversights in the prior commit.
1. Inner errors in backend.write were swallowed
2. One-off write functions removed to avoid useless abstraction
3. Touch-ups in general
* node/approval-voting: Move from TestDB to dyn KeyValueDB
This commit removes the TestDB from tests.rs and replaces it with
an in-memory kvdb.
* node/approval-voting: Address feedback
* node/approval-voting: Add license to ops.rs
* node/approval-voting: Address second-pass feedback
* Add TODO
* node/approval-voting: Bump spec_version
* node/approval-voting: Address final comments.
* node/approval-voting: Introduce framework for full subsystem tests
* node/approval-voting: Introduce basic tests to attempt to provide
coverage via full subsystem tests
* node/approval-voting: Introduce Chainbuilder
* Add `canonicalize_nans` and enable `stack_depth_metering`
* Update to the latest change in the substrate PR
* Explain why the numbers are what they are.
* Update Substrate to the latest master
Co-authored-by: parity-processbot <>
* DB skeleton
* key formats
* lexicographic test
* custom types for DB
* implement backend for db-v1
* remove VoidBackend and integrate with real DbBackend
* detect stagnant blocks on in interval
* fix tests
* add tests for stagnant
* send ChainSelectionMessage::Approved
* tests for DB backend
* unused import
* upgrade kvdb-memorydb
Co-authored-by: Andronik Ordian <write@reusable.software>
* Companion for Decouple Staking and Election - Part 3: Signed Phase
https://github.com/paritytech/substrate/pull/7910
* remove some config types
* allow up to 5 signed submissions on polkadot and kusama
* signed phase is equal induration to unsigned phase
* use chain defaults for base and per-byte deposits; >= 16 SignedMaxSubmissions
* use a small but non-trivial solution reward
* reduce signed deposit per byte fee
* reduce signed reward, adjust polkadot expected soln size
* copy submit benchmark from substrate
* demo calculating an appropriate fee for the signed reward
Unfortunately, this doesn't work: it needs to be a constant function,
and AFAIK there's no way to make a trait method constant.
* SignedRewardBase is 1.5x the fee to submit a signed solution
* all chains use deposit byte of base per 50k
* update Substrate
* cargo update -p pallet-election-provider-multi-phase
Co-authored-by: parity-processbot <>
* Use wasm-builder from git
This brings new features like compressed runtimes out of the box.
* chore: update wasm builder dep. from 3.0.0 to master
* Fix tests
* Update node/core/pvf/tests/it/main.rs
Co-authored-by: Sergei Shulepov <sergei@parity.io>
Co-authored-by: chevdor <chevdor@gmail.com>
Co-authored-by: Sergei Shulepov <sergei@parity.io>
* stubbed SelectRelayChain
* disconnected overseer handlers
* add is_disconnected
* add fallback in case overseer is disconnected
* fall back on fallback
* fetch leaves by calling into chain-selection subsystem
* implement best_chain
* mostly implement finality_target
* chain constrain
* metrics and maximum safeguard
* remove review comment after review
* node/approval-voting: Introduce LruCache for pending Approval work
This commit adds an LruCache that is intended to track the approval work
submitted as background tasks in order to ensure that the validator needn't
launch duplicate approval work for the same candidate across multiple blocks.
A simple state machine is also introduced in order to differentiate pending
and completed tasks. In addition, this LruCache will retain ValidationResults
from the completed approval work once the task has completed. As per LruCache
implementation, the oldest tasks will get evicted as new approval work is
submitted to this cache.
* node/approval-voting: Revert changes to master
This commit reverts changes from the previous commit in order
to simplify addressing the architecture discussion raised in the PR.
* node/approval-voting: remove background task mpsc construct
This diff removes the mpsc construct for background tasks in preparation
for a move to leveraging RemoteHandles to launch approvals, rather than
passing ApprovalRequests to a mpsc channel and handling the ApprovalRequests
in the main subsystem task.
* node/approval-voting: Introduce LRU Cache
This commit introduces an LRU Cache but does not yet make use of it.
* node/approval-voting: Remove BackgroundTasksMap and memoize currently_checking
This commit removes the BackgroundTasksMap in the main subsystem task
and introduces a method to keep track of RemoteHandles in such a way that
we can ensure that a task is spawned once for a CandidateHash and
relay parent tuple.
* node/approval-voting: Remove BackgroundTasksMap and memoize currently_checking
This commit removes the BackgroundTasksMap in the main subsystem task
and introduces a map of FuturesUnordered per BlockNumber. In addition,
a FusedFuture is generated by iterating across all FuturesUnordered for
the BlockNumbers for which at least one candidate has approvals work
running in the subsystem.
* node/approval-voting: Address Rob's comments
This diff removes the prior HashMap<BlockNumber, FuturesUnordered>
construction and instead moves to a simple FuturesUnordered where
all the work is await with Timeout.
* node/approval-voting: Update Cargo.lock
Due to a mismatch in rustc versions
* node/approval-voting: Make use of actions when issuing_approval
This commit fixes a small oversight in the logic of the prior commit.
* node/approval-voting: Address Rob's feedback
* node/approval-voting: Introduce lazy launch_approval evaluation
* node/approval-voting: Send DistibruteApproval message on every LaunchApproval
In addition to fixed the DistributeApproval bug, this commit also
increases the size of the approvals cache and ensures the StaleGuard
is removed when the advantageous approval state is reached.
* node/approval-voting: Address final comments
This commit removes the CandidateIndex from the ApprovalVoteRequest.
Instead, the launch_approval function will compute the candidate_index
from the block entry.
In addition, a comment has been added explaining the difficulty of
issuing approvals in the handle_actions function.
* node/approval-voting: Set timeout to be 120s rather than 2s
* Update Cargo.lock
* crate skeleton and type definitions
* add ChainSelectionMessage
* add error type
* run loop
* fix overseer
* simplify determine_new_blocks API
* write an overlay struct and fetch new blocks
* add new function to overlay
* more flow
* add leaves to overlay and add a strong type around leaves-set
* add is_parent_viable
* implement block import, ignoring reversions
* add stagnant-at to overlay
* add stagnant
* add revert consensus log
* flow for reversions
* extract and import block reversions
* recursively update viability
* remove redundant parameter from WriteBlockEntry
* do some removal of viable leaves
* address grumbles
* refactor
* address grumbles
* add comment about non-monotonicity
* extract backend to submodule
* begin the hunt for viable leaves
* viability pivots for updating the active leaves
* remove LeafSearchFrontier
* partially -> explicitly viable and untwist some booleans
* extract tree to submodule
* implement block finality update
* Implement block approval routine
* implement stagnant detection
* ensure blocks pruned on finality are removed from the active leaves set
* write down some planned test cases
* floww
* leaf loading
* implement best_leaf_containing
* write down a few more tests to do
* remove dependence of tree on header
* guide: ChainApiMessage::BlockWeight
* node: BlockWeight ChainAPI
* fix compile issue
* note a few TODOs for the future
* fetch block weight using new BlockWeight ChainAPI
* implement unimplemented
* sort leaves by block number after weight
* remove warnings and add more TODOs
* create test module
* storage for test backend
* wrap inner in mutex
* add write waker query to test backend
* Add OverseerSignal -> FromOverseer conversion
* add test harnes
* add no-op test
* add some more test helpers
* the first test
* more progress on tests
* test two subtrees
* determine-new-blocks: cleaner genesis avoidance and tighter ancestry requests
* don't make ancestry requests when asking for one block
* add a couple more tests
* add to AllMessages in guide
* remove bad spaces from bridge
* compact iterator
* test import with gaps
* more reversion tests
* test finalization pruning subtrees
* fixups
* test clobbering and fix bug in overlay
* exhaustive backend state after finalizaiton tested
* more finality tests
* leaf tests
* test approval
* test ChainSelectionMessage::Leaves thoroughly
* remove TODO
* avoid Ordering::is_ne so CI can build
* comment algorithmic complexity
* Update node/core/chain-selection/src/lib.rs
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>