Skip to content

[AHMv2] Move Para Registrar functionality from RC to CT #12731

Description

@Ank4n

Existing Apis:

Call index Call name Origin(s) Short description
0 register Signed Register head & code for ID
1 force_register Root Force-register a Para Id
2 deregister Root / para owner / para Deregister a Para Id
3 swap Root / para owner / para Swap two parachains
4 remove_lock Root / para Remove manager lock
5 reserve Signed Reserve a new Para Id
6 add_lock Root / para owner / para Add manager lock
7 schedule_code_upgrade Root / para owner / para Schedule a code upgrade
8 set_current_head Root / para owner / para Set parachain current head

TODO

  • Check subscan how they are used. Subscan calls to registrar.
  • Get approval on interfaces for registrar-para and registrar-relay
  • Any dApps using this?

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

  • RC - Relay Chain (paras_registrar)

New

  • CT - Coretime Chain (registrar_para)
  • RC - Relay Chain (registrar_relay)

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 RC
Loading

New 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 CT
Loading

Register

Note: Before registering para id must be reserved with reserve

Old (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 }
Loading

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

   
Loading

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions