Bitcoin Cashアドレス変換ツール:CashAddr ↔ Legacy

どちらの表記でもBCHアドレスを貼り付けると、もう一方の表記に加え、アドレス種別、ネットワーク、元になるハッシュが表示されます。先にチェックサムを検証するため、入力ミスのあるアドレスは変換されずに拒否されます。

bitcoincash: プレフィックスの有無を問わないCashAddr(q… または p…)、bchtest: テストネットアドレス、Legacy Base58Check 1… / 3… アドレスに対応。

ブラウザ内のJavaScriptでチェックします。アドレスがアップロードや保存されることはありません。

Bitcoin Cashアドレス変換ツールとは

Bitcoin Cashアドレス変換ツールは、1つのBCHアカウントを2つの表記の間で変換します。ひとつはCashAddr仕様で定義されたCashAddr形式 bitcoincash:q… / p…、もうひとつはBitcoinから受け継いだLegacyのBase58Check形式 1… / 3… です。どちらも公開鍵(P2PKH)またはスクリプト(P2SH)の同じ160ビットハッシュを含み、異なるのはエンコーディングとチェックサムだけです。

CashAddrエンコーディングの仕組み

  1. バージョンバイト。1バイトで、上位ビットが種別(0 = P2PKH、1 = P2SH)、下位3ビットがハッシュサイズ(0 = 160ビット、3 = 256ビット)を表します。
  2. 5ビットへの再グループ化。バージョンバイトとハッシュを連結し、bech32とまったく同じ方法で5ビットごとに区切り直し、ゼロビットでパディングします。
  3. チェックサム。展開したプレフィックス(各文字の下位5ビット、その後にゼロ)、ペイロード、8個のゼログループに対して、生成多項式定数 0x98f2bc8e61、0x79b76d99e2、0xf33e5fb3c4、0xae2eabe2a8、0x1e4f43e470 を用いた40ビットのBCH符号を計算し、得られた8個のチェックサムグループを末尾に付加します。
  4. アルファベット。各グループは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 P2PKH1…、26–35文字4バイトのdouble SHA-256いいえ
Legacy P2SH3…、34文字4バイトのdouble SHA-256いいえ
CashAddr P2PKHbitcoincash:q…、プレフィックスの後に42文字40ビットpolymodはい
CashAddr P2SHbitcoincash:p…、42文字40ビットpolymodはい
CashAddr P2SH-32bitcoincash:p…、62文字40ビットpolymodはい、Legacy形式なし
テストネットbchtest:q… または m… / n… / 2…同じプレフィックスのみ

Legacy警告が重要な理由

取引所は今でもBCHの入金用にLegacyアドレスを表示しており、ユーザーも相変わらずBitcoinアドレスをBCHの出金フォームに貼り付けてしまいます。バイト列が同一であるため、Bitcoinユーザーの 1… アドレス宛のBCHトランザクションは有効であり、Bitcoin Cashチェーン上で承認されますが、受取人のウォレットはそのチェーンを見ることがありません。コインが消滅するわけではありませんが、その秘密鍵の保有者がBCHウォレットで回収するしかなく、ほとんどの受取人はその方法を知りません。送金前にすべてのアドレスをCashAddrに変換すれば、この曖昧さはなくなります。bitcoincash: を受け付けるウォレットはBCHウォレットだからです。

典型的な用途

Bitcoin本体にはBitcoinアドレス検証ツールを、汎用のbech32文字列にはbech32エンコーダー / デコーダーをご利用ください。

よくある質問

CashAddrとLegacyのBitcoin Cashアドレスの違いは?

どちらも同じ20バイトのハッシュをエンコードしています。LegacyアドレスはBitcoinのBase58Check(P2PKHは1…、P2SHは3…)を使い、Bitcoinアドレスと見た目がまったく同じです。2018年1月に導入されたCashAddrは、bech32風のアルファベットにbitcoincash: プレフィックスと40ビットのチェックサムを組み合わせたもので、BCHアドレスがBTCアドレスと混同されることはなくなりました。

Legacyの1…アドレスはBitcoinとBitcoin Cashのどちら?

どちらの可能性もあります。この形式は両チェーンでバイト単位で同一であり、それこそがCashAddrが作られた理由です。取引所からBCH用に1…アドレスを渡された場合、bitcoincash:q… に変換するのは安全ですが、他の場所で見つけた1…アドレスをBCHアドレスだと決めつけないでください。変換ツールはLegacy入力のたびに警告を表示します。

変換ツールがアドレスを拒否するのはなぜ?

CashAddrのpolymodチェックサムまたはBase58Checkのdouble SHA-256チェックサムが一致しなかったためで、少なくとも1文字が間違っているか欠けています。大文字と小文字が混在したCashAddr文字列も無効です。仕様ではすべて小文字かすべて大文字でなければなりません。

bitcoincash: プレフィックスは省略できる?

できます。プレフィックスはチェックサムの一部ですが、ほとんどのウォレットはq… やp… だけの文字列を受け付け、メインネットとみなします。プレフィックスがない場合、ツールはbitcoincash、bchtest、bchregを順に試し、どれが一致したかを表示します。

P2SH-32アドレスとは?

2023年のCashTokensアップグレード以降、Bitcoin Cashは32バイトのスクリプトハッシュ(種別ビット1、サイズビット3)に対応しています。p… で始まる有効なCashAddr文字列ですが長さが長く、LegacyのBase58形式は存在しません。デコーダーはハッシュを表示し、Legacy形式が提供されない理由を説明します。

Bitcoin SVやeCashにも使える?

使えません。eCash(XEC)はecash: プレフィックスで同じCashAddrアルゴリズムを使い、Bitcoin SVはLegacyアドレスを使い続けています。別のプレフィックスを持つCashAddrを貼り付けた場合、チェックサムはそのプレフィックスで検証されますが、非標準のBitcoin Cashプレフィックスとしてフラグが付きます。