Implement Approval Voting Subsystem (#2112)
* skeleton
* skeleton aux-schema module
* start approval types
* start aux schema with aux store
* doc
* finish basic types
* start approval types
* doc
* finish basic types
* write out schema types
* add debug and codec impls to approval types
* add debug and codec impls to approval types
also add some key computation
* add debug and codec impls to approval types
* getters for block and candidate entries
* grumbles
* remove unused AssignmentId
* load_decode utility
* implement DB clearing
* function for adding new block entry to aux store
* start `canonicalize` implementation
* more skeleton
* finish implementing canonicalize
* tag TODO
* implement a test AuxStore
* add allow(unused)
* basic loading and deleting test
* block_entry test function
* add a test for `add_block_entry`
* ensure range is exclusive at end
* test clear()
* test that add_block sets children
* add a test for canonicalize
* extract Pre-digest from header
* utilities for extracting RelayVRFStory from the header-chain
* add approval voting message types
* approval distribution message type
* subsystem skeleton
* state struct
* add futures-timer
* prepare service for babe slot duration
* more skeleton
* better integrate AuxStore
* RelayVRF -> RelayVRFStory
* canonicalize
* implement some tick functionality
* guide: tweaks
* check_approval
* more tweaks and helpers
* guide: add core index to candidate event
* primitives: add core index to candidate event
* runtime: add core index to candidate events
* head handling (session window)
* implement `determine_new_blocks`
* add TODO
* change error type on functions
* compute RelayVRFModulo assignments
* compute RelayVRFDelay assignments
* fix delay tranche calc
* assignment checking
* pluralize
* some dummy code for fetching assignments
* guide: add babe epoch runtime API
* implement a current_epoch() runtime API
* compute assignments
* candidate events get backing group
* import blocks and assignments into DB
* push block approval meta
* add message types, no overseer integration yet
* notify approval distribution of new blocks
* refactor import into separate functions
* impl tranches_to_approve
* guide: improve function signatures
* guide: remove Tick from ApprovalEntry
* trigger and broadcast assignment
* most of approval launching
* remove byteorder crate
* load blocks back to finality, except on startup
* check unchecked assignments
* add claimed core to approval voting message
* fix checks
* assign only to backing group
* remove import_checked_assignment from guide
* newline
* import assignments
* abstract out a bit
* check and import approvals
* check full approvals from assignment import too
* comment
* create a Transaction utility
* must_use
* use transaction in `check_full_approvals`
* wire up wakeups
* add Ord to CandidateHash
* wakeup refactoring
* return candidate info from add_block_entry
* schedule wakeups
* background task: do candidate validation
* forward candidate validation requests
* issue approval votes when requested
* clean up a couple TODOs
* fix up session caching
* clean up last unimplemented!() items
* fix remaining warnings
* remove TODO
* implement handle_approved_ancestor
* update Cargo.lock
* fix runtime API tests
* guide: cleanup assignment checking
* use claimed candidate index instead of core
* extract time to a trait
* tests module
* write a mock clock for testing
* allow swapping out the clock
* make abstract over assignment criteria
* add some skeleton tests and simplify params
* fix backing group check
* do backing group check inside check_assignment_cert
* write some empty test functions to implement
* add a test for non-backing
* test that produced checks pass
* some empty test ideas
* runtime/inclusion: remove outdated TODO
* fix compilation
* av-store: fix tests
* dummy cert
* criteria tests
* move `TestStore` to main tests file
* fix unused warning
* test harness beginnings
* resolve slots renaming fallout
* more compilation fixes
* wip: extract pure data into a separate module
* wip: extract pure data into a separate module
* move types completely to v1
* add persisted_entries
* add conversion trait impls
* clean up some warnings
* extract import logic to own module
* schedule wakeups
* experiment with Actions
* uncomment approval-checking
* separate module for approval checking utilities
* port more code to use actions
* get approval pipeline using actions
* all logic is uncommented
* main loop processes actions
* all loop logic uncommented
* separate function for handling actions
* remove last unimplemented item
* clean up warnings
* State gives read-only access to underlying DB
* tests for approval checking
* tests for approval criteria
* skeleton test module for import
* list of import tests to do
* some test glue code
* test reject bad assignment
* test slot too far in future
* test reject assignment with unknown candidate
* remove loads_blocks tests
* determine_new_blocks back to finalized & harness
* more coverage for determining new blocks
* make `imported_block_info` have less reliance on State
* candidate_info tests
* tests for session caching
* remove println
* extricate DB and main TestStores
* rewrite approval checking logic to counteract early delays
* move state out of function
* update approval-checking tests
* tweak wakeups & scheduling logic
* rename check_full_approvals
* test that assignment import updates candidate
* some approval import tests
* some tests for check_and_apply_approval
* add 'full' qualifier to avoid confusion
* extract should-trigger logic to separate function
* some tests for all triggering
* tests for when we trigger assignments
* test wakeups
* add block utilities for testing
* some more tests for approval updates
* approved_ancestor tests
* new action type for launch approval
* process-wakeup tests
* clean up some warnings
* fix in_future test
* approval checking tests
* tighten up too-far-in-future
* special-case genesis when caching sessions
* fix bitfield len
Co-authored-by:
Andronik Ordian <write@reusable.software>
Showing
- polkadot/Cargo.lock 23 additions, 1 deletionpolkadot/Cargo.lock
- polkadot/node/core/approval-voting/Cargo.toml 19 additions, 2 deletionspolkadot/node/core/approval-voting/Cargo.toml
- polkadot/node/core/approval-voting/src/approval_checking.rs 879 additions, 0 deletionspolkadot/node/core/approval-voting/src/approval_checking.rs
- polkadot/node/core/approval-voting/src/approval_db/mod.rs 33 additions, 0 deletionspolkadot/node/core/approval-voting/src/approval_db/mod.rs
- polkadot/node/core/approval-voting/src/approval_db/v1/mod.rs 124 additions, 65 deletionspolkadot/node/core/approval-voting/src/approval_db/v1/mod.rs
- polkadot/node/core/approval-voting/src/approval_db/v1/tests.rs 9 additions, 11 deletions...dot/node/core/approval-voting/src/approval_db/v1/tests.rs
- polkadot/node/core/approval-voting/src/criteria.rs 782 additions, 0 deletionspolkadot/node/core/approval-voting/src/criteria.rs
- polkadot/node/core/approval-voting/src/import.rs 1749 additions, 0 deletionspolkadot/node/core/approval-voting/src/import.rs
- polkadot/node/core/approval-voting/src/lib.rs 1330 additions, 3 deletionspolkadot/node/core/approval-voting/src/lib.rs
- polkadot/node/core/approval-voting/src/persisted_entries.rs 412 additions, 0 deletionspolkadot/node/core/approval-voting/src/persisted_entries.rs
- polkadot/node/core/approval-voting/src/tests.rs 1750 additions, 0 deletionspolkadot/node/core/approval-voting/src/tests.rs
- polkadot/node/core/approval-voting/src/time.rs 88 additions, 0 deletionspolkadot/node/core/approval-voting/src/time.rs
- polkadot/node/core/av-store/src/lib.rs 2 additions, 2 deletionspolkadot/node/core/av-store/src/lib.rs
- polkadot/node/core/av-store/src/tests.rs 13 additions, 3 deletionspolkadot/node/core/av-store/src/tests.rs
- polkadot/node/core/runtime-api/Cargo.toml 2 additions, 0 deletionspolkadot/node/core/runtime-api/Cargo.toml
- polkadot/node/core/runtime-api/src/cache.rs 21 additions, 0 deletionspolkadot/node/core/runtime-api/src/cache.rs
- polkadot/node/core/runtime-api/src/lib.rs 78 additions, 5 deletionspolkadot/node/core/runtime-api/src/lib.rs
- polkadot/node/network/approval-distribution/src/lib.rs 1 addition, 0 deletionspolkadot/node/network/approval-distribution/src/lib.rs
- polkadot/node/network/approval-distribution/src/tests.rs 7 additions, 0 deletionspolkadot/node/network/approval-distribution/src/tests.rs
- polkadot/node/overseer/src/lib.rs 1 addition, 1 deletionpolkadot/node/overseer/src/lib.rs
Please register or sign in to comment