𝗣𝗿𝗲𝗰𝗶𝘀𝗶𝗼𝗻 𝗟𝗼𝘀𝘀 𝗮𝗻𝗱 𝗥𝗼𝘂𝗻𝗱𝗶𝗻𝗴 𝗘𝘅𝗽𝗹𝗼𝗶𝘁𝘀
స్మార్ట్ కాంట్రాక్ట్లు డబ్బును కోల్పోవడానికి యాక్సెస్ కంట్రోల్లో బగ్ ఉండాల్సిన అవసరం లేదు.
కొన్నిసార్లు ఎక్స్ప్లాయిట్ ఒక సాధారణ విభజన (division) లో దాగి ఉంటుంది.
ఫైనాన్షియల్ స్మార్ట్ కాంట్రాక్ట్లు ఇంటిజర్ అర్థమెటిక్ను ఉపయోగిస్తాయి. ఇందులో భిన్నాలు (fractions) తొలగించబడతాయి. ఈ రౌండింగ్ దిశ విలువను ఎవరు పొందుతారనే దానిని మారుస్తుంది. ఒక యూనిట్ లోప Fehl్యం వేలకొద్దీ లావాదేవీల ద్వారా పునరావృతం కావచ్చు.
ఒక ఫైనాన్షియల్ ప్రోటోకాల్లో, రౌండింగ్ అనేది ఒక వాల్యూ-ట్రాన్స్ఫర్ పాలసీ.
ప్రతి విభజన మూడు ప్రశ్నలకు సమాధానం ఇవ్వాలి:
- లెక్కలు ఏ దిశలో రౌండ్ అవుతాయి?
- ఆ దిశ వల్ల ఏ పక్షానికి ప్రయోజనం కలుగుతుంది?
- ఒక అటాకర్ ఆ ప్రయోజనాన్ని మళ్ళీ చేయగలడా లేదా పెంచగలడా?
సాధారణ గణిత లోపాలలో ఇవి ఉన్నాయి:
Dividing too early మీరు గుణకారం (multiplication) చేయడానికి ముందే విభజన (division) చేస్తే, మీరు ప్రిసిషన్ను కోల్పోతారు. Example: (amount / 1e18) * rate. గుణకారం జరగకముందే మధ్యంతర విభజన డేటాను తొలగిస్తుంది. Rule: ఎల్లప్పుడూ విభజన చేయడానికి ముందే గుణకారం చేయండి.
Intermediate overflows తుది ఫలితం
uint256లో సరిపోసినప్పటికీ, మొదట గుణించడం వల్ల ఓవర్ఫ్లో సంభవించవచ్చు. ఫుల్-ప్రిసిషన్ మల్టిప్లికేషన్ మరియు డివిజన్ను ఒకే దశలో చేయడానికి OpenZeppelin Math వంటి లైబ్రరీని ఉపయోగించండి.Rounding in the wrong direction రౌండింగ్ అనేది కేవలం ఒక సూచన కాదు. ఇది ఒక భద్రతా నియమం. ఒక సంప్రదాయబద్ధమైన (conservative) ప్రోటోకాల్ ఈ సూత్రాలను అనుసరిస్తుంది:
- అప్పును (debt) పైకి రౌండ్ చేయండి.
- అవసరమైన చెల్లింపులను పైకి రౌండ్ చేయండి.
- కొలేటరల్ విలువను కిందకు రౌండ్ చేయండి.
- వినియోగదారులకు చెల్లించే ఆస్తులను కిందకు రౌండ్ చేయండి.
- వినియోగదారులకు ఛార్జ్ చేసే షేర్లను పైకి రౌండ్ చేయండి.
ఖచ్చితమైన ఫలితం సాధ్యం కానప్పుడు, విలువను వెలికితీయడానికి ప్రయత్నించే పక్షానికి వ్యతిరేకంగా రౌండ్ చేయండి.
Inflation attacks తక్కువ లిక్విడిటీ ఉన్న వాల్ట్లలో, అటాకర్లు ఎక్స్ఛేంజ్ రేట్లను మానిప్యులేట్ చేయడానికి విరాళాలను (donations) ఉపయోగించవచ్చు. వారు షేర్ కౌంట్ను పెంచకుండా మొత్తం ఆస్తి కౌంట్ను పెంచడానికి ఆస్తులను విరాళంగా ఇస్తారు. ఇది కొత్త డిపాజిట్లు సున్నా షేర్లకు రౌండ్ డౌన్ అయ్యేలా చేస్తుంది. Mitigation: స్థిరమైన ప్రారంభ రేటును ఏర్పాటు చేయడానికి వర్చువల్ ఆస్తులు లేదా షేర్లను ఉపయోగించండి.
Frequency attacks వడ్డీ ప్రతి బ్లాక్కు జమ అవుతూ (accrues) కిందకు రౌండ్ డౌన్ అయితే, అటాకర్ వడ్డీని సున్నా వద్ద ఉంచడానికి నిరంతరం అక్రూవల్ (accrual) జరిగేలా ప్రేరేపించవచ్చు. Mitigation: హై-ప్రిసిషన్ ఇండెక్స్ను ఉపయోగించండి లేదా శేషాన్ని (remainder) ముందుకు తీసుకెళ్లండి.
సురక్షితమైన ఫైనాన్షియల్ ఇంజనీరింగ్కు ఇవి అవసరం:
- స్పష్టమైన యూనిట్లు మరియు డెసిమల్ స్కేల్లు.
- ఫుల్-ప్రిసిషన్ మల్టిప్లికేషన్ మరియు డివిజన్.
- ఆపరేషన్-స్పెసిఫిక్ రౌండింగ్.
- శేషం (remainder) ట్రాకింగ్.
- ఇన్వేరియంట్ (Invariant) మరియు ఫజ్ టెస్టింగ్ (fuzz testing).
లెక్క సరిపోతుందా లేదా అని మాత్రమే అడగకండి. తొలగించబడిన విలువ ఎక్కడికి వెళ్తుంది మరియు ఎవరు దానిని పొందుతారో అడగండి.
Source: https://dev.to/stablenaira/precision-loss-and-rounding-exploits-in-financial-smart-contracts-4c93