DeFi半年触って地獄を見た話|ガス代・スリッページ・ラグプルの現実

DeFiに本気で取り組んだエンジニアが、ドキュメントの混乱・ガス代の衝撃・実運用の罠を赤裸々に暴露。Uniswap・Aaveの実装戦略と失敗から学べることとは。

DeFiに手を出して最初の3ヶ月、本当にキツかった

先日、チームの勉強会でブロックチェーン技術が話題になったんですよ。「DeFiってバブルなのか、それとも実際に価値あるのか」という議論になって、自分もちゃんと理解しようと思い立ったのが半年前。USDCとか、Uniswapとか、Aaveとか、有名どころを実際に触ってみました。

正直なところ、最初の3ヶ月は地獄でした。ドキュメントは散らかってるし、用語は謎だし、ガス代で何度心が折れたことか。でも半年経った今、「DeFiの本質って何か」が少しわかってきたんですよね。これをお話しします。

Smart Contract実行に必要な「ガス代」の実態

エンジニアって、インフラのコストって割と敏感じゃないですか。DeFiで最初に驚いたのが、ガス代という直接的な実行コスト。APIサーバーなら月額固定とか、クラウド従量課金で済むけど、ブロックチェーンはトランザクション1回ごとに金が飛ぶんです。

Uniswapでトークンスワップするとき、Ethereum mainnetだと1回3000円〜10000円かかることもある。開発環境で試すたびに毎回実際のお金が動く。これはCIパイプラインで毎回デプロイするのに金がかかるようなもの。正気じゃない。

だからこそDeFiプロジェクトって、以下のように選択肢が分かれるんですよ:

チェーンガス代(目安)TPS用途
Ethereum高い($3-30)15大口・高額取引
Arbitrum低い($0.1-1)4000+小口・開発
Polygon低い($0.01-0.5)7000+スケーリング実験
Optimism低い($0.1-2)4000+アプリケーション

自分は最初、本当にArbitrumとPolygonで開発してました。テスト用のガス代が月5000円とか10000円単位で消えていく。本当に予想外だった。

Uniswap・Aaveを実際に動かしてわかったこと

じゃあ実際にDeFiの中核的なプロトコルを触ってみると何が見えるか。自分がやってみたのは:

  1. Uniswap V3でトークンペア作成 — ERC-20トークンをETHとペアにして、流動性プール構築
  2. Aaveでのステーキング・借入 — USDCを担保にして、他のトークンを借りる
  3. 簡単なフラッシュローン実装 — 短期間の無担保融資を活用した裁定取引テスト

正直、最初の1ヶ月は理屈がわかっていても、実装で何度も失敗しました。

Uniswapで流動性プール構築した時の失敗

// 流動性プール構築の基本
interface IUniswapV3Pool {
    function initialize(uint160 sqrtPriceX96) external;
    function mint(
        address recipient,
        int24 tickLower,
        int24 tickUpper,
        uint128 liquidity,
        bytes calldata data
    ) external returns (uint256 amount0, uint256 amount1);
}

// 自分の初期実装
// ❌ 間違い:ティック価格計算を無視していた
uint160 sqrtPrice = uint160(10 ** 18); // このままじゃダメ

// ✅ 正しい方法:実際の価格を正規化
function getPriceInSqrt(uint256 token0Price, uint256 token1Price) 
    pure 
    returns (uint160) 
{
    // token0 / token1 の価格を Q64.96 フォーマットに
    return uint160(
        sqrt(token0Price * (1 << 96) / token1Price)
    );
}

何が問題だったかというと、Uniswap V3ではティックという概念を理解してないと動きません。流動性の価格範囲を指定するんですが、この計算がめちゃくちゃ複雑。ドキュメントは技術者向けというより数学向けで、エンジニアにはつらい。

正直、この辺りは「Uniswap SDKライブラリを使え」という結論になるんですよ。

Aaveのステーキング運用で学んだこと

Aaveで100万円相当のUSDCを担保に入れて、他のトークンを借りてみました。目的は「ステーキング報酬をもらいつつ、借入でレバレッジを効かせる」という戦略。

失敗が2つありました:

1. リクイデーション(借金を強制清算される)の仕組みを甘く見た

Aaveでは担保と借入のバランスが崩れると、自動的に清算されます。担保価格が下がったり、借入したトークンの価格が上がったりするとダメ。自分は「10%の余裕があれば大丈夫」と思ってたんですが、ボラティリティが高い相場では一瞬で崩壊します。実際に10万円くらい吹っ飛びました。

2. GasLimitの計算誤り

借入トランザクションを実装する際、必要なガスを過小見積もりしてました。フラッシュローンとの組み合わせだと、複数のコントラクト呼び出しが直列化されるので、想定の2倍以上ガスが必要になることがあります。

// Aaveからの借入トランザクション
const lendingPool = await ethers.getContractAt(
    "ILendingPool",
    aaveAddressProvider.getLendingPool()
);

const borrowTx = await lendingPool.borrow(
    assetAddress,
    amount,
    rateMode, // 1=Stable, 2=Variable
    referralCode,
    userAddress,
    {
        gasLimit: 500000 // ❌ これでは足りない
    }
);

// ✅ 正解:事前にシミュレーション
const estimatedGas = await lendingPool.estimateGas.borrow(
    assetAddress,
    amount,
    rateMode,
    referralCode,
    userAddress
);

const tx = await lendingPool.borrow(
    assetAddress,
    amount,
    rateMode,
    referralCode,
    userAddress,
    { gasLimit: estimatedGas.mul(120).div(100) } // 20%余裕を持たせる
);

こういう地道な失敗を半年かけて積み重ねました。

DeFiが「銀行の代替」になり得ない理由をエンジニア視点で見る

graph TB
    subgraph TraditionalBank["伝統的銀行"]
        A["顧客入金"] --> B["信用調査"]
        B --> C["融資実行"]
        C --> D["返済管理"]
        D --> E["利息配分"]
    end
    
    subgraph DeFi["DeFi(自動実行)"]
        A2["スマートコントラクト"] --> B2["担保チェック"]
        B2 --> C2["自動融資"]
        C2 --> D2["オンチェーン実行"]
        D2 --> E2["リクイデーション"]
    end
    
    subgraph Risks["DeFiの本質的なリスク"]
        F["スマートコントラクト脆弱性"]
        G["価格変動リスク"]
        H["オーバーレバレッジ"]
        I["流動性リスク"]
    end
    
    DeFi --> Risks
    
    style TraditionalBank fill:#e1f5ff
    style DeFi fill:#fff3e0
    style Risks fill:#ffebee

本当のところ、DeFiが銀行にならない理由は技術じゃなくて、プロトコル内のすべてが担保ベースだからなんですよ。

伝統的な銀行は「あなたの信用度」を判定して、担保がなくても融資します。給料が毎月確定しているなら、その信用で100万円の無担保ローンが取れる。

でもDeFiは違う。オンチェーンにあるのは、ウォレットのバランスとトランザクション履歴だけ。その人が「本当に信用できるのか」はわかりません。だから必ず「超過担保」を要求する。100万円借りたければ、150万円分の担保が必要。これは非効率。

つまり、DeFiって「スマートコントラクトで銀行の機能を再現した」だけで、金融の本質的な問題は何も解決していないんです。

ステーキングで月30万円稼いだけど、それは錯覚だった

DeFiを触り始めた2ヶ月目、Lido(Ethereum ステーキングプロトコル)にETHをぶ込んで、月30万円相当のステーキング報酬がもらえる計画を立てました。「これは不労所得だ」と思い込んでました。

3ヶ月後、気づいたこと:

  • 報酬が減少し続けている — ネットワークが成熟するにつれ、ステーキング報酬は年6〜8%から2〜3%に低下
  • Lydoトークンの価値が下がってる — ステーキング報酬の一部がLydoトークン(ガバナンストークン)で配分されるが、これが市場で売られて価値が下がってた
  • スマートコントラクトリスク — Lidoが何かのバグで止まったら?報酬ゼロどころか、担保のETH自体が危なくなる

月30万円のうち、実際に現金化できるのは月10万円程度。それも市場でトークンを売る際のスリップと手数料を引くと、月5万円が現実的。

ステーキング報酬(名目)= 月30万円
 - Lydoトークンの価値低下 = -10万円
 - 売却時のスリップ・手数料 = -8万円
 - ガス代 = -2万円
 + 相場変動リスク = ±5万円

実際の利益 = 月5万円~15万円(不確実)

これなら、単純にETH買ってVanguardの全米株式インデックスファンドに投資した方が、気が楽ですよ。

実務的な「DeFi との付き合い方」

半年やってみて、エンジニアとして「DeFiとどう付き合うべきか」が見えてきました。

1. 金融商品としてのDeFiは避けるべき

「投資で稼ぐ」という目的でDeFiに近づくと、確実に失敗します。理由は、ボラティリティが異常に高い上に、プロトコルリスク・スマートコントラクトリスク・流動性リスク が多重に存在するから。

自分の場合、最終的には「保有している暗号資産をDeFi内で動かす」という消極的なスタンスに落ち着きました。新たに追い銭はしない。

2. スマートコントラクト開発として学ぶべき

SolidityやWeb3.jsの実務的な理解は、本当に価値があります。「ブロックチェーン上で自動実行される契約」って、 AWS Lambdaとかサーバーレス関数と本質は同じなんですよ。ガス代を考慮した最適化とか、状態管理とか、学べることが多い。

実際、自分がDeFiプロトコルを触って得た知識は、会社のプロジェクトに直結してます。

3. インデックスプロトコルを理解する価値

Uniswapみたいな「自動マーケットメイカー(AMM)」の仕組みって、分散型の値付けロジック。これは金融以外にも応用できます。例えば、社内の「リソース配分」みたいなシステムを設計する際に、同じ論理を使えたりする。

DeFi界隈の「嘘」と「本当」

界隈のTwitterとか、YouTubeで見かける情報を半年間検証した結果:

主張現実
「DeFiで月50%の利回り」詐欺か、リスク理解が欠落
「完全自動で稼げる」初期段階だけ。プロトコルリスクが常に存在
「銀行の代替になる」当分ムリ。超過担保要件が本質的な壁
「トークン価値は上がり続ける」インフレ。新しいプロトコルが参入する度に薄まる
「スマートコントラクトは安全」大型プロトコルは監査通過してるが、小型は地雷が多い

ただし本当のこともあります。ブロックチェーン上の透明性は本当。全トランザクションが公開される。プロトコルレベルの効率化は進んでて、ガス代は年々下がってる(Arbitrumとか)。そしてスマートコントラクト開発の人材は超不足。本気で学べば食いっぱぐれない。

次のステップ:エンジニアがDeFiと付き合うロードマップ

自分がやってみて、これが最小限で効果的だと感じたルート:

1. Remix IDEで簡単なERC-20トークンを作る(1週間)

Solidityの基本文法とガス最適化の初歩が身につきます。テストネットへのデプロイも経験できます。

2. OpenZeppelinのサンプルコントラクトを拡張する(2週間)

AccessControlPausableみたいな既存プロトコルの監査済みコードを拡張するのは、最短で実務レベルに達する方法です。

3. Hardhatでローカル開発環境を整える(1ヶ月)

テスト自動化、ガス効率分析、フォーク環境での実装テストができれば、本物のDeFi開発に近づきます。

4. Aave・Uniswapのシンプルな連携を実装(2ヶ月)

実際のプロトコルとの相互作用を経験します。フロントランニング対策やスリップ計算も実装してみることで、プロダクションレベルの思考が身につく。

正直、この段階まで来れば、「DeFi系スタートアップ」の技術面での要件は大体クリアできます。

DeFiってそもそも何に使うのか、改めて考えた

半年やってみて、一番大事な気付きは「DeFiは新しい金融ではなく、異なるトレードオフを持つ別のシステム」ということ。

銀行に預けるのは「信用と引き換えに、安全性と利便性を得る」という選択。DeFiに入れるのは「信用を失う代わりに、透明性と自律性を得る」という選択。

どちらが正しいわけじゃなくて、状況によって使い分ける

例えば、独裁政権下の国にいて、政府に資産を没収される可能性がある人にとっては、DeFiは本当に価値がある。でも日本に住んでて、銀行が信用できるなら、DeFiに金を入れるメリットは限定的。

エンジニアとしてDeFiを学ぶ価値は、「新しい金融システムの可能性」を理解することで、投資で稼ぐことじゃないんです。

まとめ

半年DeFiを触ってみて、最終的な結論は以下の通り。

スマートコントラクト開発スキルとしてのDeFiは本物の価値がある — Solidityとオンチェーン設計を実務的に学べる唯一の環境。キャリアとしても厚みが出ます。

金融商品としてのDeFiは、余剰資金でしか触るべきでない — ボラティリティとプロトコルリスクが異常に高い。月30万円の報酬は、実際には月5万円。錯覚に気をつけて。

DeFiプロトコル自体は革新的だが、その使用は限定的 — 銀行の完全代替は当面ムリ。超過担保要件が本質的な壁になってます。

エンジニアとしてDeFiを学ぶのは投資です — キャリア資産になるし、スタートアップ転職時の給与交渉材料にもなる。

2026年のDeFiは「投機から実用へ」がようやく始まった段階 — USDCとかステーブルコインの普及で、実際の価値移転に使われ始めている。ここは注視する価値があります。

次は、自分でDeFiアグリゲーターを作ってみるとか、複数プロトコルの最適化を考えるとか、そういう実装レベルで遊んでみたいですね。金は動かさないで、純粋にエンジニアリングとして。

U

Untanbaby

ソフトウェアエンジニア|AWS / クラウドアーキテクチャ / DevOps

10年以上のIT実務経験をもとに、現場で使える技術情報を発信しています。 記事の誤りや改善点があればお問い合わせからお気軽にご連絡ください。

関連記事