見出し画像

ビットコインはどのようにスマートコントラクトを実現しているのか

つづき。

上掲の別稿で、ビットコインはスマート・コントラクトである旨を示しました。(ビットコインがそうであるならば、そのクローンとして生まれたライトコインやモナコインもまた、スマート・コントラクトであるといえます。)

では、ビットコインは、どのようにしてスマート・コントラクトを実現しているのでしょうか。

Mastering Bitcoin を既読のような技術クラスタの方々は、本稿、読み飛ばしていただいて結構です。
宇宙語が好きなイーサリアム方面に比べて、ビットコイナーは、インフルエンサーでもあまり仕組みを語らない……とくに日本語圏では……というふうに思っていて、敢えて本稿で補助線を引かないと先の話ができないかなと思い本稿を起こしました。

...

さて、お隣のイーサリアムの事情から整理していきます。イーサリアムには、 "ワールド・コンピュータ" という理念があり、EVM という、スマート・コントラクトを実行するための仮想マシンが提供されています。

「"仮想マシン"って何よ?」というのを説明するのは意外と難しいのですが…身の回りで見かけるものとしては…家庭用ゲーム機(ファミコンとか)のエミュレータが Windows で動いて古いゲームを楽しめたりしますね。あの手のエミュレータが仮想マシンの一例です。

イーサリアムでスマート・コントラクトを使いたい人は、EVM で書かれたプログラムを事前にチェーンに流し込んでおき、必要に応じてプログラムを EVM 上で実行します。全ての入力は、ブロックチェーン・チェーンに刻まれていて改ざん不能です。EVM 内での処理には不確定性な要素は一切含まれません。よって、全ての出力は改ざん無く再現可能となります。

Miniscript や Monascript を理解するにあたって、イーサリアムについては、これ以上知る必要はありません。スマート・コントラクトを実現するために仮想マシンが使われている、という知識だけが今回は重要です。

...

さて、ビットコインに戻ります。

ビットコイナーは、イーサリアンに比べ、あまり言及しない傾向にあるのですが。ビットコインの各フルノードにも、仮想マシンが存在しています。仮想マシンには Bitcoin Script という、web 検索しづらい名前がついています。

(少し脇に逸れますが、Bitcoin Script をプログラミング言語と説明する文章も世間にはあります。その説明は間違いではないのですが、プログラミング言語と見做すにしては、かなり低水準の、可読性の悪いものです。この先の説明の都合もあり、本稿では EVM 相当の仮想マシンとして扱います。)

ビットコインでは、Bitcoin Script によるスマート・コントラクトを、イーサリアムとは違う方法で実現しています。具体的には下記のような手順になります。(解りやすさ優先のため、厳密さは大いに妥協しています。)

まず、ビットコインをチェーンに保存する方法。

1. 必ず正常終了するプログラムをまず作ります。
2. そのプログラムを前半と後半に分けます。
3. ビットコインが入っている箱(技術用語でトランザクションといいます)に、この箱が未使用である印とともに「プログラムの後半」を貼り付けます。

つぎに、チェーンにあるビットコインが自分のものであると証明する方法。

1. 上記の「箱」(トランザクション)をチェーンから引っ張ってきます。
2. 新しい箱に、「プログラムの前半」を貼り付けてビットコインのノードに向けて公開します。
3. ビットコインのトランザクションを検証するノードは、新しい箱にある「プログラムの前半」と「プログラムの後半」を繋ぎ合わせて実行してみます。
4. 正常終了するなら、ビットコインの正当な持ち主が送金要求を行っているとみなします。異常終了するなら、不正な送金要求と見做します。

…ちょっと解りづらいですかね。そういう方は、日本の契約書でよくやる "割印" を思い出してみてください。割印では、2枚の契約書に半分ずつ印影が残り、2枚を照合することで原本であることがわかりますね。あれを、電子的にやっているようなものです。

仕組みが解り、さらに勘の良い方は、『「プログラムの前半」が容易に推測できたなら、攻撃者はビットコインを容易に奪取できる』と思われたかもしれません。また、『正常終了も異常終了もしないプログラムを作れたならば、チェーンを麻痺状態にできる』と気づいた方もいらっしゃるでしょうか。

それらの勘は全くもって妥当です。

そのため、複雑なスマート・コントラクトを Bitcoin Script で行うことに対し、ビットコインに関わる技術者たちは、概して後ろ向きでした。従来のビットコインでは、不具合が見つかった Bitcoin Script の命令を使用禁止にしたり、特定の形式のプログラムしか認めなかったりという感じで。

暗号資産の元祖としては、安全側に倒した実装を目指したかったというところでしょう。妥当な判断とは言えそうです。

ところが……という、Miniscript / Monascript に繋がっていく事情は、稿を改めたいと思います。文章が、少し長くなりましたので。

この記事が気に入ったらサポートをしてみませんか?