ERC-4626 トークン化ボールト規格
最終更新: 2025年10月21日
はじめに
ERC-4626は、利回りボールトの技術的なパラメータを最適化し、統一するための規格です。 この規格は、ボールトに含まれる単一のERC-20トークンをどれだけ所有しているかを示すトークン化利回りボールトを作成するための標準APIを提供します。 ERC-4626はさらに、ERC-20に基づくトークン化ボールトのオプション拡張機能として、トークンの預入/引出および残高の読み取りといった基本的な機能を提供します。
利回りボールトにおけるERC-4626の役割
レンディング市場、アグリゲータ、および内部で利回りが得られるトークンは、ユーザーが様々な戦略を駆使して暗号資産トークンから最適な利回りを獲得する上で有益です。 これらの戦略はそれぞれがわずかな違いを持つため、エラーが発生しやすい場合や開発リソースを浪費してしまう場合があります。
利回りボールトのデベロッパーは、ERC-4626を活用することで、より一貫性が高く堅牢な実装パターンを実現できるため、アプリケーションとの統合にかかる作業を軽減し、様々なアプリケーションにおいて利回りを獲得できるようにするための別途の取り組みを削減することができます。
ERC-4626トークンは、EIP-4626 (opens in a new tab)で詳しく説明されています。
非同期ボールト拡張(ERC-7540)
ERC-4626は、上限までのアトミックな預け入れと償還に最適化されています。 上限に達した場合、新しい預け入れや償還は送信できません。 この制限は、ボールトとのインターフェースの前提条件として非同期アクションや遅延を伴うスマートコントラクトシステム(実世界資産プロトコル、担保不足貸付プロトコル、クロスチェーン貸付プロトコル、リキッドステーキングトークン、保険セーフティモジュールなど)ではうまく機能しません。
ERC-7540は、非同期ユースケース向けにERC-4626ボールトの有用性を拡張します。 既存のボールトインターフェース(deposit/withdraw/mint/redeem)は、非同期リクエストを要求するために完全に利用されます。
ERC-7540拡張は、ERC-7540 (opens in a new tab)で詳しく説明されています。
マルチアセットボールト拡張 (ERC-7575)
ERC-4626でサポートされていないユースケースの1つは、流動性プロバイダー(LP)トークンなどの複数の資産またはエントリーポイントを持つボールトです。 これらは、ERC-4626自体がERC-20であるという要件のために、一般的に扱いにくかったり、非準拠であったりします。
ERC-7575は、ERC-20トークンの実装をERC-4626の実装から外部化することにより、複数の資産を持つボールトのサポートを追加します。
ERC-7575拡張は、ERC-7575 (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)この関数は、入金が現在のブロックに対してどのような影響をもたらすかをシミュレーションします。
deposit
1function deposit(uint256 assets, address receiver) public returns (uint256 shares)この関数は、assets量の原資産トークンをボールトに預け入れ、receiverに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量の原資産トークンを預け入れることによって、receiverに正確にshares量のボールトシェアをミントします。
maxWithdraw
1function maxWithdraw(address owner) public view returns (uint256 maxAssets)この関数は、1回のwithdraw呼び出しでownerの残高から引き出すことができる原資産の最大量を返します。
previewWithdraw
1function previewWithdraw(uint256 assets) public view returns (uint256 shares)この関数は、当該引き出しが現在のブロックに与える影響をシミュレーションします。
withdraw
1function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares)この関数は、ownerからsharesをバーンし、ボールトからreceiverへ正確にassets量のトークンを送信します。
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)この関数は、ownerから特定のshares量を償還し、ボールトからreceiverにassets量の原資産トークンを送信します。
totalSupply
1function totalSupply() public view returns (uint256)ボールト内で流通している未償還のシェアの合計数を返します。
balanceOf
1function balanceOf(address owner) public view returns (uint256)ownerが現在保有しているボールトシェアの合計量を返します。
インターフェースのマップ
イベント
入金イベント
mintおよびdepositメソッドを介してトークンがボールトに預け入れられる際に、MUST発行されなければなりません。
1event Deposit(2 address indexed sender,3 address indexed owner,4 uint256 assets,5 uint256 shares6)ここでsenderはassetsをsharesに交換し、それらのsharesをownerに転送したユーザーです。
出金イベント
預金者がredeemまたはwithdrawメソッドでボールトからシェアを引き出す際に、MUST発行されなければなりません。
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を受け取ったユーザーです。
