BIP 32 Child-Key-Ableitung "funktioniert nicht mehr" nach einem bestimmten Index (i)

Hier ist mein Code, um einen untergeordneten öffentlichen Schlüssel von einem übergeordneten HD-Schlüssel zu erhalten. Ich habe es von Freedomnode angepasst :

  public function address_from_master_pub($path = '0/0') {
    if ($this->xpub === NULL && $this->ypub === NULL && $this->zpub === NULL) {
      throw new Exception("XPUB, YPUB or ZPUB key is not present!");
    }

    $adapter = Bitcoin::getEcAdapter();
    $slip132 = new Slip132(new KeyToScriptHelper($adapter));
    $registry_classname = 'BitWasp\\Bitcoin\\Network\\Slip132\\'.$this->network_name.'Registry';
    $bitcoin_prefixes = new $registry_classname();

    if ($this->xpub !== NULL) {
      $pubPrefix = $slip132->p2pkh($bitcoin_prefixes);
      $pub = $this->xpub;
    } else if ($this->ypub !== NULL) {
      $pubPrefix = $slip132->p2shP2wpkh($bitcoin_prefixes);
      $pub = $this->ypub;
    } else if ($this->zpub !== NULL) {
      $pubPrefix = $slip132->p2wpkh($bitcoin_prefixes);
      $pub = $this->zpub;
    }

    $config = new GlobalPrefixConfig([
      new NetworkConfig($this->network, [
        $pubPrefix,
      ])
    ]);

    $serializer = new Base58ExtendedKeySerializer(
      new ExtendedKeySerializer($adapter, $config)
    );

    $key = $serializer->parse($this->network, $pub);
    $child_key = $key->derivePath($path);

    return $child_key->getAddress(new AddressCreator())->getAddress();
  }

Wenn ich es für den Index 0 oder 1 oder 2 (Pfade 0/0, 0/1, 0/2) verwende, funktioniert es in dem Sinne gut, dass ich, wenn ich Bitcoin an diese Adresse sende, die Transaktion in der öffentlichen Blockchain unter dem übergeordneten xpubElement auf blockchain.com und es sehen kann zeigt die Mittel. Außerdem stimmen die untergeordneten Adressen, die ich generiere, mit denen überein, die in der Empfangsadresse des Mycelium HD-Kontos angezeigt werden.

Aber als ich den Index 243 verwendete (also einen Pfad 0/243davon erstellte), wurde er auf der empfangenden Seite (darunter xpub) nicht angezeigt, obwohl er auf meiner sendenden Seite als bestätigte Transaktion angezeigt wurde. Dieser Pfad 0/243generierte eine gültige Bitcoin-Adresse, aber es tauchte darunter xpubauf blockchain.com nicht auf, selbst nachdem es bestätigt wurde.

Um welche Regel geht es? Wenn i> irgendein Limit funktioniert es nicht mehr? Oder wenn ich einen Index "out of order" verwende, funktioniert es nicht? Oder etwas anderes, wie Mycelium, das die Erkennung von untergeordneten Adressen nach einem bestimmten Index ( i) stoppt, und wirklich die Funda Safa knapp unter einem neuen HD xpub auf höherer Ebene? Ich habe denselben Code verwendet, um alle untergeordneten Adressen für i= 0, 1, 2 und 243 zu generieren.

Antworten (1)

Mycelium HD ist BIP 44- konform. Wie von BIP 44 angegeben, beträgt die Adresslückengrenze 20. Das bedeutet, dass nach 20 Indizes nicht verwendeter Adressen die Brieftasche erwartet, dass über diesen Punkt hinaus keine Adressen mehr verwendet werden. Wenn Sie also Geld an eine Adresse mit einer Lücke von mehr als 20 Indizes zwischen der zuletzt verwendeten Adresse senden, prüft die Wallet-Software nicht, ob diese Adresse Geld erhalten hat.

oh, sie haben das Geld bekommen. Es wird in diesem Fall einfach nicht angezeigt, bis sie zuerst 223 andere Adressen verwenden! Irgendwie wild. Das ist eigentlich eine gute Nachricht. Ich hatte Angst, dass es eine Grenze gibt i.