예제 #1
0
def find_txn_on_sia_explorer(fulfillment):
    token_name = fulfillment.token_name

    funderAddress = fulfillment.funder_address
    amount = fulfillment.payout_amount

    if token_name != 'SC':
        return None

    url = f'{BASE_URL}/hash/{funderAddress}'

    response = requests.get(url).json()

    if response:
        last100_txns = response[1]['last100Transactions']
        if response[0]['Type'] == 'address' and last100_txns:
            for txn in last100_txns:
                if (
                    txn['TxType'] == 'ScTx'
                    and txn['ScChange'] < 0
                    and abs(txn['ScChange']) / 10 ** 24 == amount / 10 ** 24
                    and not txn_already_used(txn['MasterHash'], token_name)
                ):
                    return txn
    return None
예제 #2
0
def find_txn_on_harmony_explorer(fulfillment):
    token_name = fulfillment.token_name

    funderAddress = fulfillment.bounty.bounty_owner_address
    amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    if token_name != 'ONE':
        return None


    url = f'https://explorer.harmony.one:8888/address?id={payeeAddress}&pageIndex=0&pageSize=20'


    response = requests.get(url).json()
    if (
        response and
        'address' in response and
        'shardData' in response['address']
    ):
        for shard in response['address']['shardData']:

            for tx in shard['txs']:
                if (
                    tx['from'] == funderAddress.lower() and
                    tx['to'] == payeeAddress.lower() and
                    tx['value'] ==  float(amount) * 10 ** 18 and
                    not txn_already_used(tx['hash'], token_name)
                ):
                    return tx
    return None
예제 #3
0
def find_txn_on_filecoin_explorer(fulfillment):
    token_name = fulfillment.token_name
    payeeAddress = fulfillment.fulfiller_address

    if token_name != 'FIL':
        return None

    url = 'https://api.filscan.io:8700/rpc/v1'

    data = {
        "id":
        1,
        "jsonrpc":
        "2.0",
        "params": [{
            "address": payeeAddress,
            "offset_range": {
                "start": 0,
                "count": 25
            }
        }],
        "method":
        "filscan.MessageByAddress"
    }

    response = requests.post(url, headers=headers,
                             data=json.dumps(data)).json()
    if (response and 'result' in response and 'data' in response['result']):
        for txn in response['result']['data']:
            if (isValidTxn(fulfillment, txn) == 'success'
                    and not txn_already_used(txn['cid'], token_name)):
                return txn
    return None
예제 #4
0
def find_txn_on_btc_explorer(fulfillment, network='mainnet'):
    funderAddress = fulfillment.bounty.bounty_owner_address

    token = Token.objects.filter(symbol='BTC').first()
    decimal = token.decimals if token else 8
    amount = fulfillment.payout_amount * 10**decimal

    payeeAddress = fulfillment.fulfiller_address

    n = Net(provider='Blockstream', network=network)
    txlist = n.txs(funderAddress)

    # validate BTC address
    is_valid = validate.is_valid_address(funderAddress)
    if is_valid == False:
        logger.error(f'error: invalid BTC address - {funderAddress}')
    else:
        if network == 'mainnet':
            blockstream_url = 'https://blockstream.info/api/tx/'
        else:
            blockstream_url = 'https://blockstream.info/testnet/api/tx/'

        if txlist != []:
            for txn in txlist:
                blockstream_response = requests.get(blockstream_url +
                                                    txn).json()
                if (blockstream_response['vin'][0]['prevout']
                    ['scriptpubkey_address'] == str(funderAddress) and
                        blockstream_response['vout'][0]['scriptpubkey_address']
                        == str(payeeAddress)
                        and float(blockstream_response['vout'][0]['value'])
                        == float(amount) and not txn_already_used(txn, 'BTC')):
                    return txn
    return None
예제 #5
0
def get_harmony_txn_status(fulfillment):

    txnid = fulfillment.payout_tx_id
    token_name = fulfillment.token_name
    funderAddress = fulfillment.funder_address
    amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    if token_name != 'ONE':
        return None

    if not txnid or txnid == "0x0":
        return None

    url = f'https://explorer.harmony.one:8888/tx?id={txnid}'


    response = requests.get(url).json()
    if (response and 'tx' in response):
        tx = response['tx']

        if 'err' in tx:
            return 'expired'

        if (
            tx['from'] == funderAddress.lower() and
            tx['to'] == payeeAddress.lower() and
            tx['value'] == float(amount) * 10 ** 18 and
            not txn_already_used(tx['hash'], token_name)
        ):
            if tx['status'] == 'SUCCESS':
                return 'success'

    return None
예제 #6
0
파일: algorand.py 프로젝트: ezaruba/web
def get_algorand_txn_status(fulfillment):
    txnid = fulfillment.payout_tx_id
    token_name = fulfillment.token_name
    funderAddress = fulfillment.bounty.bounty_owner_address
    payeeAddress = fulfillment.fulfiller_address
    amount = fulfillment.payout_amount

    url = f'https://api.algoexplorer.io/v2/transactions/pending/{txnid}?format=json'
    response = requests.get(url).json()
    if response:

        if response.get('confirmed-round') and response.get('txn') and response.get('txn').get('txn'):
            txn = response["txn"]['txn']
            if not response["pool-error"] == "":
                return None

            # asset / algo token
            rcv = txn['rcv'] if txn.get('rcv') else txn['arcv']
            amt = txn['amt'] if txn.get('amt') else txn['aamt']

            if (
                txn['snd'].lower() == funderAddress.lower() and
                rcv.lower() == payeeAddress.lower() and
                float(float(amt)/ 10**6) == float(amount) and
                not txn_already_used(txnid, token_name)
            ):
                return 'success'    
        
        elif response.get('message') and API_KEY != '':
            # txn is too old and cannot be found on algoexplorer
            return get_algorand_txn_status_paid_explorer(fulfillment)
예제 #7
0
파일: algorand.py 프로젝트: ezaruba/web
def get_algorand_txn_status_paid_explorer(fulfillment):
    txnid = fulfillment.payout_tx_id
    token_name = fulfillment.token_name
    funderAddress = fulfillment.bounty.bounty_owner_address
    payeeAddress = fulfillment.fulfiller_address
    amount = fulfillment.payout_amount

    headers = {
        'accept': 'application/json',
        'x-api-key': API_KEY
    }

    url = f'https://mainnet-algorand.api.purestake.io/idx2/v2/transactions/{txnid}'
    response = requests.get(url=url, headers=headers).json()
    
    if response:
        if response.get("current-round") and response.get("transaction"):
            txn = response["transaction"]

            # asset / algo token
            payment_txn = txn['payment-transaction'] if txn.get('payment-transaction') else txn['asset-transfer-transaction']

            if (
                txn['confirmed-round'] > 0 and
                txn['sender'].lower() == funderAddress.lower() and
                payment_txn['receiver'].lower() == payeeAddress.lower() and
                float(float(payment_txn['amount'])/ 10**6) == float(amount) and
                not txn_already_used(txnid, token_name)
            ):
                return 'success'
        
    return None
예제 #8
0
def get_rsk_txn_status(fulfillment):

    txnid = fulfillment.payout_tx_id
    token_name = fulfillment.token_name
    funderAddress = fulfillment.bounty.bounty_owner_address
    payeeAddress = fulfillment.fulfiller_address

    # amount = fulfillment.payout_amount

    if token_name not in ['RBTC', 'RDOC', 'DOC', 'RIF', 'SOV']:
        return None

    if not txnid or txnid == "0x0":
        return None

    url = f'https://blockscout.com/rsk/mainnet/api?module=transaction&action=gettxinfo&txhash={txnid}'

    response = requests.get(url).json()

    if response['status'] and response['result']:
        txn = response['result']

        to_address_match = txn['to'] == payeeAddress.lower(
        ) if token_name == 'RBTC' else True

        if (txn['from'] == funderAddress.lower() and to_address_match and
                # float(txn['value']) == float(amount * 10 ** 18) and
                not txn_already_used(txn['hash'], token_name)
                and int(txn['confirmations']) > 0):
            if txn['success']:
                return 'success'
            return 'expired'

    return None
예제 #9
0
def find_txn_on_rsk_explorer(fulfillment):
    token_name = fulfillment.token_name

    funderAddress = fulfillment.bounty.bounty_owner_address
    # amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    if token_name not in ['RBTC', 'RDOC', 'DOC', 'RIF', 'SOV']:
        return None

    url = f'https://blockscout.com/rsk/mainnet/api?module=account&action=txlist&address={funderAddress}'

    response = requests.get(url).json()

    if response['message'] and response['result']:
        for txn in response['result']:
            to_address_match = txn['to'] == payeeAddress.lower() if token_name == 'RBTC' else True

            if (
                txn['from'] == funderAddress.lower() and
                to_address_match and
                # float(txn['value']) == float(amount * 10 ** 18) and
                not txn_already_used(txn['hash'], token_name)
            ):
                return txn
    return None
예제 #10
0
파일: etc.py 프로젝트: freshtech2021/web
def find_txn_on_etc_explorer(fulfillment, network='mainnet'):
    token_name = fulfillment.token_name
    if token_name != 'ETC':
        return None
    funderAddress = fulfillment.bounty.bounty_owner_address
    amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    blockscout_url = f'https://blockscout.com/etc/{network}/api?module=account&action=txlist&address={funderAddress}'
    blockscout_response = requests.get(blockscout_url).json()
    if blockscout_response['message'] and blockscout_response['result']:
        for txn in blockscout_response['result']:
            if (txn['from'] == funderAddress.lower()
                    and txn['to'] == payeeAddress.lower()
                    and float(txn['value']) == float(amount)
                    and not txn_already_used(txn['hash'], token_name)):
                return txn
    return None
예제 #11
0
파일: zil.py 프로젝트: Grubson33421/web
def find_txn_on_zil_explorer(fulfillment, network='mainnet'):
    token_name = fulfillment.token_name
    if token_name != 'ZIL':
        return None

    funderAddress = fulfillment.bounty.bounty_owner_address
    amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    url = f'https://api.viewblock.io/v1/zilliqa/addresses/{funderAddress}/txs?network={network}'
    response = requests.get(url, headers=headers).json()
    if len(response):
        for txn in response:
            if (txn['from'] == funderAddress.lower()
                    and txn['to'] == payeeAddress.lower()
                    and txn['direction'] == 'out'
                    and float(txn['value']) == float(amount)
                    and not txn_already_used(txn['hash'], token_name)):
                return txn
    return None
예제 #12
0
def find_txn_on_celo_explorer(fulfillment, network='mainnet'):
    token_name = fulfillment.token_name
    if token_name != 'cGLD' and token_name != 'cUSD':
        return None

    funderAddress = fulfillment.bounty.bounty_owner_address
    amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    # TODO: UPDATE WITH MAINNET URL. Using alfajores until then
    blockscout_url = f'https://alfajores-blockscout.celo-testnet.org/api?module=account&action=tokentx&address={funderAddress}'

    blockscout_response = requests.get(blockscout_url).json()
    if blockscout_response['message'] and blockscout_response['result']:
        for txn in blockscout_response['result']:
            if (txn['from'] == funderAddress.lower()
                    and txn['to'] == payeeAddress.lower()
                    and float(txn['value']) == float(amount)
                    and not txn_already_used(txn['hash'], token_name)):
                return txn
    return None
예제 #13
0
def find_txn_on_tezos_explorer(fulfillment):
    token_name = fulfillment.token_name
    funderAddress = fulfillment.funder_address
    payeeAddress = fulfillment.fulfiller_address
    amount = fulfillment.payout_amount
    txnid = fulfillment.payout_txid

    if token_name != 'XTZ':
        return None

    url = f'{BASE_URL}/accounts/{funderAddress}'

    response = requests.get(url).json()

    if response:
        for txn in response['operations']:
            if (txn['type'] == 'transaction' and txn['hash'].strip() == txnid
                    and txn['sender']['address'] == funderAddress
                    and txn['target']['address'] == payeeAddress
                    and txn['amount'] == float(amount) * 10**6
                    and not txn_already_used(txn['hash'], token_name)):
                return txn
    return None
예제 #14
0
def find_txn_on_celo_explorer(fulfillment, network='mainnet'):
    token_name = fulfillment.token_name
    if token_name != 'cUSD' and token_name != 'CELO':
        return None

    funderAddress = fulfillment.bounty.bounty_owner_address

    token = Token.objects.filter(symbol=token_name).first()
    decimal = token.decimals if token else 18
    amount = fulfillment.payout_amount * 10**decimal

    payeeAddress = fulfillment.fulfiller_address

    blockscout_url = f'https://explorer.celo.org/api?module=account&action=tokentx&address={funderAddress}'
    blockscout_response = requests.get(blockscout_url).json()
    if blockscout_response['message'] and blockscout_response['result']:
        for txn in blockscout_response['result']:
            if (txn['from'] == funderAddress.lower()
                    and txn['to'] == payeeAddress.lower()
                    and float(txn['value']) == float(amount)
                    and not txn_already_used(txn['hash'], token_name)):
                return txn
    return None
예제 #15
0
파일: btc.py 프로젝트: jatinS-dev/web-1
def find_txn_on_btc_explorer(fulfillment, network='mainnet'):
    funderAddress = fulfillment.bounty.bounty_owner_address
    amount = fulfillment.payout_amount
    payeeAddress = fulfillment.fulfiller_address

    n = Net(provider='Blockstream', network=network)
    txlist = n.txs(funderAddress)

    if network == 'mainnet':
        blockstream_url = 'https://blockstream.info/api/tx/'
    else:
        blockstream_url = 'https://blockstream.info/testnet/api/tx/'

    if txlist != []:
        for txn in txlist:
            blockstream_response = requests.get(blockstream_url + txn).json()
            if (blockstream_response['vin'][0]['prevout']
                ['scriptpubkey_address'] == str(funderAddress)
                    and blockstream_response['vout'][0]['scriptpubkey_address']
                    == str(payeeAddress)
                    and float(blockstream_response['vout'][0]['value'])
                    == float(amount) and not txn_already_used(txn, 'BTC')):
                return txn
    return None