# Parachain Manager Super App ## Objective The objective of this App is to allow parachains to be able to control everything related to the fact the parachain interacts with the relay chain and with other chains in the ecosystem. On top of that, it will host a very simple landing page for each parachain, configurable by a parachain team. ## Why is this needed Connecting to the Polkadot Relay Chain as a parachain and being able to manage this with all the available tools, it's cumbersome. PolkadotJS Apps it's definitely a great tool to do this, however the lack of customization for this particular topic makes it so that people make mistakes or don't take full advantage of all available tools. ## What will be delivered The Parachain Manager Super App will allow users to execute the following: - Get a paraID - Register a Parathread - Open a Crowdloan - Direct Bid on an Auction - Unlock Parachain - Swap Leases - Open XCM Messages - Execute Runtime Upgrades On top of this, it will allow regular users to: - Participate on ongoing Crowdloans - Learn more about a parachain project, and the projects deployed on it. And in general, it will also have: - Links to resources (e.g.: [Crowdloan Template](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/crowdloan_front_end_template.md)) - Future Auction Schedule - Past Auction Information ## Sections Description - Parachain Manager ### Get a paraID This is pretty self explanatory, but a given account should be able to register a paraID and reserve the needed fees to do so. Users should also be able to deregister the paraID and release funds. #### Relevant Extrinsics - `registrar.reserve()`. Allows a team to claim a paraID. - `registrar.deregister(id)`. Allows a paraID owner to deregister their parachain as long as it's unlocked. #### Relevant Constants - `registrar.paraDeposit`. Gives information to a user of what are the needed DOTs to be deposited to get a paraID. #### Relevant Storage Entries - `regirar.nextFreeParaID`. Gives information of what's the next free paraID. - `registrar.paras`. Gives information on what account is the manager of the Para, what's the deposit of it, and whether the parachain is locked or not. #### Important Notice Points (If any) - We could suggest a team to unlock their parachain by default at the beginning so that they can edit the wasm/genesis if they fuck up their chain deployment. ### Register a Parathread This will allow owner of a paraID to register a WASM Blob and Genesis for their own parachain. #### Relevant Extrinsics - `registrar.register(paraID, head,wasm)`. This allows a team to attach a wasm and genesis to a paraID, to then compete for a slot. #### Relevant Constants - `registrar.dataDepositPerByte`. Gives information on how much tokens the user needs to lock given the weight of the submitted artifacts. #### Relevant Storage Entries - `paras.currentCodeHash(id)`. After submission, this can be re-checked. - `paras.heads(id)`. After submission, this can be re-checked. - `paras.codeByHash(hash)`. Given the hash of the code, it gives back the wasm blob. #### Important Notice Points (If any) - It would be ideal to have a pre-check of the actual WASM Blob and Genesis to alert the parachain team that the information being registered will not work. - Explain difference between compressed wasm and regular wasm, and suggest using compress. - Registration takes time on Polkadot (end of current epoch + 1 epoch), and we should share this information as well. ### Open a Crowdloan The objective is to allow a team to open a crowdloan from this application directly. For this, we need to check that the team has a paraID, that it has a wasm and a genesis registered. The main idea is to re-think the entire crowdloan opening process. Two ways of doing this: 1. Step by Step guide. a. Ask team when they want to go live. b. Given the date on (a) suggest to team what is the nearest auction that it has. Have it select an auction. c. Given the auction (b) suggest a crowdloan that maximizes their chance of winning (one that allows them to participate on different auctions). d. Give information to the user on potential slot renewals on that auction and current auction prices to set a max cap. 2. Simple form to open a crowldoan, if the team does not want to do the step-by-step. #### Relevant Extrinsics - `crowdloan.create(index, cap, firstPeriod, lastPeriod)`. Allows user to open a crowdloan. - `crowdloan.refund(id)`. Refunds the users if the crowdloans ended. - `crowdloan.dissolve(id)`. Deletes all information related to the crowdloan if it has been refunded before. #### Relevant Constants #### Relevant Storage Entries - All storage entries related to auctions (see below) for the step by step. - `crowdloans.funds`. Information on all the funds available. When, what, for whom, how much has been raised, etc. #### Important Notice Points (If any) - Shoudl we prevent people from opening dumb crowdloans altogether? Or should we just alert them? ### Direct Bid on an Auction This allows a team to place a direct bid on an ongoing auction. Teams need to have a paraID with a registered wasm / genesis. #### Relevant Extrinsics - `auctions.bid(para, auctionIndex, firstSlot, lastSlot, amount)`. Allows team to place a bid on a specific auction. #### Relevant Constants #### Relevant Storage Entries - `auctions.winning` - `auctions.auctionCounter`. Winning bid for each of the 10 ranges of ending period. - `auctions.reservedAmount`. Current winner information. #### Important Notice Points (If any) - People get ultra confused with auctions. We need to put alerts and help them everyhwere, specially when it comes to Lease Periods. ### Unlock Parachain This allows a team to unlock the parachain and give the owner of the account that owns the paraID full control of the storage entries of that parachain on the relay chain. [This PR](https://github.com/paritytech/polkadot/pull/5451) introduced the functionality. #### Relevant Extrinsics - `regisrar.removeLock(id)`. Allows a paraID owner to remove the lock to their paraID, and get control of the entries related to that paraID on the relay chain. This would allow them, for example, to change wasm/genesis if their chains stalls without going through governance. It implies, however, that whomever manages the paraID controls the parachain (less decentralization). - `registrar.addLock(id)`. Adds lock to the paraID. - Two steps for executing this: - Construct the call on the relay chain for the needed para id. [Example](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/extrinsics/decode/0x46043a080000) - Send XCM Call from the parachain to the relay chain. [Example](https://polkadot.subscan.io/xcm_message/polkadot-e060df7dbdc922087fd6b62813b570fd5ca2b74b) #### Relevant Constants #### Relevant Storage Entries - `registrar.paras(id)`. Gives you information about the account manager of the para, the status of it (locked/unlocked) and the deposit. #### Important Notice Points (If any) - It's important to show a team if they have the parachain unlocked or not, and also to alert of the risk of it being one way or the other. For example, if unlocked and keys are leaked, then anyone could change the wasm/head of that parachain. ### Swap Leases Allows a team to swap a lease from one paraID to another. This is because a team could potentially win an auction with a paraID different from the one registered. #### Relevant Extrinsics - `registrar.swap(id, other)`. Swaps the underlying data of one paraID with another one. #### Relevant Constants #### Relevant Storage Entries - `registrar.pendingSwaps`. This means that only one of the paraIDs sent the instruction to swap. Both need to send it. #### Important Notice Points (If any) ### Open XCM Messages - NEED TO LEARN MORE ON THIS #### Relevant Extrinsics #### Relevant Constants #### Relevant Storage Entries #### Important Notice Points (If any) ### Execute Runtime Upgrades #### Relevant Extrinsics #### Relevant Constants #### Relevant Storage Entries #### Important Notice Points (If any) ## Sections Description - General Information ### Auctions Schedule https://github.com/SBalaguer/polkadot-auctions-tracker ### Past Auctions ## Sections Description - Normal User Interaction ### Participate on ongoing Crowdloans ### Parachain Information