Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

BABE Randomness using PreRuntime digests#2929

Merged
gavofyork merged 39 commits intomasterfrom
demi-extract-pre-runtime
Jul 3, 2019
Merged

BABE Randomness using PreRuntime digests#2929
gavofyork merged 39 commits intomasterfrom
demi-extract-pre-runtime

Conversation

@Demi-Marie
Copy link
Contributor

The pre-runtime digests have been available to the runtime since #2466, but they have not been used yet. This PR begins the use of them in the runtime, starting with that of BABE.

This provides the primitive API, as well as exposing it from BABE.
This includes both code to expose them from `srml_system`, as well as
using it in (currently dead) code in `srml_babe`.
Otherwise, it errors out at compile-time.
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.
@rphmeier
Copy link
Contributor

Does this close #2918 ? It should say so in the PR description if so. Then GitHub can automatically close it.

@gavofyork gavofyork added the A3-in_progress Pull request is in progress. No review needed at this stage. label Jun 25, 2019
@Demi-Marie
Copy link
Contributor Author

Does this close #2918 ? It should say so in the PR description if so. Then GitHub can automatically close it.

It does not, to my understanding ― it makes pre-runtime digests accessible to the SRML modules, but not to authorship.

@Demi-Marie Demi-Marie marked this pull request as ready for review June 25, 2019 21:59
@Demi-Marie Demi-Marie added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels Jun 25, 2019
@Demi-Marie Demi-Marie requested review from bkchr and rphmeier June 25, 2019 23:58
There were merge conflicts that needed fixing.
@rphmeier rphmeier changed the title Actually use the pre-runtime digests in the runtime BABE Randomness using PreRuntime digests Jun 27, 2019
Demi-Marie and others added 9 commits June 28, 2019 11:49
Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com>
Co-Authored-By: Robert Habermeier <rphmeier@gmail.com>
* Store an authority index, not the authority itself.
* Avoid unnecessary decoding.
* Implement relative slots and BABE randomness fully and correctly.
The epoch index will not overflow.  Panic if it does.
@Demi-Marie Demi-Marie added A0-please_review Pull request needs code review. and removed A5-grumble labels Jun 29, 2019
@gavofyork
Copy link
Member

@bkchr @rphmeier worth another review?

Demi-Marie and others added 2 commits July 3, 2019 07:30
Co-Authored-By: Robert Habermeier <rphmeier@gmail.com>
@gavofyork gavofyork merged commit 56fd09c into master Jul 3, 2019
@gavofyork gavofyork deleted the demi-extract-pre-runtime branch July 3, 2019 12:49
MTDK1 pushed a commit to bdevux/substrate that referenced this pull request Jul 10, 2019
* 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: Bastian Köcher <bkchr@users.noreply.github.com>
Co-Authored-By: Robert Habermeier <rphmeier@gmail.com>

* 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: Robert Habermeier <rphmeier@gmail.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

A0-please_review Pull request needs code review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants