スマートコントラクトとは?
スマートコントラクトとは何か?ブロックチェーン上で自動実行されるプログラムの仕組み、何に使われているか、限界とリスク、そして使う前の確認方法を解説します。
スマートコントラクトとは、ブロックチェーン上に保存され、あらかじめ定められた条件が満たされると自動的に実行されるプログラムです。銀行やブローカーなどの仲介者が各ステップを実行するかどうかを判断することなく、コードに従って資金を保有・移動できます。
スマートコントラクトは、暗号資産における単純な送金以外のほぼすべてを支えています。トークン、分散型取引所、レンディングプロトコル、NFT、DAOなどです。スマートコントラクトにできることとできないことを理解すれば、利用する際のチャンスとリスクの両方を判断しやすくなります。
スマートコントラクトの仕組み
コードによって執行される契約というアイデアは、1990年代にコンピューター科学者のNick Szaboが自動販売機にたとえて説明したものです。正しい硬貨を入れて商品を選べば、店員がいなくても機械が商品を出してくれます。
ブロックチェーン上では、次のような流れになります。
- 1開発者がコードを書く:たとえばEthereumならSolidity、ほかの一部のネットワークならRustを使います。
- 2コードをデプロイする:トランザクションによってデプロイされ、固有のアドレスが割り当てられます。
- 3ユーザーがコントラクトを呼び出す:そのアドレスにトランザクションを送ります。多くの場合、トークンも一緒に送ります。
- 4すべてのノードがコードを実行する:結果について合意するため、誰にとっても同じ結果になります。
- 5コントラクトの状態が更新される:残高、所有記録、設定などがオンチェーンで変わります。
各ステップにはネットワーク手数料がかかります。Ethereumではこの手数料をガスと呼びます。仕組みについてはEthereumのガスとはをご覧ください。
スマートコントラクトの用途
| 用途 | コントラクトの役割 | 例 |
|---|---|---|
| トークン | 残高と送金を記録する | ERC-20トークンのコントラクト |
| 分散型取引所 | トークンのプールを保有し、数式で取引価格を決める | 自動マーケットメーカー(AMM) |
| レンディング | 担保を受け入れ、融資を行い、リスクの高いポジションを清算する | DeFiのマネーマーケット |
| NFT | 唯一無二のアイテムの所有権を記録する | コレクションのNFTコントラクト |
| DAO | 投票を集計し、承認された提案を実行する | オンチェーンのガバナンスコントラクト |
| マルチシグウォレット | 資金の移動に複数の承認を必要とする | プロジェクトのトレジャリー |
これらのコントラクトの多くは互いを呼び出し合っており、DeFiが「お金のレゴ」と呼ばれることがあるのはそのためです。各要素がどう組み合わさるかは、DeFiのガイドで紹介しています。
スマートコントラクトと従来の契約の比較
多くの人になじみのある紙の契約と比べてみると、違いがわかりやすくなります。
| 従来の契約 | スマートコントラクト | |
|---|---|---|
| 記述される言語 | 人間の言語 | プログラミングコード |
| 執行するもの | 裁判所、機関、当事者の善意 | コードを実行するブロックチェーンネットワーク |
| 柔軟性 | 再交渉や解釈が可能 | アップグレード可能な設計でない限り、書かれたとおりに実行される |
| 透明性 | 通常は非公開 | コードと活動はオンチェーンで公開されていることが多い |
| 紛争処理 | 裁判官、仲裁人、弁護士 | コード以外に紛争を処理する仕組みは組み込まれていない |
| スピード | 決済まで数日から数か月 | ネットワークによって数秒から数分 |
強みはスピード、透明性、そして仲介者が不要になることです。弱みは硬直性で、コードは公平さや文脈を考慮できません。開発者が想定していなかった予期せぬ事態が起きても、コントラクトはただルールに従います。たとえ結果が明らかに誰も意図していないものであってもです。詳しくはテストネットとメインネットとは?で解説しています。
スマートコントラクトを書き、管理するのは誰か
スマートコントラクトは誰でもデプロイでき、パブリックブロックチェーンには承認プロセスがありません。このオープンさが急速なイノベーションを可能にする一方、詐欺的なコントラクトも正当なものと同じくらい簡単にデプロイできてしまいます。デプロイ後の管理のあり方は、コントラクトの書き方によって決まります。所有者がまったくいないもの、単一のウォレットが管理するもの、マルチシグや時間差を設けたDAO投票で管理するものなどがあります。どのモデルが適用されているかを知ることは、アプリのリスクを判断するうえで重要です。関連記事:スマートコントラクトのエクスプロイト。
スマートコントラクトにできないこと
スマートコントラクトは強力ですが、できることの範囲は限られています。
- オンチェーンのデータしか知らない。 価格やスポーツの結果など現実世界の情報を使うには、外部データをオンチェーンに取り込むオラクルに頼る必要があり、オラクルは故障したり操作されたりする可能性があります。
- 意図を理解しない。 誤った関数に資金を送ったり、悪意のある承認に署名したりすると、コントラクトはコードのとおりに動作します。
- 自動的に法的な契約になるわけではない。 コードの実行と法的な執行力は別の問題です。
- ミスを取り消せない。 完了した取引は、原則として完了したままです。
スマートコントラクトを使うリスク
バグとエクスプロイト
コードは人が書くものであり、ミスは起こります。攻撃者は欠陥を探し、たった一つのトランザクションで資金を抜き取ることができます。監査は役立ちますが、安全を保証するものではありません。詳しくはスマートコントラクトの監査レポートを評価する方法をご覧ください。
管理者鍵とアップグレード
多くのコントラクトはアップグレード可能であったり、取引の一時停止、手数料の変更、トークンの新規発行ができるオーナー機能を備えていたりします。これらは緊急時にユーザーを守ることもありますが、悪用や管理者鍵の盗難のリスクも生みます。関連記事:アカウント抽象化をわかりやすく解説。
悪意のあるコントラクト
詐欺トークンには、売却をブロックしたり、法外な送金税を課したりする隠れたルールが含まれていることがあります。トークンのページでは普通に見えても、実際にはまったく異なる動作をするコントラクトもあります。あわせて読みたい:ICO vs IEO vs IDO。
承認(アプルーバル)
DeFiを使うには、コントラクトにトークンの使用を承認する必要があることがよくあります。バグのあるコントラクトや悪意のあるコントラクトに無制限の承認を与えると、後からそのトークンを持ち去られるおそれがあります。さらに理解を深めたい方はメンプールとは?をお読みください。
使う前にスマートコントラクトを確認する方法
- 1アドレスを確認する:プロジェクトの公式サイトと、独立した情報源の両方で確かめます。
- 2ブロックエクスプローラーで調べる:作成日、活動状況、ソースコードが検証済みかどうかを確認します。
- 3監査を確認する:実績のある企業による監査があるかを調べ、見つかった問題が修正されたかを読みます。
- 4管理者機能を誰が握っているかを調べる:マルチシグ、タイムロック、単一のウォレットのいずれかを確認します。
- 5少額から始める:トークンの承認額は必要な分だけに制限します。
最初の2つのステップについては、トークンの公式コントラクトアドレスを確認する方法のガイドで詳しく説明しています。
まとめ
スマートコントラクトとは、ブロックチェーン上で自動実行されるコードで、仲介者なしに価値を保有・移動できます。これによりオープンでプログラム可能な金融が実現しますが、バグや隠れた管理者権限、悪意のあるコードが即座に、取り消し不能な形で作用することも意味します。アドレスを確認し、誰がコントラクトを管理しているかを把握し、必要な分だけを承認しましょう。
よくある質問
スマートコントラクトには法的拘束力がありますか?
自動的にあるわけではありません。スマートコントラクトはブロックチェーン上で実行されるソフトウェアであり、それ自体は法的な契約ではありません。コードで記録・実行された合意を認める法制度もありますが、国や状況によって異なります。法的な執行力が重要な場合は、現地の法律を確認するか、資格のある専門家に相談してください。
スマートコントラクトはデプロイ後に変更できますか?
デプロイされたコードそのものは、通常は編集できません。ただし多くのプロジェクトでは、プロキシコントラクトのようなアップグレード可能な設計を採用しており、管理者がユーザーを新しいコードへ誘導できます。この柔軟性はバグ修正に役立つ一方、誰かがルールを変更する権限を持っていることも意味します。アップグレード鍵や管理者鍵を誰が管理しているかを確認しましょう。
どのブロックチェーンがスマートコントラクトに対応していますか?
汎用的なスマートコントラクトを広めたのはEthereumで、BNB Chain、Solana、Avalanche、Cardano、Ethereumのレイヤー2ネットワークなど、多くのネットワークが対応しています。Bitcoinは設計上、限定的なスクリプトしかサポートしていません。プラットフォームごとに言語やツールが異なるため、コントラクトをそのまま別のチェーンに移すことはできません。
スマートコントラクトにバグがあるとどうなりますか?
コードはバグも含めて書かれたとおりに実行されます。攻撃者がバグを悪用して資金を抜き取る可能性があり、取引は通常取り消せません。プロジェクトによってはコントラクトを一時停止したりアップグレードしたりして被害を抑えられますが、変更不可能なコントラクトは一切修正できません。監査やバグバウンティはこのリスクを減らしますが、なくすことはできません。
