- Async-backing related primitives are stable `primitives::v6`
- Async-backing API is now part of `api_version(7)`
- It's enabled on Rococo and Westend runtimes
---------
Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
* Rename `polkadot-parachain` to `polkadot-parachain-primitives`
While doing this it also fixes some last `rustdoc` issues and fixes
another Cargo warning related to `pallet-paged-list`.
* Fix compilation
* ".git/.scripts/commands/fmt/fmt.sh"
* Fix XCM docs
---------
Co-authored-by: command-bot <>
* move min backing votes const to runtime
also cache it per-session in the backing subsystem
Signed-off-by: alindima <alin@parity.io>
* add runtime migration
* introduce api versioning for min_backing votes
also enable it for rococo/versi for testing
* also add min_backing_votes runtime calls to statement-distribution
this dependency has been recently introduced by async backing
* remove explicit version runtime API call
this is not needed, as the RuntimeAPISubsystem already takes care
of versioning and will return NotSupported if the version is not
right.
* address review comments
- parametrise backing votes runtime API with session index
- remove RuntimeInfo usage in backing subsystem, as runtime API
caches the min backing votes by session index anyway.
- move the logic for adjusting the configured needed backing votes with the size of the backing group
to a primitives helper.
- move the legacy min backing votes value to a primitives helper.
- mark JoinMultiple error as fatal, since the Canceled (non-multiple) counterpart is also fatal.
- make backing subsystem handle fatal errors for new leaves update.
- add HostConfiguration consistency check for zeroed backing votes threshold
- add cumulus accompanying change
* fix cumulus test compilation
* fix tests
* more small fixes
* fix merge
* bump runtime api version for westend and rollback version for rococo
---------
Signed-off-by: alindima <alin@parity.io>
Co-authored-by: Javier Viola <javier@parity.io>
* First baby steps
* Split scheduler into several modules
* Towards a more modular approach for scheduling
* move free_cores; IntoInterator -> BTreeMap
* Move clear()
* Move more functions out of scheduler
* Change weight composition
* More abstraction
* Further refactor
* clippy
* fmt
* fix test-runtime
* Add parathreads pallet to construct_runtime!
* Make all runtimes use (Parachains, Parathreads) scheduling
* Delete commented out code
* Remove parathreads scheduler from westend, rococo, and kusama
* fix rococo, westend, and kusama config
* Revert "fix rococo, westend, and kusama config"
This reverts commit 59e4de380d5c7d17eaaba5e2c2b81405de3465e3.
* Revert "Remove parathreads scheduler from westend, rococo, and kusama"
This reverts commit 4c44255296083ac5670560790ed77104917890a4.
* Remove CoreIndex from free_cores
* Remove unnecessary struct for parathreads
* parathreads provider take 1
* Comment out parathread tests
* Pop into lookahead
* fmt
* Fill lookahead with two entries for parachains
* fmt
* Current stage
* Towards ab parathreads
* no AB use
* Make tests typecheck
* quick hack to set scheduling lookahead to 1
* Fix scheduler tests
* fix paras_inherent tests
* misc
* Update more of a test
* cfg(test)
* some cleanup
* Undo paras_inherent changes
* Adjust paras inherent tests
* Undo changes to v2 primitives
* Undo v2 mod changes to tests
* minor
* Remove parathreads assigner and pallet
* minor
* minor
* more cleanup
* fmt
* minor
* minor
* minor
* Remove on_new_session from assignment provider
* Make adder collator integration test pass
* disable failing unit tests
* minor
* minor
* re-enable one unit test
* minor
* handle retries, add concluded para to pop interface
* comment out unused code
* Remove core_para from interface
* Remove first claimqueue element on clear if None instead removing all Nones
* Move claimqueue get out of loop
* Use VecDeque instead of Ved in ClaimQueue
* Make occupied() AB ready(?)
* handle freed disputed in clear_and_fill_claimqueue
* clear_and_fill_claimqueue returns scheduled Vec
* Rename and minor refactor
* return position of assignment taken from claimqueue
* minor
* Fix session boundary parachains number change + extended test
* Fix runtimes
* Fix polkadot runtime
* Remove polkadot pallet from benchmarks
* fix test runtime
* Add storage migration
* Minor refactor
* Minor
* migratin typechecks
* Add migration to runtimes
* Towards modular scheduling II (#6568)
* Add post migration check
* pebkac
* Disable migrations but mine
* Revert "Disable migrations but mine"
This reverts commit 4fa5c5a370c199944a7e0926f50b08626bfbad4c.
* Move scheduler migration
* Revert "Move scheduler migration"
This reverts commit a16b1659a907950bae048a9f7010f2aa76e02b6d.
* Fix migration
* cleanup
* Don't lose retries value anymore
* comment out test function
* Remove retries value from Assignment again
* minor
* Make collator for parathreads optional
* data type refactor
* update scheduler tests
* Change test function cfg
* comment out test function
* Try cfg(test) only
* fix cfg flags
* Add get_max_retries function to provider interface (#7047)
* Fix merge commit
* pebkac
* fix merge
* update cargo.lock
* fix merge
* fix merge
* Use btreemap instead of vec, fix scheduler calls.
* Use imported `ScheduledCore`
* Remove unused import in inclusion tests
* Use keys() instead of mapping over a BTreeMap
* Fix migrations for parachains scheduler
* Use BlockNumberFor<T> everywhere in scheduler
* Add on demand assignment provider pallet (#7110)
* Address some PR comments
* minor
* more cleanup
* find_map and timeout availability fixes
* Change default scheduling_lookahead to 1
* Add on demand assignment provider pallet
* Move test-runtime to new assignment provider
* Run cargo format on scheduler tests
* minor
* Mutate cores in single loop
* timeout predicate simplification
* claimqueue desired size fix
* Replace expect by ok_or
* More improvements
* Fix push back order and next_up_on_timeout
* minor
* session change docs
* Add pre_new_session call to hand pre session updates
* Remove sc_network dependency and PeerId from unnecessary data structures
* Remove unnecessary peer_ids
* Add OnDemandOrdering proxy (#7156)
* Add OnDemandBidding proxy
* Fix names
* OnDemandAssigner for rococo only
* Check PeerId in collator protocol before fetching collation
* On occupied, remove non occupied cores from the claimqueue front and refill
* Add missing docs
* Comment out unused field
* fix ScheduledCore in tests
* Fix the fix
* pebkac
* fmt
* Fix occupied dropping
* Remove double import
* ScheduledCore fixes
* Readd sc-network dep
* pebkac
* OpaquePeerId -> PeerId in can_collate interface
* Cargo.lock update for interface change
* Remove checks not needed anymore?
* Drop occupied core on session change if it would time out after the new session
* Add on demand assignment provider pallet
* Move test-runtime to new assignment provider
* Run cargo format on scheduler tests
* Add OnDemandOrdering proxy (#7156)
* Add OnDemandBidding proxy
* Fix names
* OnDemandAssigner for rococo only
* Remove unneeded config values
* Update comments
* Use and_then for queue position
* Return the max size of the spot queue on error
* Add comments to add_parathread_entry
* Add module comments
* Add log for when can_collate fails
* Change assigner queue type to `Assignment`
* Update assignment provider tests
* More logs
* Remove unused keyring import
* disable can_collate
* comment out can_collate
* Can collate first checks set if empty
* Move can_collate call to collation advertisement
* Fix backing test
* map to loop
* Remove obsolete check
* Move invalid collation test from backing to collator-protocol
* fix unused imports
* fix test
* fix Debug derivation
* Increase time limit on zombienet predicates
* Increase zombienet timeout
* Minor
* Address some PR comments
* Address PR comments
* Comment out failing assert due to on-demand assigner missing
* remove collator_restrictions info from backing
* Move can_collate to ActiveParas
* minor
* minor
* Update weight information for on demand config
* Add ttl to parasentry
* Fix tests missing parasentry ttl
* Adjust scheduler tests to use ttl default values
* Use match instead of if let for ttl drop
* Use RuntimeDebug trait for `ParasEntry` fields
* Add comments to on demand assignment pallet
* Fix spot traffic calculation
* Revert runtimedebug changes to primitives
* Remove runtimedebug derivation from `ParasEntry`
* Mention affinity in pallet level docs
* Use RuntimeDebug trait for ParasEntry child types
* Remove collator restrictions
* Fix primitive versioning and other merge issues
* Fix tests post merge
* Fix node side tests
* Edit parascheduler migration for clarity
* Move parascheduler migration up to next release
* Remove vestiges from merge
* Fix tests
* Refactor ttl handling
* Remove unused things from scheduler tests
* Move on demand assigner to own directory
* Update documentation
* Remove unused sc-network dependency in primitives
Was used for collator restrictions
* Remove unused import
* Reenable scheduler test
* Remove unused storage value
* Enable timeout predicate test and fix fn
Turns out that the issue with the compiler is fixed and we can now
use impl Trait in the manner used here.
* Remove unused imports
* Add benchmarking entry for perbill in config
* Correct typo
* Address review comments
* Log out errors when calculating spot traffic.
* Change parascheduler's log target name
* Update scheduler_common documentation
* Use mutate for affinity fns, add tests
* Add another on demand affinity test
* Unify parathreads and parachains in HostConfig (take 2) (#7452)
* Unify parathreads and parachains in HostConfig
* Fixed missed occurences
* Remove commented out lines
* `HostConfiguration v7`
* Fix version check
* Add `MigrateToV7` to `Unreleased`
* fmt
* fmt
* Fix compilation errors after the rebase
* Update runtime/parachains/src/scheduler/tests.rs
Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com>
* Update runtime/parachains/src/scheduler/tests.rs
Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com>
* fmt
* Fix migration test
* Fix tests
* Remove unneeded assert from tests
* parathread_cores -> on_demand_cores; parathread_retries -> on_demand_retries
* Fix a compilation error in tests
* Remove unused `use`
* update colander image version
---------
Co-authored-by: alexgparity <alex.gremm@parity.io>
Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com>
Co-authored-by: Javier Viola <javier@parity.io>
* Fix branch after merge with master
* Refactor out duplicate checks into a helper fn
* Fix tests post merge
* Rename add_parathread_assignment, add test
* Update docs
* Remove unused on_finalize function
* Add weight info to on demand pallet
* Update runtime/parachains/src/configuration.rs
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
* Update runtime/parachains/src/scheduler_common/mod.rs
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
* Update runtime/parachains/src/assigner_on_demand/mod.rs
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
* Add benchmarking to on demand pallet
* Make place_order test check for success
* Add on demand benchmarks
* Add local test weights to rococo runtime
* Modify TTL drop behaviour to not skip claims
Previous behaviour would jump a new claim from the assignment provider
ahead in the claimqueue, assuming lookahead is larger than 1.
* Refactor ttl test to test claimqueue order
* Disable place_order ext. when no on_demand cores
* Use default genesis config for benchmark tests
* Refactor config builder param
* Move lifecycle test from scheduler to on demand
* Remove unneeded lifecycle test
Paras module via the parachain assignment provider doesn't provide
new assignments if a parachain loses it's lease. The on demand
assignment provider doesn't provide an assignment that is not a
parathread.
* Re enable validator shuffle test
* More realistic weights for place_order
* Remove redundant import
* Fix backwards compatibility (hopefully)
* ".git/.scripts/commands/bench/bench.sh" --subcommand=runtime --runtime=rococo --target_dir=polkadot --pallet=runtime_parachains::assigner_on_demand
* Fix tests.
* Fix off-by-one.
* Re enable claimqueue fills test
* Re enable schedule_rotates_groups test
* Fix fill_claimqueue_fills test
* Re enable next_up_on_timeout test, move fn
* Do not pop from assignment provider when retrying
* Fix tests missing collator in scheduledcore
* Add comment about timeout predicate.
* Rename parasentry retries to availability timeouts
* Re enable schedule_schedules... test
* Refactor prune retried test to new scheduler
* Have all scheduler tests use genesis_cfg fn
* Update docs
* Update copyright notices on new files
* Rename is_parachain_core to is_bulk_core
* Remove erroneous TODO
* Simplify import
* ".git/.scripts/commands/bench/bench.sh" --subcommand=runtime --runtime=rococo --target_dir=polkadot --pallet=runtime_parachains::configuration
* Revert AdvertiseCollation order shuffle
* Refactor place_order into keepalive and allowdeath
* Revert rename of hrmp max inbound channels
parachain encompasses both on demand and slot auction / bulk.
* Restore availability_timeout_predicate function
* Clean up leftover comments
* Update runtime/parachains/src/scheduler/tests.rs
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
* ".git/.scripts/commands/bench/bench.sh" --subcommand=runtime --runtime=westend --target_dir=polkadot --pallet=runtime_parachains::configuration
---------
Co-authored-by: alexgparity <alex.gremm@parity.io>
Co-authored-by: alexgparity <115470171+alexgparity@users.noreply.github.com>
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
Co-authored-by: Javier Viola <javier@parity.io>
Co-authored-by: eskimor <eskimor@no-such-url.com>
Co-authored-by: command-bot <>
* On Demand - update weights and small nits (#7605)
* Remove collator restriction test in inclusion
On demand parachains won't have collator restrictions implemented in
this way but will instead use a preferred collator registered to a
`ParaId` in `paras_registrar`.
* Remove redundant config guard for test fns
* Update weights
* Update WeightInfo for on_demand assigner
* Unify assignment provider parameters into one call (#7606)
* Combine assignmentprovider params into one fn call
* Move scheduler_common to a module under scheduler
* Fix ttl handling in benchmark builder
* Run cargo format
* Remove obsolete test.
* Small improvement.
* Use same migration pattern as config module
* Remove old TODO
* Change log target name for assigner on demand
* Fix migration
* Fix clippy warnings
* Add HostConfiguration storage migration to V8
* Add `MigrateToV8` to unreleased migrations for all runtimes
* Fix storage version check for config v8
* Set `StorageVersion` to 8 in `MigrateToV8`
* Remove dups.
* Update primitives/src/v5/mod.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
---------
Co-authored-by: alexgparity <alex.gremm@parity.io>
Co-authored-by: alexgparity <115470171+alexgparity@users.noreply.github.com>
Co-authored-by: antonva <anton.asgeirsson@parity.io>
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
Co-authored-by: Anton Vilhelm Ásgeirsson <antonva@users.noreply.github.com>
Co-authored-by: Javier Viola <javier@parity.io>
Co-authored-by: eskimor <eskimor@no-such-url.com>
Co-authored-by: Bastian Köcher <git@kchr.de>
* Remove superflous parameter `overseer_enable_anyways`
We don't need this flag, as we don't need the overseer enabled when the
node isn't a collator or validator.
* Rename `IsCollator` to `IsParachainNode`
`IsParachainNode` is more expressive and also encapsulates the state of
the parachain node being a full node. Some functionality like the
overseer needs to run always when the node runs alongside a parachain
node. The parachain node needs the overseer to e.g. recover PoVs. Other
things like candidate validation or pvf checking are only required for
when the node is running as validator.
* FMT
* Fix CI
* Polkadot is at .42
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Kusama is on .43
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Westend is at .43
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Rococo is at .42
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Make UMP limits migration more idempotentish
Already 100% idempotent per design, but not it wont try to schedule
an unneeded upgrade. Note that the case that the new upgrade is
already scheduled is not checked. In that case it will still upgrade
the same thing again, but should be no problem.
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Clippy
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Delete old migration code
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* fmt
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove old tests
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Polkadot is at .43
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove a ton of shit
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove more
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove unused code
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Rococo is NOT yet at .43, but remove anyway
Rococo is the only runtime that is not yet at .43, but keeping
the migration code just for it is not worth it since devops
can just apply it at any time.
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove old test
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
---------
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: parity-processbot <>
* Happy New Year!
* Remove year entierly
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove years from copyright notice in the entire repo
---------
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove use of Store trait from runtime directory
* Remove Store trait usage from xcm directory
* Run cargo fmt
* update lockfile for {"substrate"}
---------
Co-authored-by: parity-processbot <>
* Use a `BoundedVec` in `ValidationResult`
> Use a `BoundedVec` for `upward_messages` and `horizontal_messages` in order to
> limit the number of individual messages/memory allocations right at decoding
> time. The reason for this is that the `ValidationResult` may contain a code
> upgrade (including a full PVF binary), so the total size limit can't be set
> too low and this limit will still allow several millions of upward messages,
> which will (due to the memory allocator overhead) already have a
> non-negligible memory footprint in decoded form.
* List all fields when hashing so we don't miss one
* Define types for `BoundedVec`s of messages
* Fix test compile errors
* Depend on `bounded-collections` 0.1.4 (fixes allocation issue)
* Fix compilation issue
* Derive `Hash` instead of manual `impl`
* Avoid use of unwrap
* disputes pallet: Filter disputes with votes less than supermajority threshold
* Remove `max_spam_slots` usages
* Remove `SpamSlots`
* Remove `SpamSlotChange`
* Remove `Error<T>::PotentialSpam` and stale comments
* `create_disputes_with_no_spam` -> `create_disputes`
* Make tests compile - wip commit
* Rework `test_dispute_timeout`. Rename `update_spam_slots` to `filter_dispute_set`
* Remove `dispute_statement_becoming_onesided_due_to_spamslots_is_accepted` and `filter_correctly_accounts_spam_slots` -> they bring no value with removed spam slots
* Fix `test_provide_multi_dispute_success_and_other`
* Remove an old comment
* Remove spam slots from tests - clean todo comments
* Remove test - `test_decrement_spam`
* todo comments
* Update TODO comments
* Extract `test_unconfirmed_are_ignored` as separate test case
* Remove dead code
* Fix `test_unconfirmed_are_ignored`
* Remove dead code in `filter_dispute_data`
* Fix weights (related to commit "Remove `SpamSlots`")
* Disputes migration - first try
* Remove `dispute_max_spam_slots` + storage migration
* Fix `HostConfig` migration tests
* Deprecate `SpamSlots`
* Code review feedback
* add weight for storage version update
* fix bound for clear()
* Fix weights in disputes migration
* Revert "Deprecate `SpamSlots`"
This reverts commit 8c4d967c7b061abd76ba8b551223918c0b9e6370.
* Make mod migration public
* Remove `SpamSlots` from disputes pallet and use `storage_alias` in the migration
* Fix call to `clear()` for `SpamSlots` in migration
* Update migration and add a `try-runtime` test
* Add `pre_upgrade` `try-runtime` test
* Fix some test names in `HostConfiguration` migration
* Link spamslots migration in all runtimes
* Add `test_unconfirmed_disputes_cause_block_import_error`
* Update guide
- Remove `SpamSlots` related information from roadmap/implementers-guide/src/runtime/disputes.md
- Add 'Disputes filtering' to Runtime section of the Implementor's guide
* Update runtime/parachains/src/configuration/migration.rs
Co-authored-by: Marcin S. <marcin@bytedude.com>
* Code review feedback - update logs
* Code review feedback: fix weights
* Update runtime/parachains/src/disputes.rs
Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com>
* Additional logs in disputes migration
* Fix merge conflicts
* Add version checks in try-runtime tests
* Fix a compilation warning`
Co-authored-by: Marcin S. <marcin@bytedude.com>
Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com>
* remove v0 primitives from polkadot-primitives
* first pass: remove v0
* fix fallout in erasure-coding
* remove v1 primitives, consolidate to v2
* the great import update
* update runtime_api_impl_v1 to v2 as well
* guide: add `Version` request for runtime API
* add version query to runtime API
* reintroduce OldV1SessionInfo in a limited way
* Add `without_storage_info`
The MaxEncodedLen trait is now enforced by default in Substrate.
All pallets missing an implementation need to be marked with
`without_storage_info` now.
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Remove `generate_storage_info`
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Add more `without_storage_info`
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* update lockfile for {"substrate"}
Co-authored-by: parity-processbot <>
Closes#4248
Impose additional constraint on configuration consistency:
`validation_upgrade_delay` should not be less than or equal to 1.
See the original issue for more details.
This commit refactors the consistency checks. Instead of each individual
setter performs its checks locally, we delegate those checks to the
already existing function `check_consistency`. This removes duplication
and simplifies the logic.
A motivating example of this one is the next PR in the stack that will
introduce a check for a field, which validity depends on the validity of
other two fields. Without this refactoring we will have to place a check
not only to the field in question, but also to the other two fields so
that if they are changed they do not violate consistency criteria. It's
easy to imagine how this can go unwieldy with the number of checks.
This also adds a test that verifies that the default chain spec host
configuration is consistent.
Refactor the configuration module's initializer_on_new_session in such a
way that it returns the configuration. This would make it inline with
other special initialization routines like `shared`'s or `paras`.
This will be useful in a following PR that will check consistency of the
configuration before setting it.
* parachains: Fix configuration module
Closes#4529Closes#4533
I figured that trying to avoid updates does not really worth it to keep.
This is because we seem to not update the configuration often and when
we do we approach this carefully. Thus possibility of a redundant update
is really negligable. At the same time, if such a redundant update does
happen then the effects of that are really small: just some wasted
storage interactions.
On the other hand, making it work was a little bit annoying. With the
proper fix for the pending updates this would be even more annoying
since now we would have to add combinatorically more cases to test this.
So I figured that I will just scrap that and simplify the code.
* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::configuration --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_configuration.rs
* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_parachains::configuration --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_parachains_configuration.rs
* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::configuration --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_configuration.rs
* review fixes
Co-authored-by: Parity Bot <admin@parity.io>
* pvf-precheck: Integrate PVF pre-checking into paras module
Closes#4009
This is the most of the runtime-side change needed for #3211.
Here is how it works.
The PVF pre-checking can be triggered either by an upgrade or by
onboarding (i.e. calling `schedule_para_initialize`). The PVF
pre-checking process is identified by the PVF code hash that is being
voted on. If there is already PVF pre-checking process running, then no
new PVF pre-checking process will be started. Instead, we just subscribe
to the existing one.
If there is no PVF pre-checking process running but the PVF code hash
was already saved in the storage, that necessarily means (I invite the
reviewers to double-check this invariant) that the PVF already passed
pre-checking. This is equivalent to instant approving of the PVF.
The pre-checking process can be concluded either by obtaining a
supermajority or if it expires.
Each validator checks the list of PVFs available for voting. The vote is
binary, i.e. accept or reject a given PVF. As soon as the supermajority
of votes are collected for one of the sides of the vote, the voting is
concluded in that direction and the effects of the voting are enacted.
Only validators from the active set can participate in the vote. The set
of active validators can change each session. That's why we reset the
votes each session. A voting that observed a certain number of sessions
will be rejected.
The effects of the PVF accepting depend on the operations requested it:
1. All onboardings subscribed to the approved PVF pre-checking process will
get scheduled and after passing 2 session boundaries they will be onboarded.
2. All upgrades subscribed to the approved PVF pre-checking process will
get scheduled very similarly to the existing process. Upgrades with
pre-checking are really the same process that is just delayed by the
time required for pre-checking voting. In case of instant approval the
mechanism is exactly the same. This is important from parachains
compatibility standpoint since following the delayed upgrade requires
the parachain to implement
https://github.com/paritytech/cumulus/pull/517.
In case, PVF pre-checking process was concluded with rejection, then all
the requesting operations get cancelled. For onboarding it means it gets
without movement: the lifecycle of such parachain is terminated on the
`Onboarding` state and after rejection the lifecycle is none. That in
turn means that the caller can attempt registering the parachain once
more. For upgrading it means that the upgrade process is aborted: that
flashes go-ahead signal with `Abort` flag.
Rejection leads to removing the allegedly bad validation code from the
chain storage. Among other things, this implies that the operation can
be re-requested. That allows for retrying an operation in case there was
some bug. At the same time it does not look as a DoS vector due to the
caching performed by the nodes.
PVF pre-checking can be enabled and disabled. Initially, according to
the changes in #4420, this mechanism is disabled. Triggering the PVF
pre-checking when it is disabled just means that we insta approve the
requesting operation. This should lead to the behavior being unchanged.
Follow-ups:
- expose runtime APIs
* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_parachains_paras.rs
* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_paras.rs
* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_paras.rs
* cargo run --quiet --release --features runtime-benchmarks -- benchmark --chain=rococo-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/rococo/src/weights/runtime_parachains_paras.rs
* Review fixes
Co-authored-by: Parity Bot <admin@parity.io>
This PR is a part of #3211.
This PR adds three new fields into the `HostConfiguration` structure.
The fields are going to be used in PRs down the stack.
This change requires migration, so this PR performs runtime storage
migration for configuration module from version 1 to version 2.
This PR closes#4010 and subsumes #4177.