Nếu bạn chưa audit kỹ layer cuối cùng của một giao thức PoS, đừng vội gọi nó an toàn.
Năm 2019, tôi nhận lời kiểm tra hợp đồng staking của TomoChain – một dự án Layer 1 Việt Nam đang chuẩn bị mainnet. 8.000 dòng Solidity, 12 validator, hàng triệu USD TVL cam kết.
Tôi tìm thấy 3 lỗi. Một trong số đó có thể cho phép kẻ tấn công chiếm quyền validator chỉ với 1 giao dịch.

Context: Cơ chế TomoChain
TomoChain dùng consensus TomoBFT (dựa trên PoS + BFT). Validator được chọn qua hợp đồng thông minh. Người dùng stake TOMO để vote. Mỗi epoch (900 block), danh sách validator được cập nhật.

Hợp đồng staking xử lý: deposit, withdraw, vote, unvote, reward. Tất cả trong một contract duy nhất – điểm yếu điển hình.

Core: Layer kiểm tra thứ 3 – reentrancy trong unvote
Hàm unvote() gọi _withdraw() trước khi cập nhật trạng thái. Dòng 247–253: