スマートコントラクトとは、ブロックチェーンネットワーク上に保存された自己実行型のコードであり、条件が満たされると仲介者を必要とせず自動的に合意を実行します。スマートコントラクトは、ルールを透明かつ確実に適用することで、アプリ、DeFi、NFT、DAOを支えています。スマートコントラクトは特定のネットワークに限定されるものではなく、EthereumやEVM互換ブロックチェーン、Solana、Cardano、Polkadot、Suiなど、それぞれ独自のプログラミング言語と実行モデルを使用してスマートコントラクトを動かしています。スマートコントラクトはオンチェーン上に存在するため、仲介者なしで動作し、そのルールは誰でも確認でき、一度デプロイされると基本的に変更できません。スマートコントラクトは、DeFiプロトコル、ステーブルコイン、NFT、DAOを含むほとんどのブロックチェーンアプリの基盤となる構成要素です。
免責事項:このガイドは教育目的のみを目的としています。財務アドバイスや勧誘ではなく、英国の読者を対象としたものでもありません。スマートコントラクトとのやり取りにはリスクが伴い、すべてのユーザーに適しているわけではありません。
スマートコントラクトの仕組み
開発者はコントラクトを作成し、一度ブロックチェーンにデプロイします。それ以降、誰でもそれと対話でき、条件が満たされるたびにロジックが実行されます。たとえば、支払いを受け取るとトークンをリリースしたり、特定のブロック高に達するとユーザーが資金を引き出せるようにしたりします。スマートコントラクトをサポートするすべてのネットワークに共通する2つの特性があります。実行は自動的で仲介者を必要とせず、コードはデフォルトで不変であるため、アップグレード可能に設計されていない限り、バグは永続します。
スマートコントラクトの実行にはコストもかかります。すべてのネットワークは、コントラクトが使用する計算とストレージを処理するためにネットワーク手数料を請求します。EthereumおよびほとんどのEVMチェーンでは「gas」と呼ばれ、他のネットワークでは異なる名称と手数料モデルが使用されています(Solanaのトランザクションごとの手数料、Cardanoのトランザクションごとの手数料とスクリプト実行ユニット、Polkadotのウェイトベースの手数料など)。仕組みは異なりますが、原則は同じです。ブロックチェーン上でコードを実行するとネットワークリソースが消費され、誰かがその費用を負担する必要があります。
スマートコントラクトの簡単な歴史
スマートコントラクトの概念は、ブロックチェーンよりも以前から存在していました。コンピュータ科学者で法学者のNick Szaboは、1994年に「スマートコントラクト」という用語を作り出し、1996年のエッセイでさらに詳しく説明しました。彼は、合意の条件を実行するコンピュータ化されたトランザクションプロトコルを説明し、この概念を、支払いを受け取ると確実に商品を提供する自動販売機に例え、相手を信頼する必要がないと述べました(Szaboのオリジナルの著作、概念の歴史として参照)。当時、このようなコードを信頼最小化かつ改ざん耐性のある方法で実行できるプラットフォームは存在せず、このアイデアは20年間ほぼ理論的なものにとどまりました。
2009年に開始されたBitcoinはブロックチェーンを導入しましたが、スクリプト言語(Bitcoin Script)は限定的なものでした。これは意図的にチューリング完全ではなく、マルチシグネチャ要件やタイムロックなどの支出条件を適用できますが、任意の汎用プログラムを実行することはできません。Bitcoin Scriptは既存の資金の使い方を制御しますが、次に何が起こるかについてのオープンエンドなロジックを表現できないため、Bitcoinは汎用スマートコントラクトプラットフォームとは見なされていません。
2015年7月30日に開始されたEthereumは、Ethereum Virtual Machine(EVM)を通じて汎用スマートコントラクトを実行するために特別に構築された最初の主要なブロックチェーンでした。EVMはすべてのEthereumノードが同一に実行する共有ランタイムです(ethereum.org、Ethereumの歴史)。これにより、Ethereumは以前のブロックチェーンにはなかった方法でプログラム可能になり、ほとんどのスマートコントラクト用語(gas(ネットワーク手数料とも呼ばれる)、コントラクトアカウント、Solidity)がここから生まれた理由です。それ以降、他のネットワークも異なる言語と実行モデルを使用して独自のスマートコントラクト環境を構築しました。Solana(2020年)、CardanoのPlutusスクリプト(2021年)、Polkadotのink!コントラクト、SuiのMoveベースのオブジェクト(2023年)などが含まれ、この概念は単一のネットワークをはるかに超えて拡張されました。
スマートコントラクトはどこで動作するか?
スマートコントラクトが使用するランタイムと言語は、デプロイされるネットワークによって完全に異なります。一部のネットワークは、コントラクトが読み書きするアカウント残高として状態を追跡します(Ethereumのアカウントモデル)。他のネットワークは、個別の使用可能なアウトプットとして状態を追跡します(CardanoのeUTXOモデル、BitcoinのUTXOモデルの拡張)、または個別に所有されるオブジェクトとして追跡します(Suiのオブジェクト中心モデル)。これらの違いはコントラクトの書き方や組み合わせ方に影響しますが、基本的な保証は変わりません。自動的に実行され、一度デプロイされると変更が困難または不可能なコードです。
ネットワーク | 言語 | 実行モデル | 主なエコシステムの用途 |
EthereumおよびEVMネットワーク | Solidity;Vyper;EVMバイトコードにコンパイル | アカウントベース;チェーンごとに一度に1つのコントラクト呼び出しを実行 | DeFi;ステーブルコイン;ERC-20およびERC-721トークン |
Solana | Rust、主にAnchorフレームワークを使用 | Sealevel:同じデータに触れない場合、トランザクションを並列実行 | 高スループットDeFi;NFTマーケットプレイス |
Cardano | Plutus(Haskellベース) | Extended UTXO(eUTXO):トランザクションの結果を送信前に検証可能 | DeFi;ネイティブトークン発行 |
Polkadot(パラチェーン経由) | ink!(Rustベース);MoonbeamなどのEVMパラチェーンもSolidityを実行 | Substrateベースのパラチェーン上で動作;パーミッションレスデプロイ | パラチェーンアプリ;プロトタイピング |
Sui | Move | オブジェクト中心:トランザクションが所有オブジェクトを変更し、並列処理を可能にする | NFT;ゲーム;DeFi |
Bitcoin | Bitcoin Script | 限定的、チューリング完全ではない;支出条件のみを適用 | マルチシグネチャウォレット;タイムロック;レイヤー2プロトコル |
出典: ethereum.org; Solana Sealevel; Cardano eUTXO; use.inkドキュメント; Sui Moveの概念。
スマートコントラクトを書くのは誰か、使うのは誰か?
開発者がスマートコントラクトを作成してデプロイします。適切なツールとデプロイコストをカバーするのに十分なネットワークのネイティブトークンがあれば誰でもできますし、デプロイに基盤となるネットワークからの許可は必要ありません。コントラクトが稼働すると、誰でもそれと対話できます。通常は、コードを直接書くのではなく、アプリのインターフェースを通じて行います。トークンをスワップしたり、NFTをミントしたり、DAOで投票したりする人は、基盤となる言語やランタイムを理解する必要なく、スマートコントラクトの実行をトリガーしています。
トークン標準
「トークン」と呼ばれる多くの資産は、共有標準に従ったスマートコントラクトであり、ウォレットやアプリが準拠するすべてのトークンと同じ方法でやり取りできます。EthereumおよびEVMチェーンでは、ERC-20がほとんどのステーブルコインやユーティリティトークンを含む代替可能トークンの標準であり、ERC-721は各トークンが固有であるNFTの標準です。他のネットワークには独自の同等物があります。たとえばSolanaのSPLトークン標準は、それぞれの実行モデルに合わせて構築されています。
スマートコントラクトが支えるもの
エコシステム全体にわたって、スマートコントラクトはアプリのエンジンです。貸し借りや取引のためのDeFiプロトコル、NFTやデジタル資産マーケットプレイス、そしてガバナンスルールが企業の内部ポリシーではなくコードに存在するDAOなどがあります。具体的な実装はネットワークによって異なりますが、基本的なパターン(仲介者なしで合意を適用するコード)は一貫しています。
スマートコントラクトが存在する理由
スマートコントラクトは、合意を適用するために信頼できる仲介者を必要とすることをなくすために存在します。資金を保持してルールに従うために銀行、エスクローエージェント、またはプラットフォーム運営者に依存する代わりに、ルールが直接コード化され、コントラクトと対話するすべての人に対して同じ方法で実行されます。これが、プログラム可能なセルフカストディアル金融、デジタル所有権、ブロックチェーンガバナンスを、コードをホストするネットワークに関係なく、大規模に可能にする特性です。
トークン承認と安全性
アプリを使用するということは、多くの場合、スマートコントラクトにトークン承認(特定のトークンをあなたの代わりに移動する許可)を付与することを意味します。これは通常のことですが、悪意のあるコントラクトがユーザーの意図以上のトークンを移動できる承認を要求する可能性があるため、一般的な攻撃ベクターでもあります。トークン承認は特定の金額に制限することも、無制限にすることもできます。MetaMask Extensionは、署名前にコントラクトアドレスや承認が制限付きか無制限かを含む完全なトークン承認の範囲を表示するため、ユーザーは事前に確認できます。トークン承認に関するガイドでは、承認の確認と取り消し方法について説明しています。
スマートコントラクトのリスク
バグは永続的です:欠陥のある不変コードは、デプロイ後に一般的にパッチを当てることができません。
監査はリスクを軽減しますが、排除はしません:監査済みのコントラクトでも悪用された事例があります。
悪意のあるコントラクトは、1つのネットワークだけでなく、それをサポートするすべてのネットワークに存在します。
スマートコントラクトに関するよくある質問
スマートコントラクトとは、ネットワーク上に保存された自己実行型のコードであり、仲介者なしに条件が満たされると自動的に実行されます。
いいえ。Ethereumは2015年にローンチした、最初の主要な汎用スマートコントラクトプラットフォームですが、現在はSolana、Cardano、Polkadot、Suiなど多くのネットワーク上でスマートコントラクトが動作しており、それぞれ独自の言語と実行モデルを持っています。
ブロックチェーンネットワークによって、スマートコントラクトの記述に使用されるプログラミング言語が決まります。EthereumおよびそのほかのEVMネットワークでは主にSolidityまたはVyperが使用され、SolanaではAnchorフレームワークと組み合わせたRustが使われることが多く、CardanoではPlutus(Haskellをベースに構築)、PolkadotのパラチェーンではRustをベースとしたink!、そしてSuiではMoveが使用されています。
デフォルトでは、できません。デプロイされたコードは不変です。アップグレードの仕組みを備えた設計のコントラクトも存在しますが、それにより複雑さが増し、固有のリスクも生じます。
このテクノロジーは複数のネットワークにわたって広く確立されていますが、個々のコントラクトにはバグが含まれていたり、悪意のあるものである可能性があります。トークンの承認内容を確認し、監査済みのアプリを利用することでリスクを軽減できます。
ブロックチェーンネットワーク上でコードを実行すると、ネットワークのバリデーターやマイナーのコンピューティングリソースが消費されます。そのため、ネットワークはネットワーク手数料を請求します。手数料の仕組みはネットワークによって異なりますが、使用した計算量に対して支払うという原則はすべてのネットワークに共通しています。