Wie löst man das Blockchain 20 Address Gap-Limit-Problem?

Wir bieten derzeit Bitcoin-Auszahlungen und -Einzahlungen auf unserer Website an. Die Blockchain-API wird verwendet, um alle Vorgänge abzuwickeln.

Das einzige Problem ist das Limit von 20 Adresslücken der Blockchain Receive API, wie hier erwähnt: http://bitcoinx.io/news/articles/blockchain-info-updates-receive-payments-api-version-to-address-edge-cases/

Jetzt bekommen wir viele neugierige Benutzer, die auf die Bitcoin-Einzahlungsschaltfläche klicken und sich dazu verpflichten, ohne tatsächlich eine Transaktion zu senden, was leicht zu 20 Adressen führen kann. Welche Möglichkeiten gibt es, diese Einschränkung aufzuheben? Ich habe nur wenige Ideen, aber sie sind ziemlich sperrig und einige erfordern eine vollständige Neufassung des Codes und den Austausch der Blockchain-API. Könnt ihr irgendwelche Einblicke und/oder Ratschläge geben? Wie kann dieses Problem elegant und effizient gelöst werden?

Ich glaube nicht, dass ich Ihr Problem vollständig verstehe, aber könnten Sie dem Benutzer, der eine Einzahlung vornehmen möchte, nicht einfach dieselbe Adresse anzeigen, bis er tatsächlich etwas an diese Adresse einzahlt? Zugegeben, dies würde mehr API-Aufrufe erfordern, um nach Transaktionen zu suchen, die an diese Adresse zahlen.
Sie sollten auch in der Lage sein, weitere Adressen anzufordern, nachdem Sie die anfänglichen 20 verwendet haben, richtig?

Antworten (2)

Ja, die Lücke ist ein Problem mit der HD-Wallet. Blockchain hat einen Blogbeitrag über die Arbeit mit diesem Problem erstellt. Siehe hier: https://blog.blockchain.com/2016/06/15/receive-payments-api-update-address-gap-limits/#more-9024

Nehmen wir an, Sie werden an die erste Adresse, Adresse 1, bezahlt – die Brieftasche wird 2-21 Adressen vorausschauen, um zu sehen, ob es zusätzliche Gelder oder Transaktionshistorie in diesen Adressen gibt. Wenn es nichts findet, hört es auf zu suchen. Wenn Sie also für Adresse 22 bezahlt werden, sieht die Wallet-Software das Geld nicht, weil es bei 21 aufgehört hat. Wenn Sie jedoch für Adresse 2 bezahlt werden, sieht die Wallet-Software die Adressen 3-22 voraus und sieht die Gelder, die waren an die Adresse 22 senden und dann weitere 20 vorausschauen (Adressen 23 – 43).

Ab dem 1. August 2016 werden wir mit einem HTTP-Fehler auf API-Anforderungen antworten, die Sie über die Lückengrenze von 20 Adressen hinausschieben würden, und wir werden keine neuen Adressen für Ihr xpub generieren, bis wir eine Zahlung erkennen, die die Lücke schließen würde unterhalb dieser Grenze. Dies stellt sicher, dass Sie durch die Verwendung von Receive Payments API V2 niemals unerreichbare Gelder haben, aber möglicherweise dazu führen, dass keine Adressen generiert werden, wenn Ihre Benutzer sie anfordern.

Sie können die Checkgap-API über den folgenden Endpunkt aufrufen:

https://api.blockchain.info/v2/receive/checkgap?xpub= {xpub}&key={apikey}

Sie erhalten eine JSON-Antwort, die wie folgt aussieht:

{ "gap": 1 }

Dieser Lückenwert stellt die Differenz zwischen dem Index der zuletzt bezahlten Adresse und der zuletzt angeforderten Adresse dar. Wenn dieser Wert 20 oder mehr beträgt, ist der Zugriff auf Gelder, die an weitere erstellte Adressen gezahlt wurden, schwierig, bis frühere Adressen Gelder erhalten.

Wie ist der Stand jetzt im Mai 2019? Gibt es eine Möglichkeit, die Lücke zu verringern, die nicht bezahlte Adressen ungültig macht? vielleicht eine Ablaufzeit?
Mir ist bei dieser blockchain.info-Firma aufgefallen, dass die meisten ihrer alten URLs nicht funktionieren. Wie die, die Sie in diesem Blogbeitrag gepostet haben. (Und es ist auch nicht in der Rückwegmaschine.)

Bevor neue API-Limits eingeführt wurden, war eine angemessene Methode zur Abwicklung von Bitcoin-Zahlungen

  • Fordern Sie für jeden Benutzer eine separate Adresse (öffentlicher/privater Schlüssel) an
  • Speichern Sie die neue Adresse im Benutzerkonto und zeigen Sie den öffentlichen Teil für die Transaktion an
  • Rückruf von Blockchain.info anhören
  • Wenn der Rückruf eintrifft, überprüfen Sie, wer die Zahlung geleistet hat, wie viel bezahlt wurde, führen Sie die Geschäftslogik durch und fordern Sie eine neue Adresse für diesen Benutzer an.

Nachdem die neue API Begrenzungen für die Gesamtzahl der angeforderten Adressen eingeführt hatte, wurde sie aus meiner Sicht unbrauchbar. Zumindest kann ich nicht erkennen, wie "zuverlässig" Zahlungen von mehreren Benutzerkonten gleichzeitig abgewickelt werden.

-1 Konzentrieren Sie sich bitte auf die Beantwortung der Frage, anstatt eine jetzt veraltete Lösung zu präsentieren und sich über ihre Veralterung zu beschweren.