La derivación de clave secundaria BIP 32 "deja de funcionar" después de cierto índice (i)

Aquí está mi código para obtener una clave pública secundaria de una clave HD principal. Lo adapté de freedomnode :

  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();
  }

Si lo uso para el índice 0 o 1 o 2 (rutas 0/0, 0/1, 0/2), funciona bien en el sentido de que si envío bitcoins a esa dirección, puedo ver la transacción en la cadena de bloques pública bajo el padre xpuben blockchain.com y muestra los fondos. Además, las direcciones secundarias que genero coinciden con lo que aparece en la dirección de recepción de la cuenta Mycelium HD.

Pero cuando usé el índice 243 (creando así una ruta 0/243no apareció en el extremo receptor (debajo de eso xpub) a pesar de que apareció en mi extremo de envío como una transacción confirmada. Esa ruta 0/243generó una dirección de bitcoin válida, pero no apareció debajo de eso xpuben blockchain.com incluso después de que se confirmó.

¿Cuál es la regla involucrada? Si i> algún límite ya no funciona? ¿O si uso un índice "fuera de servicio" no funciona? ¿O algo más, como que Mycelium deje de reconocer las direcciones de los niños más allá de un cierto índice ( i) y realmente los fondos se safa justo debajo de un nuevo HD xpub de nivel superior? Usé el mismo código para generar todas las direcciones secundarias para i= 0, 1, 2 y 243.

Respuestas (1)

Mycelium HD es compatible con BIP 44 . Según lo especificado por BIP 44, el límite de brecha de dirección es 20. Esto significa que después de 20 índices de direcciones sin usar, la billetera espera que no se usen más direcciones más allá de ese punto. Por lo tanto, si envía fondos a una dirección con una brecha de más de 20 índices entre la última dirección utilizada, el software de la billetera no verificará si esa dirección ha recibido fondos.

oh, entonces consiguieron el dinero. ¡Simplemente no aparecerá hasta que usen otras 223 direcciones primero, en este caso! un poco salvaje Esto es realmente una buena noticia. Tenía miedo de que hubiera un límite de i.