This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Conversation
All tests pass. There are still limitations: 1. The runtime strips out inherent digests, so BABE must re-add them. 2. The test runtime checks that it can re-compute all digests. It can’t, so I had to comment out that test.
Seals were not imported correctly: the pre-digest was imported twice, instead of both it and the seal being imported. Also, other parts of the code did not compile due to incomplete refactoring.
rphmeier
reviewed
May 9, 2019
rphmeier
reviewed
May 9, 2019
This enforces that inherent digests are added first.
Suggested-by: Robert Habermeier <robert@parity.io>
Demi-Marie
commented
May 25, 2019
Contributor
Author
Demi-Marie
left a comment
There was a problem hiding this comment.
Review addressed.
| authorities: &[Public], | ||
| threshold: u64, | ||
| ) -> Result<CheckedHeader<B::Header, DigestItemFor<B>>, String> | ||
| ) -> Result<CheckedHeader<B::Header, (DigestItemFor<B>, DigestItemFor<B>)>, String> |
Contributor
Author
There was a problem hiding this comment.
That said, I believe that would belong in a separate PR.
It wasn’t needed
I also did some reformatting and cleanup.
Member
|
Some conflicts. If there's nothing left, it'd be good to get this merged. Feel free to bother some reviewers about it. |
Contributor
|
This will break the flaming fir network, I'm not sure whether we should have some backwards-compatibility support (just to import old seals), or whether we should reset flaming fir after we deploy this. I don't have a very strong opinion on it, but I also don't want us to spend too much effort dealing with backwards compatibility on flaming fir (the idea of the network is to run master with no stability guarantees). |
Reformatting Co-Authored-By: André Silva <andre.beat@gmail.com>
Also, remove some needless unsafe code.
With the removal of the deprecated `Seal` variant, these are not needed.
RLS did not tell me that I hadn’t fixed `babe/lib.rs`, so I missed it.
Member
|
i'm fine with reseting it. |
Demi-Marie
added a commit
that referenced
this pull request
Jun 1, 2019
This reverts commit 6e253c8.
MTDK1
pushed a commit
to bdevux/substrate
that referenced
this pull request
Jul 10, 2019
* Introduce inherent digests * Implement inherent digests * fix silly error * Implementation of inherent digests in BABE All tests pass. There are still limitations: 1. The runtime strips out inherent digests, so BABE must re-add them. 2. The test runtime checks that it can re-compute all digests. It can’t, so I had to comment out that test. * Fix compilation and seal import Seals were not imported correctly: the pre-digest was imported twice, instead of both it and the seal being imported. Also, other parts of the code did not compile due to incomplete refactoring. * Remove bogus assertion * Fix testsuite compilation * Remove unused import * Fix compiler diagnostics * Add inherent digest parameters to block constructors This enforces that inherent digests are added first. * Fixup Cargo.lock * Fix build errors * Re-add an incorrectly removed import * Bump primitive-types version * Update Cargo.lock * Refactoring * Use inherent digests for AuRa They do reach the runtime, but get stripped. I have not figured out where. * Fix compilation errors * Fix compilation errors due to incorrect types * Fix whitespace Suggested-by: Tomasz Drwiega <tomasz@parity.io> * Add preamble Suggested-by: Tomasz Drwiega <tomasz@parity.io> * Fix silly compile error * Refactor pre-digest finding code into a separate function * Remove unwanted assertion It is too likely to bring down the entire blockchain. Suggested-by: Tomasz Drwiega <tomasz@parity.io> * Use `find_pre_digest` after runtime, too Also, use `Member` trait rather than rolling our own requirements. Suggested-by: Tomasz Drwiega <tomasz@parity.io> * Fix various warnings mostly due to upgrading the dependency on `error_chain`. * Pre-digests nearly complete This nearly completes the implementation of pre-runtime digests. * `Seal2` → `Seal` and fix test suite * Try to fix the storage error * Try to fix storage (again) * Fix tests * Hopefully finish pre-runtime digests The key is to pass *only* the pre-runtime digests to the runtime. The others must be stripped out by `initialize_block`. * Fix silly typo * Fix another silly mistake * Remove unnecessary filtering of BABE pre-digests We no longer get duplicate BABE pre-digests, so if they appear, the header should be rejected outright. * Update Cargo.lock files * Reformatting * Fix silly typo in inherent digest code Also, revert `error.rs` files that contained calls to the `error_chain!` macro. * Try to keep the runtime from stripping pre-digests Currently runs into the “Storage root must match that calculated” assertion. * Don’t compute storage root until storage changes are done. Also, fix a compilation error. * Fix compile-time error * Fix compilation errors * Fix more compile errors * Hopefully it compiles this time… * Fix compilation and add docs * Prevent BABE from adding duplicate pre-runtime digests Found by comparing with the AuRa code. I also did some refactoring. * Respond to review and fix some warnings * Delete some dead code introduced earlier * More dead code goes away * `ref mut` → `&mut` * Respond to review and fix some warnings * Fix compilation error * Remove unneeded `HashT` type parameter Suggested-by: Robert Habermeier <robert@parity.io> * Remove spurious #[allow(deprecated)] * Document inherent digest parameter to `build_block` * Delete `Simple` trait It wasn’t needed * delete wrongly added files * Fix trait bounds * Digest serialization tests I also did some reformatting and cleanup. * Apply suggestions from code review Reformatting Co-Authored-By: André Silva <andre.beat@gmail.com> * Swap two arguments to `propose` and `propose_with` Also, remove some needless unsafe code. * Remove bogus `#![allow(deprecated)]` annotations With the removal of the deprecated `Seal` variant, these are not needed. * Add a missing `#[allow(deprecated)]` in the AuRa tests * Fix silly compile error * Fix silly compiler error RLS did not tell me that I hadn’t fixed `babe/lib.rs`, so I missed it. * Fixes made automatically by Cargo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What This Is
Inherent digests are digests that are provided to the runtime by the consensus algorithm. They are inherent because the runtime trusts them implicitly, although the consensus algorithm does verify them.
This PR passes the digests in the header to the runtime via
initialize_block. It does not, however, provide any means for runtimes to actually use the information. This will be provided later.Changes to digest items
The
DigestItem::Sealvariant had been deprecated in an earlier PR. This PR removes the deprecation, and changes it to containConsensusEngineIdand aSealSignature. It also adds the variantDigestItem::PreRuntimefor pre-runtime digests.A consequence of these changes is that the following invariants must be upheld:
DigestItem::SealorDigestItem::PreRuntime. Only consensus engines can produce these varients.DigestItem::SealorDigestItem::PreRuntime. Furthermore, there MUST be exactly oneDigestItem::Sealper combination of block and consensus engine, and they must come after all other digests.DigestItem::ChangesTreeRootfor itself. Runtimes that use the SRML MUST NOT produce anyDigestItemvariant exceptDigestItem::AuthoritiesChangeandDigestItem::Consensus.These invarients are currently not checked. However, I plan on improving the API to catch violations of them at compile-time, by making illegal states unrepresentable.
Backwards compatibility
There isn’t any. Versions of Substrate that include this PR are 100% incompatible with versions that came before. Attempting to combine incompatible versions will result in blocks failing to import.
If necessary, I can include read-only backwards-compatibility support. This will allow nodes including this PR to import blocks generated by older nodes, but not create blocks that can be imported by older nodes.
Cargo.lockchangesMuch of the changes are to
Cargo.lockfiles, as some of the code depends on newer versions of dependencies. Reverting these dependencies is trivial, but I believe that upgrading dependencies is a good thing, so that Substrate can take advantage of upstream bug-fixes. This is especially true of libraries like ring, which do not do any backports at all.Fixes #2232