最近我们收到了很多关于“解锁质押”的问题。所以这里有一篇文章来解释它是什么以及如何取回已释放的质押代币。
token释放过程
代币释放是一个复杂的过程。作为委托人(staker),您可以随时撤回(取消委托)在Phala App 上的质押(或通过 PhalaStakePool.withdraw()
)。如果有free delegation,您可以立即获得您的提款。但是,如果没有free delegation,则需要在“提款队列”中等待。这称为“提款请求”。您可以在“pool detail”页面(或 PhalaStakePool.stakePools() ->withdraw_queue
)中找到请求。
取款队列
每个提款请求都有一个最长等待时间的倒计时。我们称之为 7 天的“宽限期”,作为缓冲时间,通知矿池所有者有人想要撤回质押,因此他们需要采取行动。在宽限期内,每当另一个贡献者将质押添加到池中时,他们的股份就会进入到池中,而您的质押就会撤出。
但是,如果没有任何新的质押来让你的取款解锁呢?有一个“强制停止”机制。区块链会自动检查是否有已经过了7天宽限期,但是仍然没有free delegation来满足取款的请求。如果有任何此类请求,对应矿池将被强制关闭,释放所有股份。
当然,矿池所有者不希望他们的worker停下来。因此,他们需要确保他们的矿池不会被强行关闭。他们要么增加更多的质押,要么停止一些worker来满足提款请求。
事情变得复杂了,因为这是委托人和矿池所有者之间的博弈论。这是必要的,因为矿工和委托人不相互信任。委托人应该能够随时撤回质押。否则池所有者可能永远不会允许他们退出。另一方面,如果没有宽限期来延迟请求,委托人可以决定通过在矿工开始挖矿后立即撤回质押来“攻击”矿池。
宽限期过后
人们最后需要关心的是池中的“releasing stake”。这意味着一些矿工被停止,处于冷却状态。 CD状态需要7天。当CD时间到达时,我们需要一个触发释放stake,并将其恢复到“Ready”状态。出于性能考虑,它不会自动完成。
此操作称为“回收”。为了触发回收,任何账户都可以在 Polkadot.js 上发送交易(Phala App 中的 UI 正在开发中):
PhalaStakePool.reclaimPoolWorker(pid, workerPubkey)
然后释放待定的质押,池中的“releaseing stake”将被实现并分配到提现队列中。
我不是抵押池所有者, 在哪里可以找到公钥?
Phala 团队正在开发 Phala App 上的“一键回收(reclaim)”按钮。在功能上线之前,你仍然可以作为委托人手动触发它。
任何人都可以调用 relcaimPoolWorker,但必须找出池中完成 CoolDown 时期的 worker 的公钥。 可能会有多个工人等待,需要一一收回。
你可以通过检查 PhalaStakePool.stakePools(pid) (或在 Phala App 上)中的 workers 字段来找到池中的矿机。 然后检查它们是否准备好回收(或只是尝试全部)。 但是,如果所有者删除了矿机,它就不会显示在抵押池中。 如果是这种情况,你需要弄清楚。 一种可能的方法是在区块链浏览器中搜索矿池运营商账户,并通过 PhalaStakePool.remove_worker 进行筛选。
要检查机器是否准备好回收,你可以直接尝试,或者在 PhalaMining.miners(miner) 中检查矿工状态。 矿工参数是由(pid + worker pubkey)生成的“虚拟账户”。 如果worker没有被移除,可以通过PhalaMining.workerBindings(pubkey)查询矿工账号。 但是如果它被移动了,建议在资源管理器中搜索相应的 PhalaStakePool.add_worker 调用,并检查交易生成的 MinerBound 事件。 它将提到矿工帐户,如下面的屏幕截图所示。
改进
总体来说,概念复杂,UI不完整,给用户带来了很大的麻烦。团队正忙于修复链上错误,我们开始修复 UI。无论如何,一旦准备好,UI 将很快更新。
Issue #500
目前 Issue 500 已经解决。
简介:如果您在回收之前删除了处于 CD 状态的worker并又将其添加回池中,您可能会在“releasing stake”中有了一部分冻结的质押,并且由于错误 #500 而无法reclaim它。您将需要等待几天,团队将解冻它们。有关详细信息,请查看 Github 问题。