Ana içeriğe atla
Change page

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-4626 synchronous deposit flow

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.

ERC-7540 asynchronous deposit flow

İ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ı).

Request lifecycle: Pending, Claimable, Claimed

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.

Daha fazla bilgi