ビットコイン - BTC

ビットコインスクリプトとは?スマートコントラクトができない理由も解説

本記事にはアフィリエイト広告(PR)を含む場合があります。

ビットコインで送金が1件行われるたびに、ネットワーク上では小さなプログラムが実行されています。比喩ではありません。送金データの中には「スクリプト」と呼ばれるコードが実際に埋め込まれていて、世界中のノードがそれを走らせ、その送金が有効かどうかを判定しています。ビットコインは数字を付け替えているだけの台帳ではなく、条件付きの実行環境の上で動いているのです。

ところが解説記事の多くは「スマートコントラクトはイーサリアムのもので、ビットコインにはない」と書きます。プログラムが動いているのに、なぜ契約は書けないのか。この食い違いが腑に落ちないまま、比較記事を読み流している方は多いはずです。

この記事では、ビットコインスクリプトの正体と、そこに「できないこと」が意図的に作り込まれている理由を、イーサリアムとの設計思想の対比で整理します。読み終えるころには、ビットコインの制限が技術的な遅れではなく明確な選択の結果だと理解でき、どちらが優れているかという不毛な議論に振り回されずに済むはずです。ビットコインの公開仕様とオペコードの一覧、イーサリアム側の設計文書を突き合わせて整理しました。順に見ていきましょう。

国内で暗号資産を買うなら、まず口座が要ります

日本円の入出金に対応した国内の登録業者なら、送金や積立まで一つの口座で完結します。口座開設と維持の費用はかからず、取扱銘柄や手数料体系は公式サイトで確認できます。

GMOコインの口座開設ページを見る →PR・GMOコイン(GMOコイン株式会社)。手数料や取扱銘柄は変更されることがあるため、最新の内容は公式サイトでご確認ください。暗号資産は価格変動が大きく、投資判断はご自身の責任でお願いします。

ビットコインスクリプトとは何か

ビットコインスクリプトは、ビットコインの取引に組み込まれた専用のプログラミング言語です。役割はひとつだけで、「このコインを使う資格が本当にあるのか」を検証することに絞られています。

錠前と鍵に分かれている

送金を受け取るとき、そのコインには解除条件を書いたスクリプトが付きます。これがロックスクリプト、つまり錠前です。あとでそのコインを使う人は、条件を満たす答えを書いたスクリプト、つまり鍵を提出します。ノードは鍵と錠前をつなげて順番に実行し、最後に「真」が残れば送金が成立します。

もっとも一般的な錠前は「特定のアドレスに対応する秘密鍵の署名を出せ」という内容です。ふだん私たちが秘密鍵と呼んでいるものは、この錠前を開けるための答えを作る道具にあたります。仕組みの全体像から確認したい方は仮想通貨の始め方ガイドも合わせて読むと位置関係がつかみやすくなります。

スタック型という実行方式

ビットコインスクリプトは「スタック」という積み木の台を使って動きます。データが来れば台に積み、命令(オペコード)が来れば台の上から必要な数だけ取り出して処理し、結果をまた積む。この繰り返しだけで検証が進みます。変数もなければ関数の呼び出しもなく、上から下へ一度通り抜けたら終わりです。

ビットコインスクリプトでできること

制限が強いといっても、何もできないわけではありません。実際に広く使われている条件には次のようなものがあります。

  • マルチシグ:3人のうち2人の署名がそろって初めて使える、といった複数署名の条件。企業の資産管理や共同での保管に使われます
  • タイムロック:指定したブロック高や日時まで使えないようにする条件。相続や積立の仕組みに応用されます
  • ハッシュロック:特定の秘密の値を提示した人だけが使える条件。ライトニングネットワークの支払い経路はこれを土台にしています
  • データの書き込み:使えないことが確定した出力に短いデータを埋め込み、記録として残す使い方

これらを組み合わせれば、第三者を介した預かり(エスクロー)に近い仕組みまでは作れます。「送金しかできない」という説明は正確ではありません。

なぜスマートコントラクトが書けないのか

できることがある一方で、イーサリアムのような自由なプログラムは書けません。理由は3つの意図的な制限にあります。

1. ループが存在しない

ビットコインスクリプトには繰り返し処理の命令がありません。これはチューリング不完全と呼ばれる状態で、理論上どんな計算でも書ける言語ではない、という意味です。一見すると弱点ですが、ループがないおかげでスクリプトの実行時間と処理量は事前に見積もれます。無限ループで全ノードを止める攻撃は、そもそも記述する手段がありません。

2. 状態を持てない

ビットコインはUTXOモデル、つまり「使い切りのお札」を数える方式です。一つひとつのコインは独立していて、スクリプトは自分に付いた条件しか見られません。他の取引の結果を参照したり、前回の実行結果を覚えておいたりはできない構造です。イーサリアムのコントラクトが「残高表を持った口座」として振る舞えるのとは根本から違います。

3. 危険な命令が無効化されている

初期のビットコインには掛け算や文字列の結合など、より多彩な命令が用意されていました。しかし脆弱性の懸念から、いくつかの命令は無効化されたまま現在に至っています。攻撃される面を減らすことを、機能の豊かさより優先した判断だとされています。

イーサリアムとの設計思想の違い

両者を並べると、目指している方向がまったく違うことがわかります。

観点 ビットコイン イーサリアム
言語の性質 チューリング不完全(ループなし) チューリング完全(ループ可能)
状態の管理 UTXO(使い切りの出力) アカウント(残高と保存領域)
実行の止め方 命令が有限なので必ず終わる ガス(手数料)が尽きたら停止
主な用途 価値の保存と決済の検証 分散アプリケーションの実行基盤
優先したもの 予測しやすさと検証の軽さ 表現力と汎用性

ビットコインは「世界中の誰もが安価な機材で検証を続けられること」を最優先しました。複雑な計算を許せば検証の負担が増え、フルノードを動かせる人が減り、分散性そのものが痩せていきます。表現力を捨てて分散性を買った、と言い換えてもよいでしょう。イーサリアム側の考え方はイーサリアムのカテゴリで、技術的な背景全般はテクニカル解説のカテゴリで扱っています。

制限を保ったまま機能を増やす流れ

とはいえ、ビットコインが止まっているわけではありません。2021年に有効化されたTaprootは、複雑な条件をひとつの署名のように見せる仕組みで、マルチシグやタイムロックを使ってもチェーン上では通常の送金と区別しにくくなりました。プライバシーと手数料の両面で効いています。

さらに、複雑な処理はメインチェーンの外に出す方向が主流です。ライトニングネットワークは少額決済を、サイドチェーンなどの方式はより自由な処理を、それぞれ本体の外側で引き受けます。本体は簡素なまま、拡張は外側でというのが一貫した設計方針だといえます。

こうした技術を実際に触ってみたい場合は、まず国内の取引所で少額のビットコインを保有するのが手軽です。コインチェックbitbankなどが国内向けにサービスを提供していますが、手数料や取扱銘柄は変更されることがあるため、条件は必ず各社の公式情報を確認してください。取引で利益が出た場合の扱いは仮想通貨の税金ガイドにまとめています。

よくある質問(FAQ)

ビットコインスクリプトは自分で書けますか

技術的には可能で、開発者向けのライブラリやテスト用のネットワークが公開されています。ただし条件を書き間違えたコインは誰にも取り出せなくなる可能性があり、実際の資産で試すのは避けるべきです。学習が目的なら、必ずテストネットから始めてください。

ビットコインでDeFiは使えないのですか

メインチェーン上で直接動かすのは困難ですが、ビットコインを他のチェーンに預けて同額のトークンを発行する形(ラップドビットコイン)で参加する方法が一般的です。ただし預け先の管理主体に依存するリスクが加わります。DeFi・Web3のカテゴリでも関連する論点を扱っています。

チューリング不完全は欠陥ではないのですか

目的次第です。汎用の計算基盤を目指すなら制約になりますが、価値の保存と決済の検証に用途を絞るなら、実行時間が事前に読めることは強みになります。用途の違う道具を同じ物差しで測らないことが大切です。

スクリプトの内容は誰でも見られますか

ブロックチェーン上のデータは公開されているため、原則として誰でも確認できます。ただしTaproot導入後は、条件を満たして実際に使われた経路以外は表に出ない形が増えており、以前より読み取れる情報は限定的になっています。

免責事項:本記事は一般的な情報提供を目的としており、投資助言ではありません。最新の情報は公式情報をご確認ください。

この記事について

執筆・編集:Bitcoin Analyze 編集部

金融庁・国税庁および各事業者の公式資料にあたり、基準日と定義を固定したうえで記事を作成しています。価格予測や利益保証は扱いません。事業者の条件は変更されるため、最終的な判断は公式情報をご確認ください。

主な参照先

Bitcoin Analyze 編集部

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください