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
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
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: