Préfixe de version utilisé pour les adresses Bech32

Oct 17 2020

Je compilais un tableau pour le préfixe de version (hex) et le préfixe du résultat Base-58 pour différents types d'adresses Bitcoin.

Je suis tombé sur le contenu ici: https://en.bitcoin.it/wiki/List_of_address_prefixes, qui ne contient pas d'informations sur Decimal , préfixe Hex pour les adresses Bech32 (je suppose qu'ils ont également appelé l'adresse SegWit, non?)

Donc, j'ai vérifié ce tableau ici: https://en.bitcoin.it/w/images/en/4/48/Address_map.jpgmais, je ne comprends pas la signification de " x03x03x00x02x03 ".

  1. Si x00 est égal à 0x00 en hexadécimal et x80 égal à 0x80 en hexadécimal, comment dois-je interpréter x03x03x00x02x03?
  2. Quelle est la Version préfixe pour les adresses Bech32 (adresses BC1)?

Réponses

CodingEnthusiast Oct 17 2020 at 18:20

Ces octets (x03x03x00x02x03 ou mieux représentés comme 0x0303000203) sont la partie lisible par l'homme étendue. Vous pouvez trouver le code sur BIP-173 .

def bech32_hrp_expand(s):
  return [ord(x) >> 5 for x in s] + [0] + [ord(x) & 31 for x in s]

Le problème est cependant que contrairement au codage Base58, ces octets ne sont utilisés que dans le calcul de la somme de contrôle et non comme les octets de départ. Ce qui rend l'image trompeuse à mon avis.

Le codage Bech32 est très différent du codage Base58 car il n'y a pas de "préfixe de version". Il existe un Hrp, une version témoin, une donnée (hachage) et une somme de contrôle. Witness version | hashsont les données en cours de codage et expanded_hrp | datasont utilisées dans le calcul de la somme de contrôle ( |concatination).