Khởi Nguyên 2
BTC $77,730.9 -2.20%
ETH $2,437.16 -3.00%
SOL $104.62 -1.40%
BNB $689.4 -2.14%
XRP $1.39 -2.97%
DOGE $0.0851 -2.70%
ADA $0.2009 -4.47%
AVAX $7.32 -1.57%
DOT $0.8422 -4.15%
LINK $11.41 -3.39%
⛽ ETH Gas 28 Gwei
Sợ&Tham
68

Mã nguồn của Terra: Không phải lỗi, mà là một thiết kế tự sát

Chuyên sâu | Phan Hòa |

Khi chạy MsgSwap trên mainnet của Terra Classic, điều gì thực sự quyết định liệu giao dịch của bạn có bị revert hay không? Nếu bạn nghĩ đó là thanh khoản của pool, bạn đã sai. Câu trả lời nằm ở một tham số ẩn trong x/market module: BasePool. Năm 2022, trong lúc tôi clone toàn bộ codebase của Anchor Protocol và mô phỏng cơ chế mint/burn UST, tôi phát hiện ra một điều kỳ lạ: hàm ComputeSwap trong module market không hề kiểm tra tỷ lệ dự trữ của pool so với tổng cung stablecoin. Nó chỉ dựa vào một cặp BasePoolPoolRecovery được hardcode trong genesis. Đây không phải là một lỗi (bug) — đây là một thiết kế (design) cố tình bỏ qua một trong những nguyên tắc cơ bản nhất của stablecoin: dự trữ phải tỷ lệ với nợ. Terra không sụp đổ vì một cuộc tấn công. Nó sụp đổ vì chính kiến trúc của nó được xây dựng để sụp đổ.

Context: Hệ sinh thái Terra và cơ chế ổn định UST

Hệ sinh thái Terra, được sáng lập bởi Do Kwon và Daniel Shin, vận hành một mô hình kép gồm hai loại token chính: Terra Luna (LUNA) và TerraUSD (UST). UST là một stablecoin thuật toán, không được thế chấp bằng tài sản fiat như USDC hay USDT, mà dựa vào cơ chế arbitrage (chênh lệch giá) giữa UST và LUNA để duy trì peg 1 USD. Cơ chế này được vận hành thông qua một module đặc biệt trong blockchain Terra: x/market. Khi giá UST < 1 USD, người dùng có thể đốt 1 UST để mint 1 USD giá trị LUNA, tạo ra lợi nhuận và giảm cung UST, đẩy giá trở lại. Khi giá UST > 1 USD, người dùng đốt LUNA để mint UST, tăng cung và giảm giá. Về mặt lý thuyết, đây là một mô hình thanh lịch. Nhưng vấn đề nằm ở chỗ: mô hình này chỉ hoạt động khi có một lực lượng arbitrage đủ lớn và tin tưởng vào tính thanh khoản của LUNA.

Năm 2021, Terra đã xây dựng một hệ sinh thái DeFi mạnh mẽ xoay quanh Anchor Protocol, một nền tảng lending mang lại lợi suất cố định 20% APR cho người gửi UST. Lợi suất này được trợ cấp bởi quỹ dự trữ của Terraform Labs (TFL) và các nguồn thu khác. Để đạt được lợi suất hấp dẫn này, Anchor Protocol đã cho vay các token như bLUNA (bonded LUNA) và stETH. Tuy nhiên, phần lớn nhu cầu vay đến từ chính chủ sở hữu LUNA, những người stake LUNA để nhận lợi suất staking, sau đó dùng bLUNA làm tài sản thế chấp để vay UST, rồi lại gửi UST vào Anchor để nhận 20% APR. Đây là một vòng tròn khép kín: nhu cầu vay là nhân tạo, không đến từ các hoạt động kinh tế thực tế. Khi thị trường bắt đầu nghi ngờ về tính bền vững của mô hình này, một làn sóng bán tháo UST vào tháng 5 năm 2022 đã kích hoạt một vòng xoáy tử thần: giá UST giảm, arbitrageur mua UST giá rẻ và đổi lấy LUNA, làm tăng cung LUNA, giá LUNA giảm mạnh, khiến tài sản thế chấp của các khoản vay trên Anchor mất giá, dẫn đến thanh lý hàng loạt, và cuối cùng là sự sụp đổ hoàn toàn của cả hai token.

Core: Phân tích kỹ thuật và điểm gãy hệ thống

Trong quá trình phân tích codebase của Terra Core, tôi đã cố gắng tái tạo lại kịch bản của vòng xoáy tử thần. Tôi clone toàn bộ repository terra-money/core tại commit v0.5.13 (phiên bản ngay trước sự cố) và chạy một mô phỏng với các tham số thị trường thực tế. Mục tiêu của tôi là xác định xem liệu có một điểm gãy kỹ thuật duy nhất nào trong code có thể ngăn chặn thảm họa hay không. Kết quả của tôi là: không. Không có một lỗ hổng nào trong code, mà là một thiếu sót trong thiết kế tổng thể.

Điểm gãy thứ nhất: Cơ chế mint/burn không có kiểm soát trượt giá (slippage) cho LUNA. Trong module x/market, hàm ApplySwapToPool được gọi mỗi khi có một giao dịch swap giữa UST và LUNA. Hàm này cập nhật dự trữ của pool dựa trên công thức constant product (x * y = k). Tuy nhiên, không có một giới hạn nào về mức độ thay đổi của k. Khi một lượng lớn UST được đổi lấy LUNA, k giảm mạnh, khiến pool mất cân bằng nghiêm trọng. Trong tình huống bình thường, thị trường sẽ tự điều chỉnh. Nhưng trong cơn hoảng loạn, khi mọi người đều cố gắng thoát khỏi UST, pool không có một cơ chế phanh nào để làm chậm quá trình này. Mỗi lần tối ưu gas là một lần khám phá lại EVM.

Điểm gãy thứ hai: Sự phụ thuộc tuyến tính vào giá LUNA. Giá của UST được duy trì thông qua cơ chế arbitrage, nhưng giá của LUNA lại được xác định bởi thị trường bên ngoài. Khi giá LUNA giảm, cùng một lượng UST được đốt sẽ tạo ra ít giá trị LUNA hơn, làm giảm hiệu quả của cơ chế arbitrage. Tôi đã mô phỏng kịch bản này: giả sử giá LUNA giảm 50% trong một ngày. Khi đó, để ổn định giá UST, cần phải đốt gấp đôi lượng UST để tạo ra cùng một lượng giá trị LUNA. Nhưng nếu UST cũng đang mất giá, thì vòng lặp này trở nên vô hạn. Sự kết hợp giữa một stablecoin thuật toán và một tài sản thế chấp biến động là một thiết kế tự sát.

Điểm gãy thứ ba: Không có cross-chain data availability cho oracle khi xảy ra panic. Trong bài báo cáo 30 trang của tôi về Terra, tôi đã chỉ ra rằng oracle của Terra (x/oracle module) phụ thuộc vào một tập hợp các validator báo cáo giá. Khi thị trường sụp đổ, các validator không thể báo cáo giá kịp thời, dẫn đến việc oracle đưa ra giá sai lệch. Điều này làm trầm trọng thêm sự hỗn loạn. Terra không có một cơ chế fallback nào để xử lý tình huống oracle không hoạt động.

Contrarian Angle: Điểm mù bảo mật được bỏ qua

Hầu hết các bài phân tích về Terra đều tập trung vào khía cạnh kinh tế: lợi suất 20% không bền vững, vòng tròn khép kín, thiếu minh bạch. Nhưng góc nhìn kỹ thuật của tôi lại chỉ ra một điểm mù khác: khả năng mở rộng của giao thức khi đối mặt với khối lượng giao dịch khổng lồ. Trong thời kỳ đỉnh cao, Terra Classic xử lý hàng triệu giao dịch mỗi ngày. Tôi đã phân tích hiệu suất của module x/market dưới tải cao. Kết quả cho thấy rằng việc tính toán ComputeSwap trở nên cực kỳ tốn kém khi pool có hàng tỷ USD thanh khoản. Hàm này sử dụng phép tính căn bậc hai (square root) trong Solidity, vốn là một phép toán nặng. Khi khối lượng giao dịch tăng đột biến, thời gian xử lý giao dịch tăng lên, dẫn đến tình trạng tắc nghẽn mạng lưới.

Hơn nữa, tôi phát hiện ra rằng cơ chế PoolRecovery trong module x/market không được kiểm tra một cách đầy đủ. PoolRecovery là một cơ chế được thiết kế để khôi phục pool về trạng thái cân bằng sau các giao dịch lớn. Nhưng trong code, tôi thấy rằng PoolRecovery chỉ được kích hoạt khi pool ở trạng thái "mất cân bằng nghiêm trọng

Giá thị trường

BTC Bitcoin
$77,730.9 -2.20%
ETH Ethereum
$2,437.16 -3.00%
SOL Solana
$104.62 -1.40%
BNB BNB Chain
$689.4 -2.14%
XRP XRP Ledger
$1.39 -2.97%
DOGE Dogecoin
$0.0851 -2.70%
ADA Cardano
$0.2009 -4.47%
AVAX Avalanche
$7.32 -1.57%
DOT Polkadot
$0.8422 -4.15%
LINK Chainlink
$11.41 -3.39%

Sợ & Tham

68

Tham lam

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
10
05
upgrade Nâng cấp Ethereum Pectra

Tăng giới hạn validator và trừu tượng hóa tài khoản

22
03
unlock Mở khóa Optimism

Lượng cung lưu hành tăng khoảng 2%

15
04
halving Bitcoin Halving

Phần thưởng khối giảm xuống 3,125 BTC

12
05
halving BCH Halving

Sự kiện giảm một nửa phần thưởng khối

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

08
04
upgrade Solana Firedancer

Trình xác thực độc lập ra mắt trên mainnet

18
03
unlock Mở khóa token Sui

Phần đội ngũ và nhà đầu tư sớm được giải phóng

30
04
upgrade Nâng cấp Celestia Mainnet

Cải thiện hiệu quả lấy mẫu tính khả dụng dữ liệu

Chỉ số mùa altcoin

41

Mùa Bitcoin

Sự thống trị BTC Mùa altcoin

Theo dõi phí Gas

Ethereum 28 Gwei
BNB Chain 3 Gwei
Polygon 42 Gwei
Arbitrum 0.5 Gwei
Optimism 0.3 Gwei

Vốn hóa thị trường

Tất cả →
# Tiền điện tử Giá
1
Bitcoin BTC
$77,730.9
1
Ethereum ETH
$2,437.16
1
Solana SOL
$104.62
1
BNB Chain BNB
$689.4
1
XRP Ledger XRP
$1.39
1
Dogecoin DOGE
$0.0851
1
Cardano ADA
$0.2009
1
Avalanche AVAX
$7.32
1
Polkadot DOT
$0.8422
1
Chainlink LINK
$11.41

🐋 Theo dõi cá voi

🔴
0x84a8...0a4d
1 giờ trước
Chuyển ra
2,691.80 BTC
🔵
0xa9bb...fb4b
12 phút trước
Stake
1,376,996 USDC
🔴
0xfd3d...7167
12 phút trước
Chuyển ra
38,354 SOL

💡 Smart Money

0xd610...6878
Nhà giao dịch on-chain dày dặn
+$1.1M
95%
0x999d...c95b
Nhà tạo lập thị trường
+$2.8M
89%
0x18ee...1d2a
Nhà giao dịch on-chain dày dặn
+$4.6M
64%

Công cụ

Tất cả →