用語集 / プロトコルとアップグレード
ソフトフォーク
- ソフトフォークとは?
- ソフトフォークとは、ビットコインのルールを厳格にする変更であり、新しいソフトウェアで有効なブロックが古いソフトウェアでも引き続き有効となるため、誰もチェーンから排除されることなくネットワークをアップグレードできます。
ビットコインが実際に実装してきたアップグレードはすべてこの仕組みで動いています。ルールを厳しくするということは、古いノードが知っているルールを何一つ破らないため、古いノードも新しいブロックをそのまま受け入れるということです。2012年4月から2021年11月までの間のソフトフォークによって、ビットコインにはスクリプトハッシュのアドレス、タイムロック、SegWit、Taprootがもたらされましたが、そのうちのどれ一つとしてウォレットを孤立させたものはありませんでした。
仕組み
ソフトフォークは有効なブロックの集合を狭めるので、アップグレード後のネットワークが生成するものはすべて、以前のルールブックの下ですでに合法でした。
これを可能にする仕掛けは、ビットコインのスクリプト言語が意図的に扉を開けたままにしていたことです。10個のオペコードは何もせずに成功するno-opとして定義され、まだ誰も定義していなかった型のアウトプットは、それを満たせる者なら誰でも使用できるものとして扱われていました。ソフトフォークはそうした扉の一つを通ります。古いノードがそのまま通してしまうものに、実際の要件を付けるのです。OP_NOP2は2015年12月にOP_CHECKLOCKTIMEVERIFYとなり、OP_NOP3は2016年7月にOP_CHECKSEQUENCEVERIFYとなりましたが、2014年のノードにとっては、どちらも依然として有効なスクリプトの中のno-opです。
その結果として、誰が何をするかが分かれます。アップグレードしていないノードは、知っているすべてのルールの検証を続け、他の全員と同じチェーンにとどまります。アップグレードしたノードはより多くを検証します。実際に動かなければならないのはマイナーです。アップグレードしていないマイナーは、アップグレードしたノードが拒否するブロックを生成して報酬を失い、自分に従う者を破綻した枝へ引き込む可能性があるからです。
だからこそ難しいのはコードではなくアクティベーションです。ハッシュレートの大半が新しいルールを適用すれば、それに違反するブロックは孤立し、厳格化は定着します。そうでなければ、ネットワークはソフトフォークがまさに避けるよう設計された断層線に沿って分裂します。ビットコインはその多数派を確立する方法をいくつか試してきました。ブロックバージョンのスーパーマジョリティの集計、BIP-9のバージョンビッツ方式、BIP-8のタイムアウト方式、そしてTaprootで使われた3か月間のSpeedy Trialの期間です。
ソフトフォークは、ハードフォークにはできない形で取り消すこともできます。新しいルールは古いソフトウェアが決して要求しなかった制限なので、それを放棄すれば全員が、どのバージョンも依然として有効とみなすチェーンに戻ります。
ビットコインを購入するうえでこれが重要な理由
率直に言えば、ソフトフォークこそが、ビットコインのアップグレードが普通の保有者にこれまで何の負担もかけてこなかった理由です。
移行も、期限も、見逃しうる告知もありません。2013年に作成されたP2PKHアドレスにあるコインは、今日でも同じ鍵と、同じソフトウェアで使用できます。以降のソフトフォークはすべて、そうあり続けるよう注意を払ってきました。お使いの他のあらゆる金融プラットフォームと比べてみてください。これはこのシステムで最も過小評価されている性質です。
実際に気づくのは遅れであり、それは周辺で表面化します。プロトコルは新しいアウトプット型を有効にしますが、ウォレットがそれを既定にするまでに1年かかり、取引所がそこへの出金を認めるまでにはさらに時間がかかり、まったく対応しない取引所もあります。当サイトがレビューする取引所の中では、bech32アドレスへの送金への対応は今や一般的ですが、bech32mのTaproot宛先への対応はまだばらついており、初日からコンセンサスのルールであった変更に対して4年の遅れがあります。あなたが新しい機能を実際に使えるかどうかを決めるのは、プロトコルではなく、この差です。
そこから導かれる実務的なルールは単純です。追いついていないプラットフォームのために、古い型のアドレスを1つ手元に用意しておき、ある形式が使えると決めつける前に出金画面を確認してください。出金先アドレスが拒否されるのは面倒ですが、受け付けられたうえで失敗したアドレスについてのサポートへの問い合わせはさらに厄介です。
Pay to script hash、マルチシグを使えるものにしたソフトフォーク
P2SHは、そのパターンを縮図で示してくれるので、学ぶ価値のある最も初期のソフトフォークです。
2012年4月より前は、マルチシグの構成へ支払うには、支払う側が自分が資金を提供するアウトプットにスクリプト全体を入れなければなりませんでした。そのため送金者は他人のセキュリティポリシーに責任を負うことになり、巨大なアウトプットが生まれ、アドレスを印刷したり口頭で伝えたりすることは不可能でした。BIP-16はそのすべてを、スクリプトの20バイトのハッシュに置き換え、数字3で始まるアドレスに包みました。
古いルールで動くノードにとって、アウトプットスクリプトは、使用する側が一致するデータをプッシュしたときに成功するハッシュ比較です。新しいルールで動くノードにとっては、プッシュされたそのデータが次にスクリプトとして実行され、それ自体が満たされなければなりません。新しいルールは厳密に強いので、古いノードは有効な新しい使用をすべて受け入れます。これがソフトフォークの定義です。
アクティベーションは、その後も繰り返されてきた形で混迷しました。対立する提案であるBIP-17が開発者の意見を分け、期限は2012年2月1日から4月1日へずれ込み、マイナーは採掘するブロックに文字列"/P2SH/"を書き込むことで支持を示しました。現存する3で始まるほぼすべてのアドレスは、取引所が入金用に配布するものを含め、あの議論から生まれたものです。
ソフトフォークvs BIP
BIPは文書であり、ソフトフォークはノードが適用するルールです。BIP-341は誰でも書けたであろうGitHubリポジトリ内のテキストファイルですが、Taprootは2021年11月14日のブロック709,632でコンセンサスのルールになったものです。この区別が重要なのは、BIP-17やコベナントの提案を含め、ほとんどのBIPは決して有効化されないからであり、また1つのソフトフォークが同時に複数の文書にまたがることが多いからです。SegWitがBIP-141、BIP-143、BIP-144、BIP-147にまたがったのがその例です。有効化されたルールを指してBIP番号を言うのは、会話では無害ですが、自分のノードが実際に何を適用しているかを突き止めようとするときには誤解を招きます。