今天一个朋友问我:“O哥O哥,SP代理多长时间才能收回来啊?” 其实这个问题我一点也不关心,因为我也不用呀(代理出去一点电也不着急回收),那回收耗时对我而言就是浮云啊。但是既然别人问到了,就研究研究吧。
那今天就来扯扯SP 代理回收要多久?
(图源 :pixabay)
安全提示:O哥闲扯淡系列本就是闲扯淡,诸位千万别当真!
SP代理回收
SP代理功能以前没啥介绍啦,这里就不赘述了,感兴趣的自己去找找看喽。
那么什么是SP代理回收呢?简单来讲,我代理给你1000 SP,现在想取消代理了,或者想改成代理500SP,那么就要收回多余的部分,这个功能我称之为SP代理回收。
你可能会问,这有啥啊,不就是加减法嘛,比如代理1000 SP变成 代理500 SP,那就收回500SP好了。最初我也是这样想的,事实也没有啥出入,但是关键的问题是:SP代理回收不是即时到账的。
vesting_delegation_expiration_object
既然SP代理回收不是即时到账,那要多久呢?
社区中流传较广的回答是普通SP代理取消(或调整)后7天到账,创建账户代理取消(或调整)后30天到账,事实真的如此吗?让我们从代码上找找看,是否如此。
首先,SP代理创建和取消代理在STEEM区块链上都是一个操作, 都是delegate_vesting_shares_operation
操作,而SP代理创建还有一种方式是account_create_with_delegation_operation
,亦即创建账户并代理SP。
因为我们要研究的是取消时间,所以来看看取消是咋处理的,所谓的取消实际上就是减少代理了。相关代码如下:
其中核心内容是创建了一个vesting_delegation_expiration_object
,而和时间有关的是这句啦:
obj.expiration = std::max( _db.head_block_time() + STEEM_CASHOUT_WINDOW_SECONDS, delegation->min_delegation_time );
当这个对象超时,代理SP的差额就会返还到对应账户,亦即回收啦。从代码我们可以看出来,它取_db.head_block_time() + STEEM_CASHOUT_WINDOW_SECONDS
、delegation->min_delegation_time
这两者的最大值。
delegation->min_delegation_time
那么delegation->min_delegation_time
又是啥呢?
在创建SP代理(delegate_vesting_shares_operation
)时:
(调整时不修改)
在创建账户并代理SP(account_create_with_delegation_operation
)时
代理回收到账时间
通过上述介绍我们知道,取消(或减少)SP代理,到账时间是_db.head_block_time() + STEEM_CASHOUT_WINDOW_SECONDS
、delegation->min_delegation_time
这两者的最大值。
这其中涉及两个常量
STEEM_CASHOUT_WINDOW_SECONDS
STEEM_CREATE_ACCOUNT_DELEGATION_TIME
到此,我们不难得出SP代理的回收时间了。
结论
不多写了,直接上结论:
- 普通SP代理操作,代理回收(取消或减少)到账时间为操作7天之后
- 创建账户并代理,代理回收到账时间如下:
- 创建账户并代理起23天之内回收,创建账户并代理起30天之后到账
- 创建账户并代理起23天以上回收,回收操作7天之后到账
也就是说创建账户并代理,(SP)回款最短期限是创建并代理起30天。社区中流传较广的回答:创建账户代理取消(或调整)后30天到账 是不精确的说法。