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

ERC-4626 トークン化ヴォールト標準

はじめに

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は、上限までのアトミックな入金と償還に最適化されています。上限に達すると、新規の入金や償還は送信できなくなります。この制限は、ヴォールトとインターフェースをとるための前提条件として非同期アクションや遅延を伴うスマート・コントラクト・システム(例:現実資産プロトコル、無担保レンディング・プロトコル、クロスチェーン・レンディング・プロトコル、リキッド・ステーキング・トークン (LST)、または保険のセーフティモジュールなど)ではうまく機能しません。

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

function asset() public view returns (address assetTokenAddress)

この関数は、会計、入金、引き出しのためにヴォールトで使用される原資産トークンのアドレスを返します。

totalAssets

function totalAssets() public view returns (uint256)

この関数は、ヴォールトが保有する原資産の総量を返します。

convertToShares

function convertToShares(uint256 assets) public view returns (uint256 shares)

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

convertToAssets

function convertToAssets(uint256 shares) public view returns (uint256 assets)

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

maxDeposit

function maxDeposit(address receiver) public view returns (uint256 maxAssets)

この関数は、1回のdeposit呼び出しで入金できる原資産の最大量を返します。この際、シェアはreceiverのためにミントされます。

previewDeposit

function previewDeposit(uint256 assets) public view returns (uint256 shares)

この関数を使用すると、ユーザーは現在のブロックでの入金の影響をシミュレートできます。

deposit

function deposit(uint256 assets, address receiver) public returns (uint256 shares)

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

maxMint

function maxMint(address receiver) public view returns (uint256 maxShares)

この関数は、1回のmint呼び出しでミントできるシェアの最大量を返します。この際、シェアはreceiverのためにミントされます。

previewMint

function previewMint(uint256 shares) public view returns (uint256 assets)

この関数を使用すると、ユーザーは現在のブロックでのミントの影響をシミュレートできます。

mint

function mint(uint256 shares, address receiver) public returns (uint256 assets)

この関数は、assetsの原資産トークンを入金することで、正確にsharesのヴォールトシェアをreceiverにミントします。

maxWithdraw

function maxWithdraw(address owner) public view returns (uint256 maxAssets)

この関数は、1回のwithdraw呼び出しでownerの残高から引き出し可能な原資産の最大量を返します。

previewWithdraw

function previewWithdraw(uint256 assets) public view returns (uint256 shares)

この関数を使用すると、ユーザーは現在のブロックでの引き出しの影響をシミュレートできます。

withdraw

function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares)

この関数は、ownerからsharesをバーンし、正確にassetsのトークンをヴォールトからreceiverに送信します。

maxRedeem

function maxRedeem(address owner) public view returns (uint256 maxShares)

この関数は、redeem呼び出しを通じてownerの残高から償還できるシェアの最大量を返します。

previewRedeem

function previewRedeem(uint256 shares) public view returns (uint256 assets)

この関数を使用すると、ユーザーは現在のブロックでの償還の影響をシミュレートできます。

redeem

function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets)

この関数は、ownerから特定の数のsharesを償還し、assetsの原資産トークンをヴォールトからreceiverに送信します。

totalSupply

function totalSupply() public view returns (uint256)

流通している未償還のヴォールトシェアの総数を返します。

balanceOf

function balanceOf(address owner) public view returns (uint256)

ownerが現在保有しているヴォールトシェアの総量を返します。

インターフェースのマップ

Map of the ERC-4626 interface

イベント

Depositイベント

mintおよびdepositメソッドを介してトークンがヴォールトに入金されたときに発行されなければなりません

event Deposit(
    address indexed sender,
    address indexed owner,
    uint256 assets,
    uint256 shares
)

ここで、senderassetssharesに交換し、そのsharesownerに転送したユーザーです。

Withdrawイベント

redeemまたはwithdrawメソッドで入金者によってヴォールトからシェアが引き出されたときに発行されなければなりません

event Withdraw(
    address indexed sender,
    address indexed receiver,
    address indexed owner,
    uint256 assets,
    uint256 shares
)

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

参考文献