* initial implementation of lifecycles and upgrades
* clean up a bit
* fix doc comment
* more rigid lifecycle checks
* include paras which are transitioning, and lifecycle query
* format guide
* update api
* update guide
* explicit outgoing state, fix genesis
* handle outgoing with transitioning paras
* do not include transitioning paras in identifier
* Update roadmap/implementers-guide/src/runtime/paras.md
* Update roadmap/implementers-guide/src/runtime/paras.md
* Update roadmap/implementers-guide/src/runtime/paras.md
* Apply suggestions from code review
* Use matches macro
* Correct terms
* Apply suggestions from code review
* actions queue
* Revert "actions queue"
This reverts commit b2e9011ec8937d6c73e99292416c9692aeb30f73.
* collapse onboarding state
Co-authored-by: Gavin Wood <gavin@parity.io>
* Conpanion for Substrate#7127
* Use sp_session::OneSessionHandler
* .
* Fix pallet_session::OneSessionHandler
* OneSessionHandler is in frame_support now
* "Update Substrate"
Co-authored-by: parity-processbot <>
* PVD: `block_number`->`relay_parent_number`
* ValidationParams: `relay_chain_height`->`relay_parent_number`
* Expose DMQ MQC hash as a well-known-key
This way the relay storage merkle proofs will be able to obtain the DMQ
MQC hash and we will be able to remove the it from the
PersistedValidationData struct.
* PersistedValidationData: Remove HRMP MQC heads
* PersistedValidationData: Remove `dmq_mqc_head`
* Expose the HRMP ingress channel index as a well-known-key
This way a parachain (PVF and collator) can find all the parachains that
have an outbound channel to the given one. That allows in turn to find
all the inbound channels for the given para.
Having access to that allows the parachain to get the same information
as the hrmp_mqc_heads now provide.
* Rename `relay_storage_root` to `relay_parent_storage_root`
* collation-generation: use persisted validation data
* node: remote FullValidationData API
* runtime: remove FullValidationData API
* backing tests: use persisted validation data
* FullCandidateReceipt: use persisted validation data
This is not a big change since this type is not used anywhere
* Remove ValidationData and TransientValidationData
Also update the guide
* Add warning when dropping inclusion inherent
* improve warning when dropping inclusion inherent
- use the actual runtime `warn!` macro
- do not speculate about why the error occurred
- show the actual error returned
* BROKEN: add note if the current block matches the session start block
This doesn't compile for a variety of reasons; this commit demonstrates
what the issues are. I don't think this is an essential feature, so I'm
stopping work on it here instead of pushing through it.
* Revert "BROKEN: add note if the current block matches the session start block"
This reverts commit eeb79ab7708ec94224fa60c9e1a46e12c18d52fd.
* ensure a runtime logger exists before attempting to log a warning to it
* scheduler: handle re-scheduling around finalization correctly
* also make sure parathreads get cleaned
* run scheduling in finalization
* Remove stray println!
* Update the schedule call site in inclusion inherent
* Clarify subtlety around SessionStartBlock
* Remove double semi-colon
* reschedule prior to `availability_cores` and in on-initialize
* improve docs
* fix line
* more doc reformat
* remove unneeded call
* avoid unnecessary scheduling on initialize
* split `clear` and `schedule
* Update runtime/parachains/src/scheduler.rs
Co-authored-by: Sergei Shulepov <sergei@parity.io>
Co-authored-by: Sergei Shulepov <sergei@parity.io>
* Drive by fixes
The visibility modifiers are remnants of the previous structure where
HRMP wasn't a standalone module, by rather a submodule of the router
module.
* Add Currency assoc type to Config
This would allow us to reserve balance for deposits. This commit also
integrates the HRMP module in rococo, test-runtime and mocks to use the
balances pallet.
* Fix a bug that doesn't increment the age
In case the request is not confirmed, the age would be incremented but
not persisted.
* Fix cleaning the indexes
Before that change, the cleaning of the channel indexes was wrong, because it
naively removed entire rows that was pertaining to the para we delete.
This approach is flawed because it doesn't account for the rows that are
pertaining to other paras that contain the outgoing one.
This clearly violates the invariant imposed on the indexes, that all
the index rows must contain alive paras, but apart from that it also
lead to the situation where ingress index would contain the a different
set of channels that an egress have.
* Reserve currency for opening the channels
Note the ugly `unique_saturated_into` calls. The reason for them is the
currency trait accepts and defines the `Balance` associated type and the
deposit values are coming from the `HostConfiguration` where they are
defined using the `Balance`.
I figured that parameterising `HostConfiguration` would be annoying. On
the other hand, I don't expect these `unique_saturated_into` calls to
give us problems since it seems to be a reasonable assumption that this
module will be instantiated within a runtime where the Currency provided
will have a Balance that matches the one used in the configuration.
* Tests: Adapt `run_to_block` so that it submits a proper config
* Tests: exercise the deposit logic
* Rename crowdfund -> crowdloan
* allow contribution on behalf of another user
* starting some benchmarks
* optimization: use append api
* Use on_initialize instead of on_finalize
* More benchmarks
* try to implement partial child storage removal
* partial dissolve test
* onboard benchmark
* begin retirement
* on_initialize
* remove _ { }
* Revert "allow contribution on behalf of another user"
This reverts commit b7dd7d1ec751495cee3ddb57133a13c390b020e5.
* finish undo of "allow contribution on behalf of another user"
* Allow any user to trigger withdraw on closed crowdloan
* use transfer instead of withdraw/create pattern
* unused warning
* Update runtime/common/src/crowdloan.rs
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* dont need to assign to empty variable
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* don't modify inherent data on heavy block
* write up current thinking on block weight detection
* extract inherent inclusion check into its own function
* put heavy block check into runtime
* the `inclusion` inherent call is Operational, not Mandatory
This resolves a lot of the trickiness about this issue, because
we no longer need to override or supplant any existing proposer
logic; the existing logic should exhibit these behaviors:
- the `inclusion` inherent is prioritized over standard transactions
- but if it's too heavy, i.e. in case of runtime upgrade, it'll be
dropped in favor of that.
It is my belief that allowing the proposer to just not include
this data won't have any adverse effects: it's equivalent to replacing
them with empty versions of themselves, which the `ProvideInherent`
impl already does.
* Revert "the `inclusion` inherent call is Operational, not Mandatory"
This reverts commit e58858d109b18b84e7af3ac47981c6900b2d9a3e.
* Revert "write up current thinking on block weight detection"
This reverts commit fd587b80c46761b2a2b62448193348237863f99f.
* Revert "don't modify inherent data on heavy block"
This reverts commit 38299d3c23e9efb5a354d8cfa658e62a5c8c7ddf.
* add backed candidate block weight assumption to configuration
* Limit backed candidates according to a candidate weight heuristic.
This approach replaces making the inclusion inherent non-mandatory.
It's still not ideal in that we have to configure a heuristic for
how much each backed candidate 'weighs', instead of directly
measuring it somehow.
This approach also never truncates the signed bitfields. The
rationale for that depends on some assumptions:
- processing the signed bitfields is cheap compared to the
backed candidates
- it is beneficial to the progress of the relay chain
to update the signed bitfields even if not all backed candidates
are updated
* simplify limit_backed_candidates and weight assumption
* don't trust the provisioner to fairly distribute candidates
* use saturating subtraction
* empty commit to restart ci
* use new mechanism for getting max block weight
* apply weight refunds to the inclusion inherent
This makes some assumptions about fundamental weights, which are
encapsulated as constants. From there, it lets Substrate know
what the actual computed weight of the inherent is.
* use a correct fixed weight for the inclusion inherent
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* use dynamic inclusion weight so we reduce calculated weight when excluding candidates
* don't double-count this intrinsic's weight in the block weight
* add unit tests of fn limit_backed_candidates
* add tests that the inclusion inherent's weight correctly updates
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>