ERC-4626 トークン化ボールト規格
はじめに
ERC-4626は、利回りボールトの技術的なパラメータを最適化し、統一するための規格です。 この規格は、ボールトに含まれる単一のERC-20トークンをどれだけ所有しているかを示すトークン化利回りボールトを作成するための標準APIを提供します。 ERC-4626はさらに、ERC-20に基づくトークン化ボールトのオプション拡張機能として、トークンの預入/引出および残高の読み取りといった基本的な機能を提供します。
利回りボールトにおけるERC-4626の役割
レンディング市場、アグリゲータ、および内部で利回りが得られるトークンは、ユーザーが様々な戦略を駆使して暗号資産トークンから最適な利回りを獲得する上で有益です。 これらの戦略はそれぞれがわずかな違いを持つため、エラーが発生しやすい場合や開発リソースを浪費してしまう場合があります。
利回りボールトのデベロッパーは、ERC-4626を活用することで、より一貫性が高く堅牢な実装パターンを実現できるため、アプリケーションとの統合にかかる作業を軽減し、様々なアプリケーションにおいて利回りを獲得できるようにするための別途の取り組みを削減することができます。
ERC-4626トークンの詳細については、EIP-4626をご覧ください。
前提知識
この記事をよく理解するには、まずトークン規格およびERC-20に目を通すことをおすすめします。
ERC-4626の機能と特長:
メソッド
asset
1function asset() public view returns (address assetTokenAddress)この関数は、会計処理、入金、および引出のために当該ボールトが使用される原資トークンのアドレスを返します。
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 maxAssets)この関数は、receiverが1回のdeposit呼び出しで入金できる原資産の上限を返します。
previewDeposit
1function previewDeposit(uint256 assets) public view returns (uint256 shares)この関数は、入金が現在のブロックに対してどのような影響をもたらすかをシミュレーションします。
入金
1function deposit(uint256 assets, address receiver) public returns (uint256 shares)この関数は、原資産トークンのassetsをボールトに入金し、受信者にsharesの所有権を付与します。
maxMint
1function maxMint(address receiver) public view returns (uint256 maxShares)この関数は、receiverによる1回のmintの呼び出しにより、ミント可能なシェア数の上限を返します。
previewMint
1function previewMint(uint256 shares) public view returns (uint256 assets)この関数は、現在のブロックにおける当該ミントの影響をシミュレーションします。
mint(ミント)
1function mint(uint256 shares, address receiver) public returns (uint256 assets)この関数は、原資産トークンのassetsを預け入れることで、recevierのボールトに対して特定の量のsharesをミントします。
maxWithdraw
1function maxWithdraw(address owner) public view returns (uint256 maxAssets)この関数は、1回のwithdraw呼び出しにより、owner残高から引き出し可能な原資産アセットの上限を返します。
previewWithdraw
1function previewWithdraw(uint256 assets) public view returns (uint256 shares)この関数は、当該引き出しが現在のブロックに与える影響をシミュレーションします。
引き出し
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 maxShares)この関数は、redeemの呼び出しにより、ownerの残高から受け取ることができるシェアの上限を返します。
previewRedeem
1function previewRedeem(uint256 shares) public view returns (uint256 assets)この関数は、シェアの受け取りが現在のブロックに与える影響をシミュレーションします。
redeem
1function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets)この関数は、一定量のsharesをownerから回収し、原資トークンの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 shares6)このコードにおけるsenderとは、 assetsをsharesに交換して、sharesをownerに転送するユーザーです。
出金イベント
redeem あるいは withdrawメソッドにより、預金者がボールトからシェアを引き出す際に、必ず発行しなければなりません。
1event Withdraw(2 address indexed sender,3 address indexed receiver,4 address indexed owner,5 uint256 assets,6 uint256 shares7)このコードにおけるsenderとは、出金をトリガーし、ownerが所有するsharesをassetsと交換するユーザーです。 receiverは、出金されたassetsを受け取ったユーザーです。
