## Parachain 拍卖流程介绍 ### 简介 - 一次拍卖4个周期的插槽租赁权,每个周期6个月。一个parachain最多竞拍4个周期的租赁权,也就是2年。 - 一个拍卖有几个阶段 - 拍卖开始 - 拍卖结束阶段开始 - 拍卖真正结束 - 拍卖结束阶段结束 - 其中 `拍卖真正结束` 时间是位置的,在 `拍卖结束阶段结束` 后才知晓。在 `拍卖真正结束` 之后的所有竞拍视为无效 - 一个账户可以分别参与多个不同租赁周期的竞拍,但是要求必须是连续的。比如在竞拍周期为6个月(1个周期)的情况下,可以分别竞拍周期0和周期1,但是在暂时获胜周期0的情况下,不能同时竞拍周期3,因为不连续。 ### 相关代码 插槽模块:https://github.com/paritytech/polkadot/blob/master/runtime/src/slots.rs 众筹拍卖模块:https://github.com/paritytech/polkadot/blob/master/runtime/src/crowdfund.rs Polkadot Wiki: https://wiki.polkadot.network/docs/en/learn-auction Web3 Wiki: https://research.web3.foundation/en/latest/polkadot/Parachain-Allocation/ ### 流程 - 系统发起拍卖 [`slots::new_auction`](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L269) - 参数 - `orign: Origin` - 要求 Root, 也就是说只有治理模块可以发起拍卖 - `duration: BlockNumber` - 拍卖时长,当这么多块过后,进入 `拍卖结束阶段开始` - `lease_period_index: LeasePeriodOf` - 要拍卖的第一个租赁周期的编号 - 事件 - [AuctionStarted(AuctionIndex, LeasePeriod, BlockNumber)](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L209) - 拍卖编号,租赁周期编号,拍卖结束阶段开始时间 - 一次只能有一个拍卖,不支持多个拍卖同时进行 - 进入 `拍卖开始` 阶段 - 用户 / 众筹账号 参与竞拍 [slots::bid](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L304) - 参数 - `origin: Origin` - 要求 Signed,任何用户账号都可以发送交易参与竞拍 - `sub: SubId` - 竞拍编号。一个同样的用户账号可以发起多个不同的竞拍,不同的竞拍由竞拍编号来决定 - `auction_index: AuctionIndex` - 拍卖编号 - `first_slot: LeasePeriod` - 竞拍的第一个租赁周期编号 - `last_slot: LeasePeriod` - 竞拍的最后一个租赁周期编号 - `amount: Balance` - 竞拍金额。这部分资金会被锁仓直到竞拍结束,或者有人出更高价 - 事件 - [Reserved(AccountId, Balance, Balance)](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L218) - 账户,额外冻结资金,总共冻结资金 - [Unreserved(AccountId, Balance)](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L220) - 账户,总共解冻资金 - 现有 parachain / parathread 参与续拍 [slots::bid_rewnew](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L332) - 参数 - `origin: Origin` - 要求 Signed ParaId。只能由现有的parachain / parathread通过治理模块发起 - `auction_index: AuctionIndex` - 同 `slots::bid` - `first_slot: LeasePeriod` - 同 `slots::bid` - `last_slot: LeasePeriod` - 同 `slots::bid` - `amount: Balance` - 同 `slots::bid` - 事件 - 同 `slots::bid` - 拍卖时长后,进入 `拍卖结束阶段开始` - 可以继续竞拍 - 结束阶段时长后,进入 `拍卖结束阶段结束` - 竞拍截止 - 计算随机数,随机选取 `拍卖结束阶段` 中的一个区块作为 `拍卖真正结束` 区块 - `拍卖真正结束` 区块中的最高竞拍者获胜,其他人的钱退回 - 事件 - [WonDeploy(NewBidder\, SlotRange, ParaId, Balance)](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L213) - 竞拍成功账号和竞拍编号,租赁周期,平行编号,竞拍金额 - [WonRenewal(ParaId, SlotRange, Balance, Balance)](https://github.com/paritytech/polkadot/blob/45db6e15d2a3832ee7edd44bfb17bc2a8e283872/runtime/src/slots.rs#L215) - 续拍成功平行编号,租赁周期,总共竞拍金额,额外竞拍金额 - 锁定 parachain runtime [slots::fix_deploy_data](https://github.com/paritytech/polkadot/blob/4242593cc889cd03eed90765d963f13ec7089378/runtime/src/slots.rs#L368) - 由 parachain 管理员账号发送 - 上传 parachain runtime [slots::elaborate_deploy_data](https://github.com/paritytech/polkadot/blob/4242593cc889cd03eed90765d963f13ec7089378/runtime/src/slots.rs#L399) - 任何人都可以发送,但是 runtime hash 必须符合之前由管理员锁定的 hash - 租赁周期开始 - 把新的平行链锁仓的资金销毁,转换成记账 - 把退休的平行链记账的资金重新铸币退回给管理员账户 - 租赁周期期间 - 可以通过平行链治理模块参与续拍 - 租赁周期结束 - 如果没有续拍成功,记账的资金重新铸币退回给管理员账户