Tháng 6 năm 2022, tôi đang debug một hợp đồng Uniswap V2 cho một dự án nhỏ thì thấy lượng giao dịch stETH tăng vọt. Trên màn hình, cặp stETH/ETH trên Curve giảm xuống 0.94 — một con số bất thường. Nhiều người gọi đó là 'sự kiện bán tháo' của Celsius hay 3AC, nhưng tôi muốn nhìn vào mã nguồn. Vì mã nguồn không bao giờ nói dối.
Bối cảnh: Lido và stETH hoạt động thế nào?
Lido là giao thức liquid staking lớn nhất trên Ethereum. Khi bạn stake ETH qua Lido, bạn nhận lại stETH (staked ETH) – một token đại diện cho ETH đã stake của bạn, cộng với phần thưởng tích lũy. stETH được thiết kế để neo giá 1:1 với ETH, vì giá trị của nó dựa trên ETH cơ bản. Tuy nhiên, stETH không phải là ETH. Bạn không thể dùng stETH để thanh toán gas; bạn phải unwrap nó. Trên thị trường thứ cấp, stETH được giao dịch qua Curve pool, nơi thanh khoản chủ yếu là do các người dùng DeFi cung cấp. Và đó là nơi mọi chuyện bắt đầu rạn nứt.
Phân tích cốt lõi: Cơ chế peg và điểm yếu kỹ thuật
Mã nguồn là văn hóa, không chỉ là code. Để hiểu tại sao stETH mất peg, tôi phải mở Curve pool trên Etherscan. Curve sử dụng mô hình StableSwap, được thiết kế để giữ giá ổn định giữa hai tài sản tương tự. Nhưng mô hình này có một giới hạn: thanh khoản trong pool có thể bị cạn kiệt nếu một bên rút ra quá nhiều.
Khi Celsius bắt đầu rút stETH khỏi Curve pool để trả nợ, pool mất cân bằng. Số lượng stETH trong pool giảm, trong khi ETH tăng. Điều này tạo ra chênh lệch giá. Nhưng vấn đề thực sự không nằm ở Celsius hay 3AC – đó là triệu chứng. Vấn đề nằm ở chỗ stETH phụ thuộc vào thị trường thứ cấp để duy trì peg nhưng không có cơ chế arbitrage tự động nào đủ mạnh để khôi phục cân bằng khi thanh khoản cạn.
Tôi nhớ lại lần kiểm tra hợp đồng Uniswap V2 cho một giao thức nhỏ. Họ cũng dùng mô hình AMM tương tự. Khi tôi mô phỏng sự kiện rút một lượng lớn thanh khoản, giá giảm mạnh. Không có cơ chế bảo vệ. Điều đó cho thấy: thanh khoản là lớp băng mỏng che giấu rủi ro tài chính thực sự.
Một điểm nữa: stETH không có tính thanh khoản tức thời. Để unwrap stETH về ETH, bạn phải chờ epoch (khoảng 24-48 giờ) hoặc trả phí trên thị trường thứ cấp. Các quỹ đầu tư lớn như Celsius cần tiền mặt ngay lập tức – họ không thể chờ. Điều này tạo ra một tình huống: nhu cầu ETH gấp gáp đẩy stETH xuống dưới peg, và không có ai có thể arbitrage đủ nhanh vì volume quá lớn.
Góc nhìn phản trực giác: Liquid staking không phải là giải pháp, mà là một dạng rủi ro mới
Nhiều người nghĩ rằng liquid staking là cách để tăng vốn hiệu quả. Nhưng sự kiện stETH mất peg cho thấy một điều khác: liquid staking tạo ra một lớp phụ thuộc tài chính mới.
Khi bạn stake ETH qua Lido, bạn đang giao phó tài sản của mình cho một hợp đồng thông minh. Nhưng khi bạn dùng stETH làm tài sản thế chấp trong DeFi, bạn phụ thuộc vào giá stETH được neo. Nếu peg bị phá vỡ, hệ thống thế chấp của bạn có thể sụp đổ. Đây là hệ quả của việc xây dựng rủi ro trên nền tảng rủi ro.
Từ kinh nghiệm audit của tôi, tôi nhận thấy một điểm mù: nhiều giao thức DeFi không tính đến khả năng stETH mất peg khi thiết kế thanh khoản. Họ cho rằng: 'stETH = ETH'. Nhưng mã nguồn không hỗ trợ giả định đó. Curve pool không phải là một oracle giá; nó là một bể thanh khoản. Khi một bên rút quá nhiều, giá sẽ lệch. Việc coi stETH như ETH là một lỗi trong thiết kế rủi ro.

Kết luận: Bài học về sự phụ thuộc
Sự kiện stETH mất peg năm 2022 không phải là một tai nạn. Nó là kết quả của việc xây dựng các lớp thanh khoản chồng lên nhau mà không có đủ buffer. Nếu không có cơ chế dự phòng, bất kỳ cú shock thanh khoản nào cũng có thể tạo ra hiệu ứng domino.