Exemplo n.º 1
0
def get_transaction_by_address(address, asset, page):
    address = address.lower()
    try:
        mongo_client.insert_address(address)
    except Exception as e:
        app_logger.error(e)

    txs = [
        tx for tx in mongo_client.get_transfer_records(address, asset, page)
    ]
    new_txs = []
    for tx in txs:
        if tx["txReceiptStatus"] == "0":
            tx["txReceiptStatus"] = "-1"
        tx["addressFrom"] = checksum_encode(tx["addressFrom"])
        tx["addressTo"] = checksum_encode(tx["addressTo"])
        new_txs.append(tx)

    if page != 1:
        return new_txs
    else:
        if new_txs:
            return new_txs
    my_account = Account(address=address, api_key=setting.API_KEY)
    my_account.PREFIX = setting.ETHSCAN_API_PREFIX

    try:
        res = my_account.get_transaction_page(sort="desc")
    except:
        res = None
    if res:
        tmp_list_0x = []
        tmp_list_contract = []
        for r in res:
            tmp_dict = {}
            input_data = r.get("input")
            if r.get("to") == asset and input_data[:10] == "0xa9059cbb":

                tmp_dict["addressFrom"] = checksum_encode(r.get("from"))
                tmp_dict["addressTo"] = checksum_encode(input_data[34:74])
                tmp_dict["value"] = str(int(input_data[74:], 16))
                tmp_dict["txId"] = r.get("hash")
                tmp_dict["gasUsed"] = r.get("gasUsed")
                tmp_dict["gasPrice"] = r.get("gasPrice")
                tmp_dict["gas"] = r.get("gas")
                tmp_dict["blockNumber"] = r.get("blockNumber")
                tmp_dict["blockTime"] = r.get("timeStamp")
                tmp_dict["asset"] = r.get("to")
                tmp_dict["txReceiptStatus"] = r.get(
                    "txreceipt_status"
                ) if r.get("txreceipt_status") != "0" else "-1"
                tmp_list_contract.append(tmp_dict)

            if input_data == "0x" and asset == "0x00000000000000000000000000000000000000":
                tmp_dict["addressFrom"] = checksum_encode(r.get("from"))
                tmp_dict["addressTo"] = checksum_encode(r.get("to"))
                tmp_dict["value"] = r.get("value")
                tmp_dict["txId"] = r.get("hash")
                tmp_dict["gasUsed"] = r.get("gasUsed")
                tmp_dict["gasPrice"] = r.get("gasPrice")
                tmp_dict["gas"] = r.get("gas")
                tmp_dict["blockNumber"] = r.get("blockNumber")
                tmp_dict["blockTime"] = r.get("timeStamp")
                tmp_dict["asset"] = "0x00000000000000000000000000000000000000"
                tmp_dict["txReceiptStatus"] = r.get(
                    "txreceipt_status"
                ) if r.get("txreceipt_status") != "0" else "-1"
                tmp_list_0x.append(tmp_dict)

        if asset == "0x00000000000000000000000000000000000000":
            tmp_list = tmp_list_0x
        else:
            tmp_list = tmp_list_contract

        if len(tmp_list) > 8:
            return tmp_list[:8]

        return tmp_list

    return []
            self.db.TransferRecord.insert_one(record)
        except Exception as e:
            logger.info(e)


mongo_client = MongodbEth()

while True:
    address = mongo_client.get_address()
    if not address:
        time.sleep(15)
        continue

    my_account = Account(address=address.get("address"),
                         api_key=setting.API_KEY)
    my_account.PREFIX = setting.ETHSCAN_API_PREFIX
    try:
        res = my_account.get_transaction_page(sort="desc")
    except Exception as e:
        res = None

    if res:
        for r in res:
            tmp_dict = {}
            tmp_dict["txId"] = r.get("hash")
            tmp_dict["addressFrom"] = r.get("from")
            tmp_dict["gasUsed"] = r.get("gasUsed")
            tmp_dict["gasPrice"] = r.get("gasPrice")
            tmp_dict["gas"] = r.get("gas")
            tmp_dict["blockNumber"] = r.get("blockNumber")
            tmp_dict["blockTime"] = r.get("timeStamp")