Bitcoin Cashアドレス変換ツールとは
Bitcoin Cashアドレス変換ツールは、1つのBCHアカウントを2つの表記の間で変換します。ひとつはCashAddr仕様で定義されたCashAddr形式 bitcoincash:q… / p…、もうひとつはBitcoinから受け継いだLegacyのBase58Check形式 1… / 3… です。どちらも公開鍵(P2PKH)またはスクリプト(P2SH)の同じ160ビットハッシュを含み、異なるのはエンコーディングとチェックサムだけです。
CashAddrエンコーディングの仕組み
- バージョンバイト。1バイトで、上位ビットが種別(0 = P2PKH、1 = P2SH)、下位3ビットがハッシュサイズ(0 = 160ビット、3 = 256ビット)を表します。
- 5ビットへの再グループ化。バージョンバイトとハッシュを連結し、bech32とまったく同じ方法で5ビットごとに区切り直し、ゼロビットでパディングします。
- チェックサム。展開したプレフィックス(各文字の下位5ビット、その後にゼロ)、ペイロード、8個のゼログループに対して、生成多項式定数 0x98f2bc8e61、0x79b76d99e2、0xf33e5fb3c4、0xae2eabe2a8、0x1e4f43e470 を用いた40ビットのBCH符号を計算し、得られた8個のチェックサムグループを末尾に付加します。
- アルファベット。各グループは32文字の文字集合
qpzry9x8gf2tvdw0s3jn54khce6mua7lで表記されるため、文字列に1、b、i、oが含まれることはありません。
変換例
仕様の最初のテストベクタは 1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu です。Base58Checkでデコードすると、バージョン 0x00(P2PKH)とhash160 76a04053bda0a88bda5177b86a15c3b29f559873 が得られます。先頭にCashAddrのバージョンバイト 0x00 を付け、5ビットに再グループ化してチェックサムを付加すると bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a になります。同じハッシュのP2SH版は、Legacy形式では 3 で始まり(3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC)、CashAddrでは p で始まります(bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq)。いずれかを上に貼り付けると、変換結果をその場で確認できます。
形式の早見表
| 形式 | 例 | チェックサム | BTCと区別できる? |
|---|---|---|---|
| Legacy P2PKH | 1…、26–35文字 | 4バイトのdouble SHA-256 | いいえ |
| Legacy P2SH | 3…、34文字 | 4バイトのdouble SHA-256 | いいえ |
| CashAddr P2PKH | bitcoincash:q…、プレフィックスの後に42文字 | 40ビットpolymod | はい |
| CashAddr P2SH | bitcoincash:p…、42文字 | 40ビットpolymod | はい |
| CashAddr P2SH-32 | bitcoincash:p…、62文字 | 40ビットpolymod | はい、Legacy形式なし |
| テストネット | bchtest:q… または m… / n… / 2… | 同じ | プレフィックスのみ |
Legacy警告が重要な理由
取引所は今でもBCHの入金用にLegacyアドレスを表示しており、ユーザーも相変わらずBitcoinアドレスをBCHの出金フォームに貼り付けてしまいます。バイト列が同一であるため、Bitcoinユーザーの 1… アドレス宛のBCHトランザクションは有効であり、Bitcoin Cashチェーン上で承認されますが、受取人のウォレットはそのチェーンを見ることがありません。コインが消滅するわけではありませんが、その秘密鍵の保有者がBCHウォレットで回収するしかなく、ほとんどの受取人はその方法を知りません。送金前にすべてのアドレスをCashAddrに変換すれば、この曖昧さはなくなります。bitcoincash: を受け付けるウォレットはBCHウォレットだからです。
典型的な用途
- 古い取引所のLegacy入金アドレスを、最近のウォレットや決済QRジェネレーターが期待するCashAddr形式に変換する。
- プレフィックスなしで貼り付けられた
q…文字列がメインネットかbchtestかを確認する。 - スクリプトの構築や検証、または同じアドレスの2つの表記の比較のためにhash160を取り出す。
Bitcoin本体にはBitcoinアドレス検証ツールを、汎用のbech32文字列にはbech32エンコーダー / デコーダーをご利用ください。