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 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
を受け取ったユーザーです。