[翻訳] ERC3156 Flash Loans (Flash Borrower) 【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『ERC3156 Flash Loans (Flash Borrower) Smart Contract Module in Bunzz 』]()
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/01302747-268d-2a7e-7265-32de3cf5967c.png)

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

フラッシュローンは、貸し手スマートコントラクトが貸し手スマートコントラクトに資産を貸し出す条件付きで、トランザクションの終了前に資産が返却されることを指すスマートコントラクトトランザクションです。

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

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

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

### 使い方

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

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

- フラッシュローンの借り手リファレンス実装 => FlashBorrower.sol (ERC-3156：Flash Loans サブモジュール)
- フラッシュミントのリファレンス実装 => FlashMinter.sol (ERC-3156：Flash Loans サブモジュール)
- フラッシュローンのリファレンス実装 => FlashRender.sol (ERC-3156：Flash Loans サブモジュール)

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

```
/// @dev ERC-3156フラッシュローンのコールバック関数function onFlashLoan(    address initiator,    address token,    uint256 amount,    uint256 fee,bytes calldata data) external override returns(bytes32) {    require(        msg.sender == address(lender),        "FlashBorrower: Untrusted lender"    );    require(        initiator == address(this),        "FlashBorrower: Untrusted loan initiator"    );    (Action action) = abi.decode(data, (Action));    if (action == Action.NORMAL) {        // 何かを実行する    } else if (action == Action.OTHER) {        // 別のことを実行する    }    return keccak256("ERC3156FlashBorrower.onFlashLoan");}/// @dev フラッシュローンを開始する関数function flashBorrow(    address token,    uint256 amount) public {    bytes memory data = abi.encode(Action.NORMAL);    uint256 _allowance = IERC20(token).allowance(address(this), address(lender));    uint256 _fee = lender.flashFee(token, amount);    uint256 _repayment = amount + _fee;    IERC20(token).approve(address(lender), _allowance + _repayment);    lender.flashLoan(this, token, amount, data);}
```

### 関数

**#WRITE**

- flashBorrow
- flashBorrowAndReenter
- onFlashLoan
- transferOwnership
- approveRepayment
- flashBorrowAndSteal
- renounceOwnership

#READ

- flashAmount
- flashBalance
- flashFee
- flashInitiator
- flashToken
- owner

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

---

---

:::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>
:::