逃离模式
Last updated
Last updated
DeGate链下节点的Operator负责生成zkBlock和提交证明,如果Operator罢工了,所有未提交上链的链下交易就会失效。为了确保资金Trustless,DeGate协议提供了逃离模式(Exodus Mode),当节点罢工时,用户仍然可以提出资产。
一旦进入逃离模式,DeGate智能合约将拒绝接收新的zkBlock数据,状态停留在逃离模式开启前的最新区块。这意味着DeGate所有链下交易都会停止,比如不能交易、提现和转账。逃离模式状态不可逆,用户唯一可做的就是取回其资产。
进入逃离模式的步骤如下:
发起强制提现:用户可以调用DeGate合约的forceWithdraw
方法,发起一次强制提现
强制提现未被处理:有任意强制提现请求在规定时间内没有被DeGate节点处理。该时间配置在DeGate合约里
开启逃离模式:只要有任意的强制提现未在规定时间内被处理,任何用户可调用DeGate合约的notifyForcedRequestTooOld
方法,使DeGate协议进入逃离模式
如果DeGate节点是正直的,便不希望进入逃离模式。节点会尽职尽责地在规定时间内发现并处理完每个强制提现请求。强制提现将被视为用户的一般提现来处理,但差别如下:
强制提现需要指定币种,但不指定提现数量,而是能提尽提,所以节点会取消该币种的所有正在进行的订单,然后处理提现请求。
用户发起强制提现时要用钱包支付费用,一般提现则用DeGate账户支付矿工费。
强制提现请求被成功处理后,用户需要再次调用合约的withdrawFromApprovedWithdrawal
方法取回资产。
整个过程如图所示
逃离模式启动后,用户可以取回资产,分为三种情况
DeGate账户余额:链上调用withdrawFromMerkleTree
方法,每次提取一个币种的全部余额,为逃离模式前最新一个区块的账户余额状态
未得到确认的高级划入:此时充值资产在合约内,未计入DeGate账户余额,可通过withdrawFromDepositRequest
方法取回
未得到确认的标准划入:此时充值资产在合约内,未计入DeGate账户余额,需要联系节点运营方申请退币。
普通用户应该如何调用合约?
发起强制提现与取回余额方法都需要用户提供相应数据,这些数据可以通过解析DeGate合约内所有submitBlock交易的Calldata得到。解析方法可查看设计文档。我们预期会有第三方提供实时的DeGate calldata解析服务,届时可通过这些服务来获得信息,甚至第三方可能会提供一键式发起强制提现、进入逃离模式、领取余额的产品。用户不必担心第三方服务的安全问题,因为资产只会提现到发起者的账户,只需注意不要泄漏钱包私钥和资产私钥。