私が夢見るブロックチェーンが実装された社会、
それはSymbolがローンチされた、まだはるか向こう側にあります。
Symbolをはじめ、NEMにはREST API機能が実装されています。同じようにAPI機能を提供する他のブロックチェーンもいくつかあるかもしれませんが、Symbolの提供するREST APIは、街中に点在するATMや公衆電話のように、それを必要とする不特定多数が扱えるように設計されています。
ところで、ブロックチェーンは改ざんに強い設計だと言われます。しかし、それはトランザクションの作成(署名)や実行についてのみです。ブロックチェーン内に保存された情報の提供について、耐改ざん性を保証するものではありません。
それを十分承知の上か、ブロックチェーンが保存する情報の提供については第三者(サードパーティ:例 infura社)に丸投げしているブロックチェーンもあります。NEMについても同じです。REST API機能がパワフルだったとしても自分がノードだと思っていた情報取得先が実はただのスタティックにJSONテキストを応答するだけのサーバだったというような、なりすましのハッキングが今後発生するかもしれません。
これを防ぐ手っ取り早い方法は「自分(検証者:Verifier)がノードを建てること」です。しかしこれでは、NEMがせっかくREST APIを提供していても、公衆電話のように不特定多数がアクセスできるメリットをあまり享受できません。他人のノードにアクセスしつつ、確実にデータを信頼する方法はないでしょうか?極論を言ってしまえば、ブロックチェーンがありふれた未来ではアクセス先のエンドポイントがノードであるかどうかを知る必要なく、提供されたデータを検証できる方法が必要です。
残高の証明は少しややこしいので(まだ検証してない 検証しました。すべての人にマークルパトリシアツリーの力を)、今回はブロックチェーンから取得したトランザクション情報の証明を考えてみることにします。トランザクションが誰によって署名されたかの検証は簡単です。しかし、これだけで済むような話ならそもそもブロックチェーンを使用せず電子署名で十分でしょう。ブロックチェーンを使うメリットは、その電子署名がブロックチェーンによって承認されたかものであるかどうか、つまり、残高(余剰資産)やマルチシグなど様々な条件をクリアした署名であるかどうかが簡単に検証できる点にあります。ですので、トランザクションがブロックに含まれていることを検証しなければいけません。これも実は簡単でマークルパスを用いることでトランザクションがブロックヘッダーに含まれていることを検証することができます。しかし、ここで安心してはいけません。他人が提供したノードはブロックヘッダーまで偽造されている可能性があるからです。ブロックの偽造といってもすべてが悪意のあるものではありません。フォークしたことに気が付かず、閉ざされた環境で自分は正しいとブロックを伸ばし続けているチェーンかもしれません。悪意のある偽造はすぐにばれるので、この思い込みの激しい分岐チェーンの場合を考えてみます。
この、分岐したチェーンも見る人によれば正しいチェーンです。ただ多数決すれば負けるというだけです。つまり、自分が評価したいトランザクションを含んだブロックが、ブロックチェーンに載っているかどうかというのは、みんながメインチェーンと評価しているブロックチェーンに乗っているかどうかということになります。その検証が成功すれば、そのトランザクションは将来的にマージに負けて消えることも困難になりますし、今後新しく同期に参加してくるノードもすべて自分の記録を取り込んでくれるということになります。
では、メインチェーンとみなす方法ですが、残念ながら完璧な方法はありません。しかしながら、以下のような方法を取れば検証したいトランザクションがメインチェーン上にあると考えることができます。
- ルート(ジェネシスのような自明のブロック)から派生したチェーン上に存在していることを確認する
- ファイナライズされたブロックよりも以前のブロックに存在していることを確認する
前者は誰もが自明に存在確認のできるジェネシスブロックから追えるメリットがありますが、それがメインチェーンである保証はありません。後者はファイナライズされたブロックからトランザクションの存在を確実に追うことができますが、ファイナライズ情報は他の信頼できるノードから取得する必要があります。この2つの検証の組み合わせや妥協点を探ることにより、情報取得先が厳密なブロックチェーンノードではなかったとしても、ルートからトランザクションまでの明確な再現手順が上書きが不可能な状態で記録されていることが確認できます。
こんなことを考えながら、今年一年を過ごしていました。
来年もどうぞよろしくお願いします。