sequenceDiagram
autonumber
actor User
participant CT
participant RC
activate CT
User->>CT: register(id, genesis_head, code_len, code_hash)
CT->>CT: fast fail if para_id not registered
CT->>CT: code size + head size, compute deposit
CT->>CT: reserve deposit
CT->>CT: Insert Pending { para_id, manager }
CT->>RC: XCM (para_id, head, code_hash) to RC
CT->>User: RegisterRequested { para_id, manager }
deactivate CT
User->>RC: register_code(id, validation_code) - unsigned extrinsic
activate RC
RC->>RC: validate code against hash and id (fast check) + pull genesis_head
RC->>RC: paras_registrar(id, genesis_head, validation_code) (no reservations here)
RC->>RC: clear storage
RC->>CT: Registrar { id }
deactivate RC
activate CT
CT->>CT: Insert Done { para_id, manager }
CT->>User: Event Registrar { para_id, manager }
deactivate CT
Existing Apis:
registerforce_registerderegisterswapremove_lockreserveadd_lockschedule_code_upgradeset_current_headTODO
Treat this as meta issue. Create sub-issues as needed.
User flows
Docs: https://docs.polkadot.com/parachains/launch-a-parachain/deploy-to-polkadot/
Abbreviations:
Old
New
Reserve
Old flow
sequenceDiagram autonumber actor User participant RC User->>RC: registrar.reserve() activate RC RC->>RC: Hold ParaDeposit RC->>RC: Allow next para_id<br/>(counter lives on RC) RC-->>User: Ok(para_id) deactivate RCNew flow
sequenceDiagram autonumber actor User participant CT participant RC User->>CT: registrar_para.reserve() activate CT CT->>CT: Hold ParaDeposit CT->>CT: Insert Pending { who, deposit } CT-)RC: XCM Transact → registrar_relay.reserve() deactivate CT activate RC RC->>RC: Allot next para_id RC--)CT: Report result (para_id) deactivate RC activate CT CT->>CT: Pending → Reserved(para_id) CT-->>User: event ParaIdReserved(para_id) deactivate CTRegister
Note: Before registering para id must be reserved with
reserveOld (current) flow
sequenceDiagram autonumber actor User participant RC User->>RC: register(id, genesis_head, validation_code) RC->>RC: validate code + head size, compute deposit RC->>RC: reserve extra deposit (or refund rebate) RC->>RC: schedule_para_initialize(id, genesis) RC-->>User: Registered { para_id, manager }New flow
sequenceDiagram autonumber actor User participant CT participant RC activate CT User->>CT: register(id, genesis_head, code_len, code_hash) CT->>CT: fast fail if para_id not registered CT->>CT: code size + head size, compute deposit CT->>CT: reserve deposit CT->>CT: Insert Pending { para_id, manager } CT->>RC: XCM (para_id, head, code_hash) to RC CT->>User: RegisterRequested { para_id, manager } deactivate CT User->>RC: register_code(id, validation_code) - unsigned extrinsic activate RC RC->>RC: validate code against hash and id (fast check) + pull genesis_head RC->>RC: paras_registrar(id, genesis_head, validation_code) (no reservations here) RC->>RC: clear storage RC->>CT: Registrar { id } deactivate RC activate CT CT->>CT: Insert Done { para_id, manager } CT->>User: Event Registrar { para_id, manager } deactivate CT