sync_antshares.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:sync_antshares 作者: OTCGO 项目源码 文件源码
def sync_block(num):
    start_time = time.time()
    while True:
        current_block = RN.getBlock(num)
        if not current_block.has_key('result'):
            time.sleep(SYNC_TIME_GAP)
        else:
            break
    mongo_block = {}
    mongo_block['_id'] = num
    mongo_block['previousblockhash'] = current_block['result']['previousblockhash'][-64:]
    mongo_block['index'] = current_block['result']['index']
    mongo_block['hash'] = current_block['result']['hash'][-64:]
    mongo_block['time'] = current_block['result']['time']
    trs = current_block['result']['tx']
    mongo_block['tx'] = []
    #sync address
    for tr in trs:
        sync_address(tr)
    #sync claim
    for tr in trs:
        sync_claim(tr, num)
    #sync transactions
    sys_fee = D('0')
    for i in get_fixed_slice(trs, GEVENT_MAX):
        threads = []
        for j in i:
            sys_fee += D(j['sys_fee']).quantize(D('1'),rounding=ROUND_DOWN)
            mongo_block['tx'].append(j['txid'][-64:])
            threads.append(gevent.spawn(sync_transaction, j))
        gevent.joinall(threads)
        if num:
            mongo_block['sys_fee'] = str(sys_fee + D(DB.blocks.find_one({'_id':num-1})['sys_fee']))
        else:
            mongo_block['sys_fee'] = str(sys_fee)
    try:
        result = DB.blocks.insert_one(mongo_block)
        print '->', num, 'at %f seconds, %s' % (time.time() - start_time, datetime.datetime.now())
    except DuplicateKeyError:
        print 'duplicate block %s' % num
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号