仮想通貨におけるブロックチェーンは根幹の技術といっても他言ではありません。このブロックチェーンは、取引を行うたびにブロックが生成されるのですが、たまに同時に二つのブロックが生成されることがあります。同時に生成されたとしても、その後長くブロックチェーンとして続いたブロックを、正しいブロックとして保っています。意図的に仕様変更をした場合は、ハードフォークとソフトフォークという二つの仕様変更方法があり、両者とも仕様変更後はブロックが二つ発生します。今回はこのハードフォークとソフトフォークという二つの分岐について説明していきます。
仮想通貨のハードフォークとは
まずハードフォークを簡単に説明します。ハードフォークとは、仮想通貨の仕様を変更する際にこれまでの仕様を継承せずに、新しい仕様を適用することでかつての仕様の仮想通貨と互換性の無い新しい仮想通貨となってしまうことです。つまり、ハードフォークにりより前の仕様と新しい仕様の二つの仮想通貨が存在するようになります。
ハードフォークは、ブロックチェーンのデータが入っているブロック(箱)のサイズを大きくすることにより、情報の取入れ量を大きくすることが目的です。そうすることにより処理能力を上げるのです。そして、このブロック(箱)を大きくするので、これまでの箱が使えなくなってしまうのでハードフォークは互換性が無いと言われます。
仮想通貨がハードフォークで分岐した場合、分岐前の仮想通貨と分岐後の仮想通貨の二種類が誕生します。ここで新たに誕生した仮想通貨はどうしても取引量が増えるので価値が上がってしまい、そこを狙ってくる投資家などもいます。さらに、今後ハードフォークで分岐する通貨が増えてきた場合、取引所で扱われないという可能性もでてきます。その場合、ハードフォークにより新しく誕生したとしても取引されないので、残念ながら意味を持たない通貨となってしまう可能性もあります。
ハードフォークは基本的には仕様変更なので、より良い機能やシステムに変更するために行うのが目的です。しかしどうしても稀にバグが見つかってしまう可能性があります。そんなとき、ハードフォークで通貨を二つに分けることになったとしても、そのバグを改善をするためには仕様変更を行わないといけなくなります。この後説明するソフトフォークでもある程度は可能なのですが、どうしてもやさしめ(ソフト)の仕様変更となるので、大きなバグを発見した場合はハードフォークで別々の通貨に分けるくらいのレベルをしないといけないのです。
仮想通貨のソフトフォークとは
さきほどのハードフォークとは違い、仕様変更をする際にこれまでの仕様を継承しながら変更していくのがソフトフォークです。ハードフォークと同様に二つのブロックチェーンに分岐するのですが、ソフトフォークは使い勝手の良いほうに時間が経つと収束するのです。ですのでソフトフォークの場合、ハードフォークとは異なり仮想通貨の分岐は最終的には発生しないこととなり、一つの通貨になるのです。
ソフトフォークの場合は、ブロックチェーンのブロック(箱)部分の大きさはそのままで、内部に入っている情報を小さくして沢山入れられるようにしたのです。ブロック(箱)の大きさは変わらないので、ハードフォークのように互換性が完全になくなることがなく、ソフトフォークでは今までの仕様でいけるので、仮想通貨が今までのまま使えるのです。
仮想通貨が分裂しないという面からみると、ソフトフォークは長期的に仮想通貨の価値を高めながら仕様変更をしていけるというメリットがあります。ハードフォークでは、どうしても新しい通貨となってしまうためにこれまでの価値が継承されない可能性があります。しかしながらソフトフォークでは、今までの仮想通貨で仕様変更をして改善をしていくという理想的な変更ができます。しかし、前述したように、あまり大きな致命的なバグなどが見つかった場合には、ソフトフォークではなくハードフォークをしないといけないのが現実です。
ハードフォークとソフトフォークの比較
ハードフォークとソフトフォークを比較してみます。仮想通貨を仕様変更する場合、両方とも一時的にはブロックチェーンが二つに分岐します。ハードフォークでは永続的に分かれたままですが、ソフトフォークでは時間が経つと収束して一つになります。
バグなどが発見された場合では、ハードフォークでは修正できるがソフトフォークでは出来ない場合などがあります。基本的にはソフトフォークの方は仮想通貨が二分しないですし、仕様が継承される面からすると受け入れられやすいですが、どうしようもないバグや大掛かりな改変がある場合はどうしてもハードフォークでなければ対応できないことがあります。
データ改ざんと容量増大のためにSegWitの実装
ソフトフォークで実装されているSegWitを、ビットコインを例として紹介していきます。ビットコインはかつて二つの問題を抱えていました。一つは取引データを改ざんして、二重取引を意図的に引き起こす。もう一つはビットコインの利用者が増加したために、取引の承認時間の遅延が発生していました。それを解決するためにソフトフォークとしてSegWitが導入されたのです。
二重取引ができてしまうのは、ブロック内に入っている取引データの一部を書き換えることで、同じ取引を繰り返し行えるようになるからです。表面上はビットコインが送金されてない状態なのに実際は送金されており、送金側が送れてないと思っている中、受取側が何度もビットコインを受け取れる状態にすることができるのです。
もう一つは取引量の増加により、承認時間が長くなり送金をするのに時間が掛かってしまい、手数料の増加などの問題も起きていました。SegWitはこれらを解決するために導入されたソフトフォークです。
具体的には、取引データの改ざんを防ぐためと、ブロック(箱)に格納できるデータの量を増やすための仕様変更です。SegWitはブロック内の誰が送金して誰が受け取ったのかを記録する部分のデータを別の領域に移行することにより二つの問題を解決しました。
別の場所に移行することにより、改ざんが不可能となり、移行させたデータ分だけ空きがあるので1つのブロックに取り入れられる量が増え、取引時間も短縮することに成功しました。
良いこと尽くしのSegWitですが、一応問題視されている面もあります。それは時間短縮の為に1つのブロックの空き容量を増大させたのですが、その増加できる容量に限界があり、将来的にビットコインへの取引者が増えていくと対応できなくなる可能性があるのです。それと、他の領域にデータを保存することで仕様が複雑となり以前の状態に戻しにくくなり、また、ずっと複雑な仕様が残ってしまうというソフトフォークの問題点も指摘されているのです。ビットコインの場合はソフトフォークではなく、ハードフォークで1つのブロックに入れられるデータの最大容量を上げることで解決しました。この時に派生したのがビットコインキャッシュです。
両者を使い分けていくことが必要
どうしてもハードフォークよりもソフトフォークのほうが良い印象を受けがちです。ハードフォークですと行うたびに新しい仮想通貨と古い仮想通貨が生まれてきます。古い仮想通貨の人たちが全員新しい仮想通貨に移行するわけではないので、古いほうを消してしまうということができません。
ソフトフォークでも一応問題がありますが、まだ今のところすぐに対応しなければならない問題ではなかったりします。しかし、きちんとハードフォークとソフトフォークの両方を見てみると、どちらが良いのか、悪いのかでは判断できないと思います。
致命的なバグであればハードフォークでないと対処できなかったり、ソフトフォークであれば一つの仮想通貨で永続的に継続が可能です。やはり時と場合により両者を使い分けていくことが必要です。どちらの良し悪しではなく、その場での最善を尽くすことが一番良いと思います。
しかし、今後の技術の発展によりどうなるかは誰にもわからなかったりします。ソフトフォークの改良進歩が速く、出来ないことを出来るようにしてしまう可能性もあります。しかし、確証の無い未来に期待するのではなく、今ある選択肢で最善の方法を取るべきなのです。