メインコンテンツへスキップ
Change page

ERC-4626 トークン化ボールト規格

最終編集者: @HiroyukiNaito(opens in a new tab), 2024年5月8日

はじめに

ERC-4626は、利回りボールトの技術的なパラメータを最適化し、統一するための規格です。 この規格は、ボールトに含まれる単一のERC-20トークンをどれだけ所有しているかを示すトークン化利回りボールトを作成するための標準APIを提供します。 ERC-4626はさらに、ERC-20に基づくトークン化ボールトのオプション拡張機能として、トークンの預入/引出および残高の読み取りといった基本的な機能を提供します。

利回りボールトにおけるERC-4626の役割

レンディング市場、アグリゲータ、および内部で利回りが得られるトークンは、ユーザーが様々な戦略を駆使して暗号資産トークンから最適な利回りを獲得する上で有益です。 これらの戦略はそれぞれがわずかな違いを持つため、エラーが発生しやすい場合や開発リソースを浪費してしまう場合があります。

利回りボールトのデベロッパーは、ERC-4626を活用することで、より一貫性が高く堅牢な実装パターンを実現できるため、アプリケーションとの統合にかかる作業を軽減し、様々なアプリケーションにおいて利回りを獲得できるようにするための別途の取り組みを削減することができます。

ERC-4626トークンの詳細については、EIP-4626(opens in a new tab)をご覧ください。

前提知識

この記事をよく理解するには、まずトークン規格およびERC-20に目を通すことをおすすめします。

ERC-4626の機能と特長:

メソッド

asset

1function asset() public view returns (address)
コピー

この関数は、会計処理、入金、および引出のために当該ボールトが使用される原資トークンのアドレスを返します。

totalAssets

1function totalAssets() public view returns (uint256)
コピー

この関数は、当該ボールトで所有される原資産の総額を返します。

convertToShares

1function convertToShares(uint256 assets) public view returns (uint256 shares)
コピー

この関数は、当該ボールトに提供されたassetsの量に対して交換されるsharesの量を返します。

convertToAssets

1function convertToAssets(uint256 shares) public view returns (uint256 assets)
コピー

この関数は、当該ボールトに提供されたsharesの量に対して交換されるassetsの量を返します。

maxDeposit

1function maxDeposit(address receiver) public view returns (uint256)
コピー

この関数は、receiverが1回のdeposit呼び出しで入金できる原資産の上限を返します。

previewDeposit

1function previewDeposit(uint256 assets) public view returns (uint256)
コピー

この関数は、入金が現在のブロックに対してどのような影響をもたらすかをシミュレーションします。

deposit

1function deposit(uint256 assets, address receiver) public returns (uint256 shares)
コピー

この関数は、原資産トークンのassetsをボールトに入金し、受信者にsharesの所有権を付与します。

maxMint

1function maxMint(address receiver) public view returns (uint256)
コピー

この関数は、receiver による1回の mint の呼び出しにより、ミント可能なシェア数の上限を返します。

previewMint

1function previewMint(uint256 shares) public view returns (uint256)
コピー

この関数は、現在のブロックにおける当該ミントの影響をシミュレーションします。

mint

1function mint(uint256 shares, address receiver) public returns (uint256 assets)
コピー

この関数は、原資産トークンのassetsを預け入れることで、recevierのボールトに対して特定の量のsharesをミントします。

maxWithdraw

1function maxWithdraw(address owner) public view returns (uint256)
コピー

この関数は、1回のwithdraw呼び出しにより、owner残高から引き出し可能な原資産アセットの上限を返します。

previewWithdraw

1function previewWithdraw(uint256 assets) public view returns (uint256)
コピー

この関数は、当該引き出しが現在のブロックに与える影響をシミュレーションします。

withdraw

1function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares)
コピー

この関数は、ownerが所有するsharesをバーンし、正確に一致したassetsトークンをボールトからreceiverに送信します。

maxRedeem

1function maxRedeem(address owner) public view returns (uint256)
コピー

この関数は、redeemの呼び出しにより、ownerの残高から受け取ることができるシェアの上限を返します。

previewRedeem

1function previewRedeem(uint256 shares) public view returns (uint256)
コピー

この関数は、シェアの受け取りが現在のブロックに与える影響をシミュレーションします。

redeem

1function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets)
コピー

この関数は、一定量のsharesownerから回収し、原資トークンのassetsをボールトからreceiverに送信します。

totalSupply

1function totalSupply() public view returns (uint256)
コピー

ボールト内で流通している未償還のシェアの合計数を返します。

balanceOf

1function balanceOf(address owner) public view returns (uint256)
コピー

ownerが現在ボールトで所有しているシェアの総数を返します。

イベント

入金イベント

mintあるいはdepositメソッドによりトークンをボールトに入金する際に、必ず発行しなければなりません。

1event Deposit(
2 address indexed sender,
3 address indexed owner,
4 uint256 assets,
5 uint256 shares
6)
コピー

このコードにおけるsenderとは、 assetssharesに交換して、sharesownerに転送するユーザーです。

出金イベント

redeem あるいは withdrawメソッドにより、預金者がボールトからシェアを引き出す際に、必ず発行しなければなりません。

1event Withdraw(
2 address indexed sender,
3 address indexed receiver,
4 address indexed owner,
5 uint256 assets,
6 uint256 shares
7)
コピー

このコードにおけるsenderとは、出金をトリガーし、ownerが所有するsharesassetsと交換するユーザーです。 receiverは、出金されたassetsを受け取ったユーザーです。

参考文献

この記事は役に立ちましたか?