
あなたのアドレスが他人のものと違って見える理由:アドレス形式と、送金が失敗するわけ
自己保管をしていれば、遅かれ早かれ誰もが同じ戸惑いの瞬間に行き当たります。自分に少しビットコインを送ろうと受取アドレスをコピーしたら、これまで見てきたアドレスとは似ても似つかない。あるいは取引所に弾かれる。あるいはビットコインアドレスにそっくりな何かへビットコインキャッシュを送ってしまい、何が起きたのかを突き止める不愉快な一時間を過ごす。
どれも恣意的なことではありません。アドレス形式は、そのコインがどのように使えるのかという実質的な情報を符号化しています。読めるようになれば、戸惑いはおおむね消えてなくなります。
アドレスとは、支払い条件の集合である
役に立つ考え方は「アドレスは口座番号だ」ではありません。こうです。アドレスとは、このコインが動くために何が成り立っていなければならないかを圧縮して書いたものだ。
1 で始まるアドレスに送れば、条件は 特定の公開鍵が署名を生み出すこと。長いほうの bc1q… アドレスに送れば、条件は 特定の二つの鍵が両方とも署名すること かもしれません。同じチェーン、同じお金、まったく違う規則――そしてアドレス形式こそが、どの規則が適用されるかをチェーンがあなたに告げる手段です。
形式が増えたのはそのためです。ビットコインがコインを施錠する新しい方法を得るたびに、それがどこに施錠されているかを書き表す新しい方法も必要になりました。
ビットコインで出会う形式
レガシー ― 1… 最初のもの。公開鍵ハッシュ宛の支払い。鍵一本、署名一つ。どこでも対応しており、そして使うのが最も高くつきます。署名データがブロックサイズにまるごと算入されるからです。
スクリプト ― 3… スクリプトハッシュ宛の支払い。コインは鍵ではなくスクリプトに施錠されます。マルチシグの定足数、時間ロック、何でも構いません。アドレスは条件のハッシュなので、外側からはそれが何なのか分かりません。初期の SegWit も互換性のためにこの経路で持ち込まれました。
ネイティブ SegWit ― bc1q… Bech32。署名データが別のウィットネス構造へ移り、使用コストが下がり、取引の可鍛性も解消されました。Bech32 は小文字で、base58 より強いチェックサムを持ち、打ち間違いが黙って受け入れられるのではなく検出されるよう設計されています。
ネイティブ SegWit には二つの長さがあり、その違いが効いてきます。
- 合計 42 文字 ― P2WPKH。鍵一本、署名一つ。
- 合計 62 文字 ― P2WSH。スクリプト――たとえば 2-of-2 マルチシグ。
Taproot ― bc1p… 最も新しいもの。プライバシーが向上し、複雑な支払いが安くなる一方、古いサービスの一部がいまだに受け付けないという代償があります。
SSP のアドレスが見慣れない理由
人が驚くのはここで、そして納得のいく説明があります。
SSP は 2-of-2 マルチシグのウォレットです。あなたのコインは一本の鍵に施錠されているのではなく、ブラウザ拡張と電話の両方からの署名を要求するスクリプトに施錠されています。つまり SSP のビットコインアドレスは P2WPKH ではなく P2WSH であり、bc1q の長いほうの形――多くの人が慣れている 42 文字ではなく 62 文字です。
自分のアドレスを眺めて長すぎるのではと思っていたなら、そうあるべきなのです。この余分な長さは、単一の公開鍵のハッシュではなく 2-of-2 スクリプトのハッシュです。条件が豊かだからアドレスが長い。それだけのことです。
これは時折、短い形しかパターン照合しない古いサービスをつまずかせます。あちら側の制約であり――P2WSH は十年前からあります――とはいえ、なぜそのエラーが出るのかを知っておく価値はあります。表示されるのはたいてい、役に立たない「無効なアドレス」だからです。
チェーンごとに選択は違った
SSP は複数の UTXO チェーンに対応しており、それぞれがマルチシグのアドレスを独自のやり方で書きます。
| チェーン | SSP でのスクリプト種別 | アドレスの見た目 |
|---|---|---|
| ビットコイン | P2WSH | bc1q…(62 文字) |
| ライトコイン | P2WSH | ltc1q… |
| ビットコインキャッシュ | P2SH | bitcoincash:p… |
| ドージコイン | P2SH | 9 か A で始まる |
| Zcash | P2SH | t3… |
| Ravencoin | P2SH | r で始まる |
| Flux | P2SH | t3… |
ライトコインはビットコインの設計を忠実に踏襲し、人間可読の接頭辞だけを変えました。だからアドレスが見慣れて感じられるのです。Zcash と Flux は二バイトのバージョンを使っており、スクリプトアドレスに特徴的な t3 の接頭辞を与えています。ドージコインは独自のバージョンバイトを選んだので、スクリプトアドレスは 9 か A で始まります――おなじみの単一鍵の D… とはまるで違います。
肝心なのは、チェーンのアドレス接頭辞がブランドではなくコンセンサス水準の定数だということです。あなたが何かを送る前にウォレットがアドレスを拒めるのは、そのおかげです。
ビットコインキャッシュの罠と、CashAddr が存在する理由
実際にお金を失いかねないので、知っておく値打ちのある歴史が一つあります。
2017 年にビットコインキャッシュがビットコインから分岐したとき、ビットコインのアドレス形式をそっくり受け継ぎました。同じバージョンバイト、鍵アドレスに 0x00、スクリプトアドレスに 0x05。レガシーの BCH アドレスとレガシーの BTC アドレスは区別がつきませんでした。似ているのではありません。構造として同一です。
どのソフトウェアにも見分けがつかないため、人々は BTC を BCH アドレスへ、BCH を BTC アドレスへと絶えず送りました。コインが破壊されたわけではありません――同じ秘密鍵が両方を支配します――が、取り戻すにはもう一方のチェーンのウォレットへ鍵を取り込む必要があり、多くの利用者はそれを安全に行えませんでした。
CashAddr がその解決策でした。bitcoincash: を接頭辞に持つ bech32 風の形式で、ビットコインのものとわざと非互換にしてあります。チェーンをまたぐ送金が静かに成功するのではなく、大きな音を立てて失敗するようにです。SSP がビットコインキャッシュのアドレスを完全な接頭辞つきで表示するのはそのためです。冗長に見えます。その冗長さこそが機能です。
送金が失敗する理由と、それぞれの意味
「無効なアドレス」。 たいていはチェックサムの不一致です。打ち間違い、切れた貼り付け、大文字と小文字が混ざった bech32 文字列。Bech32 は大文字小文字を区別しませんが、混在してはいけません。コピー経路によってはここが壊れます。ときには、送る側のサービスがあなたの形式に対応していないという意味でもあります。
「対応していないアドレス種別」。 サービスはアドレスを認識するが、そこへは送らない――典型的には Taproot を追加しなかった古い取引所か、短い形の SegWit しか扱えないところです。あなたが直すべき問題ではありません。別の出金経路か、中継用のアドレスを使ってください。
そもそもチェーンが違う。 ここでは bech32 の人間可読な接頭辞が守ってくれます。bc1 と ltc1 は別物で、ウォレットはそれを確かめます。base58 のチェーンはより危険です。有効なドージコインのアドレスは、他のいくつかのチェーンでも構造上は有効だからです。
送れたのに何も届かない。 違うチェーンのエクスプローラーを見ているか、資金があなたのものではない有効なアドレスへ行ったかのどちらかです。呼び戻しは存在しません。
実務上の決まりごと
コピーすること。決して手で打たないこと。 どの形式にもチェックサムがあるのは、まさに人間が打ち間違えるからです。本来しなくてよい仕事を、それにさせないでください。
何よりまず、接頭辞とチェーンを突き合わせること。 ビットコインは bc1、1、3。ライトコインは ltc1、L、M。ビットコインキャッシュは bitcoincash:。この一瞥が、高くつく間違いを捕まえます。
マルチシグのアドレスは長いものと思うこと。 SSP や、スクリプトを使うウォレットであれば、長い形が正しいのです。長さは誤りの兆候ではありません。
送り先が初めてなら、まず少額を試すこと。 とりわけ取引所宛て、とりわけ大きな金額のときに。手数料はもう一方の結末に比べれば些細です。
ウォレットが用意してくれるなら、新しい受取アドレスを使うこと。 アドレスを使い回すと、チェーンを眺めている誰にとっても、あなたの取引同士が結びついてしまいます。避けるのに費用はかかりません。
アドレス形式は、それぞれがコインの動き方についての一つの主張だと気づくまでは、恣意的な雑学に見えます。そう読めるようになれば、自分のウォレットで受け取ることは信仰の跳躍ではなくなり、実際に確かめられるものになります――自分の鍵を自分で持つことの意義は、まさにそこにあります。


