oflyhigh avatar

每天进步一点点:学习一下HF25后HBD利息发放相关内容

oflyhigh

Published: 04 Jul 2021 › Updated: 04 Jul 2021每天进步一点点:学习一下HF25后HBD利息发放相关内容

每天进步一点点:学习一下HF25后HBD利息发放相关内容

在之前的帖子《HIVE硬分叉25(HardFork 25)要来啦 & 共识变化(Consensus changes)》,我曾提及,HIVE HF25一个重要的共识变化,就是仅对存款账户中的HBD发放利息

image.png
(图源 :pixabay)

而这这之前,HBD的持有者,无论是将HBD放到余额账户中还是将HBD转到存款账户中,都是可以得到HBD利息的。

那么HBD的利息是如何发放的呢?在HF25之前,HBD利息的发放有两种方式,一种是针对余额账户;一种是针对存款账户。

针对余额账户

针对HBD余额的利息发放是在database::modify_balance中实现的,每次涉及到需要调整账户余额时(database::adjust_balance),database::modify_balance都会被调用。

database::modify_balance可以调整三类资产的余额,分别是:

  • HIVE
  • HBD
  • VESTS (HIVE POWER)

在HF25之前,修改账户HBD余额时,就会处理利息的发放。

大致的流程是:根据余额账户的HBD金额以及持有时间(当前时间-上次发放利息的时间)计算累积持有时间(可以理解成余额和时间的累积值)以及当前利率计算出应得利息,加到账户中。

而我们写文章获取奖励、转账、内部市场交易等都会触发余额变动,所以都会触发这个利息计算过程,当然了,为了效率,如果距离上次触发不足30天,那么只累积计算累积持有时间并不直接发放利息。

这个间隔时间在这里定义:

#define HIVE_HBD_INTEREST_COMPOUND_INTERVAL_SEC (60*60*24*30)

而HF 25,在处理HBD余额利息发放/计算累积时间时,增加了一个判断,将:

if(a.hbd_seconds_last_update != head_block_time() )

修改为:

if( has_hardfork(HIVE_HARDFORK_1_25) == false && a.hbd_seconds_last_update != head_block_time() )

所以,在HF 25之后,HBD余额将不再计算利息了。如果你在HF之前有HBD利息尚未发放,那么很遗憾,这部分利息将再也不会发放了。

我看了一下我的账户:

image.png

唉,如果能挨到7月5号以后硬分叉,我就可以拿到一笔余额利息了,好大一笔啊,心疼ing。

针对存款账户

好了,余额账户的HBD没有利息可赚了,我们来看看存款账户吧。存款账户只有两种资产:

  • HIVE
  • HBD

而HIVE是没有利息的。存款账户HBD的利息计算和余额账户利息计算大同小异,在database::adjust_savings_balance中计算&发放。

判断的第一个条件:

if( a.savings_hbd_seconds_last_update != head_block_time() )

好像除非一个块中做了N个同样的操作,否则这个条件是不是可以忽略呢?好吧,先不管这个。接下来同样是计算累积时间:

acnt.savings_hbd_seconds += fc::uint128_t(a.get_hbd_savings().amount.value) * (head_block_time() - a.savings_hbd_seconds_last_update).to_seconds();
acnt.savings_hbd_seconds_last_update = head_block_time();

也就是说这个累积时间是余额和时间的累积值。然后同样是判断距离上次发放时间是达到一个月,这个时间间隔的定义上边已经说啦,就是HIVE_HBD_INTEREST_COMPOUND_INTERVAL_SEC

如果符合条件(累积值大于0,时间达到一个月以上),那么按当前利率计算利息并发放到账户中。

除了上述内容以外,HBD存款账户的利息发放的触发与HBD余额利息发放的触发大不相同。HBD存款账户的利息发放将由以瞎方式触发:

将HBD转入存款账户: transfer_to_savings_evaluator::do_apply
从存款账户转出HBD: transfer_from_savings_evaluator::do_apply
取消从存款账户转出HBD: cancel_transfer_from_savings_evaluator::do_apply

所以,原则上,我们可以控制存款账户的利息何时发放,这多少会给我们留下一点想象力空间,你想到了什么吗?😏

命令行钱包相关操作

因为HBD只在存款账户才有利息,所以如果有不打算变现或者动用的HBD,放入存款账户会更加合算一些。

命令行钱包中相关操作如下:

transfer_to_savings(const string & from, const string & to, const condenser_api::legacy_asset & amount, const string & memo, bool broadcast)

以我的账户为例:

transfer_to_savings oflyhigh oflyhigh "1.000 HBD" "" true

上述指令将会把1 HBD存入存款账户,然后就可以等着吃利息啦。如果HBD兑美元保持稳定的话,7%的年化(以后可能会调整),还真是一个不错的选择呢!

相关链接

Leave 每天进步一点点:学习一下HF25后HBD利息发放相关内容 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh