FV-SOL-2 Precision Errors
TLDR
Precision errors arise when contracts mishandle decimal scaling or rounding in calculations, leading to inaccurate results
Code
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract VulnerableToken {
string public name = "VulnerableToken";
string public symbol = "VUL";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
event Transfer(address indexed from, address indexed to, uint256 value);
constructor(uint256 initialSupply) {
// Initialize total supply without accounting for decimals
totalSupply = initialSupply;
balanceOf[msg.sender] = totalSupply;
emit Transfer(address(0), msg.sender, totalSupply);
}
// Mint function vulnerable to incorrect decimal handling
function mint(uint256 amount) public {
// Fails to scale by decimals, causing inflated supply
totalSupply += amount;
balanceOf[msg.sender] += amount;
emit Transfer(address(0), msg.sender, amount);
}
}
Classifications
Mitigation Patterns
FV-SOL-2-M1 Unit Testing on Edge Cases
Write tests for edge cases, such as small or very large values, fractions close to rounding boundaries, zero values, and more.
Actual Occurrences
Content
Last updated
Was this helpful?