Table of Contents
Bước 1: Phân Tích Yêu Cầu và Logic
- Đọc tài liệu sản phẩm, smart contract spec, flow tài chính.
- Xác định rõ các function cần test:
deposit()
,withdraw()
,claim()
,stake()
, v.v. - Ghi lại edge-case có thể xảy ra:
- Rút khi chưa đủ token.
- Gửi nhầm token không hỗ trợ.
- Người dùng cố tình thao túng oracle, số dư ảo…
Mẹo: Vẽ sơ đồ fund flow hoặc logic sequence giúp dễ hình dung hơn.
Bước 2: Viết và Chạy Unit Test
- Viết test cho từng function nhỏ bằng Solidity + framework như Hardhat, Foundry, Truffle.
- Test từng function riêng biệt:
- ✅ Đầu vào hợp lệ → đầu ra đúng.
- ❌ Đầu vào sai → revert hoặc xử lý hợp lý.
Ví dụ:
it("should revert when deposit is 0", async () => {
await expect(contract.deposit(0)).to.be.revertedWith("Invalid amount");
});
- Kiểm tra cả logic kế toán (balance, reward calculation,…).
Chi tiết:
Bước 3: Kiểm Thử Tích Hợp
- Tạo các kịch bản người dùng thực tế:
- Stake → Claim → Unstake.
- Nhiều người tham gia pool cùng lúc → so sánh phần thưởng.
- Mô phỏng contract tương tác với nhau nếu có (Router, LP, Vault,…).
🛠 Có thể dùng Hardhat mainnet fork hoặc testnet public (Goerli, Sepolia,…).
Bước 4: Fuzz Testing
- Tạo dữ liệu đầu vào ngẫu nhiên, đặc biệt các số cực lớn/cực nhỏ.
- Tìm bug khi chạy nhiều lần, random input:
- Arithmetic overflow/underflow.
- Revert bất ngờ.
- Logic lệch khi điều kiện bất thường.
Công cụ: Foundry (forge fuzz
), Echidna.
Chi tiết:
Bước 5: Kiểm Tra Bảo Mật
- Viết test mô phỏng các tấn công thường gặp:
- Reentrancy: Gọi lặp khi chưa cập nhật state.
- Oracle manipulation: Giá feed bị chỉnh thủ công.
- Flash loan: Dùng vốn vay để lách logic.
- Access control: Role admin quá quyền, không kiểm soát.
🛠 Công cụ hỗ trợ: Slither, MythX, Scribble, Foundry invariant test.
Bước 6: Kiểm Thử Gas
- Đo lượng gas tiêu tốn của từng function.
- So sánh khi test với nhiều người dùng, hoặc khối lượng lớn token.
- Tối ưu hàm nếu gas quá cao hoặc có vòng lặp nguy hiểm.
Công cụ: hardhat-gas-reporter
, forge snapshot
, tenderly
.
Chi tiết:
Bước 7: Kiểm Tra Tương Tác Frontend
- Kiểm tra frontend gửi đúng data xuống smart contract.
- Kiểm tra hiển thị token, balance, reward có đúng với dữ liệu on-chain không.
- Test UI + TX flow trên local + testnet:
- Kết nối ví.
- Gửi transaction.
- Đợi mined.
- Hiển thị kết quả đúng.
Chi tiết:
Bước 8: Kiểm Thử Trên Testnet và Bug Bounty
- Deploy bản beta lên testnet (Goerli, Sepolia, Arbitrum Sepolia,…).
- Mời cộng đồng, tester, white-hat tham gia thử.
- Ghi nhận bug từ testnet, fix và viết lại test.
Bước 9: Kiểm Tra Sau Audit
- Đọc kỹ từng dòng báo cáo audit.
- Viết test case lại nếu có thay đổi logic.
- Đảm bảo bug đã fix không tạo bug mới.
- Có thể chạy lại toàn bộ suite test (regression test).
Bảng Checklist QA Smart Contract (Gợi ý)
Kiểm thử | Đã test? | Ghi chú |
---|---|---|
Unit test từng hàm | ✅ | Đã cover 90% |
Tích hợp staking/claim | ✅ | OK |
Oracle sai giá | ❌ | Cần viết thêm |
Reentrancy attack | ✅ | Dùng contract giả |
Flash loan | ❌ | Chưa test |
Gas profiling | ✅ | Withdraw hơi cao |
Frontend ↔ Contract | ✅ | Hoạt động ổn |
Testnet testing | ✅ | Bug nhẹ đã sửa |
CTA
Bạn đang triển khai smart contract cho dự án DeFi?
👉 Xem thêm tài liệu kỹ thuật và checklist tại chuyên mục code blockchain của Click Digital.
Digital Marketing Specialist