スマートコントラクトと EVM
レッスン3:スマートコントラクトと EVM
このレッスンで学ぶこと
- スマートコントラクトの概念と、通常のプログラムとの違いを説明できる
- Ethereum・EVM・Solidity の位置関係を整理できる
- ERC-20 / ERC-721 / ERC-1155 の 3 大トークン標準を区別できる
- ガス代の仕組みと、なぜ発生するかを理解できる
- Layer 2 とロールアップの必要性、Optimism / Arbitrum などの位置づけを俯瞰できる
前のレッスンでは、ブロックチェーンの技術構造を扱いました。このレッスンでは、その上でプログラムを動かす仕組み——スマートコントラクトと EVM を扱います。
スマートコントラクトとは何か
スマートコントラクトは、ブロックチェーン上で自動実行されるプログラムです。1994 年に Nick Szabo が概念を提唱し、2015 年に Ethereum が世界初の汎用的なスマートコントラクト実行環境を実装しました。
- 契約の自動執行:条件が満たされたときに自動的に処理が実行される
- 改ざん耐性:一度デプロイされたコードは通常、変更できない
- 透明性:コードは公開され、誰でも検証できる
- 信頼の最小化:仲介者なしに契約が実行される
例えば「A が B に 1 ETH を送金する」というだけでなく、「A が今日中に本を書き上げたら、預けてある 1 ETH を A に自動送金する」「投票で 60% の賛成があったら、資金を X 社に送金する」といった条件付きの処理を、仲介者なしに実行できます。
Ethereum と EVM
Ethereum は 2013 年 11 月に Vitalik Buterin がホワイトペーパーを公開し、2015 年 7 月 30 日にメインネットが立ち上がったブロックチェーンです。Bitcoin が「送金だけ」に焦点を絞ったのに対し、Ethereum は「任意の計算」を実行できる汎用プラットフォームを目指しました。
その中核が EVM(Ethereum Virtual Machine、イーサリアム仮想マシン)です。EVM は Ethereum ネットワーク上で稼働する仮想マシンで、スマートコントラクトのコードを実行します。JVM(Java Virtual Machine)のブロックチェーン版と考えると理解しやすいでしょう。
Solidity——EVM のプログラミング言語
Solidity は Ethereum のスマートコントラクト開発で最も使われるプログラミング言語で、Gavin Wood らが 2014 年に設計しました。JavaScript や C++ に似た構文を持ち、コンパイルすると EVM 上で動作するバイトコードになります。ほかの EVM 対応言語として Vyper(Python 風)、Yul(低レベル)などもありますが、Solidity が事実上の標準です。
ERC-20 / ERC-721 / ERC-1155——3 大トークン標準
Ethereum の上で発行されるトークンには、目的に応じた標準規格があります。3 つの主要標準を押さえます。
ERC-20(2015 年 11 月)——代替可能トークン
「1 単位が別の 1 単位と等価な」代替可能トークン(Fungible Token)の標準。ステーブルコイン USDC / USDT、ガバナンストークン UNI、ユーティリティトークンなど、暗号資産の大半が ERC-20 です。ERC-20 の登場が、Ethereum を「トークン発行プラットフォーム」として広く使われる契機になりました。
ERC-721(2018 年 1 月)——非代替可能トークン(NFT)
「各単位が唯一無二」の非代替可能トークン(Non-Fungible Token)の標準。デジタルアート、コレクティブル、ゲーム内アイテムなどで使われます。CryptoKitties(2017 年 11 月)が ERC-721 の原型を作り、後の NFT ブームの基盤になりました。
ERC-1155(2019 年 6 月)——半代替可能トークン
代替可能と非代替可能の両方を扱えるハイブリッド標準。ゲーム開発で「金貨(代替可能)と唯一の武器(非代替可能)を 1 つのコントラクトで扱う」といった用途に向きます。Enjin が提唱しました。
flowchart TB
A[Ethereum トークン標準] --> B[ERC-20<br/>2015/11<br/>代替可能<br/>ステーブルコイン・ガバナンス]
A --> C[ERC-721<br/>2018/1<br/>非代替可能 NFT<br/>アート・コレクティブル]
A --> D[ERC-1155<br/>2019/6<br/>ハイブリッド<br/>ゲーム内アイテム]
ガス代——なぜ料金が発生するのか
Ethereum でスマートコントラクトを実行するには「ガス代」を支払う必要があります。ガス代はネットワーク維持のインセンティブで、以下の仕組みで機能します。
- 計算量に応じた料金:複雑な処理ほど多くのガスを消費する
- 需要と供給で変動:ネットワークが混雑すると単価が上がる
- ETH で支払う:ガス代は ETH(イーサリアムのネイティブトークン)で支払う
- バリデーターへの報酬:新しいブロックを追加するバリデーターへの報酬になる
ガス代は「スパム攻撃を防ぐ経済的コスト」の役割も果たします。1 回の実行に料金がかかるため、無意味に大量のトランザクションを送ることが経済的に難しくなります。ただしガス代の高騰は Ethereum の普及の大きな障害でもあり、これを解決するのが Layer 2 の役割です。
Layer 2 とロールアップ
Ethereum メインチェーン(Layer 1、L1)の処理性能には上限があり、混雑時にはガス代が高騰します。この問題を解決するために、Layer 2(L2)と呼ばれる補助レイヤーが発展しました。
ロールアップの基本発想
L2 でトランザクションをまとめて処理し、その結果だけを L1 に記録します。「1 台のバスに 50 人が乗って移動する」ように、多数のトランザクションを 1 つにまとめることで、L1 の処理性能を大幅に拡張します。
主要 Layer 2
- Optimism(Optimistic Rollup、2021 年 12 月):楽観的にロールアップし、異議申立て期間で正当性を担保
- Arbitrum(Optimistic Rollup、2021 年 8 月):Optimism と競合する主要 L2
- zkSync(ZK Rollup):ゼロ知識証明で即座に正当性を証明
- StarkNet(ZK Rollup):ゼロ知識証明の高性能版
- Base(Coinbase の Optimism ベース、2023 年):Coinbase が運営する L2
flowchart TB
A[Layer 1<br/>Ethereum メインチェーン<br/>高セキュリティ・低速・高ガス代] --> B[Layer 2<br/>ロールアップ<br/>Optimism / Arbitrum / zkSync / StarkNet / Base<br/>高速・低ガス代]
EVM 互換チェーン
Ethereum とは別の独立したブロックチェーンで、EVM と互換性を持つものが「EVM 互換チェーン」です。Polygon、Avalanche、BNB Chain、Fantom などが代表例で、Solidity で書いたスマートコントラクトをほぼそのまま動かせます。処理性能とガス代のトレードオフで、Ethereum メインネットより高速・安価な代わりに、分散化の度合いや透明性が異なります。
スマートコントラクトの脆弱性——実装の落とし穴
スマートコントラクトは一度デプロイすると変更できないため、実装のバグが致命的な損失に直結します。代表的な脆弱性パターンを 5 つ紹介します。
- 再入攻撃(Reentrancy):関数の途中で外部呼び出しが行われ、同じ関数が再帰的に呼び出される脆弱性。2016 年 The DAO ハックの原因
- オーバーフロー / アンダーフロー:整数演算の桁あふれで、意図しない値が生成される(Solidity 0.8 以降は言語レベルで対策)
- フロントランニング:他人の未処理トランザクションを見て、自分の取引を先に処理する
- アクセス制御ミス:管理者機能に誰でもアクセスできてしまう設定ミス
- フロー制御の欠陥:意図しない状態遷移で資金が凍結される
スマートコントラクトのセキュリティは、通常のソフトウェアより桁違いに厳しく審査する必要があり、大手プロジェクトは複数のセキュリティ監査会社(CertiK、Trail of Bits、OpenZeppelin、ConsenSys Diligence など)に依頼するのが慣例です。
⚠️ 注意 スマートコントラクトのバグは、Web2 のバグと違って「後から直す」ことが非常に困難です。デプロイ前に監査を受けることが業界の常識であり、企業導入では監査コスト(1 プロジェクトあたり数百万〜数千万円)を必ず予算化してください。
次のレッスンの予告
次のレッスンでは、暗号資産を「技術と規制の日本の実態」から扱います。資金決済法上の暗号資産の位置、改正資金決済法(ステーブルコイン規制枠組み)2023 年 6 月、税務(雑所得・法人期末時価評価除外 2023 年度改正)、ホット / コールドウォレット、シードフレーズ、カストディの実務——を、日本の事業会社が知っておくべき論点として整理します。
確認クイズ
理解の定着のために、6 問のクイズを解いてみてください。