codehawks-2023-08-sparkn-l10

[L-10] Using basis points for percentage is not precise enough for realistic use-cases

보고서

Summary

BASIS_POINTS가 10000인건 현실적으로 프로토콜에 충분한 정확도를 주지 않는다.

Keyword

arithmetic error, rounding error, precision, loss of precision

Vulnerability

BASIS_POINTS는 퍼센트 계산을 위한 상수이다. 10000으로 설정되어 소수점 둘째자리까지의 퍼센트를 표현할 수 있다. (만분율)

이는 가장 작은 상금 액수는 0.01%임을 의미한다. 하지만 이것은 충분히 정확하지 않다고 주장한다.

감사 콘테스트의 경우 상금 규모는 수만 달러에 달한다. 표준 콘테스트의 상금은 보통 5일 것이다. 이 Sparkn 콘테스트의 경우 상금은 1.5이다. 하지만 $0.5는 나눗셈 계산 중 버림되므로 공정하게 분배되지 않을 것이다. 콘테스트에서 중복된 이슈가 많아 상금이 1달러 미만인 경우도 종종 있다. 또한 이벤트(에어드랍 등) 시 0.01%보다 낮은 비율로 분배되는 것이 일반적이다.

따라서 이 정도 정확도로는 보상을 정확하게 분배하는 것이 불가하다.

Impact

보상을 충분히 정밀하게 분배하지 못할 수 있으며, 이로 인해 현실적인 사용 사례가 제대로 동작하지 않을 것이다.

Mitigation

BASIS_POINTS로 10**18을 이용하면 충분히 정확할 것이다.

Memo

codehawks-2023-08-sparkn-l05 와 동일 이슈인데 현실적인 예를 들었다는 점만 다른 것 같다.


tags: bughunting, sparkn, smart contract, solidity, arithmetic error, rounding error, loss of precision, severity low