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


bank-of-china 今天不小心给有些股东发了两次利息, 就算YY股东的福利.  I.T. SteemIt 程序设计 银行

bank-of-china

今天, 不小心给一些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 的利息. 

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

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

怎么样判断已经发过了?

我用了以下两个技巧:

  • STEEMSQL 查询, 但是SteemSQL 会有8分钟的延时(每8分钟 SteemSQL 从区块链上取数据更新缓存)
  • 本地文件做记号, 大概代码是:
    1
    2
    3
    4
    5
    6
    7
    
    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)  
    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银行发糖果, 这个程序如果一个时候只跑一个的情况下鲁棒性还是挺强的, 这次分叉从实际上证明了可能存在的问题.

GD Star Rating
loading...
本文一共 493 个汉字, 你数一下对不对.
今天不小心给有些股东发了两次利息, 就算YY股东的福利.. (AMP 移动加速版本)
上一篇: 糊里糊涂的2017年 | 2018年个人计划
下一篇: 我在STEEM发文的动力

扫描二维码,分享本文到微信朋友圈
b77ebbf0472853e09482723608345613 今天不小心给有些股东发了两次利息, 就算YY股东的福利.  I.T. SteemIt 程序设计 银行

评论