Staking 合约(SC)

Staking合约

Staking合约指的是Stafi链上记录和更新rToken和原生token映射关系的一组代码。后文我们用英文SC简称代替。

Stafi每支持一个PoS项目的Staking就会有一个SC,随着某个项目委托资产量的增加,Stafi会为此项目,创建多个SC,以分散管理资产,控制风险;与此同时,Stafi支持的PoS项目不止一个,严格来说我们应该用复数SCs,代表这是一个合约组,但为了简便,我们依旧用SC。在所有的SC中,支持XTZstaking操作的Staking Contracts称之为 XTZ_SC,支持Atom staking操作的称之为Atom_SC,通过SC ,Stafi为用户实现质押,赎回,派息,交易等操作。

质押过程

当用委托人在Stafi上申请质押的时候,SC将用户委托的token放在一个多签账户,多签账户为SC在原链上创建的一个特殊账户,由Stafi链上的多个SSV控制,任何一个SSV都无法单独控制;然后SC将多签账户中的token委托给原链上值得信赖的验证者,参与到Stake当中;最后,SC生成对应数量的rToken,发放到用户的Stafi账户,质押过程完成。

赎回过程

当用户在Stafi上申请赎回的时候,SC会先锁定用户Stafi账户中的rToken,并发起取消委托Staking,经过锁定期,取消委托完成后,SC将多签账户的token转移回用户在原链的账户(此过程需要SSV签名验证),然后销毁之前锁定的rToken,赎回过程完成。

由于PoS链Staking锁定期的存在,用户从申请赎回到赎回完成,需要等待一定的时间。

派息过程

派息是指向用户派发Staking收益的过程,SC定期向用户结算一次收益,收益以rToken方式结算。这意味着收益是自动参与复利的。在派息时点,SC会和原链通讯,获取收益状况,并更新各账户rToken的数字。

SCs向用户结息的周期是统一且相对固定的。受委托的验证者向多签账户结算收益的频次,和出块的频次相同,根据不同的PoS链不同,大约在几秒钟到几分钟时间不等。但SCs会将结息周期均一化处理,统一为一个固定的,较长的结息周期,例如一天一次(可通过治理投票调整)。这样做可以减少和原链的交互次数,节约资源。

另外,Stafi对同一token类型的所有委托人的收益做均一化处理,以给用户更稳定的预期,这点和大多PoW的矿池的做法相似。

交易过程

交易过程不需要和原链交互,用户A请求向用户B转移rToken时,SC只需要将A用户的Stafi账户中的rToken转移到B用户的Stafi账户即可,与此同时,rToken所代表的赎回权和收益权也从A用户转移到了用户B手里。交易完成后的下一个派息时点,Staking收益会结算给用户B。

最终确定性

大多PoS链是出块即确定模型,只要交易被打包到区块里,这条交易就不能再篡改,也有一部分PoS链是概率确定型,类似于比特币,需要等到N个区块后,才能把交易被推翻的概率降到临界值以下。基于PoS链的这个特点,SCs在处理质押过程,赎回过程,包括派息过程时,都会有一定时间的延迟等待期。如果交易没有成功上链,SCs也会向用户做出操作失败的反馈。这样做避免Stafi和原链的数据产生不一致。