Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
ceb0bee
initial implementation of lifecycles and upgrades
shawntabrizi Jan 30, 2021
ca2e930
clean up a bit
shawntabrizi Jan 30, 2021
f03cf68
fix doc comment
shawntabrizi Jan 31, 2021
8ab27f0
more rigid lifecycle checks
shawntabrizi Jan 31, 2021
af59148
include paras which are transitioning, and lifecycle query
shawntabrizi Jan 31, 2021
a154cf8
format guide
shawntabrizi Jan 31, 2021
bfc96a1
update api
shawntabrizi Jan 31, 2021
fdde35f
update guide
shawntabrizi Jan 31, 2021
623746c
explicit outgoing state, fix genesis
shawntabrizi Jan 31, 2021
2eb5e19
handle outgoing with transitioning paras
shawntabrizi Feb 1, 2021
80c7b64
do not include transitioning paras in identifier
shawntabrizi Feb 1, 2021
ee07f80
Update roadmap/implementers-guide/src/runtime/paras.md
gavofyork Feb 2, 2021
ea62e00
Update roadmap/implementers-guide/src/runtime/paras.md
gavofyork Feb 2, 2021
1289e39
Update roadmap/implementers-guide/src/runtime/paras.md
gavofyork Feb 2, 2021
c26b42e
Apply suggestions from code review
gavofyork Feb 2, 2021
26d6c99
Use matches macro
gavofyork Feb 2, 2021
4f26659
Correct terms
gavofyork Feb 2, 2021
a785985
Apply suggestions from code review
gavofyork Feb 2, 2021
b2e9011
actions queue
shawntabrizi Feb 3, 2021
f56777c
Revert "actions queue"
shawntabrizi Feb 3, 2021
7455165
collapse onboarding state
shawntabrizi Feb 4, 2021
f63b087
starting actions queue
shawntabrizi Feb 4, 2021
45cc0c6
consolidate actions queue
shawntabrizi Feb 8, 2021
e1df6f7
schedule para initialize result
shawntabrizi Feb 8, 2021
7ebfa65
more actions queue for upgrade/downgrade
shawntabrizi Feb 8, 2021
077a550
clean up with fully implemented actions queue
shawntabrizi Feb 8, 2021
516d182
fix tests
shawntabrizi Feb 8, 2021
bf74d5f
fix scheduler tests
shawntabrizi Feb 8, 2021
53a42fa
fix hrmp tests
shawntabrizi Feb 9, 2021
b0a1444
Merge branch 'master' into shawntabrizi-para-session-delay
shawntabrizi Feb 9, 2021
c14b17e
fix test
shawntabrizi Feb 9, 2021
17b6128
doc fixes
shawntabrizi Feb 9, 2021
c3aa6ea
fix hrmp test w/ valid para
shawntabrizi Feb 9, 2021
3df71fe
Update paras.md
shawntabrizi Feb 9, 2021
27cb18e
fix paras registrar
shawntabrizi Feb 9, 2021
92d456f
Merge branch 'master' into shawntabrizi-para-session-delay
shawntabrizi Feb 9, 2021
8b724e5
Update propose_parachain.rs
shawntabrizi Feb 9, 2021
fd4bb23
Merge branch 'master' into shawntabrizi-para-session-delay
shawntabrizi Feb 15, 2021
9342f21
fix merge
shawntabrizi Feb 15, 2021
3fbaa20
Introduce "shared" module
shawntabrizi Feb 16, 2021
fd959ab
fix rococo build
shawntabrizi Feb 16, 2021
b340613
fix up and use shared
shawntabrizi Feb 16, 2021
e6b79e7
guide updates
shawntabrizi Feb 16, 2021
40b05a4
add shared config to common tests
shawntabrizi Feb 16, 2021
44fb36e
add shared to test-runtime
shawntabrizi Feb 16, 2021
9da4b9e
Merge branch 'master' into shawntabrizi-para-session-delay
shawntabrizi Feb 16, 2021
62cead5
remove println
shawntabrizi Feb 18, 2021
442f0fb
fix note
shawntabrizi Feb 18, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update guide
  • Loading branch information
shawntabrizi committed Jan 31, 2021
commit fdde35f7b1c8e5e266a2d2c236aeba81ecbb8e58
93 changes: 80 additions & 13 deletions roadmap/implementers-guide/src/runtime/paras.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ availability of old parachain code and its pruning.

## Storage

Utility structs:
### Utility Structs

```rust
// the two key times necessary to track for every code replacement.
Expand Down Expand Up @@ -53,15 +53,69 @@ struct ParaGenesisArgs {
/// True if parachain, false if parathread.
parachain: bool,
}

/// The possible states of a para, to take into account delayed lifecycle changes.
pub enum ParaLifecycle {
/// Para is new and is onboarding as a Parathread.
OnboardingAsParathread,
/// Para is new and is onboarding as a Parachain.
OnboardingAsParachain,
/// Para is a Parathread.
Parathread,
/// Para is a Parachain.
Parachain,
/// Para is a Parathread which is upgrading to a Parachain.
UpgradingToParachain,
/// Para is a Parachain which is downgrading to a Parathread.
DowngradingToParathread,
/// Parachain is being offboarded.
OutgoingParathread,
/// Parathread is being offboarded.
OutgoingParachain,
}
```

Storage layout:
#### Para Lifecycle

Because the state of parachains and parathreads are delayed by a session, we track the specific
state of the para using the `ParaLifecycle` enum.

```
None Parathread Parachain
+ + +
| | |
| (Session Delay) | |
| | |
+----------------------->+ |
| OnboardingAsParathread | |
| | |
+-------------------------------------------------->+
| OnboardingAsParachain | |
| | |
| +------------------------->+
| | UpgradingToParachain |
| | |
| +<-------------------------+
| | DowngradingToParathread |
| | |
|<-----------------------+ |
| Outgoing | |
| | |
+<--------------------------------------------------+
| | Outgoing |
| | |
+ + +
```

During the transition period, the para object is still considered in its existing state.

### Storage Layout

```rust
/// All parachains. Ordered ascending by ParaId. Parathreads are not included.
Parachains: Vec<ParaId>,
/// All parathreads.
Parathreads: map ParaId => Option<()>,
/// The current lifecycle state of all known Para Ids.
ParaLifecycle: map ParaId => Option<ParaLifecycle>,
/// The head-data of every registered para.
Heads: map ParaId => Option<HeadData>;
/// The validation code of every live para.
Expand All @@ -87,12 +141,16 @@ FutureCodeUpgrades: map ParaId => Option<BlockNumber>;
FutureCode: map ParaId => Option<ValidationCode>;

/// Upcoming paras (chains and threads). These are only updated on session change. Corresponds to an
/// entry in the upcoming-genesis map.
/// entry in the upcoming-genesis map. Ordered ascending by ParaId.
UpcomingParas: Vec<ParaId>;
/// Upcoming paras instantiation arguments.
UpcomingParasGenesis: map ParaId => Option<ParaGenesisArgs>;
/// Paras that are to be cleaned up at the end of the session.
/// Paras that are to be cleaned up at the end of the session. Ordered ascending by ParaId.
OutgoingParas: Vec<ParaId>;
/// Existing Parathreads that should upgrade to be a Parachain. Ordered ascending by ParaId.
UpcomingUpgrades: Vec<ParaId>;
/// Existing Parachains that should downgrade to be a Parathread. Ordered ascending by ParaId.
UpcomingDowngrades: Vec<ParaId>;
```

## Session Change
Expand All @@ -106,8 +164,12 @@ OutgoingParas: Vec<ParaId>;
invariant.
1. Apply all incoming paras by initializing the `Heads` and `ValidationCode` using the genesis
parameters.
1. Amend the `Parachains` list to reflect changes in registered parachains.
1. Amend the `Parathreads` set to reflect changes in registered parathreads.
1. Amend the `Parachains` list and `ParaLifecycle` to reflect changes in registered parachains.
1. Amend the `ParaLifecycle` set to reflect changes in registered parathreads.
1. Upgrade all parathreads that should become parachains, updating the `Parachains` list and
`ParaLifecycle`.
1. Downgrade all parachains that should become parathreads, updating the `Parachains` list and
`ParaLifecycle`.

## Initialization

Expand All @@ -116,9 +178,13 @@ OutgoingParas: Vec<ParaId>;

## Routines

* `schedule_para_initialize(ParaId, ParaGenesisArgs)`: schedule a para to be initialized at the next
session.
* `schedule_para_cleanup(ParaId)`: schedule a para to be cleaned up at the next session.
* `schedule_para_initialize(ParaId, ParaGenesisArgs)`: Schedule a para to be initialized at the next
session. Noop if para is already registered in the system with some `ParaLifecycle`.
* `schedule_para_cleanup(ParaId)`: Schedule a para to be cleaned up at the next session.
* `schedule_parathread_upgrade(ParaId)`: Schedule a parathread to be upgraded to a parachain. Noop
if `ParaLifecycle` is not `Parachain`.
* `schedule_parachain_downgrade(ParaId)`: Schedule a parachain to be downgraded to a parathread.
Noop if `ParaLifecycle` is not `Parachain`. `ParaLifecycle` is not `Parathread`.
* `schedule_code_upgrade(ParaId, ValidationCode, expected_at: BlockNumber)`: Schedule a future code
upgrade of the given parachain, to be applied after inclusion of a block of the same parachain
executed in the context of a relay-chain block with number >= `expected_at`.
Expand All @@ -131,10 +197,11 @@ OutgoingParas: Vec<ParaId>;
intermediate parablock has been included at the given relay-chain height. This may return past,
current, or (with certain choices of `assume_intermediate`) future code. `assume_intermediate`, if
provided, must be before `at`. If the validation code has been pruned, this will return `None`.
* `is_parathread(ParaId) -> bool`: Returns true if the para ID references any live parathread.
* `lifecycle(ParaId) -> Option<ParaLifecycle>`: Return the `ParaLifecycle` of a para.
* `is_parachain(ParaId) -> bool`: Returns true if the para ID references any live parachain, including those which may be transitioning to a parathread in the future.
* `is_parathread(ParaId) -> bool`: Returns true if the para ID references any live parathread, including those which may be transitioning to a parachain in the future.
* `is_valid_para(ParaId) -> bool`: Returns true if the para ID references either a live parathread
or live parachain.

* `last_code_upgrade(id: ParaId, include_future: bool) -> Option<BlockNumber>`: The block number of
the last scheduled upgrade of the requested para. Includes future upgrades if the flag is set.
This is the `expected_at` number, not the `activated_at` number.
Expand Down