Miniscript が必要な理由
さて、なかなか本題に到達しないのですが。
次稿では「なぜ Miniscript がビットコインにとって必要なのか」という辺りを整理したいと思います。
つづき。
いきなり話が脇に逸れますが、人間の脳の話から入ります。脳は、小脳と大脳に大きく分けることができるという話は、小中学校の頃に学ぶと思います。内側にある小脳が生命維持に直結するような機能を、外側にある大脳が言語や計算といった高次の機能を担うものでした。さらにいうと、原始の姿に近い生物ほど大脳は小さく、他の地球上の生物に比べ、人類は大脳の発達突出している、と。
発達した大脳により、中の人は、いま文章を書けていますし、読者の皆様は、この文章を解釈できています。
...
コンピュータは、60年くらいの短い時間ではありますけれども、積み重ねがあって徐々に現代の形になりました。コンピュータは、もともとは単純な計算しかできなかったわけです (日本語で電子 ”計算機" と呼ぶくらいですから)。その後、機能を上に積み増すことで、現在は、長い文章の記録と、伝送、表示等の複雑な用途に耐えられるようになりました。いま、読者の皆さまがこの文章を読めるのは、積み増した機能のおかげです。
…話の導入が長くなりましたが、その分、後半はシンプルにお伝えできると思います。
「(現存の)スマート・コントラクトは、仮想マシンで実行される」と別稿で説明しました。スマート・コントラクトを実行する環境は、実存するコンピュータと構造・構成を踏襲しています。
もう少し具体的に言い換えます。スマート・コントラクトの実行環境は、人間で言えば小脳に当たるような原始的な計算機(仮想マシン)と、その上にスマート・コントラクトを安全に解釈実行するための追加機能の積み増しによって、成り立っています。
仮想マシンは、イーサリアムであれば EVM が相当します。ビットコインであれば Bitcoin Script が相当します。
では、追加機能については、どうでしょうか。
イーサリアムであれば、Solidity 言語が現状での重要な追加機能です。
実のところ、人間が EVM の命令を直接並べてスマート・コントラクトを組むことは不可能ではありません。しかし、EVM は自由度が高すぎて、バグの無いコントラクトを記述することも、記述されたコントラクトにバグがないことを検証することも、極めて困難です。そして、バグがあって資金が流出したり取り出せなくなったりした場合には、甚大な被害が発生します。
そこで、バグによる被害を最小限に食い止める仕組みが用意されています。具体的には、EVM よりは人間に読みやすくバグを見つけやすい言語で書いておき、その言語から EVM が解釈できる命令へ変換します。Solidity は、そのような仕組みを提供する目的で開発されたプログラミング言語です。
人間の脳で雑に例えるなら…。手を動かす際には、複数の筋肉が協調します。それらの筋肉の動きを人間の意思で指定していては時間がいくらあっても足りません。よって、学習された脳では、「腕を上げる」というシンプルな意思に応じて適切な筋肉への支持を出します。この意思のレベルにあるのが Solidity です。(脳科学の知見に照らすとツッコミどころはある例示ですが、その辺り詳しい方は笑って読み過ごしてください)
さて、イーサリアムには EVM と Solidity があります、と。
では、ビットコインには…? Bitcoin Script と…
…。ビットコインには Solidity に相当する層が無いのです。
(具体例を挙げるのは本稿の範囲を超えるので略しますが、ビットコインの歴史を振り返ると、Solidity に相当する層について、何も試みられなかったわけでもありません。過去に様々な試みを行ってきた開発者の名誉のために申し添えます。)
いままで、ビットコインのコア開発者たちは、スマート・コントラクトの積極的な利活用について消極的でした。なので、無くても当然、というか、もうすこし強く言っても良いならば、 "軽視" されてきたのかもしれません。
時代を減って、軽視できないというふうに変わってきたものの、かといって、Solidity をそのまま利用するのも難しいところがあります。同じ スマート・コントラクトに分類はされますが、EVM と Bitcoin Script とでは、コントラクトの検証方法が異なります。
...
上記で述べたような背景があって登場したのが、Miniscript です。Bitcoin Script に対する "Solidity のようなもの"、です。しかし、同じような階層にあるというだけで、着想も実装も、完全に別物です。
技術的に深いところは避けますが、Bitcoin Script だけでスマート・コントラクトを組もうとすると辛そうな部分に対し「ビットコインで作れるスマート・コントラクトは、ある程度のテンプレートの組み合わせで表現できる」「悪い(バグとなりそうな)テンプレートの組み合わせは事前に検出できる」といった見通しを立てて回避しようとしています。Bitcoin Script の命令列よりも遥かに読みやすいので、実際、バグは大幅に減らせられるでしょう。
Miniscript は現実的な着想に基づいていて、有用性も高い。そのように当業者BOTの中の人は思っています。Miniscript がビットコインの可能性を大きく広げるものになることについては、万人が確信して良いと思います。
...
さて、やっと Miniscript の登場の理由まで整理できました。
では、なぜ Miniscript に満足せず Monascript を目指すのでしょうか。
次稿で、Miniscript に足りていないところと、Monascript が目指す方向性を整理したいと思います。政治的と技術的と多面性がありますが、技術的なところに言及したくなる…自重していきます。