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

Conversation

@gavofyork
Copy link
Member

@gavofyork gavofyork commented Jun 5, 2019

Prototype of new sessions module. This does all the stuff discussed, and adds more stuff needed:

  • No duplicate keys are allowed (all active keys are maintained in a sorted vec).
  • Trait handlers/signals to allow control over when sessions are rotated (for BABE @demimarie-parity), when new keys are switched in (era) and when slots are disabled.
  • Tuple-keys to allow for different keys to be stored and switch synchronously.
  • Interface for the tuple keys to allow comparison for duplicate checking.
  • Interface for checking proof-of-ownership over a key set.
  • Some reformatting of staking to stop line-length checks complaining.
  • Removes the consensus module and any notion of a general "authority set" or authority ID type. All consensus modules are responsible to define or figure out their own authority types and set.

TODO:

  • Update docs
  • Update tests
  • Integrate into Babe
  • Integrate into Grandpa
  • Integrate into Aura
  • Integrate into Staking
  • Integrate into FinalityTracker/Grandpa
  • Integrate into overall runtime
  • Kill Consensus module
    • Move authorities storage/config from consensus to Aura
    • Move code config from consensus to System
  • Tidy up consensus crates
    • Babe is currently falsely generic over crypto: BabeApi has a generic param - remove it.
    • Create an AuthorityId type alias for Babe's Public and put it in the Babe primitives like for Aura; use it throughout.
    • Aura is currently half-generic (client-side is generic, runtime-side is not). Re-genericise the runtime.
  • Manage Aura offline reporting somehow.

Addresses paritytech/polkadot#47
Supersedes #2713 #2768 #2628

@gavofyork
Copy link
Member Author

cc @dvc94ch @rphmeier

@gavofyork gavofyork added the A3-in_progress Pull request is in progress. No review needed at this stage. label Jun 5, 2019
@gavofyork gavofyork added this to the 2.0-kusama milestone Jun 5, 2019
@gavofyork
Copy link
Member Author

@demimarie-parity could you take a look at the Babe-relevant parts of this? Is Babe affected by the lack of a consensus module? Can you integrate ok through the ShouldSessionEnd trait?

@gavofyork gavofyork changed the title Draft of new sessions New sessions, kill consensus module Jun 6, 2019
@Demi-Marie Demi-Marie self-requested a review June 7, 2019 00:31
Copy link
Contributor

@Demi-Marie Demi-Marie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gavofyork Thank you for pinging me on this one.

BABE does not currently implement sessions, slashing, or validator set changes. The current srml-babe is a stub module that is sufficient for testing the consensus engine, but not for an actual blockchain. Implementing a proper srml-babe was blocked on inherent digests, so I was not able to implement it until recently. I plan on including it in my relative digests PR (#2820), which is barely started. That said, I do not believe that BABE needs any other SRML interfaces that AuRa does not, so ShouldEndSession should be sufficient.


// NOTE: `SessionHandler` and `SessionKeys` are co-dependent: One key will be used for each handler.
// The number and order of items in `SessionHandler` *MUST* be the same number and order of keys in
// `SessionKeys`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens if they do not match? Also, we could use a macro for this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

basically, you'll end up with default keys rather than the actual keys. a macro would be easiest to do. it may be possible to do something cleverer with traits to avoid exposing a macro to the user, but i haven't though about it too deeply.

@rphmeier rphmeier mentioned this pull request Jun 7, 2019
6 tasks
@gavofyork gavofyork requested a review from Demi-Marie June 13, 2019 14:41
@gavofyork gavofyork dismissed Demi-Marie’s stale review June 13, 2019 15:09

The docs don't mention Log and nor should they - it's an outdated, unstable API.

Copy link
Contributor

@Demi-Marie Demi-Marie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parts I looked at (AuRa and BABE, mostly) look good. I did not review parts of the codebase I have never worked on, though.

});

c.bench_function("calling function in wasm", |b| {
let client = test_client::new_with_execution_strategy(ExecutionStrategy::AlwaysWasm);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this correct? CI didn’t pass without it.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no

@gavofyork gavofyork requested review from rphmeier and svyatonik June 14, 2019 08:59
@gavofyork
Copy link
Member Author

@svyatonik this touches some of your code - could you take another look?

Copy link
Contributor

@svyatonik svyatonik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was mostly checking that authorities-change signals are still emitted - that seems true. Can't say much about other (SRML) changes.

@gavofyork gavofyork merged commit dbf3226 into master Jun 14, 2019
@gavofyork gavofyork deleted the gav-new-sessions branch June 14, 2019 14:34
folsen pushed a commit that referenced this pull request Jun 18, 2019
* Draft of new sessions

* Reintroduce tuple impls

* Move staking module to new session API

* More work on staking and grandpa.

* Use iterator to avoid cloning and tuple macro

* Make runtime build again

* Polish the OpaqueKeys devex

* Move consensus logic into system & aura.

* Fix up system module

* Get build mostly going. Stuck at service.rs

* Building again

* Update srml/staking/src/lib.rs

Co-Authored-By: DemiMarie-parity <[email protected]>

* Refactoring out Consensus module, AuthorityIdOf, &c.

* Refactored out DigestItem::AuthoritiesChanged. Building.

* Remove tentative code

* Remove invalid comment

* Make Seal opaque and introduce nice methods for handling opaque items.

* Start to use proper digest for Aura authorities tracking.

* Fix up grandpa, remove system::Raw/Log

* Refactor Grandpa to use new logging infrastructure.

Also make authorityid/sessionkey static. Switch over to storing
authorities in a straight Vec.

* Building again

* Tidy up some AuthorityIds

* Expunge most of the rest of the AuthorityKey confusion.

Also, de-generify Babe and re-generify Aura.

* Remove cruft

* Untangle last of the `AuthorityId`s.

* Sort out finality_tracker

* Refactor median getting

* Apply suggestions from code review

Co-Authored-By: Robert Habermeier <[email protected]>

* Session tests works

* Update core/sr-primitives/src/generic/digest.rs

Co-Authored-By: DemiMarie-parity <[email protected]>

* Session tests works

* Fix for staking from @dvc94ch

* log an error

* fix test runtime build

* Some test fixes

* Staking mock update to new session api.

* Fix build.

* Move OpaqueKeys to primitives.

* Use on_initialize instead of check_rotate_session.

* Update tests to new staking api.

* fixup mock

* Fix bond_extra_and_withdraw_unbonded_works.

* Fix bond_with_little_staked_value_bounded_by_slot_stake.

* Fix bond_with_no_staked_value.

* Fix change_controller_works.

* Fix less_than_needed_candidates_works.

* Fix multi_era_reward_should_work.

* Fix nominating_and_rewards_should_work.

* Fix nominators_also_get_slashed.

* Fix phragmen_large_scale_test.

* Fix phragmen_poc_works.

* Fix phragmen_score_should_be_accurate_on_large_stakes.

* Fix phragmen_should_not_overflow.

* Fix reward_destination_works.

* Fix rewards_should_work.

* Fix sessions_and_eras_should_work.

* Fix slot_stake_is_least_staked_validator.

* Fix too_many_unbond_calls_should_not_work.

* Fix wrong_vote_is_null.

* Fix runtime.

* Fix wasm runtime build.

* Update Cargo.lock

* Fix warnings.

* Fix grandpa tests.

* Fix test-runtime build.

* Fix template node build.

* Fix stuff.

* Update Cargo.lock to fix CI

* Re-add missing AuRa logs

Runtimes are required to know about every digest they receive ― they
panic otherwise.  This re-adds support for AuRa pre-runtime digests.

* Update core/consensus/babe/src/digest.rs

Co-Authored-By: DemiMarie-parity <[email protected]>

* Kill log trait and all that jazz.

* Refactor staking tests.

* Fix ci runtime wasm check.

* Line length 120.

* Make tests build again

* Remove trailing commas in function declarations

The `extern_functions!` macro doesn’t like them, perhaps due to a bug in
rustc.

* Fix type error

* Fix compilation errors

* Fix a test

* Another couple of fixes

* Fix another test

* More test fixes

* Another test fix

* Bump runtime.

* Wrap long line

* Fix build, remove redundant code.

* Issue to track TODO

* Leave the benchmark code alone.

* Fix missing `std::time::{Instant, Duration}`

* Indentation

* Aura ConsensusLog as enum
MTDK1 pushed a commit to bdevux/substrate that referenced this pull request Jul 10, 2019
* Draft of new sessions

* Reintroduce tuple impls

* Move staking module to new session API

* More work on staking and grandpa.

* Use iterator to avoid cloning and tuple macro

* Make runtime build again

* Polish the OpaqueKeys devex

* Move consensus logic into system & aura.

* Fix up system module

* Get build mostly going. Stuck at service.rs

* Building again

* Update srml/staking/src/lib.rs

Co-Authored-By: DemiMarie-parity <[email protected]>

* Refactoring out Consensus module, AuthorityIdOf, &c.

* Refactored out DigestItem::AuthoritiesChanged. Building.

* Remove tentative code

* Remove invalid comment

* Make Seal opaque and introduce nice methods for handling opaque items.

* Start to use proper digest for Aura authorities tracking.

* Fix up grandpa, remove system::Raw/Log

* Refactor Grandpa to use new logging infrastructure.

Also make authorityid/sessionkey static. Switch over to storing
authorities in a straight Vec.

* Building again

* Tidy up some AuthorityIds

* Expunge most of the rest of the AuthorityKey confusion.

Also, de-generify Babe and re-generify Aura.

* Remove cruft

* Untangle last of the `AuthorityId`s.

* Sort out finality_tracker

* Refactor median getting

* Apply suggestions from code review

Co-Authored-By: Robert Habermeier <[email protected]>

* Session tests works

* Update core/sr-primitives/src/generic/digest.rs

Co-Authored-By: DemiMarie-parity <[email protected]>

* Session tests works

* Fix for staking from @dvc94ch

* log an error

* fix test runtime build

* Some test fixes

* Staking mock update to new session api.

* Fix build.

* Move OpaqueKeys to primitives.

* Use on_initialize instead of check_rotate_session.

* Update tests to new staking api.

* fixup mock

* Fix bond_extra_and_withdraw_unbonded_works.

* Fix bond_with_little_staked_value_bounded_by_slot_stake.

* Fix bond_with_no_staked_value.

* Fix change_controller_works.

* Fix less_than_needed_candidates_works.

* Fix multi_era_reward_should_work.

* Fix nominating_and_rewards_should_work.

* Fix nominators_also_get_slashed.

* Fix phragmen_large_scale_test.

* Fix phragmen_poc_works.

* Fix phragmen_score_should_be_accurate_on_large_stakes.

* Fix phragmen_should_not_overflow.

* Fix reward_destination_works.

* Fix rewards_should_work.

* Fix sessions_and_eras_should_work.

* Fix slot_stake_is_least_staked_validator.

* Fix too_many_unbond_calls_should_not_work.

* Fix wrong_vote_is_null.

* Fix runtime.

* Fix wasm runtime build.

* Update Cargo.lock

* Fix warnings.

* Fix grandpa tests.

* Fix test-runtime build.

* Fix template node build.

* Fix stuff.

* Update Cargo.lock to fix CI

* Re-add missing AuRa logs

Runtimes are required to know about every digest they receive ― they
panic otherwise.  This re-adds support for AuRa pre-runtime digests.

* Update core/consensus/babe/src/digest.rs

Co-Authored-By: DemiMarie-parity <[email protected]>

* Kill log trait and all that jazz.

* Refactor staking tests.

* Fix ci runtime wasm check.

* Line length 120.

* Make tests build again

* Remove trailing commas in function declarations

The `extern_functions!` macro doesn’t like them, perhaps due to a bug in
rustc.

* Fix type error

* Fix compilation errors

* Fix a test

* Another couple of fixes

* Fix another test

* More test fixes

* Another test fix

* Bump runtime.

* Wrap long line

* Fix build, remove redundant code.

* Issue to track TODO

* Leave the benchmark code alone.

* Fix missing `std::time::{Instant, Duration}`

* Indentation

* Aura ConsensusLog as enum
@gnunicorn gnunicorn modified the milestones: 2.1, Polkadot Mar 4, 2020
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.

8 participants