Ejemplo n.º 1
0
def get_btc_address():
    # Check for X-Real-IP header added by proxy
    ip_address = request.headers.get("X-Real-IP") or request.remote_addr

    address = r.get(redis_prefix + ip_address)
    if address is None:
        n = r.incr(redis_prefix + index_key)
        address = deterministic.electrum_address(mpk, n)
        r.setex(redis_prefix + ip_address, address, timeout)

    return address
Ejemplo n.º 2
0
def bci_scan_addresses(mpk, gap_limit=50, addresses_per_request=50):
    n = 0
    empty_count = 0
    utxo_list = []

    #Address mapping is a dict of address:idx
    address_mapping = {}

    while True:
        serialized_addresses = ""

        # Send multiple addresses at once to bci, to limit number of requests.
        for i in range(addresses_per_request):
            n += 1
            address = deterministic.electrum_address(mpk, n)
            address_mapping[address] = n

            serialized_addresses += address

            if i < addresses_per_request:
                serialized_addresses += "|"

        req = requests.get("http://blockchain.info/unspent?active=" + serialized_addresses)

        if req.status_code == 200:
            bci_utxo = req.json()['unspent_outputs']

            for utxo in bci_utxo:
                address = script_extract_address(unhexlify(utxo['script']))
                address_index = address_mapping[address]

                utxo_list.append({"address_index": address_index,
                                  "address": address,
                                  "value": utxo['value'],
                                  "tx_hash": utxo['tx_hash'],
                                  "n": utxo['tx_output_n']})

        # bci returns status code 500, when there are no unspent outputs.
        else:
            empty_count += addresses_per_request

        if empty_count > gap_limit:
            break

    return utxo_list
Ejemplo n.º 3
0
MIN_TX_VALUE = 10000            # 0.0001 BTC
MAX_TX_VALUE = 500000000        # 5 BTC
UNSIGNED_FILE = 'data/unsigned.dat'

print "ElectrumToBIP32 create.py (ONLINE)"

# Discover unspent outputs
discovered = []
electrum_mpk = raw_input('\nEnter MPK for Electrum wallet: ')
value_discovered = 0
for chain in (0, 1):
    gap = 0
    key_index = 0
    print "\nDiscovery for Electrum {0} chain:".format('receiving' if chain == 0 else 'change')
    while gap < ELECTRUM_GAP_LIMIT:
        address = electrum_address(electrum_mpk, key_index, chain)
        print "Checking %s for history..." % address,
        if history(address):
            gap = 0
            unspent_outputs = unspent(address)
            if unspent_outputs:
                value = sum([unspent_output['value'] for unspent_output in unspent_outputs])
                value_btc = float(value) / SATOSHI_PER_BITCOIN
                print "{0:,f} BTC found".format(value_btc)
                d = {"chain": chain, "key_index": key_index, "address": address,
                     "unspent_outputs": unspent_outputs, "value": value}
                discovered.append(d)
                value_discovered += value
            else:
                print "all spent"
        else: