Aaveを使ったフラッシュローンの作成
執筆者 Alchemy
Introduction
このチュートリアルでは、以下を行います。
- Flash loanスマートコントラクトの作成とデプロイ
- 流動性プロトコルAaveによる資金の受け取り
- デプロイしたコントラクトとのトランザクションによるFlash loanの実行
始める前に、このプロジェクトを構成する各要素を見ていきましょう。
Flash loanとは
伝統的な金融では、借り手はローンを受けるために担保を提供する必要がある場合が多くあります。この担保は通常、車や住宅などの資産の形をとります。銀行はこの担保を、借り手が返済できなかった場合の損失を補填するための担保として利用します。
分散型金融(DeFi)の世界では、Flash loanを利用することで、借り手は担保を提供せずにローンを受けることができます。
Flash loanでは、貸し手はローンの提供とその返済を単一のトランザクション内で行うことができます。これが可能なのは、トランザクションが開始されてからブロックチェーン上のブロックに最終的にコミットされるまでの時間があるためです。
Flash loanの手順は以下の通りです。
-
借り手がFlash loanスマートコントラクトを実行する
-
Flash loanコントラクトが流動性プールに借入額をリクエストする
-
コントラクトは借りた資金を使って定義された操作(例:取引所での取引)を実行する
-
操作の完了後、借りた資金が流動性プールに返済される
-
トランザクションがブロックチェーンにコミットされる
スマートコントラクトによって、以下を検証できます。
- Flash loanが、スマートコントラクト内の操作を実行するのに必要な資金を持っていること
- トランザクションが新しいブロックに追加される前に、操作が完了していること
- 操作の結果、借り手に資金の損失が生じないこと
- 貸付プールに正しい金額に加えて、プロトコル利用のためのトランザクション手数料が返済されること
借り手は、貸し手に借入額を正しく返済する限り、資金を自由に使うことができます。Flash Loanの代表的なユースケースには以下があります。
-
トレーディングアービトラージ - あるトークンをある取引所から、より高値がつく別の取引所に移し、利益を得る
-
担保スワップ - 担保付きローンのトークンを別のトークンに交換し、既存のローンの担保とする
-
セルフリクイデーション - トークンをスワップして担保付きローンを返済し、Flash loanを返済する
Flash loanコントラクトが実行される前に、コントラクトへの資金供給が必要です。Flash loanの資金は通常、主要な貸付プロトコルであるAaveから供給されます。
Flash loanの仕組みは、担保を必要としないため、容易な借り入れを可能にします。この特性は同時に、Flash loan攻撃を行う攻撃者にも利用され得ます。Flash loan攻撃とは、借り手が資金を借り、資産の価格を操作し、その後借りた資産を自分に有利な形で大きな利益とともに返済する攻撃です。これは通常、価格を提供するoracleを侵害するか、市場に人為的な値動きを作り出すことで行われます。Chainlinkのような分散型oracleを選ぶことや、OpenZepplinのようなサービスを通じてスマートコントラクトの監査を行うことが、こうした攻撃を防ぐための対策となります。
Aaveとは
伝統的なローンでは、銀行が資金を提供します。DeFiでは、AaveプロトコルがFlash loanの最大の資金源です。Aaveでは、ユーザーがERC20トークンの流動性プールに資金を供給できます。借り手はこれらのプールを利用してローンを受けることができます。ローンの種類に応じて、借り手は金利を支払い、これは供給者が供給したトークンに対する利息として供給者に渡ります。現在、Aaveプロトコルは0.09%のトランザクション手数料も課しています。
これらの概念がどのように組み合わさってFlash loanを構成するのか、見ていきましょう。
必要なもの
-
Remix IDEへのアクセス
スマートコントラクトコードの取得
1)Remix IDEで新しいワークスペースを開きます。
2)別のタブで、こちらのGithub Gistsを開きます。ここには、今回作成するFlash loanで使用するスマートコントラクトコードが含まれています。
3)Remix IDEで、以下の名前と正確に一致する新しいコントラクトファイルを作成し、それぞれのファイルに対応するコードをコピー&ペーストします(6個)。
-
Flashloan.sol
-
FlashloanRecieverBase.sol
-
IFlashLoanReciever.sol
-
ILendingPool.sol
-
ILendingPoolAnddressesProvider.sol
-
Withdrawable.sol

各コントラクトについて
Flashloan.sol - これはFlash loanスマートコントラクトです。ローンの資金を使って操作を完了するためにコントラクトが呼び出すExecuteOperation関数が含まれています。
FlashLoanRecieverBase.sol / IFlashLoanReciever.sol - これにより、コントラクトがFlash loanの資金を受け取れるようになります
ILendingPool.sol / ILendingPoolAddressProvider.sol - Flash loanに資金を提供するAaveの貸付プールを指し示します
Withdrawable.sol - 資金が誤って送金された、または動かせなくなった場合に、他のコントラクトがこのコントラクトから資金を引き出せるようにします
ウォレットへの資金の追加
Flash loanコントラクトのデプロイと実行には、Kovanテストネットワークを使用します。これを正常に行うには、ウォレットに資金が必要です。
-
https://faucets.chain.link/kovanにアクセスします
-
ウォレットアドレスを入力します
-
Metamaskウォレットで、Kovanネットワークを選択します

- .1 Test Ethを選択してください

-
トークンの転送が完了したという確認を待ちます
-
Metamaskウォレットに資金が追加されているはずです
コントラクトのデプロイ
ウォレットに資金が入ったので、次はスマートコントラクトをKovan Testnetにデプロイし、実行および操作できるようにします。
1)Remix内のサイドパネルにあるSolidityCompilerに移動します

2)以下の設定を使用します。
Compiler: 0.6.6+comitt.6c…
Language: Solidity
EVM Version: Default
Flashloan.solをコンパイルする

4)「Compile」をクリックします - 正常に完了すると、いくつかの警告が出ることがありますが、エラーは出ません
Flash loanスマートコントラクトのコンパイル後、次にデプロイを行います。
1)「Deploy and Run Transactions」タブに移動します

2)以下の設定を使用します。
Environment: Injected Web3
Account: Kovanウォレットアドレスをコピー&ペーストします
Contract: Flashloan - contracts/Flashloan

3)Lending Pool Contractをaddress_addressProviderとして追加します:0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5 。これはAaveの貸付プロバイダのアドレスです。他のコントラクトアドレスはこちらで確認できます。

4)「Deploy」をクリックします
5)Metamaskがポップアップし、トランザクションを「Confirm」するよう求められます。ターミナル内に、トランザクションをetherscanで確認するためのリンクが表示されます。

Flash loanへの資金の追加
これで、スマートコントラクトがKovan Testnetにデプロイされました。次に、Aaveのtestnet貸付プールからコントラクトへ資金を追加する必要があります。
-
以下のページにアクセスします:https://staging.aave.com/?marketName=proto_kovan
-
Metamaskウォレットを接続します
-
'Kovan Ethereum Market'を使用していることを確認してください。小さな'K'の表示があります

注:設定で「Testnet mode」を有効にする必要がある場合があります。

- 'Assets to supply'の下にある「Supply」ボタンをクリックして、test EthをAaveに供給します。.001から始められます

- 次に、DAIの隣にある「Borrow」ボタンをクリックしてDAIを借ります。10 DAIを借りてください。

- Metamaskが開き、トランザクションの確認を求められます。トランザクションが完了すると、DAIがウォレットに表示されます。

- 初めてDAIを受け取る場合は、ウォレットでDAIを表示できるように設定する必要があります。
- Metamask内の「Import Tokens」に移動します

- KovanのDAIコントラクトアドレスを入力します:0xFf795577d9AC8bD7D90Ee22b6C170349
- ウォレットにDAIが入ったら、デプロイしたコントラクトに10 DAIを送金します。デプロイしたコントラクトのアドレスは、Remixからコピーして取得できます。

その後、Metamaskを使ってそのアドレスに送金します。

Flash loanコントラクトの実行
次に、スマートコントラクトの実行に使用するアセットを指定するため、AaveのKovan Testnet DAIコントラクトを呼び出す必要があります。
-
Remix IDEに戻り、「Deploy & Run Transactions」タブに移動します
-
'Deployed Contracts'の下に、Flash loanとコントラクトアドレスが表示されます

- 'flashloan'ラベルの隣にある、「address asset」とラベルの付いたテキストフィールドに移動します

-
address_assetフィールドにこのコントラクトアドレスを入力します:0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD 。その後、flashloanラベルボタンをクリックしてトランザクションを開始します。
-
これによりFlash loanのプロセスが開始され、etherscan上に3件のトランザクションが生成されます。

最初のトランザクションは、貸付プールから私たちのFlash loanコントラクトへのものです。スマートコントラクトに操作を含めなかったため、その金額に手数料を加えた額が貸付プールへ返済されます。最後のトランザクションは、借りた金額に対する利息であり、流動性プールの供給者へと渡ります。
関連する概要
DeFi2026年6月12日
DeFi AIエージェントとは?ユースケース、リスク、アーキテクチャ
DeFi AIエージェント(DeFAIエージェントとも呼ばれる)は、ポリシー制御下でオンチェーンの推論、署名、決済を行う自律システムである。
DeFi2025年9月5日
2025年版:DeFiウォレットのセキュリティ対策トップ5
2024年の暗号資産損失の80.4%はオフチェーン攻撃によるもの。スマートウォレットによるセキュリティ強化の方法を解説。
DeFi2023年8月29日
リキッドステーキングトークンファイナンス(LSTfi)とは?
リキッドステーキングを基盤に利回り戦略を構築する新しいDeFiプロトコルのカテゴリについて解説

ブロックチェーンで魔法を生み出す
Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。