Upotevu wa Usahihi na Udanganyifu wa Kurundika (Rounding)
Smart contracts hazihitaji hitilafu katika udhibiti wa ufikiaji (access control) ili kupoteza pesa.
Wakati mwingine udanganyifu huo hujificha katika mgawanyo rahisi.
Smart contracts za kifedha hutumia hesabu za namba nzima (integer arithmetic). Sehemu (fractions) hutupwa. Mwelekeo huu wa kurundika (rounding) hubadilisha nani anayepokea thamani. Hitilafu ya kitengo kimoja inaweza kujirudia katika maelfu ya miamala.
Katika itifaki ya kifedha, kurundika ni sera ya uhamishaji wa thamani.
Kila mgawanyo lazima ujibu maswali matatu:
- Hesabu inarundika kuelekea upande gani?
- Ni upande gani unaofaidika na mwelekeo huo?
- Je, mshambuliaji anaweza kurudia au kukuza faida hiyo?
Makosa ya kawaida ya hisabati ni pamoja na:
Kugawanya mapema mno Ukigawanya kabla ya kuzidisha, unapoteza usahihi. Mfano:
(amount / 1e18) * rate. Mgawanyo wa kati hutupa data kabla ya kuzidisha kutokea. Kanuni: Daima zidisha kabla ya kugawanya.Overflow za kati (Intermediate overflows) Kuzidisha kwanza kunaweza kusababisha overflow hata kama matokeo ya mwisho yanaweza kuwekwa kwenye
uint256. Tumia maktaba kama OpenZeppelin Math kufanya kuzidisha na kugawanya kwa usahihi kamili kwa hatua moja.Kurundika katika mwelekeo usio sahihi Kurundika si pendekezo. Ni kanuni ya usalama. Itifaki ya tahadhari hufuata kanuni hizi:
- Rundika deni juu (upward).
- Rundika malipo yanayohitajika juu.
- Rundika thamani ya dhamana chini (downward).
- Rundika rasilimali zinazolipwa kwa watumiaji chini.
- Rundika hisa zinazotozwa kwa watumiaji juu.
Matokeo kamili yanaposhindikana, rundika dhidi ya upande unaojaribu kutoa thamani.
Mashambulizi ya mfumuko wa bei (Inflation attacks) Katika hifadhi (vaults) zenye ukwasi mdogo, washambuliaji wanaweza kutumia michango ili kudhibiti viwango vya kubadilishia fedha. Wanachangia rasilimali ili kuongeza idadi ya jumla ya rasilimali bila kuongeza idadi ya hisa. Hii hufanya amana mpya kurundikwa chini hadi hisa sifuri. Kinga: Tumia rasilimali au hisa za kidhahania (virtual assets/shares) ili kuweka kiwango cha awali cha utulivu.
Mashambulizi ya masafa (Frequency attacks) Ikiwa riba hukua kila kitalu (block) na inarundikwa chini, mshambuliaji anaweza kuchochea ukuaji huo mara kwa mara ili kuweka riba katika sifuri. Kinga: Tumia kielezo cha usahihi wa juu au ubebe baki (remainder) mbele.
Uhandisi salama wa kifedha unahitaji:
- Vipimo vya wazi na mizani ya desimali.
- Kuzidisha na kugawanya kwa usahihi kamili.
- Kurundika kulingana na aina ya operesheni.
- Ufuatiliaji wa baki (remainder).
- Upimaji wa invariant na fuzz testing.
Usijiulize tu ikiwa hesabu ni karibu ya kutosha. Jiulize thamani iliyotupwa inaenda wapi na nani anaiipokea.
Chanzo: https://dev.to/stablenaira/precision-loss-and-rounding-exploits-in-financial-smart-contracts-4c93