Finden Sie alle verwendeten Adressen mit dem xpub-Schlüssel

Ich verwende derzeit eine Ledger-Brieftasche und finde es mühsam, sie jedes Mal anzuschließen, wenn ich mein Guthaben überprüfen möchte.

Ich habe Zugriff auf meinen Master-XPUB-Schlüssel. Wie finde ich alle zugehörigen Adressen heraus? Gibt es eine Website, die diesen Dienst hostet und über eine API verfügt?

Ich habe online ein Skript gefunden, das dies tut, aber es ist in PHP geschrieben und ziemlich langsam. Ich suche etwas, das mit Python kompatibel ist.

Hier gibt es eine Antwort: bitcoin.stackexchange.com/a/64685/38324

Antworten (1)

Sie können Blockonomics verwenden, es ist ziemlich schnell. Es hat auch eine API, um das Gleichgewicht des gegebenen xpub zu geben.

Wenn Sie Ihr xpub nicht an den Server senden möchten, können Sie https://github.com/dan-da/hd-wallet-addrs verwenden . Dadurch wird der Zufallssaldo-API-Dienst für jede Adresse ausgewählt und eine HD-Walkthrough durchgeführt.

Beispielcode mit Blockr-API hinzugefügt, ruft Salden für 20 Adressen auf einmal ab, sollte ziemlich schnell sein

import pycoin.key
import sys
import os
os.environ["PYCOIN_NATIVE"]="openssl"
import requests
BATCH_SIZE = 20
BLOCKR_URL= "http://btc.blockr.io/api/v1/address/info"
def get_used_addresses(xpub, account_type):
  xpub_subkey = xpub.subkey(account_type)
  index = 0
  addr_batch = []
  output = []
  while True:
    addr = xpub_subkey.subkey(index).bitcoin_address()
    addr_batch.append(addr)
    if (index+1)%BATCH_SIZE==0:
      results = requests.get("{}/{}".format(BLOCKR_URL, ",".join(addr_batch))).json()
      addr_batch = []
      used_addrs = [x["address"] for x in results['data'] if not x["is_unknown"]]   
      if (used_addrs):                       
        output.extend(used_addrs)
      else:  
        break                     
    index += 1
  return output

def main():
  xpub = pycoin.key.Key.from_text(sys.argv[1])
  result = []
  result.extend(get_used_addresses(xpub, 0))
  result.extend(get_used_addresses(xpub, 1))
  print result

if __name__ == "__main__":
  main()
1. Blockonomics hat ein Limit von 50 Adressen. Wenn ich meinen Pubkey an einen Drittanbieter-Server senden wollte, würde ich blockchain.ifo/xpub verwenden. Es ist schneller.
2. Dies ist das PHP-Skript, von dem ich gesprochen habe. Die Bearbeitung dauert viel zu lange.
Nicht sicher, ob Sie sich den Parameter --batch-size im PHP-Skript angesehen haben. Auf diese Weise wird es mehrere Adressen gleichzeitig nachschlagen und sollte schneller sein. Ein weiterer Engpass ist die Generierung von Unterschlüsseln, mit Python können Sie github.com/richardkiss/pycoin mit PYCOIN_NATIVE=openssl verwenden, das hilft wirklich, die Geschwindigkeit zu erhöhen.
Beispielcode in Python hinzugefügt
Ich bin mir nicht sicher, wie ich diese beiden zusammenbringen würde - das eine ist PHP, das andere Python ...
@WhytetheWeeabear Ich habe das Python-Codebeispiel hinzugefügt, Sie können das direkt verwenden, machen Sie sich keine Sorgen um PHP
Versuchte Ihren Code, gab mir "IndexError: list index out of range"
Sie sollten xpub als Parameter an das Programm übergeben
Das Skript funktioniert nicht mit Segwit Wallets (BIP49).