EVMでスマートコントラクトを実行するには、ガス代がかかる。これを「手数料」として理解している人は多いが、ガスの本質はDoS対策にある。
ガスがなかったら何が起きるか
Ethereumのノードは、投げられたトランザクションを忠実に実行する。コントラクトに書かれたコードを、指示通りに1命令ずつ処理していく。
もしガスの仕組みがなかったらどうなるか。誰かがこんなコントラクトをデプロイしたとする。
function attack() external {
while (true) {}
}
このコントラクトが呼び出されると、ネットワーク上のすべてのノードがこの無限ループを実行し始める。1台だけではない。Ethereumの合意形成の仕組み上、すべてのノードが同じ計算を再現する必要があるため、ネットワーク全体が停止する。
しかも、ガスがなければこの攻撃のコストはゼロになる。誰でもタダでネットワークを麻痺させられる。
ガスの仕組み
ガスはこの問題に対する解決策として設計されている。
- EVMの各命令(オペコード)にはガスコストが割り当てられている。加算(ADD)は3ガス、ストレージへの書き込み(SSTORE)は最大20,000ガスといった具合
- トランザクション送信者は「ガスリミット」を指定する。そのトランザクションで使える計算量の上限
- EVMが命令を1つ実行するたびにガスが消費されていく
- ガスリミットに達すると、実行は強制停止される(Out of Gas)
- 停止した場合、状態変更はすべて巻き戻される。ただし消費したガス代は返ってこない
先ほどの無限ループも、ガスリミットに達した時点で止まる。そして攻撃者はガス代を失う。「計算にコストを課す」という経済的な仕組みによって、濫用を防いでいる。
なぜETHで支払うのか
ガス代はETHで支払われる。これは偶然ではなく、設計上の理由がある。
ブロックチェーンのセキュリティは、攻撃コストが攻撃者の利益を上回ることで成り立っている。ガス代がETHで支払われることで、計算資源の消費に実世界の経済的コストが紐づく。攻撃者はETHを調達しなければ攻撃できず、攻撃が大規模であるほどコストも増大する。
ガスの副作用
ガスはDoS対策として機能している一方で、副作用も生んでいる。
手数料の高騰
ネットワークが混雑すると、限られたブロック容量を巡ってガス代が高騰する。2021年のDeFiブームやNFTブーム時には、単純なトークン送金に数千円〜数万円のガス代がかかることもあった。
これは「利用者が増えるほど手数料が上がる」という構造的な問題で、少額取引やカジュアルな利用を阻害する。
EIP-1559による改善
2021年のEIP-1559(London Hard Fork)で、ガス代の仕組みが改善された。ベースフィー(基本手数料)とプライオリティフィー(チップ)に分離し、ベースフィーはバーン(焼却)される設計に変更された。
これによりガス代の予測が容易になり、極端なスパイクは緩和された。ただし、混雑時に手数料が高くなる根本的な構造は変わっていない。
Layer 2の登場
ガス代の問題は、Layer 2(Arbitrum、Optimism、Baseなど)が生まれた直接的な動機の一つになっている。Layer 2ではトランザクションをオフチェーンで処理し、まとめてEthereumに記録することで、1トランザクションあたりのコストを大幅に下げている。
ガスとは何だったのか
ガスは「計算に経済的コストを課すことで、共有資源の濫用を防ぐ」という設計。ネットワークをタダで止められないようにするための仕組みであり、単なる手数料ではない。
ただし、その副作用として手数料の高騰が起き、それを解決するためにLayer 2が生まれた。一つの設計上の判断が、その後のエコシステム全体の構造に影響を与えている。