Advertise手数料優遇デスク

用語集概念

スマートコントラクトとは?

スマートコントラクトとは、ブロックチェーン上に保存され、あらかじめ決めた条件が満たされると自動的に実行されるプログラムです。実行結果は仲介者ではなくネットワーク全体によって保証されます。

執筆: COINOTAG Research Desk最終更新 出典

gate.com

スマートコントラクトの仕組み

よく使われるたとえが自動販売機です。お金を入れてボタンを押せば、店員がいなくても決まった商品が出てきます。スマートコントラクトも同じように、「この条件ならこう処理する」というルールをコードで書き、ブロックチェーン上で自動的に実行します。

  1. 作成:開発者がルールをプログラムとして書きます。イーサリアム系ではSolidityやVyper、ソラナでは主にRust、SuiやAptosではMoveが使われます。
  2. テスト:Hardhat、Foundry、Anchorなどの開発ツールを使い、手元の環境やテストネットで動作を確かめます。
  3. デプロイ:コンパイルしたプログラムを取引としてブロックチェーンに送ると、固有のコントラクトアドレスが割り当てられます。
  4. 実行:利用者がそのアドレスに取引を送って関数を呼び出すと、コードが実行されます。実行にはガス代がかかります。
  5. 状態の更新:コントラクト内の変数(残高や所有者など)が書き換わり、その結果がブロックチェーンに永続的に記録されます。

イーサリアムでは、スマートコントラクトはEVM(イーサリアム仮想マシン)の上で動き、処理の一つひとつにガスが割り当てられています。ソラナのSVM、SuiやAptosのMove VMのように、チェーンごとに独自の実行環境があります。EVMと互換性のあるチェーンでは、同じコードをほぼそのまま動かせます。

bitget.com

デプロイされたコードは誰でも確認でき、原則として後から書き換えられません(更新できる仕組みを組み込んだものもあります)。

スマートコントラクトの歩み

「スマートコントラクト」という言葉は、コンピューター科学者のニック・サボが1994年の論考「Smart Contracts」で示した考え方に由来します。サボはスマートコントラクトを「契約の条件を実行するコンピューター化された取引プロトコル」と説明し、その原型として自動販売機を挙げました。ビットコインにも簡単なスクリプト機能はありましたが、自由にプログラムを書ける汎用的なスマートコントラクトの基盤としては、2015年7月30日に始動したイーサリアムが最初に広く使われました。現在は多くのレイヤー1やレイヤー2が対応しています。

binance.com

主な出来事を年表で整理します。

  • 1994年:ニック・サボが「Smart Contracts」を発表。
  • 2009年:ビットコインが稼働。簡単なスクリプト言語による、限られた条件付きの送金ができるようになりました。
  • 2013年:ヴィタリック・ブテリンが、自由にプログラムを書ける(チューリング完全な)スマートコントラクトの基盤としてイーサリアムの構想を発表。
  • 2015年7月30日:イーサリアムのメインネット(Frontier)が始動。
  • 2016年6月17日:投資ファンド型のDAO「The DAO」のコードの欠陥が突かれ、約360万ETH(集めた資金のおよそ3分の1)が攻撃者のアドレスに移されました。イーサリアムは同年7月20日のハードフォークで資金を戻す対応を取り、これに反対した側のチェーンはイーサリアムクラシックとして続いています。
  • 2017〜2018年:トークン発行の共通規格ERC-20を使ったICOが相次ぎ、NFTの規格ERC-721も定められました。
  • 2020年:貸し借りや交換をスマートコントラクトで行うDeFiが急成長し、「DeFiサマー」と呼ばれました。
  • 2020年代:アカウント抽象化(ERC-4337)や、レイヤー2のロールアップ上でのスマートコントラクトの利用が広がっています。

The DAO事件は、コードの欠陥がそのまま資金の損失につながることを示した象徴的な出来事で、その後の監査文化にも大きな影響を与えました。

スマートコントラクトの重要な概念

  • 監査(Audit):専門の会社や研究者が、本番のデプロイ前にコードの脆弱性を調べます。多くのプロジェクトで事実上の必須手順になっています。
  • アップグレード可能性:プロキシと呼ばれる仕組みなどを使うと、デプロイ後も機能を更新できます。便利な反面、更新の権限を持つ人に力が集中するという問題もあります。
  • リエントランシー(再入)攻撃:The DAO事件で使われた古典的な脆弱性です。送金の処理が終わる前に、同じ関数を何度も呼び出させて資金を引き出します。先に状態を更新し、最後に外部へ送金する「Checks-Effects-Interactions」という書き方が代表的な対策です。
  • ガスの最適化:同じ処理でも、書き方によって消費するガスが変わります。利用者の手数料を下げるため、効率のよいコードが求められます。
  • オラクル:ブロックチェーンの外にある価格などのデータを、コントラクトに取り込む仕組みです。チェーンリンクなどが代表例です。

スマートコントラクトの使い道

  • DeFi:貸し借り、交換(DEX)、ステーブルコインの発行などを、仲介者なしで行います。
  • NFT:発行(ミント)や所有者の記録、売買のルールを管理します。
  • DAO:投票結果に応じて資金を動かすなど、組織の運営ルールを自動化します。
  • トークンの発行:多くのトークンは、スマートコントラクトとして発行されています。

具体例:エスクロー(預かり)契約

次は説明のための仮の例です。AさんがBさんに仕事を依頼し、報酬として1 ETHを支払う場面を考えます。

  1. ルールを書く:「Bさんが成果物を提出し、Aさんが承認したときだけ、1 ETHをBさんに送る」というロジックをSolidityで書きます。
  2. 資金を預ける:デプロイ後、Aさんが1 ETHをコントラクトに預けます。この時点で、Aさんも勝手に取り戻すことはできません。
  3. 提出と承認:Bさんが成果物を提出し、Aさんが承認の関数を呼び出すと、コントラクトが自動的に1 ETHをBさんに送ります。
  4. もめたとき:分散型の仲裁サービスに判断を任せる仕組みを組み込むこともできます。

従来のエスクロー業者を通さずに、国境をまたいでも同じルールで決済できる点が特徴です。同じ考え方は、NFTマーケットプレイスでの売買、Aaveのような貸し借り、ユニスワップの交換など、多くのサービスで使われています。

スマートコントラクトのリスク

  • コードの不具合:プログラムにミスがあると、攻撃者に悪用されて資金が流出することがあります。デプロイ後は修正が難しい点も注意が必要です。
  • 管理者権限:コードを更新できる権限が運営者に残っている場合、その権限が悪用されるおそれがあります(ラグプルを参照)。
  • 外部データへの依存:価格などの外部データをオラクルから受け取る場合、そのデータが誤っていると誤作動することがあります。
  • 監査は保証ではない:第三者の監査を受けていても、すべての不具合が見つかるとは限りません。

よくある質問

4件の質問
スマートコントラクトとは簡単に言うと何ですか?

ブロックチェーン上で、決められた条件がそろうと自動で動くプログラムです。仲介者なしで取引や処理を実行できます。

スマートコントラクトは法的な契約ですか?

名前に「コントラクト(契約)」と付きますが、それ自体はプログラムです。法的な契約としての効力は、国の法律や当事者間の取り決めによって別に判断されます。

スマートコントラクトは書き換えられますか?

原則として、デプロイ後のコードは書き換えられません。ただし、更新の仕組みをあらかじめ組み込んだコントラクトもあり、その場合は管理者が新しいコードに切り替えられます。

スマートコントラクトの安全性はどう確かめればいいですか?

公開されているコードや第三者の監査報告、運営者が持つ権限を確認するのが一般的です。ただし監査を受けていても安全が保証されるわけではありません。