教育目的の情報であり、投資助言ではありません。投資により損失が生じる可能性があります。
端的な回答
初回預入インフレ攻撃は、空またはほぼ空の ERC-4626 Vault を標的にします。攻撃者はごく少量を預け入れて最初のシェアを受け取った後、原資産を Vault に直接送金します。この寄付によって totalSupply() を増やさずに totalAssets() が増加し、既存の各シェアの価値が高まります。
被害者の預入がその操作されたレートで換算されると、整数除算によって受取シェアがごくわずか、またはゼロに切り捨てられる場合があります。被害者の資産は Vault に残る一方、発行済みシェアを保有する攻撃者は、膨張した資産請求権を償還できます。これは交換レート操作とスリッページの問題であり、ERC-4626 インターフェース自体の欠陥ではありません。
仕組み
手数料や保護用オフセットのない単純な Vault では、預入で発行されるシェアはおおよそ assets * totalSupply / totalAssets です。ERC-4626 は、所定の資産額に対するシェア計算について、Vault に有利となるよう切り捨てることを要求しています。通常の交換レートでは丸め損失はごく小さいものの、シェア価格がつり上げられると、一シェア未満の価値しかない預入は丸めによって 100% を失う可能性があります。
攻撃が成立するかどうかは実装の詳細に左右されます。特に totalAssets() が Vault のトークン残高を読み取る場合、ERC-20 の直接送金によって、シェアを発行せずに会計上の資産が増えることがあります。また、攻撃者はシェア供給量が極めて少ない間に、被害者より先に取引を実行する必要があります。異なる会計方式や明示的な防御策を採用する Vault は、同じ形では脆弱でない可能性があります。
例
脆弱な空の Vault が 1:1 のレートで始まるとします。攻撃者は 1 単位の資産を預け入れて 1 シェアを受け取り、その後 999 単位を直接寄付します。これで 1 シェアを 1,000 単位の資産が裏付ける状態になります。被害者が 999 単位を預け入れると、単純な計算では整数の丸め後に 999 * 1 / 1,000 = 0 シェアとなります。
その後、Vault は 1,999 単位の資産を保有しますが、存在するのは攻撃者の 1 シェアだけです。預入処理がゼロシェアの結果を許容し、手数料やその他の制約もなければ、攻撃者はそのシェアを全 1,999 単位の資産と交換できます。その内訳は、最初に預け入れた 1 単位、寄付した 999 単位、被害者が預け入れた 999 単位です。取引コストを差し引く前の攻撃者の粗利益は、被害者の 999 単位となります。
リスクと防御策
実装者は、十分な初期流動性の投入、初期シェアのバーンまたはロック、ゼロでないシェア出力の強制、あるいは仮想資産と仮想シェアを使った交換レート設計によってリスクを軽減できます。OpenZeppelin の実装は仮想量を追加し、小数桁オフセットを通じてシェアの精度を高めます。文書化されたモデルでは、仮想シェアが寄付の一部を取り込むため、操作は利益を生まなくなるか、費用が大幅に増えます。どの防御策にも前提があるため、直接送金、丸め境界、手数料、損失、特殊なトークン挙動に対してテストする必要があります。
利用者とインテグレーターは、previewDeposit() を保証された最低値ではなく、見積もりとして扱う必要があります。受入可能な最低シェア数を強制し、その下限を満たさなければリバートする関数またはルーターを介して預入を送信してください。新規またはシェア供給量の少ない Vault に預け入れる前に、totalAssets()、totalSupply()、実装の換算式、意図しないトークン送金が会計に影響するかを確認してください。有利なフロントエンド見積もりが表示されていても、実行順序を変更され得る取引は保護されません。
よくある誤解
-
誤解 1:ERC-4626 自体が安全な交換レートを保証する。 この標準は共通インターフェースと丸め動作を定義しますが、すべての実装を交換レート操作から守るものではありません。
-
誤解 2:
deposit()の直前にpreviewDeposit()を呼び出せば、その出力が保証される。 呼び出し間や実行前にオンチェーン状態が変わる可能性があります。預入経路には、強制可能な最低シェア数の制限が必要です。 -
誤解 3:ゼロシェアになる預入だけを拒否すれば、攻撃を排除できる。 最も深刻な結果は防げますが、攻撃者は依然として預入者に少数のシェアしか受け取らせず、大きな丸め損失を負わせる可能性があります。防御策は、結果がゼロでないことだけでなく、許容スリッページを制限すべきです。
関連トピック
出典
- ERC-4626:トークン化 Vault - Ethereum Improvement Proposals(参照日:2026-08-20)
- ERC-4626 トークン化 Vault 標準 - OpenZeppelin(参照日:2026-08-20)
- OpenZeppelin の ERC4626 実装 - OpenZeppelin(参照日:2026-08-20)