Chuyển đến nội dung chính
Change page

Tiêu chuẩn kho tiền được token hóa bất đồng bộ ERC-7540

Giới thiệu

ERC-7540 mở rộng Tiêu chuẩn kho tiền được token hóa ERC-4626 bằng cách bổ sung hỗ trợ cho các luồng nạp và quy đổi bất đồng bộ. Nó giới thiệu một mô hình yêu cầu-rồi-nhận (request-then-claim): người dùng trước tiên gửi một yêu cầu (khóa tài sản hoặc cổ phần của họ), sau đó yêu cầu nhận kết quả sau khi kho tiền đã xử lý nó.

Điều này là cần thiết khi một kho tiền không thể quyết toán ngay lập tức trong một giao dịch, ví dụ:

  • Các giao thức tài sản thế giới thực (RWA) như trái phiếu kho bạc được token hóa, tín dụng tư nhân và các tài sản khác có chu kỳ quyết toán T+1 hoặc T+2
  • Cho vay dưới mức thế chấp nơi các đánh giá tín dụng diễn ra ngoài chuỗi
  • Các chiến lược kho tiền chuỗi chéo nơi việc bắc cầu gây ra sự chậm trễ
  • Các token staking thanh khoản (LST) có thời gian hủy liên kết (unbonding)

Các kho tiền có thể chọn chỉ bất đồng bộ khi nạp, chỉ khi quy đổi, hoặc cả hai. Sự linh hoạt này cho phép các nhà phát triển kho tiền chỉ thêm các luồng bất đồng bộ ở nơi mà chiến lược cơ sở yêu cầu, trong khi vẫn giữ cho phía còn lại đồng bộ.

Điều kiện tiên quyết

Để hiểu rõ hơn về trang này, chúng tôi khuyên bạn trước tiên nên đọc về các tiêu chuẩn token, ERC-20, và ERC-4626.

ERC-4626 so với ERC-7540

Trong ERC-4626, một khoản nạp được quyết toán một cách nguyên tử: nhà đầu tư gửi tài sản và nhận lại cổ phần trong một giao dịch duy nhất.

ERC-4626 synchronous deposit flow

ERC-7540 chia quá trình này thành hai bước. Nhà đầu tư trước tiên gọi requestDeposit() để khóa tài sản, sau đó chờ người quản lý kho tiền xử lý yêu cầu. Khi đã được hoàn thành, nhà đầu tư gọi deposit() để yêu cầu nhận cổ phần của họ. Tỷ giá hối đoái được xác định tại thời điểm hoàn thành, không phải tại thời điểm yêu cầu.

ERC-7540 asynchronous deposit flow

Luồng quy đổi cũng hoạt động theo cách tương tự: requestRedeem() khóa cổ phần, và khi đã được hoàn thành, nhà đầu tư gọi redeem() để yêu cầu nhận tài sản.

Các hàm và tính năng của ERC-7540

ERC-7540 kế thừa toàn bộ giao diện ERC-4626 nhưng tái sử dụng deposit/mint/withdraw/redeem làm các hàm yêu cầu nhận. Các hàm mới requestDepositrequestRedeem xử lý bước yêu cầu ban đầu.

Mỗi yêu cầu di chuyển qua ba trạng thái: đang chờ xử lý (đã gửi, đang chờ xử lý), có thể yêu cầu nhận (đã hoàn thành và định giá), và đã yêu cầu nhận (nhà đầu tư đã thu thập cổ phần hoặc tài sản của họ).

Request lifecycle: Pending, Claimable, Claimed

Luồng yêu cầu nạp

requestDeposit

function requestDeposit(uint256 assets, address controller, address owner) external returns (uint256 requestId)

Chuyển assets từ owner vào kho tiền và gửi một yêu cầu nạp. Địa chỉ controller nhận quyền kiểm soát yêu cầu. Trả về một requestId xác định lô yêu cầu.

pendingDepositRequest

function pendingDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)

Trả về số lượng assets trong một yêu cầu nạp đang chờ xử lý (chưa thể yêu cầu nhận) cho controllerrequestId đã cho.

claimableDepositRequest

function claimableDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)

Trả về số lượng assets trong một yêu cầu nạp có thể yêu cầu nhận (đã hoàn thành nhưng chưa được yêu cầu nhận) cho controllerrequestId đã cho.

Yêu cầu nhận khoản nạp

Khi một yêu cầu nạp trở nên có thể yêu cầu nhận, người dùng gọi hàm ERC-4626 tiêu chuẩn deposit hoặc mint để yêu cầu nhận cổ phần của họ. Trong ERC-7540, các hàm này không còn chuyển tài sản nữa (điều đó đã xảy ra tại thời điểm yêu cầu). Chúng chỉ đúc cổ phần cho người nhận.

Luồng yêu cầu quy đổi

requestRedeem

function requestRedeem(uint256 shares, address controller, address owner) external returns (uint256 requestId)

Khóa shares từ owner và gửi một yêu cầu quy đổi. Địa chỉ controller nhận quyền kiểm soát yêu cầu.

pendingRedeemRequest

function pendingRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)

Trả về số lượng shares trong một yêu cầu quy đổi đang chờ xử lý cho controllerrequestId đã cho.

claimableRedeemRequest

function claimableRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)

Trả về số lượng shares trong một yêu cầu quy đổi có thể yêu cầu nhận cho controllerrequestId đã cho.

Yêu cầu nhận khoản quy đổi

Khi một yêu cầu quy đổi trở nên có thể yêu cầu nhận, người dùng gọi hàm ERC-4626 tiêu chuẩn redeem hoặc withdraw để yêu cầu nhận tài sản của họ.

Quản lý người vận hành

ERC-7540 bao gồm một mô hình người vận hành (từ ERC-6909 (mở trong tab mới)) cho phép các bên thứ ba quản lý các yêu cầu thay mặt cho người dùng.

setOperator

function setOperator(address operator, bool approved) external returns (bool)

Phê duyệt hoặc thu hồi operator để hành động thay mặt cho msg.sender đối với các yêu cầu nạp/quy đổi và yêu cầu nhận.

isOperator

function isOperator(address controller, address operator) external view returns (bool)

Trả về việc liệu operator có được phê duyệt để hành động thay mặt cho controller hay không.

ID yêu cầu

ID yêu cầu phân biệt giữa các lô yêu cầu khác nhau. Tất cả các yêu cầu chia sẻ cùng một requestId đều có thể thay thế cho nhau: chúng chuyển đổi giữa các trạng thái cùng nhau và nhận cùng một tỷ giá hối đoái.

Khi một kho tiền trả về requestId = 0 cho tất cả các yêu cầu, chỉ có địa chỉ controller mới phân biệt trạng thái yêu cầu. Nhiều yêu cầu từ cùng một bộ điều khiển sẽ được tổng hợp lại.

Sự kiện

Sự kiện DepositRequest

PHẢI được phát ra khi một yêu cầu nạp được gửi thông qua requestDeposit.

event DepositRequest(
    address indexed controller,
    address indexed owner,
    uint256 indexed requestId,
    address sender,
    uint256 assets
)

Sự kiện RedeemRequest

PHẢI được phát ra khi một yêu cầu quy đổi được gửi thông qua requestRedeem.

event RedeemRequest(
    address indexed controller,
    address indexed owner,
    uint256 indexed requestId,
    address sender,
    uint256 shares
)

Sự kiện OperatorSet

PHẢI được phát ra khi một người vận hành được phê duyệt hoặc thu hồi thông qua setOperator.

event OperatorSet(
    address indexed controller,
    address indexed operator,
    bool approved
)

Các hàm xem trước

Các hàm xem trước chỉ được hoàn nguyên đối với các luồng bất đồng bộ, bởi vì tỷ giá hối đoái không được biết cho đến khi yêu cầu được hoàn thành. Trong một kho tiền nạp bất đồng bộ, previewDepositpreviewMint PHẢI hoàn nguyên, trong khi previewRedeempreviewWithdraw tiếp tục hoạt động như trong ERC-4626 (và ngược lại đối với kho tiền quy đổi bất đồng bộ). Đây là một sự khác biệt chính về hành vi so với ERC-4626.

Đọc thêm