owned this note
owned this note
Published
Linked with GitHub
# Rococo Parachain Onboarding Plan
We are relaunching Rococo without the `ProposeParachains` pallet, and now with Slots, Auctions, Crowdloans and more!
Here you will find a general plan on how we should approach onboarding parachains with this new environment.
## Relevant Values and Calculations
* Lease Period Length: 1 Day = 14400 Blocks
* Ending Period: 1 Hour = 600 Blocks
* Current Lease Period Index = Current Block Number / 14400
## Registration
All Parachains will need to Register as a "Parathread" first.
![](https://i.imgur.com/1orqcCx.png)
To do this, they need:
* A unique Parachain ID (one that has not been previously registered)
* Runtime Wasm
* Initial Head Data
After submission of this data, it will take 2 sessions (up to 30 min x 2) for the para to fully onboard to a Parathread.
> Note: All transitions of a Para into different states will take at most 2 sessions (onboarding, offboarding, upgrading, downgrading, etc...)
## Slots
To start, we will only have 5 or 6 slots available on Rococo to ensure that the chain functions properly.
3 of these slots will be our "system chains": Tick, Track, and Trick
This means only 2 or 3 slots will be available for parachain auctions.
### System Chains
We don't want to go through the auction process with our system chains, so we will just give them a lease with `Slots > force_lease`
Once they are a parathreads, we can call `force_lease` like so:
```
fn force_lease(origin,
para: ParaId,
leaser: T::AccountId,
amount: BalanceOf<T>,
period_begin: LeasePeriodOf<T>,
period_count: LeasePeriodOf<T>,
)
```
* `origin`: Must be root
* `para`: The registered ParaId for the Parachain
* `leaser`: The person who will pay the deposit `amount`.
* `amount`: How much we reserve from `leaser`.
* `period_begin`: The first lease period for the slot.
* `period_count`: The number of lease periods to reserve.
So assuming we start at genesis, and Trick is `ParaId(0)` something like:
```
force_lease(ParaId(0), Alice, 0, 0, 100)
```
Would give Trick 100 lease periods, starting at lease period 0.
We may want to do this for some other critical chains that do not want to go through the auction process.
### Auctioned Chains
For the rest of the slots, we can set up auctions with `Auctions > new_auction`:
```
pub fn new_auction(
origin,
#[compact] duration: T::BlockNumber,
#[compact] lease_period_index: LeasePeriodOf<T>,
)
```
* `origin`: Must be root
* `duration`: How long the auction will last
* `lease_period_index`: Which lease period is up for auction
Auctions on Rococo should be relatively short, but since it is configurable per auction, we can adjust this based on community feedback. A duration of 12 hours - 24 hours should be good.
Lease Period Index needs to be for some future lease period that we want to auction. The input is the FIRST of the 4 index periods that will be made available for auction.
For example, if we call:
```
new_auction(3600, 2)
```
This will be an auction for 6 hours (10 blocks per min * 60 min per hour * 6 hours = 3600 blocks), which will auction lease periods 2, 3, 4, and 5.
On top of the base 6 hours of the auction, there will be an additional ending period where final potentially winning bids can occur. So if the ending period is 600 blocks, then the total end to end auction time will be 4200 blocks.
We should make sure that whatever lease period we select, and all the timelines for doing an auction, that the lease period will not have started.
We can only run one auction at a time, but we can run an auction for the same lease period multiple times to add more slots. So we may make the exact same call again.
Once we have saturated the slots we want for any particular lease period, we can then start auctions for the further future:
```
new_auction(3600, 6)
```
Since we previously auctions slots 2 - 5, now we can start auctioning 6 - 9.
#### Bidding
Anyone can make a bid to win a Parachain slot for a Para ID.
![](https://i.imgur.com/jOFjhnI.png)
Just pick the Para ID, how much you want to bid, and the slots you want to bid for.
Not much room for error here.
#### Crowdloan
You can also make a crowdloan for your Para ID, but there is a LOT of room for error here...
![](https://i.imgur.com/dfYPBQ4.png)
* You can only create a crowdloan for a Para ID that you own / have registered.
* The crowdfund cap is the MAXIMUM amount your crowdloan can collect. You can still win a bid if you have less than your maximum, as long as your bid it the best in the auction.
* Ending Block is when you want your crowdloan to end. If you know an auction will start in 3 days, and will last for 5 days, you probably want to set your crowdloan to end in 10 days, or a similar timescale. This way you will be sure that your crowdloan is active during the entire auction process.
* You don't want to set your crowdloan to be too long, or else you will lock up users funds for a long time and they may not want to participate.
* First slot must be the first slot you want to bid for. So if the current auction is for slots (3, 4, 5, 6), your first slot can be at least 3.
* Last slot must with within that range too.
* You can cancel a crowdloan (if you made a mistake), as long as you did not receive a contribution.