[翻訳] ERC-3156 Flash Loans (FlashLender) 【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『ERC-3156: Flash Loans (FlashLender) Smart Contract Module in Bunzz』](https://blog.bunzz.dev/erc-3156-flash-loans-flashlender-smart-contract-module-in-bunzz/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/ad9aa2f7-86db-ed70-e6fb-d47fe73b9d1d.png)

FlashLender は ERC-3156：Flash Loans モジュールのサブモジュールであり、{ERC20}の拡張機能であり、フラッシュレンディングを可能にします。

フラッシュローンは、貸し手スマートコントラクトが貸し手スマートコントラクトに資産を貸し出すトランザクションであり、資産がトランザクションの終了前に返却されることを条件としています。オプションの手数料も追加されます。

ERC-3156：Flash Loans は、貸し手がフラッシュローンリクエストを受け入れるためのインターフェースと、借り手が貸し手の実行内で一時的にトランザクションを制御するためのインターフェースを指定しています。

フラッシュローンの安全な実行のプロセスも指定されています。

このモジュールとコードには、[https://bit.ly/40yvFvu](https://bit.ly/40yvFvu)からアクセスできます。

## 使用方法

---

貸し手は、{IERC3156FlashLender}インターフェースを実装する必要があります。

フラッシュローンの受信者は、{IERC3156FlashBorrower}インターフェースを実装する必要があります：

- フラッシュローンの受信者の参照実装 => FlashBorrower.sol (ERC-3156：Flash Loans サブモジュール)
- フラッシュミントの参照実装 => FlashMinter.sol (ERC-3156：Flash Loans サブモジュール)
- フラッシュローンの参照実装 => FlashRender.sol (ERC-3156：Flash Loans サブモジュール)

次のように{flashLoan}関数を実装できます：

```
/**
  * @dev Loan `amount` tokens to `receiver`, and takes it back plus a `flashFee` after the callback.
  * @param receiver The contract receiving the tokens, needs to implement the `onFlashLoan(address user, uint256 amount, uint256 fee, bytes calldata)` interface.
  * @param token The loan currency.
  * @param amount The amount of tokens lent.
  * @param data A data parameter to be passed on to the `receiver` for any custom use.
*/
function flashLoan(
    IERC3156FlashBorrower receiver,
    address token,
    uint256 amount,
    bytes calldata data
) external override returns(bool) {
    require(
        supportedTokens[token],
        "FlashLender: Unsupported currency"
    );
    uint256 fee = _flashFee(token, amount);
    require(
        IERC20(token).transfer(address(receiver), amount),
        "FlashLender: Transfer failed"
    );
    require(
        receiver.onFlashLoan(msg.sender, token, amount, fee, data) == CALLBACK_SUCCESS,
        "FlashLender: Callback failed"
    );
    require(
        IERC20(token).transferFrom(address(receiver), address(this), amount + fee),
        "FlashLender: Repay failed"
    );
    return true;
}
```

## 関数

**#WRITE**

- transferOwnership
- flashLoan
- renounceOwnership

#READ

- supportedTokens
- CALLBACK_SUCCESS
- flashFee
- maxFlashLoan
- owner
- fee

このモジュールとコードには、[https://bit.ly/40yvFvu](https://bit.ly/40yvFvu)からアクセスできます。

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒牧さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::