Trong smart contract, không có gọi là 'fork xong là xong'
Tuần trước, tôi nhận được một yêu cầu audit gấp. Một dự án fork Uniswap V2, tự hào khoe 'tính năng chống flash loan' trên Twitter. Họ thêm vào một modifier check tx.origin. Tôi mở Remix, chạy thử. Ba phút sau, tôi đã rút hết thanh khoản của pool testnet. Họ bảo tôi 'kiểm tra lại đi, code không có lỗi đâu'. Tôi không kiểm tra lại. Tôi báo cáo: lỗi reentrancy cơ bản kết hợp với tx.origin dễ đoán.

Đó không phải lần đầu. Năm 2017, tôi 23 tuổi, audit hợp đồng ICO 'TokenX'. Phát hiện 3 lỗi reentrancy cho phép rút token không giới hạn. Đồng nghiệp nam bảo tôi 'con gái biết gì về Solidity'. Tôi im lặng, gửi PoC lên GitHub. Dự án vá lỗi sau 24 giờ, tiết kiệm 2 triệu USD. Họ không xin lỗi. Tôi không cần.
Văn Hóa Fork: Cơn Sốt DeFi Summer và Bài Học Chưa Thuộc
Năm 2020, tôi tự fork Compound v2 để thử nghiệm cơ chế lãi suất động. Tôi chạy 300 mô phỏng trên Ganache, tối ưu giảm 15% gas. Đó là dự án cá nhân, không đồng đội, không tiền. Nhưng tôi hiểu một điều: fork không phải copy-paste. Mỗi dòng code bạn thay đổi là một lỗ hổng tiềm ẩn. Khi thị trường sụp đổ năm 2022, tôi dùng kiến thức đó phân tích nguyên nhân sập của Terra. Viết báo cáo 20 trang. Cộng đồng đọc, nhưng không học.
DeFi Summer tạo ra hàng trăm dự án fork. Uniswap, Compound, Aave. Hầu hết đều chết sau 6 tháng vì bị hack hoặc mất thanh khoản. Lý do: dev team không hiểu code gốc. Họ thay đổi tham số, thêm tính năng, sửa logic mà không kiểm tra tác động phụ. Tôi gọi đó là 'fork mù'.
Core: Phân Tích Kỹ Thuật Lỗi tx.origin Trong Fork Uniswap V2
Hãy nhìn vào code mẫu của dự án kia:
