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
评论列表
文章目录