Bech32
データを32文字の英数字を使って表現する仕組み(Base32みたいなもの)
仕様の構成
2つに分かれています
(1) Bech32自体の定義(エンコード/デコード方法の仕様)
NostrのIDはこれを使ってエンコードされます
こちらはBitcoinアドレス用であり、NostrのNIP-19では使われません NostrのNIP-19では改良版のBech32m(BIP350)ではなく、無印のbech32が使われています not-mって書かれているのはその意味
データの構造
可読部分 (human readable part, prefixとも)
人が読んで理解できるようなテキストを含む部分
普通はデータの種別が含まれる
bc ビットコイン
Nostr(NIP-19)ではnsec npub noteがよく使われる セパレータ、区切り文字 (separator)
1 が使われる
可読部分とデータ部分を分割するための文字
データ部分
英数字32文字がデータの表現に使われる
qpzry9x8gf2tvdw0s3jn54khce6mua7lのそれぞれが0〜31に対応する
大文字小文字は区別しない
1, b, i, o 以外の文字が使われる
見間違いを防ぐためにこれらが除外されている
チェックサムとエラー訂正
BCH符号を使う
実装
参照実装
JavaScript @scure/base
nostr-toolsで使われている
で hex = hex_encode(fromWords(bech32.decode(id).words));