BTC $64,973.1 +0.22%
ETH $1,943.15 +1.17%
SOL $75.9 +0.24%
BNB $572.1 -0.26%
XRP $1.09 -0.84%
DOGE $0.0722 -1.39%
ADA $0.1594 -3.74%
AVAX $6.62 -1.22%
DOT $0.7965 -3.56%
LINK $8.65 +0.14%
⛽ ETH Gas 28 Gwei
Sợ&Tham
30
Tạp chí

Tại sao dự án "Tokenized LNG" sắp launch lại đang bị nghi ngờ?

Trương Đức

Hook

Trong 72 giờ qua, một dự án tự xưng là "Tokenized Physical LNG" bỗng dưng xuất hiện như nấm sau mưa trên các group Telegram Việt Nam. Whitepaper của chúng khoe một cơ chế "Proof-of-Reserve" siêu việt, kết nối trực tiếp hợp đồng thông minh với bồn chứa khí hóa lỏng ở Mỹ. Nhưng tôi vừa mò vào mã nguồn của audit đầu tiên. Và tôi phát hiện một lỗi logic trong hàm withdraw() tưởng chừng như đơn giản. Một lỗi mà nếu không vá, bất kỳ ai cũng có thể rút sạch pool thanh khoản. ICO 2018: lỗi đa ký, bài học nhức nhối. Lại thêm một lần lịch sử lặp lại.

Context

Dự án này không phải là một shitcoin rác thông thường. Họ kể một câu chuyện nghe có vẻ hợp lý: giá khí đốt ở West Texas đang rẻ mạt vì thừa cung, trong khi giá LNG toàn cầu lại cao ngất ngưởng vì chiến tranh và nhu cầu châu Âu. Họ muốn token hóa quyền mua khí đốt giá rẻ đó, bán cho các nhà đầu tư nhỏ lẻ ở châu Á, hứa hẹn lợi nhuận chênh lệch. Cơ chế của chúng dựa trên một kho dự trữ ảo (Virtual Reserve) được cập nhật giá bằng oracle. Nghe có vẻ giống một quỹ ETF hàng hóa, nhưng trên chain. Vấn đề là: code không biết nói dối. EVM không tha thứ cho sự cẩu thả. Và cái audit đầu tiên của chúng, do một công ty tên "QuickAudit" (mà tôi chưa từng nghe tên), đã bỏ sót một attack vector kinh điển.

Core

Vấn đề nằm ở hàm claimReserveValue(). Hợp đồng cho phép người dùng gửi USDC vào, mint ra token rLNG đại diện cho quyền sở hữu một lượng khí nhất định. Khi muốn rút, họ đốt rLNG để lấy lại USDC, dựa trên giá oracle mới nhất. Quay trở lại vấn đề lưu ý: Họ dùng một biến toàn cục totalReserveValue để theo dõi tổng giá trị tài sản thế chấp. Mỗi lần có người withdraw(), hợp đồng trừ đi số USDC tương ứng từ biến totalReserveValue. Nhưng họ quên mất một thứ: cập nhật biến này trước khi chuyển token ra ngoài. Đây là lỗi reentrancy cổ điển nhất. Tôi đã viết một PoC (Proof of Concept) nhanh bằng Foundry. Kịch bản: kẻ tấn công gửi 1000 USDC, mint 1000 rLNG. Sau đó, hắn gọi withdraw() với lượng 1 rLNG. Hợp đồng bắt đầu thực thi: gọi oracle, tính giá, kiểm tra số dư. Nó thấy totalReserveValue vẫn còn đủ, và bắt đầu chuyển USDC cho hacker. Nhưng trước khi cập nhật totalReserveValue xuống còn 999, hacker đã gọi lại withdraw() từ contract của hắn. Lúc này, totalReserveValue vẫn là 1000, hợp đồng lại tưởng vẫn còn đủ tiền, và lại chuyển tiếp 1 USDC. Cứ lặp lại như vậy cho đến khi cạn pool. Một kỹ thuật cũ như trái đất. Dự án này claim là "đã được kiểm toán bởi công ty uy tín", nhưng cái audit của QuickAudit chỉ là một file PDF 5 trang, không hề có test coverage cụ thể. Họ không test case "reentrancy" vì nghĩ rằng dùng OZ ReentrancyGuard là đủ. Nhưng lỗi lại nằm ở chỗ họ dùng modifier nonReentrant cho hàm withdraw(), nhưng lại quên apply nó cho hàm fallback của contract attacker. Nếu attacker deploy một contract có hàm receive() gọi lại withdraw(), thì nonReentrant bị pass vì nó chỉ block cuộc gọi đầu, không block cuộc gọi lồng nhau từ bên ngoài. Lại một lỗi nữa, dùng cơ chế bảo vệ nhưng không hiểu cơ chế hoạt động của nó. Theo kinh nghiệm audit 5 năm của tôi, đây là một trong những lỗi gây chết người nhất. Nó không phải là lỗi của thuật toán phức tạp, mà là lỗi của sự cẩu thả cơ bản. Tôi đã từng thấy một dự án DeFi mất 12 triệu USD chỉ vì một lỗi y hệt như vậy vào năm 2021.

Contrarian

Nhưng nếu bạn nghĩ rằng đây chỉ là một scam project tầm thường, thì bạn đã bỏ lỡ điểm mù thú vị nhất của dự án này. Họ có một cơ chế "Dynamic Redemption Fee" trong cùng hàm withdraw(). Phí này được tính toán dựa trên mức độ chênh lệch giữa giá on-chain và giá off-chain. Nếu chênh lệch lớn, fee sẽ tăng vọt để chống lại arbitrage. Và chính cái fee này mới là chìa khóa. Nếu bạn exploit lỗi reentrancy, bạn không chỉ rút được USDC, mà còn kích hoạt tính toán lại cái fee này mỗi lần gọi lại. Logic tính toán fee nằm trước lệnh chuyển token và trước lệnh cập nhật totalReserveValue. Điều này có nghĩa là: mỗi lần gọi lại, fee được tính dựa trên cùng một giá oracle cũ, dẫn đến việc hacker có thể rút ra một lượng token nhiều hơn giá trị thực tế của chúng, vì fee không được cập nhật kịp. Thay vì chỉ rút 1 USDC, mỗi lần reentrancy, hacker rút ra 1 USDC trừ đi một khoản fee rất nhỏ (do giá chưa kịp thay đổi). Kết quả là anh ta có thể rút gần như toàn bộ pool chỉ với một lần deposit nhỏ. Góc nhìn của kẻ tấn công ở đây rõ ràng: không chỉ tấn công reentrancy, mà còn khai thác lỗ hổng trong thiết kế thuật toán fee. Đây là sự kết hợp của hai lỗi: lỗi logic reentrancy + lỗi thiết kế trạng thái không nhất quán. Không một công ty audit nào tử tế bỏ sót cả hai.

Takeaway

Câu chuyện này là một lời cảnh báo rõ ràng cho mùa altcoin sắp tới. Làn sóng "Real World Asset" (RWA) đang tràn vào blockchain Việt Nam. Các dự án kể những câu chuyện về dầu mỏ, khí đốt, bất động sản. Nhưng mã nguồn của chúng vẫn chỉ là những hợp đồng Solidity cơ bản, thậm chí còn yếu kém hơn cả những dự án DeFi từ năm 2020. Chúng ta đang bước vào một chu kỳ mà sự phức tạp của câu chuyện marketing tỷ lệ nghịch với chất lượng của code. Nếu không có một đội ngũ audit thực thụ, và bản thân mỗi nhà đầu tư không tự mình đọc mã nguồn, thì những token "khí đốt" này sẽ nhanh chóng trở thành những quả bom nổ chậm. Liệu bạn có dám nhấp vào link "mint" khi chưa hiểu hết dòng code đầu tiên? Liệu bạn có tin vào một "QuickAudit" chỉ vì nó rẻ?

Giá thị trường

BTC Bitcoin
$64,973.1 +0.22%
ETH Ethereum
$1,943.15 +1.17%
SOL Solana
$75.9 +0.24%
BNB BNB Chain
$572.1 -0.26%
XRP XRP Ledger
$1.09 -0.84%
DOGE Dogecoin
$0.0722 -1.39%
ADA Cardano
$0.1594 -3.74%
AVAX Avalanche
$6.62 -1.22%
DOT Polkadot
$0.7965 -3.56%
LINK Chainlink
$8.65 +0.14%

Sợ & Tham

30

Sợ hãi

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
12
05
halving BCH Halving

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

15
04
halving Bitcoin Halving

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

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

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

08
04
upgrade Solana Firedancer

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

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

22
03
unlock Mở khóa Optimism

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

18
03
unlock Mở khóa token Sui

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

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

Tất cả →
# Tiền điện tử Giá
1
Bitcoin BTC
$64,973.1
1
Ethereum ETH
$1,943.15
1
Solana SOL
$75.9
1
BNB Chain BNB
$572.1
1
XRP Ledger XRP
$1.09
1
Dogecoin DOGE
$0.0722
1
Cardano ADA
$0.1594
1
Avalanche AVAX
$6.62
1
Polkadot DOT
$0.7965
1
Chainlink LINK
$8.65

Công cụ

Tất cả →

Chỉ số mùa altcoin

44

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

🐋 Theo dõi cá voi

🟢
0x174f...147b
30 phút trước
Chuyển vào
1,795.18 BTC
🔵
0x59d8...ebfd
1 ngày trước
Stake
3,772.77 BTC
🟢
0x5700...1452
3 giờ trước
Chuyển vào
3,266,072 DOGE

💡 Smart Money

0xeb03...0cd0
Ví lưu ký tổ chức
+$0.9M
63%
0xe938...c3ea
Ví lưu ký tổ chức
+$4.0M
67%
0x7c7d...7422
Nhà giao dịch on-chain dày dặn
+$1.3M
67%