今天不小心给有些股东发了两次利息,就算YY股东的福利。


Image Credit: here

今天,不小心给一些YY股东发了两篇利息,比如 @angerlina6688 美女,

24 minutes ago  Transfer 0.009 SBD to angelina6688  Thank you for supporting @justyy ! Your 70.02 SP gives you daily interests of 0.009 SBD (5% APR) - (2017-12-29): 1 STEEM = 3.233 SBD
24 minutes ago  Transfer 0.009 SBD to angelina6688  Thank you for supporting @justyy ! Your 70.02 SP gives you daily interests of 0.009 SBD (5% APR) - (2017-12-29): 1 STEEM = 3.233 SBD

就算行长给大家的新年礼物!

原因

每天利息都是用 crontab 定时在凌晨00:02分的时候用程序自动发的(然后会在 01:02, 02:02 ... 每天前6个小时内再次检查补发),已经很好的运行101天了,以下是从日表 得到的数据:

YY: 101 
YY: 107 
YY: 222.28 SBD 
YY: 2.20 SBD 
YY: 15.41 SBD 
YY: 66.02 SBD 

今天发两次的情况说来也真是有意思:

  1. 我记错时间了,当00:01的时候我发现利息没有发出,我以为程序挂掉了,其实程序还没开始跑呢。
  2. 于是我在00:01将近00:02的时候手动跑程序发利息。
  3. 结果在00:02分的时候有一段时间两个同样的程序都在发利息,所以有一部分是重复发的。

怎么样判断已经发过了?

我用了以下两个技巧:

  1. STEEMSQL 查询,但是SteemSQL 会有8分钟的延时(每8分钟 SteemSQL 从区块链上取数据更新缓存)
  2. 本地文件做记号,大概代码是:
fname = id + "_" + today + ".txt"
if os.path.isfile(fname):
    print("transferred today already.") 
else:           
    if steem.transfer(id, amount=x, asset='SBD', memo=interest, account='justyy') != None:
        print("transfered!")
        touch(fname)  

两个程序都会先发完才做标记,碰巧发利息的时候 steem.transfer 是比较耗时的(需要广播到STEEM区块链上),所以两个程序就发了两次。

当然可以把 touch(fname) 做标记移到 steem.transfer 前,也就是先标记,然后再去发,不过以前试过,一旦标记上但是偶尔发不成功的话,那么在1:02, 2:02 等第二次第三次机会发利息就会以为已经发成功了。

这次就算YY银行糖果,这个程序如果一个时候只跑一个的情况下鲁棒性还是挺强的,这次分叉从实际上证明了可能存在的问题。

AD 一波,最近SBD涨到8块钱了,SBD比SP值钱多了,所以你把钱存在YY银行是很划算的,YY银行吃的是草(借的SP),挤的是奶啊(值钱的SBD), 每日发 SBD利息,从不间断,提前祝YY股东们圣诞快乐,新年快乐,股东们都在2018里赚大钱,实现财务自由啊!

通过 SP 代理工具 成为 YY银行股东,好处多多。只要代理大于10 SP给 @justyy 即可自动成为YY股东。

SteemIt 教程、机器人、在线工具和API接口
SteemIt Tutorials, Robots, Tools and APIs

近期帖子

H2
H3
H4
3 columns
2 columns
1 column
25 Comments