* use pdqselect for median_algorithm selection instead of sorting the whole vec
* Make use of pqdselect clearer
Co-Authored-By: André Silva <andre.beat@gmail.com>
* Make use of pqdselect clearer
Co-Authored-By: André Silva <andre.beat@gmail.com>
* always fetch epoch from runtime
* node integration tests don't test light nodes
* give stand-in full node a FULL role
* rejig babe APIs
* introduce next-epoch-descriptor type
* overhaul srml-BABE epoch logic
* ensure VRF outputs end up in the right epoch-randomness
* rewrite `do_initialize` to remove unnecessary loop
* begin accounting for next epoch in epoch function
* slots passes header to epoch_data
* pass slot_number to SlotWorker::epoch_data
* begin extracting epoch-change logic into its own module
* aux methods for block weight
* aux methods for genesis configuration
* comment-out most, refactor header-check pipeline
* mostly flesh out verifier again
* reinstantiate babe BlockImport implementation
* reinstate import-queue instantiation
* reintroduce slot-worker implementation
* reinstate pretty much all the rest
* move fork-choice logic to BlockImport
* fix some, but not all errors
* patch test-runtime
* make is_descendent of slightly more generic
* get skeleton compiling when passing is_descendent_of
* make descendent-of-builder more succinct
* restore ordering of authority_index / slot_number
* start fiddling with tests
* fix warnings
* improve initialization architecture and handle genesis
* tests use correct block-import
* fix BABE tests
* fix some compiler errors
* fix node-cli compilation
* all crates compile
* bump runtime versions and fix some warnings
* tweak fork-tree search implementation
* do backtracking search in fork-tree
* node-cli integration tests now work
* fix broken assumption in test_connectivity
* babe tests fail for the right reasons.
* test genesis epoch logic for epoch_changes
* test that epochs can change between blocks
* First BABE SRML test
* Testing infrastructure for BABE
Also includes a trivial additional test.
* Apply suggestions from code review
Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com>
* A little more test progress
* More work on BABE testing
* Try to get the tests working
* Implement `UintAuthorityId`-based test mocks
* Fix compilation errors
* Adjust to upstream changes
* Block numbers are ignored in BABE epoch calculation
* authority_index() should ignore invalid authorities
* Fix compile error
* Add tests that session transitions happen
* Check if BABE produces logs
It currently does not.
* Fix test suite
This was really nasty, due to a type confusion that showed up as an
off-by-1 buffer error.
* Add additional tests
Most of these were derived from the current output, so they are only
useful to guard against regressions.
* Make the tests more readable
Also bump impl_version.
* Fix excessive line width
* Remove unused imports
* Update srml/babe/src/lib.rs
Co-Authored-By: André Silva <andre.beat@gmail.com>
* try to fix imports
* Fix build errors in test suite
* tests did not pass
* Try to get at least one digest to be output
Currently, the code emits either no digests (if I don’t call
`Session::rotate_session()` or two digests (if I do), which is wrong.
* More tests
They still don’t work, but this should help debugging.
* fix silly error
* Don’t even try to compile a broken test
* remove broken check_epoch test and add one for genesis epoch
* Check that the length of the pre-digests is correct
* Bump `impl_version`
* use epoch_for_descendent_of even for genesis
* account for competing block 1s
* finish srml-babe docs
Co-Authored-By: André Silva <andre.beat@gmail.com>
* address grumbles
`debug-assertions` can also be enabled in for release builds. This
introduces a new build-script that extracts the build type from the
`PROFILE` env variable and sets the `build_type` cfg.
* generalize tree_root to remove client.backend dependency
* replace client.backend.blockchain.header with client.header
* move used_state_cache_size into client info
* Create intermediate Setup State. Fixes#1134
* remove client.backend from finality proof
* update node-template
* move memory backend into test helper mode
* move test helper into client
* starting the big refactor, remove unused functions
* apply_finality
* apply_finality
* replacing more .backend from environment with client directly
* remove .backend from grandpa by using traits
* remove .backend from babe
* remove .backend from tests where it is not needed
* remove .backend from tests
* fixing tests
* fixing tests
* fixing more tests
* fixing tests
* fix all forks test
* fix style
* fixing unnecessary allocation
* remove old test.
* fix service docs
* apply suggestion
* minor clean ups
* turns out the test-helper features actually is being used!
* fixing line length.
* fix line length
* minor cleaning
* Apply suggestions from code review
thanks, @Basti
Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com>
* address grumbles
* simplify finalize block on client
* move block back into inner function
* Apply suggestions from code review
Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com>
* use as.ref instead of match
* Update core/client/src/backend.rs
Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com>
In order to have authorities (validators) discover each other, they need
to publish their public addresses by their ip address on the Kademlia
Dht indexed by their public key. This payload needs to be signed by a
key identifying them as a valid authority.
Code inside `/core` does not know the current set of authorities nor
can it assume what kind of cryptography primitives are currently in use.
Instead it can retrieve its public key and the current set of
authorities from the runtime and have it sign and verify Dht payloads.
This commit enables code in `/core` to do so by introducing a srml
module and runtime api to:
1. Retrieve own public key.
2. Retrieve public keys of current authority set.
3. Sign a Dht payload.
4. Verify a Dht payload.
This commit makes the logic from the previous commit
(`core/consensus/common/primitives.ConsensusApi`)
cf80af9255 obsolete and thus removes it.
* value range in blockchain cache
* revert me (testing for spurious failure)
* Revert "revert me (testing for spurious failure)"
This reverts commit 21a4a3cf5ee14e003541b779c41351e4f5e1122a.
* value ranges in consensus cache
* skip values in cache
* read epoch0 + epoch1 data from genesis in babe
* sync authorities + session validators at genesis
* removed some debug printlns
* fixed cache encoding
* Revert "skip values in cache"
This reverts commit ce451c32823aaa4b67d99ca5b58f1bf3984df4db.
* Revert "value ranges in consensus cache"
This reverts commit 9062f9434cddd14a01275ddbfcd904b04282e63b.
* get rid of cache::AUTHORITIES in Babe
* cleaning up
* cleaning up
* update spec version
* lost changes
* fixed tests
* Update node/runtime/src/lib.rs
Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com>
* fix once-per-block condition
* fix standalone babe + temp_storage in BuildGenesis
* fix benhes compilation
* fixed comment
* re-added light nodes to integration tests
* finalize_with_ancestors from extra_requests
* post-merge fix
* aaand removed debug code
* (another one)
* fix warn in logs (do not call ForkTree::finalize twice for the same block)
* sync digest.next_authorities with actual next authorities
* more docs
* reverting all commits affecting storage
* also remove keys from babe trait
* fixed warnings
* post-merge fixes
* reverted some redundant changes
* reverted more changes
* Add transaction pool to babe import queue
* Add transaction pool to Babe check header
* Fix tests
* Add tx pool to Aura import_queue
* Fix tests, node-template
* Add comments regarding unused _transaction_pool
* Make tx pool optional in check_header
* Scale trait and move to u32 blocknumbers.
* Fixes
* Cleanups
* Update node/runtime/src/lib.rs
Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com>
* Fix up some of the factory stuff.
* Update core/sr-primitives/src/traits.rs
Co-Authored-By: Shawn Tabrizi <shawntabrizi@gmail.com>
* Move Nonce/Index to u32 (#3361)
* Force a non-borked version of upstream crate
* Line lengths and runtime version bump
* Add Call type to extensible transactions.
Cleanup some naming
* Merge Resource and BlockExhausted into just Exhausted
* Fix
* Another fix
* Call
* Some fixes
* Fix srml tests.
* Fix all tests.
* Refactor crypto so each application of it has its own type.
* Introduce new AuthorityProvider API into Aura
This will eventually allow for dynamic determination of authority
keys and avoid having to set them directly on CLI.
* Introduce authority determinator for Babe.
Experiment with modular consensus API.
* Work in progress to introduce KeyTypeId and avoid polluting API
with validator IDs
* Finish up drafting imonline
* Rework offchain workers API.
* Rework API implementation.
* Make it compile for wasm, simplify app_crypto.
* Fix compilation of im-online.
* Fix compilation of im-online.
* Fix more compilation errors.
* Make it compile.
* Fixing tests.
* Rewrite `keystore`
* Fix session tests
* Bring back `TryFrom`'s'
* Fix `srml-grandpa`
* Fix `srml-aura`
* Fix consensus babe
* More fixes
* Make service generate keys from dev_seed
* Build fixes
* Remove offchain tests
* More fixes and cleanups
* Fixes finality grandpa
* Fix `consensus-aura`
* Fix cli
* Fix `node-cli`
* Fix chain_spec builder
* Fix doc tests
* Add authority getter for grandpa.
* Test fix
* Fixes
* Make keystore accessible from the runtime
* Move app crypto to its own crate
* Update `Cargo.lock`
* Make the crypto stuff usable from the runtime
* Adds some runtime crypto tests
* Use last finalized block for grandpa authority
* Fix warning
* Adds `SessionKeys` runtime api
* Remove `FinalityPair` and `ConsensusPair`
* Minor governance tweaks to get it inline with docs.
* Make the governance be up to date with the docs.
* Build fixes.
* Generate the inital session keys
* Failing keystore is a hard error
* Make babe work again
* Fix grandpa
* Fix tests
* Disable `keystore` in consensus critical stuff
* Build fix.
* ImOnline supports multiple authorities at once.
* Update core/application-crypto/src/ed25519.rs
* Merge branch 'master' into gav-in-progress
* Remove unneeded code for now.
* Some `session` testing
* Support querying the public keys
* Cleanup offchain
* Remove warnings
* More cleanup
* Apply suggestions from code review
Co-Authored-By: Benjamin Kampmann <ben.kampmann@googlemail.com>
* More cleanups
* JSONRPC API for setting keys.
Also, rename traits::KeyStore* -> traits::BareCryptoStore*
* Bad merge
* Fix integration tests
* Fix test build
* Test fix
* Fixes
* Warnings
* Another warning
* Bump version.
* babe: don't execute median algorithm
* babe: checked sub in median calculation
* node: bump impl_version to make ci happy
* babe: remove forbid dead_code
The goal of the commit is to be able to retrieve the current set of
authorities without needing to know the concrete consensus mechanism in
place.
In order to achieve the above this commit introduces the
`core/consensus/common/primitives` crate, declaring the `ConsensusApi`
runtime API. In addition it implements the above mentioned trait
definition in `node/runtime` by returning the current authorities of the
BABE consensus mechanism.
* Switch consensus-common to new futures
* Fix tests
* More tests fixing
* Make Proposer, OnSlot and SyncOracle mut
* Make the Environment mut as well
* Fix test
* Fix Babe tests
* Babe fixes
* Fix CLI service tests
* Fix Babe tests
* Remove unnecessary trait bound
* Inline the code of BlockBuilder and AuthoringApi
* Remove warning lint
* Bounds simplification
* Imports simplification
* Don't panic on bad generated block
* Code style
* Add doc example
* Remove dependency on aura
* Order dependencies alphabetically
* Minor style
* Switch consensus-common to new futures
* Fix tests
* More tests fixing
* Pass the block_import by value when importing
* Rewrite the multi-blocks import as a future
* Add some comments
* Add a delay between each block
* Fix Babe tests
* Reverse white space change
* babe: add babe module trait
* babe: track current slot and epoch start slot
* babe: implement ShouldEndSession based on epochs
* babe: rename weight type to avoid ambiguities
* babe: expose epoch start slot in Epoch digest
* babe: use epoch start for validating epoch transitions
* babe: make the epoch duration a parameter type
* babe: remove unused fields from config
* node: update runtime to use babe instead of aura
* node: use babe instead of aura
* core: generate sr25519 keys from seed and add to keystore
* core: remove AuthorityKeyring
* node: remove unused primitive types related to babe crypto
* uniform babe primitives crate import name
* wrap long lines
* babe: fix find_epoch_digest
* fork-tree: fix find_node_where
* node: set babe epoch duration to "10 minutes"
* babe: cleanup import key cache if authorities don't change
* node: make integration test compile (but fail)
* node: bump spec_version
* node: fix import
* babe: don't use constants in storage fields array sizes
* babe: account for first epoch slot way in the past
* babe: signal next epoch change (not current)
* babe: calculate next epoch randomness with next epoch index
* babe: track next epoch in node
* babe: cache current epoch and authorities separately
* babe: generate valid babe vrf proofs in integration test
* babe: cleanup claim_slot
* babe: perform threshold calculation according to spec
* babe: compute relative weight in threshold
* babe: more precise threshold calculation
* babe: use floats for threshold exponent calculation
* babe: update constant c
* Changes for the next libp2p release:
* Updates to the Kademlia APIs.
* Updated imports due to the extracted libp2p-swarm crate.
* ...
Still pending at least the following:
* rust-libp2p/#1189
* rust-libp2p/#1191
* rust-libp2p/#1194
* Use Quorum::One.
The previous choice was apparently arbitrary.
* Use libp2p-0.11 from crates.io. Address feedback.
* Correct imports after merge.
* Add `epoch` field to `SlotInfo`
* Add slot calculations
* More work on epochs in BABE
* Apply suggestions from code review
Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com>
* Typo: `/` not `%` for division
* Delete useless `LastSlotInEpoch::put(false)`
* Bump `spec_version`
* Make test suite pass again
* Implement BABE epoch randomness signing
* Try to fix compilation
Currently causes a stack overflow in the compiler
* Fix rustc stack overflow
* Add missing `PartialEq` and `Eq` implementations
* Fix compile errors in test suite
* Another silly compile error
* Clone `epoch`
* Fix compile error in benchmarks
* Implement `clone` for `Epoch`
* Merge master
* AUTHORING TEST PASSES!!!
* Fix compilation
* Bump `spec_version`
* Fix compilation
* Fix compilation (again)
* Remove an outdated FIXME
* Fix run.sh and move it to scripts/
* Delete commented-out code
* Fix documentation
Co-Authored-By: André Silva <andre.beat@gmail.com>
* Fix BABE initialization and refactor
* Respond to review
* typo
* Remove useless data in `CheckedHeader::Deferred`
* Remove `slot_number` from Epoch
It is not needed, and only served to waste space and cause confusion.
* Remove epoch from BABE digests
* Move digest.rs to primitives
* Fix incorrect warning names
* Fix compile error
* Consistent field naming for BABE digests
* More compiler error fixex
* Unbound variable
* more compile errors
* another compile error
* Fix compile errors in runtime
* another compile error
* Another compile error
* Fix wasm build
* missing import
* Fix more compile errors
* yet another compile error
* compile fix in test runtime
* Fix and simplify the BABE runtime
The BABE runtime was massively overcomplicated and also wrong. It
assumed it needed to:
1. delay new authorities taking effect until the next epoch
2. not delay emitting `Consensus` digests to mark epoch changes
However, the first is handled by the `srml_session` crate, and the
second is flat-out incorrect: `Consensus` digests take effect
immediately. Furthermore, `srml_babe` tried to duplicate the
functionality of `srml_session::PeriodicSession`, but did it both
clumsily and incorrectly. Fortunately, the new code is simpler and far
more likely to be correct.
* Use `system` to get the test authorities
The genesis block used by tests defines no authorities. Only the test
suite is affected.
* Fix test runtime impl for BabeApi::epoch() with std
* Fix compilation
* Cached authorities are in the form of an epoch
not a `Vec<AuthorityId>`.
* `slots_per_epoch` is not fixed in general
The BABE code previously assumed `slots_per_epoch` to be a constant,
but that assumption is false in general. Furthermore, removing this
assumption also allows a lot of code to go away.
* fix compile error
* Implement epoch checker
* Fix runtime compilation
* fork-tree: add method for finding a node in the tree
* babe: register epoch transitions in fork tree and validate them
* fork-tree: add method for arbitrary pruning
* Expose the queued validator set to SRML modules
BABE needs to know not only what the current validator set is, but also
what the next validator set will be. Expose this to clients of the
session module.
* Bump hex-literal
Hopefully this will fix the panic
* babe: prune epoch change fork tree on finality
* babe: validate epoch index on transition
* babe: persist epoch changes tree
* Fix compile error in tests
* Fix compile error in tests
* Another compile error in tests
* Fix compilation of tests
* core: move grandpa::is_descendent_of to client utils
* babe: use is_descendent_of from client utils
* babe: extract slot_number from pre_digest in import_block
* Move BABE testsuite to its own file
* Initial part of test code
* Missing `WeightMultiplierUpdate` in test-runtime
* bump `spec_version`
* Add a test that a very bogus is rejected
* Run the tests again
* Fix compiler diagnostics
* Bump `spec_version`
* Initial infrastructure for mutation testing
* Mutation testing of block import
* babe: revert epoch changes in case of block import error
* babe: fix logging target
* babe: BabeBlockImport doesn't box inner BlockImport
* babe: fix epoch check in block import
* babe: populate authorities cache on block authorship
* babe: remove unused functions
* babe: use RANDOMNESS_LENGTH const
* babe: remove unneeded config parameters
* core: revert change to hex dependency version
* cleanup gitignore
* babe: add docs to aux_schema
* babe: remove useless drops in tests
* babe: remove annoying macos smart quotes
* fork-tree: docs
* fork-tree: add tests
* babe: style
* babe: rename randomness config variable
* babe: remove randomness helper function
* babe: style fixes
* babe: add docs
* babe: fix tests
* node: bump spec_version
* babe: fix tests