Norme de coffre-fort avec les jetons ERC-4626
Introduction
ERC-4626 est une norme pour optimiser et standardiser les paramètres techniques des coffres à rendement. Elle fournit une API standard pour les coffres à rendement tokenisé qui représentent les actions d'un seul jeton ERC-20 sous-jacent. L'ERC-4626 soulignent également une extension facultative pour les coffres à jetons utilisant l'ERC-20, offrant ainsi des fonctionnalités de base pour les dépôts, les retraits de jetons et la lecture des soldes.
Le rôle de l’ERC-4626 dans les coffres à rendement
Les marchés de prêts, les agrégateurs et les jetons intrinsèquement porteurs d'intérêts aident les utilisateurs à trouver le meilleur rendement pour leurs jetons de cryptomonnaie en exécutant différentes stratégies. Ces stratégies s'opèrent avec de légères variations, qui pourraient être source d'erreurs ou de perte de ressources de développement.
Les coffres de rendement ERC-4626 réduiront l'effort d'intégration et ouvriront l'accès au rendement de diverses applications avec peu d'efforts spécialisés de la part des développeurs, en créant des modèles d'implémentation plus cohérents et plus robustes.
Le jeton ERC-4626 est décrit dans les détails dans EIP-4626.
Extension de coffre-fort asynchrone (ERC-7540)
L'ERC-4626 est optimisé pour les dépôts et les rachats atomiques jusqu'à une certaine limite. Si la limite est atteinte, aucun nouveau dépôt ni rachat ne peut être soumis. Cette limitation ne fonctionne pas correctement pour les systèmes de contrats intelligents dont les actions asynchrones ou les retards sont une condition préalable à l'interface avec le coffre-fort (par exemple, les protocoles d'actifs du monde réel, les protocoles de prêts sous-collatéralisés, les protocoles de prêts entre chaînes, les jetons de mise en jeu liquides, ou les modules de sécurité d'assurance).
L'ERC-7540 étend l'utilité des coffre-forts ERC-4626 pour les cas d'utilisation asynchrones. L'interface de coffre-fort existante (deposit
/withdraw
/mint
/redeem
) est pleinement utilisée pour réclamer les demandes asynchrones.
L'extension ERC-7540 est décrite en détail dans ERC-7540.
Extension du coffre-fort multi-actifs (ERC-75757)
Parmi les cas d'utilisation qui ne sont pas pris en charge par l'ERC-4626, on trouve les coffres-forts qui possèdent plusieurs actifs ou points d'entrée, tels que les jetons de fournisseurs de liquidités (LP). Ces derniers sont généralement difficiles à manipuler ou non conformes en raison de l'exigence de l'ERC-4626 d'être lui-même un ERC-20.
L'ERC-7575 ajoute la prise en charge des coffre-forts comportant plusieurs actifs en externalisant l'implémentation du jeton ERC-20 à partir de l'implémentation de l'ERC-4626.
L'extension ERC-7575 est décrite en détail dans ERC-7575.
Pré-requis
Pour mieux comprendre cette page, nous vous recommandons de commencer par lire celles concernant les normes des jetons et ERC-20.
Fonctions et fonctionnalités ERC-4626 :
Méthodes
asset
1function asset() public view returns (address assetTokenAddress)
Cette fonction retourne l'adresse du jeton sous-jacent utilisé pour le coffre pour la comptabilité, le dépôt, le retrait.
totalAssets
1function totalAssets() public view returns (uint256)
Cette fonction retourne le montant total des actifs sous-jacents détenus dans le coffre.
convertToShares
1function convertToShares(uint256 assets) public view returns (uint256 shares)
Cette fonction retourne le montant de shares
qui seraient échangées par le coffre pour le montant d'assets
fourni.
convertToAssets
1function convertToAssets(uint256 shares) public view returns (uint256 assets)
Cette fonction retourne le montant d'assets
qui seraient échangés par le coffre pour le montant de shares
fourni.
maxDeposit
1function maxDeposit(address receiver) public view returns (uint256 maxAssets)
Cette fonction retourne le montant maximal des actifs sous-jacents qui peuvent être déposés en un seul appel de deposit
par le receiver
.
previewDeposit
1function previewDeposit(uint256 assets) public view returns (uint256 shares)
Cette fonction permet aux utilisateurs de simuler les effets de leur dépôt sur le bloc actuel.
dépôt
1function deposit(uint256 assets, address receiver) public returns (uint256 shares)
Cette fonction dépose les assets
de jetons sous-jacents dans le coffre et accorde la propriété de shares
au receiver
.
maxMint
1function maxMint(address receiver) public view returns (uint256 maxShares)
Cette fonction retourne le nombre maximum d'actions qui peuvent être produites en un seul appel mint
par le receiver
.
previewMint
1function previewMint(uint256 shares) public view returns (uint256 assets)
Cette fonction permet aux utilisateurs de simuler les effets de leur frappe sur le bloc actuel.
frapper
1function mint(uint256 shares, address receiver) public returns (uint256 assets)
Cette fonction produit exactement shares
actions du coffre au receiver
en déposant des assets
de jetons sous-jacents.
maxWithdraw
1function maxWithdraw(address owner) public view returns (uint256 maxAssets)
Cette fonction retourne le montant maximal des actifs sous-jacents qui peuvent être retirés du solde de l'owner
en un seul appel à la fonction withdraw
.
previewWithdraw
1function previewWithdraw(uint256 assets) public view returns (uint256 shares)
Cette fonction permet aux utilisateurs de simuler les effets de leur retrait sur le bloc actuel.
retrait
1function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares)
Cette fonction détruit shares
de l'owner
et envoie exactement assets
jeton depuis le coffre au receiver
.
maxRedeem
1function maxRedeem(address owner) public view returns (uint256 maxShares)
Cette fonction retourne le montant maximum d'actions qui peuvent être rachetées du solde de l'orner
par un appel à la fonction redeem
.
previewRedeem
1function previewRedeem(uint256 shares) public view returns (uint256 assets)
Cette fonction permet aux utilisateurs de simuler les effets de leur rachat sur le bloc actuel.
redeem
1function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets)
Cette fonction rachète un nombre spécifique de shares
de l'owner
et envoie des assets
de jeton sous-jacent du coffre au receiver
.
totalSupply
1function totalSupply() public view returns (uint256)
Renvoie le nombre total d'actions non rachetées en circulation.
balanceOf
1function balanceOf(address owner) public view returns (uint256)
Renvoie le nombre total d'actions détenues par l'owner
.
Plan de l'interface
Évènements
Événement de dépôt
DOIT être émis lorsque des jetons sont déposés dans le coffre-fort via les méthodes mint
et deposit
.
1event Deposit(2 address indexed sender,3 address indexed owner,4 uint256 assets,5 uint256 shares6)
Où sender
est l'utilisateur qui a échangé assets
contre shares
, et a transféré ces shares
à l'owner
.
Évènement de retrait
DOIT être déclenché lorsque les actions sont retirées du coffre par un déposant via les méthodes redeem
ou withdraw
.
1event Withdraw(2 address indexed sender,3 address indexed receiver,4 address indexed owner,5 uint256 assets,6 uint256 shares7)
Où sender
est l'utilisateur qui a déclenché le retrait et échangé shares
, détenues par owner
, contre assets
. receiver
est l'utilisateur qui a reçu les assets
retirés.