- Home
- rủi ro smart contract
- Nhận Diện Lỗi Integer Overflow/Underflow Trong Smart Contract: Rủi Ro, Cách Phòng Tránh Cho Người Mới Crypto
Nhận Diện Lỗi Integer Overflow/Underflow Trong Smart Contract: Rủi Ro, Cách Phòng Tránh Cho Người Mới Crypto
Lỗi integer overflow/underflow trong smart contract là một nhóm lỗi số học có thể làm giá trị biến bị vượt ngưỡng hoặc tụt xuống dưới giới hạn biểu diễn, từ đó khiến logic hợp đồng vận hành sai lệch. Với người mới crypto, đây không chỉ là một khái niệm kỹ thuật của Solidity mà còn là điểm khởi đầu để hiểu vì sao một đoạn code nhìn có vẻ đơn giản vẫn có thể dẫn tới mất tài sản, mint sai token hoặc phá vỡ điều kiện kiểm soát trong giao thức.
Từ góc nhìn search intent, người đọc không chỉ muốn biết định nghĩa mà còn muốn biết lỗi này nguy hiểm ra sao trong bối cảnh crypto thực tế. Đó là lý do bài viết cần đi từ phần nền tảng nhất là khái niệm overflow và underflow, sau đó nối sang rủi ro smart contract, những vị trí thường phát sinh lỗi như mint, burn, transfer, staking, rồi mới chuyển sang lớp tư duy phòng tránh. Cách tiếp cận này giúp người mới không bị ngợp bởi thuật ngữ, đồng thời vẫn nắm được chuỗi nguyên nhân – hệ quả – cách giảm thiểu.
Bên cạnh việc nhận diện rủi ro, một ý định phụ rất mạnh của truy vấn này là biết lỗi ấy còn đáng lo đến mức nào khi Solidity 0.8 đã thay đổi cơ chế mặc định. Vì vậy, hiểu lỗi không còn dừng ở mức “biết tên lỗ hổng”, mà phải mở rộng sang việc hiểu môi trường compiler, code legacy và thói quen tối ưu gas của dự án.
Giới thiệu ý mới, sau đây bài viết sẽ đi theo đúng flow mà người mới crypto cần: hiểu bản chất lỗi, đánh giá mức độ nguy hiểm, xác định nơi dễ phát sinh, nắm cách phòng tránh và cuối cùng là biết cách kiểm tra nhanh khi đọc một dự án. Trong phần mở rộng, bài viết cũng liên hệ sang các bối cảnh gần kề như rủi ro upgradeable proxy và cách kiểm tra quyền admin và timelock, vì trong thực tế review dự án, rủi ro hiếm khi xuất hiện riêng lẻ mà thường đi cùng nhau.
Lỗi Integer Overflow/Underflow Trong Smart Contract Là Gì?
Lỗi integer overflow/underflow là lỗi số học xảy ra khi giá trị vượt quá hoặc xuống dưới phạm vi mà kiểu dữ liệu số nguyên có thể lưu trữ.
Để hiểu rõ hơn lỗi integer overflow/underflow trong smart contract, trước hết cần nhìn nó như một vấn đề của kiểu dữ liệu hữu hạn. EVM và Solidity không làm việc với “con số vô hạn”, mà làm việc với kiểu số có biên trên và biên dưới. Khi phép cộng, trừ hoặc nhân đẩy giá trị ra ngoài biên đó, hợp đồng có thể rơi vào trạng thái wrap-around trong code cũ hoặc revert trong compiler mới. Đây là phần cốt lõi của khái niệm và cũng là lý do lỗi này từng trở thành một lỗ hổng bảo mật kinh điển trong Web3.
Integer Overflow Có Phải Là Khi Giá Trị Vượt Quá Giới Hạn Lưu Trữ Của Biến Không?
Có, integer overflow là khi giá trị vượt quá giới hạn tối đa mà biến số nguyên có thể chứa và làm kết quả trở nên sai lệch.
Cụ thể, trong smart contract, overflow thường xuất hiện khi một phép cộng hoặc phép nhân làm giá trị vượt quá mức tối đa của kiểu dữ liệu. Ví dụ, nếu một biến uint8 chỉ chứa được tối đa 255 mà code tiếp tục cộng thêm 1, giá trị không thể tiếp tục tăng một cách hợp lệ. Ở các phiên bản Solidity cũ, hệ quả là giá trị có thể quay về mức nhỏ hơn theo cơ chế wrap-around; còn ở Solidity 0.8+, giao dịch mặc định sẽ revert. Móc xích ở đây rất quan trọng: hiểu overflow không chỉ để biết nó là gì, mà để thấy vì sao một công thức thưởng, lãi suất hay token mint nếu thiếu kiểm soát có thể phá hỏng toàn bộ trạng thái hợp đồng.
Integer Underflow Có Phải Là Khi Giá Trị Giảm Xuống Dưới 0 Hoặc Dưới Mức Tối Thiểu Không?
Có, integer underflow là khi giá trị bị kéo xuống dưới ngưỡng tối thiểu mà kiểu dữ liệu cho phép, đặc biệt dễ thấy với phép trừ trên số nguyên không dấu.
Cụ thể hơn, underflow thường được nhắc đến nhiều với uint, vì kiểu này không biểu diễn số âm. Khi một biến uint đang là 0 nhưng contract vẫn cố trừ thêm 1, phép toán ấy không còn hợp lệ theo logic nghiệp vụ. Trong môi trường cũ, kết quả có thể quay lên giá trị cực lớn, tạo ra hậu quả nghiêm trọng như số dư bất ngờ tăng vọt hoặc điều kiện kiểm tra bị vượt qua sai cách. Trong môi trường mới, contract sẽ revert mặc định, nhưng chỉ khi dự án không chủ động dùng unchecked. Chính vì vậy, hiểu underflow giúp người mới crypto đọc báo cáo audit dễ hơn: cứ nơi nào có logic trừ số dư, giảm allowance hoặc cập nhật phần thưởng âm, nơi đó cần nhìn kỹ.
Overflow Và Underflow Khác Nhau Ở Điểm Nào Trong Smart Contract?
Overflow sai theo hướng vượt trần, underflow sai theo hướng tụt đáy, nhưng cả hai đều có thể làm logic hợp đồng đi chệch khỏi ý định thiết kế.
Sự khác biệt nằm ở hướng biến dạng của giá trị. Overflow thường liên quan đến cộng, nhân hoặc tăng lũy kế quá mức; underflow thường gắn với phép trừ, giảm số dư hoặc giảm bộ đếm. Tuy nhiên, điểm giống nhau mới là điều người đọc cần ghi nhớ: cả hai đều biến một phép toán “có vẻ hợp lệ” thành một hành vi không còn phản ánh đúng nghiệp vụ. Trong DeFi, chỉ cần sai lệch một bước ở balance, supply hoặc reward accumulator là đủ tạo ra hiệu ứng dây chuyền. Vì thế, về mặt semantic SEO lẫn thực chiến bảo mật, hai lỗi này nên được học cùng nhau như một cặp đối lập trong cùng một cụm rủi ro arithmetic.
Lỗi Integer Overflow/Underflow Nguy Hiểm Với Smart Contract Không?
Có, lỗi integer overflow/underflow rất nguy hiểm với smart contract vì nó có thể làm sai số dư, phá logic điều kiện và mở đường cho khai thác tài sản.
Để hiểu đúng mức độ nguy hiểm của lỗi integer overflow/underflow, cần nhìn nó như một phần của rủi ro smart contract chứ không phải lỗi cú pháp đơn lẻ. Một contract có thể biên dịch thành công, chạy được và vẫn chứa lỗ hổng nếu phép toán quan trọng không được bảo vệ đúng cách. Khi lỗi xảy ra ở vị trí nhạy cảm như balance, mint, burn, rewards hoặc fee accounting, thiệt hại không chỉ dừng ở một giá trị sai, mà có thể lan sang toàn bộ trạng thái tài sản của hệ thống.
Lỗi Này Có Thể Làm Sai Token Balance, Reward Hoặc Fee Không?
Có, lỗi này có thể làm sai token balance, reward và fee vì tất cả các thành phần đó đều phụ thuộc trực tiếp vào phép toán số học.
Ví dụ, nếu contract cộng dồn phần thưởng staking theo một công thức có biến trung gian quá lớn, overflow có thể làm giá trị quay vòng và khiến reward bị tính sai hoàn toàn. Ngược lại, nếu một phép trừ số dư hoặc allowance không được bảo vệ, underflow có thể làm giá trị còn lại trở nên cực lớn trong code legacy. Với tokenomics, đây là vấn đề rất nghiêm trọng vì mọi chỉ số như total supply, vesting, emission rate hay treasury accounting đều gắn với các phép cộng trừ nhân chia. Chỉ một bug arithmetic cũng có thể kéo theo sai lệch ở hàng loạt module liên quan.
Hacker Có Thể Khai Thác Overflow/Underflow Để Trục Lợi Không?
Có, hacker có thể khai thác overflow/underflow để trục lợi vì lỗi này cho phép thao túng giá trị và bẻ lái logic kiểm soát của hợp đồng.
Cụ thể, cơ chế khai thác thường không bắt đầu từ “một phép toán sai” mà từ “một điều kiện bị lách”. Khi giá trị balance, supply hoặc counter bị biến dạng, các lệnh require, hạn mức rút, giới hạn mint hoặc tỷ lệ phân bổ có thể không còn phản ánh dữ liệu thực. Khi đó, kẻ tấn công có thể rút nhiều hơn, nhận thưởng cao hơn hoặc kích hoạt chức năng mà lẽ ra không được phép.
Những Hậu Quả Thường Gặp Của Overflow/Underflow Là Gì?
Có 5 nhóm hậu quả chính của overflow/underflow: sai số dư, sai nguồn cung, vượt điều kiện kiểm tra, phân phối reward lỗi và mất niềm tin vào giao thức.
Để người đọc theo dõi rõ hơn, bảng dưới đây tóm tắt các hậu quả thường gặp của lỗi arithmetic trong smart contract:
| Hậu quả | Biểu hiện trong dự án crypto | Mức độ ảnh hưởng |
|---|---|---|
| Sai token balance | Số dư ví tăng hoặc giảm bất thường | Rất cao |
| Sai total supply | Mint, burn hoặc emission lệch chuẩn | Rất cao |
| Sai điều kiện kiểm tra | Bypass hạn mức, bypass require | Rất cao |
| Sai reward/fee | Tính thưởng, tính phí không đúng | Cao |
| Mất niềm tin thị trường | TVL giảm, holder rời dự án | Cao |
Bảng này cho thấy lỗi arithmetic không chỉ gây ra trục trặc nội bộ mà còn tác động trực tiếp tới uy tín và thanh khoản. Với dự án mới, một bug nhỏ ở lớp số học có thể biến thành sự cố niềm tin lớn hơn cả lỗi giao diện hay marketing.
Lỗi Integer Overflow/Underflow Thường Xảy Ra Ở Những Trường Hợp Nào?
Có 3 nhóm nơi overflow/underflow thường phát sinh: phép toán lũy kế, module token nhạy cảm và các nhánh logic dùng code legacy hoặc kiểm tra biên yếu.
Để bắt đầu phần nhận diện, cần hiểu rằng lỗi này hiếm khi nằm ở nơi quá “hiển nhiên”. Thay vào đó, nó thường xuất hiện trong những vị trí mà dev xem là thao tác quen thuộc: cộng dồn reward, trừ số dư, nhân tỷ lệ phần trăm, cập nhật accumulator hoặc chuyển đổi đơn vị. Với người mới crypto, đây là phần rất hữu ích vì nó biến khái niệm trừu tượng thành các vùng kiểm tra cụ thể khi đọc code hoặc audit report.
Những Phép Toán Nào Dễ Gây Overflow/Underflow Nhất?
Có 4 nhóm phép toán dễ gây lỗi nhất: cộng, trừ, nhân và các phép cập nhật lũy kế nhiều bước.
Cụ thể hơn, phép cộng có thể gây overflow khi tăng supply, cộng reward hoặc cộng số lượng giao dịch theo thời gian. Phép trừ dễ gây underflow ở balance, allowance, debt hoặc claimable amount. Phép nhân thường nguy hiểm hơn vì chỉ cần hai số đủ lớn là giá trị trung gian có thể vượt biên nhanh chóng. Ngoài ra, các phép toán nhiều bước như “nhân rồi chia”, “cộng rồi trừ” hoặc “update accumulator theo block” cũng dễ che giấu lỗi hơn một biểu thức đơn giản. Đây là lý do auditor thường soi rất kỹ các công thức APR, emission và swap fee.
Các Chức Năng Như Mint, Burn, Transfer, Staking Có Dễ Phát Sinh Lỗi Không?
Có, các chức năng mint, burn, transfer và staking rất dễ phát sinh lỗi vì chúng đụng trực tiếp vào balance, supply và các biến kế toán cốt lõi.
Ở module mint, overflow có thể xuất hiện khi cộng total supply hoặc cộng số dư cho người nhận. Ở module burn và transfer, underflow có thể nảy sinh nếu trừ balance mà không bảo vệ đúng. Trong staking hoặc farming, rủi ro còn cao hơn vì reward thường được tính từ nhiều biến trung gian như thời gian, amount, multiplier và reward per share. Khi cộng dồn lâu dài, những biểu thức này trở thành vùng nhạy cảm nhất của contract. Trong thực tế review dự án, nơi nào có logic phần thưởng phức tạp, nơi đó cần kiểm tra thêm cả rủi ro upgradeable proxy, vì một hệ thống có thể an toàn ở phiên bản đầu nhưng phát sinh bug arithmetic sau khi nâng cấp logic nếu quy trình quản trị kém chặt.
Dấu Hiệu Nào Cho Thấy Logic Số Học Của Contract Đang Có Vấn Đề?
Có 5 dấu hiệu phổ biến: phép toán lồng nhau khó đọc, biến trung gian quá lớn, code cũ trước 0.8, dùng unchecked và thiếu kiểm tra đầu vào.
Cụ thể hơn, khi đọc code hoặc audit note, bạn nên chú ý các trường hợp sau:
- Contract dùng compiler cũ hoặc fork từ code legacy.
- Có
uncheckednhưng không giải thích rõ vì sao tối ưu gas là cần thiết. - Có công thức reward, fee hoặc share quá dài và nhiều bước.
- Có phép trừ trực tiếp trên
uinttrong phần balance hoặc allowance. - Có mint/burn/supply update nhưng thiếu test với max value, min value hoặc zero.
Đây là các tín hiệu cảnh báo mềm nhưng cực kỳ hữu ích. Chúng không chứng minh chắc chắn có bug, nhưng đủ để người đọc dừng lại và kiểm tra sâu hơn.
Làm Thế Nào Để Phòng Tránh Integer Overflow/Underflow Trong Smart Contract?
Dùng Solidity 0.8+, kiểm tra biên, test edge case và review kỹ unchecked là 4 hướng phòng tránh quan trọng nhất.
Dưới đây là trọng tâm thực hành của toàn bài, vì hiểu lỗi chỉ có giá trị khi chuyển hóa được thành hành động phòng tránh. Với smart contract hiện đại, lớp phòng ngừa đầu tiên là compiler. Lớp thứ hai là thiết kế biểu thức và kiểm tra biên. Lớp thứ ba là quy trình test, static analysis và audit. Khi ba lớp này phối hợp với nhau, xác suất để arithmetic bug đi vào mainnet sẽ giảm mạnh.
Dùng Solidity 0.8 Trở Lên Có Giúp Ngăn Overflow/Underflow Không?
Có, dùng Solidity 0.8 trở lên giúp ngăn overflow/underflow mặc định vì compiler sẽ revert khi phép toán vượt biên.
Tiếp theo, cần hiểu đúng giới hạn của biện pháp này. Compiler mới giúp chặn một lớp lỗi rất quan trọng, nhưng không thay thế hoàn toàn cho tư duy thiết kế an toàn. Nếu biểu thức nghiệp vụ sai, nếu thứ tự tính toán không hợp lý, hoặc nếu dự án chủ động dùng unchecked, lỗi vẫn có thể xuất hiện. Compiler hiện đại là lớp chắn mặc định, không phải giấy phép để bỏ qua review logic.
SafeMath Có Còn Cần Thiết Khi Dùng Compiler Mới Không?
Solidity 0.8 thắng về bảo vệ mặc định, SafeMath hữu ích chủ yếu với code cũ, còn unchecked là vùng cần cân nhắc nhất.
Trong bối cảnh mới, SafeMath không còn là yêu cầu bắt buộc như trước. Tuy nhiên, kiến thức về SafeMath vẫn rất hữu ích khi bạn đọc dự án legacy, audit report cũ hoặc các contract fork từ phiên bản trước 0.8. Nếu một dự án hiện tại vẫn dùng SafeMath trên compiler mới, đó không hẳn là vấn đề; đôi khi nó chỉ là thói quen hoặc để giữ tính nhất quán. Điều quan trọng hơn là phải biết logic nào đang dựa vào built-in checks, logic nào cố tình tắt checks bằng unchecked, và phần nào có thể tạo ra chênh lệch giữa kỳ vọng của auditor với hành vi thực tế.
Cần Kiểm Tra Những Edge Case Nào Để Giảm Rủi Ro Arithmetic?
Có 5 nhóm edge case nên kiểm tra: giá trị 0, max value, min value, phép nhân lớn và chuỗi cập nhật nhiều bước.
Cụ thể hơn, bạn nên test:
- Trường hợp số dư bằng 0 rồi tiếp tục trừ.
- Trường hợp giá trị ở sát ngưỡng tối đa rồi tiếp tục cộng hoặc nhân.
- Trường hợp phân phối reward sau thời gian dài tích lũy.
- Trường hợp người dùng nhập amount cực lớn hoặc cực nhỏ.
- Trường hợp biểu thức có nhiều bước trung gian trước khi gán lại vào state.
Ngoài test thủ công, các công cụ kiểm tra tĩnh và formal verification có thể hỗ trợ phát hiện arithmetic issue sớm. Đây là phần rất quan trọng vì nhiều lỗi không lộ ra trong happy path mà chỉ xuất hiện ở điều kiện biên.
Người Mới Crypto Có Thể Tự Nhận Diện Rủi Ro Overflow/Underflow Khi Đọc Dự Án Không?
Có, người mới crypto hoàn toàn có thể tự nhận diện rủi ro overflow/underflow ở mức cơ bản nếu biết nhìn đúng 4 điểm kiểm tra quan trọng.
Bên cạnh kiến thức code, phần ứng dụng này mới là giá trị lớn cho nhà đầu tư hoặc người dùng DeFi. Bạn không cần trở thành auditor để phát hiện mọi bug, nhưng bạn có thể xây một checklist sàng lọc nhanh. Cách làm hiệu quả là đọc theo thứ tự: compiler version, module nhạy cảm, dấu hiệu unchecked, rồi tới báo cáo audit. Nếu dự án dùng proxy, hãy mở rộng thêm sang cách kiểm tra quyền admin và timelock, vì một hệ thống nâng cấp được mà thiếu kiểm soát quản trị cũng có thể biến rủi ro thấp thành rủi ro cao chỉ sau một lần upgrade.
Có Nên Kiểm Tra Phiên Bản Solidity Và Báo Cáo Audit Trước Khi Tin Vào Dự Án Không?
Có, nên kiểm tra phiên bản Solidity và báo cáo audit vì đây là hai chỉ báo nhanh nhất về mức độ nghiêm túc của dự án đối với an toàn số học.
Cụ thể, nếu contract dùng compiler cũ, bạn phải cảnh giác hơn với overflow/underflow kiểu wrap-around. Nếu báo cáo audit có nhắc tới arithmetic bug, unchecked, supply accounting hoặc reward miscalculation, đó là tín hiệu bạn cần đọc kỹ hơn trước khi tương tác. Ngoài ra, nếu audit chỉ cũ mà code đã nâng cấp nhiều lần, giá trị tham khảo của báo cáo cũng giảm đi đáng kể. Với dự án upgradeable, bạn còn phải đối chiếu implementation hiện tại với bản đã audit để tránh nhầm lẫn.
Checklist Cơ Bản Nào Giúp Người Mới Sàng Lọc Rủi Ro Arithmetic?
Có 6 mục checklist cơ bản: compiler version, unchecked, code legacy, module token, audit findings và quyền nâng cấp.
Để người đọc áp dụng ngay, dưới đây là checklist ngắn nhưng đủ thực chiến:
| Mục cần kiểm tra | Câu hỏi nên tự đặt ra | Ý nghĩa |
|---|---|---|
| Compiler version | Dự án có dùng Solidity 0.8+ không? | Giảm rủi ro wrap mặc định |
unchecked |
Có khối unchecked nào không? |
Có thể bật lại hành vi wrap |
| Code legacy | Contract có fork từ code cũ không? | Tăng khả năng tồn dư bug |
| Module nhạy cảm | Mint, burn, reward, fee có phức tạp không? | Vùng dễ phát sinh arithmetic issue |
| Audit findings | Báo cáo có nhắc arithmetic hay accounting issue không? | Chỉ dấu rủi ro trực tiếp |
| Quyền nâng cấp | Ai có quyền upgrade, có timelock không? | Liên quan rủi ro upgradeable proxy |
Bảng này không thay thế audit chuyên sâu, nhưng nó đủ để một người mới crypto tránh được kiểu tin tưởng mù quáng chỉ vì dự án “có audit” hoặc “có TVL cao”.
Vì Sao Integer Overflow/Underflow Vẫn Còn Đáng Quan Tâm Dù Solidity 0.8 Đã Cải Thiện?
Vì Solidity 0.8 chỉ giảm một lớp rủi ro mặc định; code legacy, unchecked, assembly và quản trị nâng cấp vẫn có thể kéo lỗi arithmetic quay trở lại.
Bên cạnh lớp kiến thức nền tảng, đây là phần mở rộng giúp bài viết đạt chiều sâu ngữ nghĩa. Nhiều người mới nghe rằng Solidity 0.8 đã xử lý overflow/underflow mặc định rồi kết luận lỗi này “đã hết thời”. Cách hiểu đó chưa đúng. Trong thực tế, rất nhiều dự án được fork từ code cũ, dùng proxy để nâng cấp, tối ưu gas bằng unchecked, hoặc chèn assembly/Yul cho các tác vụ đặc biệt. Khi đó, cơ chế bảo vệ mặc định không còn bao phủ toàn bộ bề mặt rủi ro nữa.
unchecked Block Có Thể Khiến Overflow/Underflow Xuất Hiện Trở Lại Không?
Có, unchecked có thể khiến overflow/underflow xuất hiện trở lại vì nó vô hiệu hóa cơ chế kiểm tra mặc định của compiler trong phạm vi khối lệnh đó.
Dev thường dùng unchecked để tối ưu gas ở những nơi họ tin rằng biểu thức đã an toàn. Nhưng niềm tin đó phải đi kèm chứng minh, test và review. Nếu không, unchecked sẽ trở thành cánh cửa đưa hành vi wrap cũ quay lại contract hiện đại. Vì thế, khi đọc code, chỉ cần thấy unchecked, bạn nên tự động đặt câu hỏi: biểu thức này đã được giới hạn đầu vào chưa, có invariant nào bảo đảm không, và test edge case đã đủ chưa.
Code Legacy Trước Solidity 0.8 Có Còn Là Nguồn Rủi Ro Khi Fork Dự Án Không?
Có, code legacy trước Solidity 0.8 vẫn là nguồn rủi ro lớn khi fork vì logic cũ có thể được mang sang môi trường mới mà không được rà soát đầy đủ.
Nhiều dự án fork contract nổi tiếng để rút ngắn thời gian phát triển. Vấn đề là fork code không đồng nghĩa fork luôn mức độ an toàn. Nếu dự án sao chép công thức tính reward, debt hoặc rebasing từ code cũ mà chỉ chỉnh sửa bề mặt, những giả định về arithmetic rất dễ bị bỏ sót. Đây cũng là nơi người đọc nên để mắt tới rủi ro upgradeable proxy: một dự án có thể quảng bá rằng implementation hiện tại dùng compiler mới, nhưng logic cốt lõi hoặc storage assumptions lại đến từ bản cũ. Khi đó, chỉ nhìn version compiler là chưa đủ.
Inline Assembly Hoặc Yul Có Làm Việc Kiểm Soát Arithmetic Trở Nên Khó Hơn Không?
Có, inline assembly hoặc Yul làm việc kiểm soát arithmetic khó hơn vì chúng đưa code ra khỏi vùng an toàn mà lập trình viên Solidity thường dựa vào.
Khi dev dùng assembly, họ thường theo đuổi tối ưu gas hoặc thao tác mức thấp. Đổi lại, khả năng đọc hiểu của auditor và cộng đồng cũng giảm xuống, đặc biệt với người mới crypto. Những bảo vệ mặc định ở tầng Solidity không còn minh bạch như khi viết biểu thức thuần ngôn ngữ bậc cao. Vì vậy, nếu một dự án vừa có assembly, vừa có logic accounting phức tạp, vừa là proxy có thể nâng cấp, thì rủi ro tổng hợp sẽ cao hơn nhiều so với nhìn từng yếu tố riêng lẻ.
Overflow/Underflow Khác Gì Với Lỗi Logic Nghiệp Vụ Trong Smart Contract?
Overflow/underflow là lỗi số học ở lớp biểu diễn giá trị, còn lỗi logic nghiệp vụ là lỗi ở lớp quy tắc vận hành; hai nhóm này khác nhau nhưng có thể khuếch đại nhau.
Cụ thể hơn, lỗi arithmetic làm con số sai; lỗi business logic làm quy tắc sai. Tuy nhiên, trong thực tế smart contract, hai nhóm thường đan vào nhau. Một công thức thưởng thiết kế sai là logic nghiệp vụ; một bước cộng trừ trong công thức đó vượt biên là arithmetic. Khi cả hai cùng tồn tại, hậu quả tăng theo cấp số nhân. Tóm lại, hiểu integer overflow/underflow là bước đầu để đọc rộng hơn toàn bộ rủi ro smart contract, từ accounting tới governance, từ implementation tới proxy upgrade path.





































