• asynchronous rob's avatar
    Implement Approval Voting Subsystem (#2112) · 35ea1c4b
    asynchronous rob authored
    
    
    * 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's avatarAndronik Ordian <write@reusable.software>
    35ea1c4b
This project manages its dependencies using Cargo. Learn more