• DemiMarie-parity's avatar
    BABE Randomness using PreRuntime digests (#2929) · 56fd09cf
    DemiMarie-parity authored
    
    
    * Initial work on exposing pre-runtime digests
    
    This provides the primitive API, as well as exposing it from BABE.
    
    * Initial work on using pre-digests in runtimes
    
    This includes both code to expose them from `srml_system`, as well as
    using it in (currently dead) code in `srml_babe`.
    
    * Bump `{spec,impl}_version`
    
    * Add `u64_backend` feature to curve25519-dalek
    
    Otherwise, it errors out at compile-time.
    
    * Bump `Cargo.lock`
    
    * Do not depend on the schnorrkel crate in the runtime
    
    The schnorrkel crate does not work on `#![no_std]`, but the runtime only
    needs constants from it.  This adds our own definitions of those
    constants, and checks them for correctness at compile-time.
    
    * Actually implement storage of VRF outputs
    
    * Trivial formatting change
    
    * Provide a `hash_randomness` function in BABE
    
    for processing VRF outputs.
    
    * Implement a basic randomness generating function
    
    It just XORs the VRF outputs together.
    
    * Actually implement on-chain randomness
    
    Blake2b is used for hashing.
    
    * Update dependencies
    
    * Run `cargo update` where needed
    
    * Re-add a newline at EOF
    
    * Remove broken and unsafe code
    
    XOR is not a hash function, and must not be used as such.  The
    implementation was also needlessly unsafe.
    
    * Run `cargo update` where needed
    
    * Remove spurious dependency
    
    * Document security guarantees of BABE randomness
    
    * Add a `RandomnessBeacon` trait
    
    * Document `RandomnessBeacon::random`
    
    * Fix silly compile error (unexpected type arguments)
    
    * Fix BABE randomness
    
    * Implement `FindAuthor` for `babe::Module`
    
    * Apply suggestions from code review
    
    Co-Authored-By: default avatarBastian Köcher <[email protected]>
    Co-Authored-By: default avatarRobert Habermeier <[email protected]>
    
    * Respond to suggestions from code review and fix bugs
    
    * Store an authority index, not the authority itself.
    * Avoid unnecessary decoding.
    * Implement relative slots and BABE randomness fully and correctly.
    
    * Remove spurious dependency
    
    * Fix error reported by rust-analyzer
    
    * Update Cargo.lock files
    
    * `wrapping_add` → `checked_add`
    
    The epoch index will not overflow.  Panic if it does.
    
    * Move randomness documentation to trait
    
    * Fix compile error in test suite
    
    * Explain 2^64 limit
    
    Co-Authored-By: default avatarRobert Habermeier <[email protected]>
    56fd09cf