def get_transaction_data(trx_id): # print "\ntrx_id:",trx_id ret = yield eth_request("eth_getTransactionByHash", [str(trx_id)]) # print ret json_data = json.loads(ret) if json_data.get("result") is None: raise Exception("blockchain_get_transaction error trx_id:%s, returnStr: %s" % (trx_id, ret)) resp_data = json_data.get("result") ret = yield eth_request("eth_getTransactionReceipt", [str(trx_id)]) json_data = json.loads(ret) if json_data.get("result") is None: raise Exception("blockchain_get_transaction_receipt error trx_id:%s, returnStr: %s" % (trx_id, ret)) receipt_data = json_data.get("result") returnValue((resp_data, receipt_data))
def get_latest_block_num(db): ret =yield eth_request("eth_blockNumber", []) json_data = json.loads(ret) d = db.b_config.find_one({"key": "safeblock"}) safe_block = yield d safe_block = safe_block["value"] returnValue(int(json_data["result"], 16) - int(safe_block))
def init_account_info(db): GlobalVariable.db_account_list = [] GlobalVariable.account_list = [] GlobalVariable.withdraw_account = [] records = yield db.b_chain_account.find({"chainId": "eth"}) for one_account in records: GlobalVariable.db_account_list.append(one_account["address"].lower()) withdraw_data = yield db.b_config.find_one({"key": "withdrawaddress"}) if withdraw_data is not None: for data in withdraw_data["value"]: if data["chainId"] == "eth": GlobalVariable.withdraw_account.append(data["address"].lower()) break ret = yield eth_request("personal_listAccounts", []) json_data = json.loads(ret) if json_data.get("result") is None: raise Exception("get_all_account_list") GlobalVariable.account_list = json_data["result"] GlobalVariable.all_care_account = [] GlobalVariable.all_care_account.extend(GlobalVariable.account_list) GlobalVariable.all_care_account.extend(GlobalVariable.db_account_list) GlobalVariable.all_care_account.extend(GlobalVariable.withdraw_account)
def is_contract_trx(receipt_data): if receipt_data["contractAddress"] is not None: return True ret = eth_request("eth_getCode", [receipt_data["to"], "latest"]) json_data = json.loads(ret) if json_data.get("result") is None: raise Exception("is contract trx error") if json_data["result"] == "0x": return False else: return True
def collect_block(db_pool, block_num_fetch): ret = yield eth_request("eth_getBlockByNumber", [hex(block_num_fetch), False]) # ret = eth_request("eth_getBlock", [str(block_num_fetch)]) print "", block_num_fetch if json.loads(ret).get("result") is None: # 正式环境删除 '''while True: block_num_fetch = GlobalVariable.sync_start_per_round GlobalVariable.sync_start_per_round += 1 if GlobalVariable.sync_start_per_round > GlobalVariable.sync_end_per_round: GlobalVariable.sync_end_per_round = GlobalVariable.sync_start_per_round print hex(block_num_fetch) ret = eth_request("eth_getBlockByNumber", [hex(block_num_fetch), False]) print "GlobalVariable.sync_start_per_round", GlobalVariable.sync_start_per_round, ret if json.loads(ret).get("result") is not None: break ''' raise Exception("blockchain_get_block error blockNum:%d, returnStr: %s"%(block_num_fetch,ret)) json_data = json.loads(ret) # print json_data["result"] json_data = json_data["result"] # if len(json_data["transactions"]) > 0: # print "has transactions:", block_num_fetch block_info = BlockInfo() block_info.from_block_resp(json_data) block = db_pool.b_block mongo_data =yield block.find_one({"blockHash": block_info.block_id}) # print {"blockHash":block_info.block_id} if mongo_data == None: block.insert(block_info.get_json_data()) else: yield block.update({"blockHash": block_info.block_id}, {"$set": block_info.get_json_data()}) # print 1 returnValue( block_info)