Een bitcoinadres kan een geldige controlesom hebben en toch niet voldoen aan de regels voor het gekozen adrestype. BIP-350 koppelt twee verschillende controlesommen aan de versie van de zogeheten witnessgegevens. Versie nul gebruikt Bech32; hogere versies gebruiken Bech32m. Wie een afwijzing onderzoekt, moet daarom de combinatie controleren. Alleen vaststellen dat de tekens een geldige controlesom opleveren, is onvoldoende.
| Wat je moet weten |
|---|
| Witnessversie nul gebruikt Bech32. |
| Witnessversies één tot en met zestien gebruiken Bech32m. |
| De decoder moet het formaat aan de witnessversie koppelen. |
| Ook de voorloop en lengte van de gegevens worden gecontroleerd. |
Een geldige controlesom is één controle
De officiële specificatie van BIP-350 beschrijft hoe software een adres moet beoordelen. Een decoder kan beide formaten afzonderlijk proberen of beide tegelijk herkennen. Daarna moet hij controleren of het gevonden formaat past bij de witnessversie in het adres. Een adres met versie nul en een Bech32m-controlesom faalt die controle, ook als Bech32m op zichzelf correct is berekend.
Hetzelfde geldt in de andere richting: bij versie één tot en met zestien hoort Bech32m. De testgevallen in de specificatie bevatten expliciet adressen die worden afgewezen omdat ze voor een hogere versie nog Bech32 gebruiken. Die voorbeelden laten zien waarom een adrescontrole meer informatie moet geven dan alleen “controlesom geldig”. Het bijbehorende versienummer bepaalt welke uitkomst aanvaardbaar is.
Daarnaast controleert de voorbeelddecoder de leesbare voorloop van het adres tegen de verwachte voorloop. Ook gelden grenzen aan de lengte van de witnessgegevens: twee tot veertig bytes. Voor versie nul zijn alleen twintig of tweeëndertig bytes toegestaan. Een passende controlesom vervangt deze controles niet. Bij een foutmelding is het dus zinvol om te achterhalen welke controle precies faalt, voordat je een andere verklaring zoekt.
Waarom er twee formaten bestaan
Bech32m ontstond vanwege een specifieke zwakte in Bech32. Als het laatste teken een p is, kon het invoegen of verwijderen van q-tekens vlak daarvoor de controlesom ongemoeid laten. Volgens BIP-350 raakt dit bestaande adressen met witnessversie nul niet, doordat daarvoor slechts twee lengtes zijn toegestaan. Bech32m beperkt deze invoegzwakte voor andere toepassingen en hogere versies.
De wijziging betreft de controlesom; de overige onderdelen van de codering blijven gelijk. De specificatie noemt daarbij ook de leesbare voorloop bc. Die voorloop alleen vertelt daardoor niet welke controlesom het adres nodig heeft. Vraag bij een afwijzing om de gevonden witnessversie, het herkende formaat en de concrete fout. Daarmee kun je onderscheiden of de tekstreeks ongeldig is of dat de software de combinatie niet juist beoordeelt.






