ERC-7540 Asenkron Tokenleştirilmiş Kasa Standardı
Giriş
ERC-7540, asenkron yatırma ve itfa akışları için destek ekleyerek ERC-4626 Tokenleştirilmiş Kasa Standardını genişletir. Bir istek-sonra-talep modeli sunar: kullanıcılar önce bir istek gönderir (varlıklarını veya paylarını kilitleyerek), ardından kasa bunu işledikten sonra sonucu talep ederler.
Bu, bir kasa tek bir işlemde anında uzlaşma sağlayamadığında gereklidir, örneğin:
- Tokenleştirilmiş hazineler, özel krediler ve T+1 veya T+2 uzlaşma döngülerine sahip diğer varlıklar gibi gerçek dünya varlıkları (RWA) protokolleri
- Kredi değerlendirmelerinin zincir dışı gerçekleştiği eksik teminatlandırılmış borç verme
- Köprülemenin gecikmelere yol açtığı zincirler arası kasa stratejileri
- Kilit açma süreleri olan likit staking tokenleri (LST)
Kasalar yalnızca yatırma işlemlerinde, yalnızca itfa işlemlerinde veya her ikisinde asenkron olmayı seçebilir. Bu esneklik, kasa geliştiricilerinin asenkron akışları yalnızca temel strateji gerektirdiğinde eklemesine olanak tanırken, diğer tarafı senkron tutar.
Ön Koşullar
Bu sayfayı daha iyi anlamak için öncelikle token standartları, ERC-20 ve ERC-4626 hakkında okumanızı öneririz.
ERC-4626 ve ERC-7540 Karşılaştırması
ERC-4626'da bir yatırma işlemi atomik olarak uzlaşır: yatırımcı varlıkları gönderir ve tek bir işlemde paylarını geri alır.
ERC-7540 bunu iki adıma ayırır. Yatırımcı önce varlıkları kilitlemek için requestDeposit() çağrısı yapar, ardından kasa yöneticisinin isteği işlemesini bekler. Yerine getirildiğinde, yatırımcı paylarını talep etmek için deposit() çağrısı yapar. Döviz kurları istek anında değil, yerine getirilme anında belirlenir.
İtfa akışı da aynı şekilde çalışır: requestRedeem() payları kilitler ve yerine getirildiğinde yatırımcı varlıkları talep etmek için redeem() çağrısı yapar.
ERC-7540 Fonksiyonları ve Özellikleri
ERC-7540, tam ERC-4626 arayüzünü devralır ancak deposit/mint/withdraw/redeem fonksiyonlarını talep fonksiyonları olarak yeniden amaçlandırır. Yeni requestDeposit ve requestRedeem fonksiyonları ilk istek adımını yönetir.
Her istek üç durumdan geçer: beklemede (gönderildi, işlenmeyi bekliyor), talep edilebilir (yerine getirildi ve fiyatlandırıldı) ve talep edildi (yatırımcı paylarını veya varlıklarını aldı).
Yatırma isteği akışı
requestDeposit
function requestDeposit(uint256 assets, address controller, address owner) external returns (uint256 requestId)
owner adresinden kasaya assets transfer eder ve yatırma isteği gönderir. controller adresi isteğin kontrolünü alır. İstek grubunu tanımlayan bir requestId döndürür.
pendingDepositRequest
function pendingDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)
Belirtilen controller ve requestId için beklemede olan (henüz talep edilebilir olmayan) bir yatırma isteğindeki assets miktarını döndürür.
claimableDepositRequest
function claimableDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)
Belirtilen controller ve requestId için talep edilebilir (yerine getirilmiş ancak henüz talep edilmemiş) bir yatırma isteğindeki assets miktarını döndürür.
Yatırmaları talep etme
Bir yatırma isteği talep edilebilir hale geldiğinde, kullanıcı paylarını talep etmek için standart ERC-4626 deposit veya mint fonksiyonunu çağırır. ERC-7540'ta bu fonksiyonlar artık varlık transfer etmez (bu zaten istek anında gerçekleşmiştir). Sadece alıcıya pay basarlar.
İtfa isteği akışı
requestRedeem
function requestRedeem(uint256 shares, address controller, address owner) external returns (uint256 requestId)
owner adresinden shares kilitler ve itfa isteği gönderir. controller adresi isteğin kontrolünü alır.
pendingRedeemRequest
function pendingRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)
Belirtilen controller ve requestId için beklemede olan bir itfa isteğindeki shares miktarını döndürür.
claimableRedeemRequest
function claimableRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)
Belirtilen controller ve requestId için talep edilebilir bir itfa isteğindeki shares miktarını döndürür.
İtfaları talep etme
Bir itfa isteği talep edilebilir hale geldiğinde, kullanıcı varlıklarını talep etmek için standart ERC-4626 redeem veya withdraw fonksiyonunu çağırır.
Operatör yönetimi
ERC-7540, üçüncü tarafların bir kullanıcı adına istekleri yönetmesine olanak tanıyan bir operatör modeli (ERC-6909 (yeni sekmede açılır)'dan) içerir.
setOperator
function setOperator(address operator, bool approved) external returns (bool)
Yatırma/itfa istekleri ve talepleri için msg.sender adına hareket etmesi için operator adresini onaylar veya iptal eder.
isOperator
function isOperator(address controller, address operator) external view returns (bool)
operator adresinin controller adına hareket etmesinin onaylanıp onaylanmadığını döndürür.
İstek Kimlikleri
İstek kimlikleri, farklı istek gruplarını birbirinden ayırır. Aynı requestId değerini paylaşan tüm istekler mislidir: durumlar arasında birlikte geçiş yaparlar ve aynı döviz kurunu alırlar.
Bir kasa tüm istekler için requestId = 0 döndürdüğünde, yalnızca controller adresi istek durumunu ayırt eder. Aynı denetleyiciden gelen birden fazla istek birleştirilir.
Olaylar
DepositRequest Olayı
Bir yatırma isteği requestDeposit aracılığıyla gönderildiğinde yayınlanmalıdır.
event DepositRequest(
address indexed controller,
address indexed owner,
uint256 indexed requestId,
address sender,
uint256 assets
)
RedeemRequest Olayı
Bir itfa isteği requestRedeem aracılığıyla gönderildiğinde yayınlanmalıdır.
event RedeemRequest(
address indexed controller,
address indexed owner,
uint256 indexed requestId,
address sender,
uint256 shares
)
OperatorSet Olayı
Bir operatör setOperator aracılığıyla onaylandığında veya iptal edildiğinde yayınlanmalıdır.
event OperatorSet(
address indexed controller,
address indexed operator,
bool approved
)
Önizleme fonksiyonları
Önizleme fonksiyonları yalnızca asenkron olan akışlar için geri almalıdır, çünkü döviz kuru istek yerine getirilene kadar bilinmez. Asenkron yatırmalı bir kasada, previewDeposit ve previewMint geri almalıdır, previewRedeem ve previewWithdraw ise ERC-4626'daki gibi çalışmaya devam eder (ve asenkron itfalı bir kasa için tam tersi). Bu, ERC-4626'dan önemli bir davranışsal farktır.