お久しぶりです、yoshihiroです。前回の記事で、なぜブロックチェーンにおいてスケーラビリティ問題が生じるのかということを解説しました。
今回はその解決策の一つ、Segwitについてまとめていきたいと思います。ブロックのサイズを大きくする以外にこんな解決策もあるのか!と思える、とても面白い手法ですので、ぜひ読んでみてください!
スケーラビリティ問題が起きる原因は、ブロックの最大容量が決まっており、記載できるトランザクションの量が制限されてしまうことでした。
ということは、ブロックのサイズを大きくすれば良いじゃん!とすぐに思い付きますが、それは非中央集権という目的と違ったものになってしまうためできません(実際にはブロックサイズを拡大させたBCHが誕生しており、この点も後でまとめたいです)。
では、どうしたらよいでしょう。
思いつきましたか?逆転の発想で、記載するトランザクションの一つひとつの容量を小さくすれば良いのです!
ビットコインのブロックチェーンでは、ブロックに記載されているデータはビットコインの取引情報、すなわちトランザクションが大部分を占めています。そのトランザクションのデータ容量を小さくできれば、1つのブロックに記載できる量を増やすことができますね。
そもそもブロックに何が記載されているのかについては、こちらの記事を参考にしてください。
では、どうやってトランザクションの容量を削減しているのでしょうか?詳細のプログラムなどは省き、イメージだけ説明します。
まず、一つひとつのトランザクションにはどのようなデータが記載されているのかを見ていきましょう。
ビットコインの取引に必要な情報は、「誰が」「誰に」「いくら」送金したのかです。そして最も重要な情報は、送金した人が本人であるという証明です。自分のウォレットから勝手に送金されてしまっては大変ですからね。
この証明は、ウォレットアドレスと紐づいた秘密鍵を使って行われます。そして、その情報は「scriptSig」としてトランザクションに記載されます。
そして、このトランザクションに記載されているデータの中で、scriptSigはかなりデータ量が大きいです。そこで、このscriptSigのデータ量を削減できれば良いわけです。
ブロックに記載されているすべてのトランザクションには、scriptSigのデータが記載されています。そのscriptSigのデータを一つにまとめて違う領域(Witness領域と呼ばれています)に保存してしまおうというのが、Segwitの発想です。
ちなみに、Segwitは"Segregated Witness"の略です。segregateは分離するなどの意味なので、Witness領域に分離してしまおうということですね。
これにより、トランザクション一つひとつのデータ容量は小さくすることができ、1つのブロックにより多くのトランザクションを記載することができるようになります。
具体的には、Witness領域に保存されたデータの容量は4分の1程度になり、計算上は1つのブロックに記載できるトランザクション量は2倍近くになったと言われています。
これである程度はスケーラビリティ問題を解決することができますね。
一方で、Witness領域に分離されたscriptSigのデータも簡単に参照できるので、今までのブロックチェーンと全く同じ機能を保つことができています。
実際にビットコインのブロックチェーンでは2017年8月に、ソフトフォークによってSegwitが導入されています。
長くなりそうなので、今回はここまでにします。今後、Segwitのメリットデメリットや、BCHのハードフォークなど、スケーラビリティ問題に関するトピックを不定期でまとめていきますので、これからもよろしくお願いします。
↓この記事を書いた人↓
ご意見・ご質問・誤り指摘・面白い情報・いいね・投げ銭お待ちしてます!!