मुख्य आशयावर जा

टोकन एकत्रीकरण चेकलिस्ट

Solidity
स्मार्ट कॉन्ट्रॅक्ट्स
सुरक्षा
टोकन्स
मध्यम
ट्रेलऑफबिट्स
13 ऑगस्ट, 2020
4 मिनिटांचे वाचन

अनियंत्रित टोकन्सशी संवाद साधताना या चेकलिस्टचे अनुसरण करा. प्रत्येक बाबीशी संबंधित धोके तुम्हाला समजले आहेत याची खात्री करा आणि या नियमांच्या कोणत्याही अपवादांचे समर्थन करा.

सोयीसाठी, सर्व स्लिदर युटिलिटीज (नवीन टॅबमध्ये उघडते) थेट टोकन पत्त्यावर चालवल्या जाऊ शकतात, जसे की:

स्लिदर ट्युटोरिअल वापरणे

slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken

या चेकलिस्टचे अनुसरण करण्यासाठी, तुम्हाला टोकनसाठी स्लिदरकडून हे आउटपुट हवे असेल:

- slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER]
- slither [target] --print human-summary
- slither [target] --print contract-summary
- slither-prop . --contract ContractName # कॉन्फिगरेशन, आणि एकिडना आणि मॅन्टिकोरचा वापर आवश्यक आहे

सामान्य विचार

  • कॉन्ट्रॅक्टचे सुरक्षा पुनरावलोकन झालेले आहे. सुरक्षा पुनरावलोकन नसलेल्या कॉन्ट्रॅक्ट्सशी संवाद साधणे टाळा. मूल्यांकनाचा कालावधी (ज्याला "प्रयत्नांची पातळी" असेही म्हणतात), सुरक्षा फर्मची प्रतिष्ठा आणि निष्कर्षांची संख्या आणि तीव्रता तपासा.
  • तुम्ही डेव्हलपर्सशी संपर्क साधला आहे. तुम्हाला त्यांच्या टीमला एखाद्या घटनेबद्दल सावध करण्याची आवश्यकता असू शकते. blockchain-security-contacts (नवीन टॅबमध्ये उघडते) वर योग्य संपर्क शोधा.
  • त्यांच्याकडे गंभीर घोषणांसाठी सुरक्षा मेलिंग लिस्ट आहे. जेव्हा गंभीर समस्या आढळतात किंवा अपग्रेड्स होतात तेव्हा त्यांच्या टीमने वापरकर्त्यांना (तुमच्यासारख्या!) सल्ला दिला पाहिजे.

ERC अनुरूपता

स्लिदरमध्ये slither-check-erc (नवीन टॅबमध्ये उघडते) नावाची एक युटिलिटी समाविष्ट आहे, जी अनेक संबंधित ERC मानकांनुसार टोकनच्या अनुरूपतेचे पुनरावलोकन करते. हे तपासण्यासाठी slither-check-erc वापरा:

  • हस्तांतरण (transfer) आणि transferFrom बुलियन (boolean) परत करतात. अनेक टोकन्स या फंक्शन्सवर बुलियन परत करत नाहीत. परिणामी, कॉन्ट्रॅक्टमधील त्यांचे कॉल्स अयशस्वी होऊ शकतात.
  • जर वापरले असतील तर name, decimals आणि symbol फंक्शन्स उपस्थित आहेत. ही फंक्शन्स ERC-20 मानकामध्ये ऐच्छिक आहेत आणि कदाचित उपस्थित नसतील.
  • Decimals uint8 परत करते. अनेक टोकन्स चुकीने uint256 परत करतात. जर असे असेल, तर परत केलेले मूल्य 255 च्या खाली असल्याची खात्री करा.
  • हे टोकन ज्ञात ERC-20 रेस कंडिशन (नवीन टॅबमध्ये उघडते) कमी करते. ERC-20 मानकामध्ये एक ज्ञात ERC-20 रेस कंडिशन आहे जी हल्लेखोरांना टोकन्स चोरण्यापासून रोखण्यासाठी कमी करणे आवश्यक आहे.
  • हे टोकन ERC-777 टोकन नाही आणि हस्तांतरण (transfer) आणि transferFrom मध्ये कोणताही बाह्य फंक्शन कॉल नाही. हस्तांतरण फंक्शन्समधील बाह्य कॉल्समुळे रीएन्ट्रन्सी (reentrancies) होऊ शकतात.

स्लिदरमध्ये slither-prop (नवीन टॅबमध्ये उघडते) नावाची एक युटिलिटी समाविष्ट आहे, जी युनिट चाचण्या आणि सुरक्षा गुणधर्म व्युत्पन्न करते जे अनेक सामान्य ERC त्रुटी शोधू शकतात. हे तपासण्यासाठी slither-prop वापरा:

शेवटी, अशी काही वैशिष्ट्ये आहेत जी स्वयंचलितपणे ओळखणे कठीण आहे. या अटींसाठी व्यक्तिचलितपणे पुनरावलोकन करा:

  • हस्तांतरण (transfer) आणि transferFrom ने शुल्क घेऊ नये. डिफ्लेशनरी (Deflationary) टोकन्समुळे अनपेक्षित वर्तन होऊ शकते.
  • टोकनमधून मिळणाऱ्या संभाव्य व्याजाचा विचार केला जातो. काही टोकन्स टोकन धारकांना व्याज वितरीत करतात. जर हे विचारात घेतले नाही तर हे व्याज कॉन्ट्रॅक्टमध्ये अडकू शकते.

कॉन्ट्रॅक्ट रचना

  • कॉन्ट्रॅक्ट अनावश्यक गुंतागुंत टाळते. टोकन एक साधे कॉन्ट्रॅक्ट असावे; गुंतागुंतीचा कोड असलेल्या टोकनला उच्च दर्जाच्या पुनरावलोकनाची आवश्यकता असते. गुंतागुंतीचा कोड ओळखण्यासाठी स्लिदरचे human-summary printer (नवीन टॅबमध्ये उघडते) वापरा.
  • कॉन्ट्रॅक्ट SafeMath वापरते. SafeMath न वापरणाऱ्या कॉन्ट्रॅक्ट्सना उच्च दर्जाच्या पुनरावलोकनाची आवश्यकता असते. SafeMath च्या वापरासाठी कॉन्ट्रॅक्टची व्यक्तिचलितपणे तपासणी करा.
  • कॉन्ट्रॅक्टमध्ये केवळ काही नॉन-टोकन-संबंधित फंक्शन्स आहेत. नॉन-टोकन-संबंधित फंक्शन्समुळे कॉन्ट्रॅक्टमध्ये समस्या निर्माण होण्याची शक्यता वाढते. कॉन्ट्रॅक्टमध्ये वापरलेल्या कोडचे विस्तृतपणे पुनरावलोकन करण्यासाठी स्लिदरचे contract-summary printer (नवीन टॅबमध्ये उघडते) वापरा.
  • टोकनला फक्त एकच पत्ता आहे. शिल्लक अद्यतनांसाठी एकाधिक एंट्री पॉइंट्स असलेली टोकन्स पत्त्यावर आधारित अंतर्गत बुककीपिंग खंडित करू शकतात (उदा., balances[token_address][msg.sender] कदाचित वास्तविक शिल्लक दर्शवणार नाही).

मालकाचे विशेषाधिकार

  • टोकन अपग्रेड करण्यायोग्य नाही. अपग्रेड करण्यायोग्य कॉन्ट्रॅक्ट्स कालांतराने त्यांचे नियम बदलू शकतात. कॉन्ट्रॅक्ट अपग्रेड करण्यायोग्य आहे की नाही हे निर्धारित करण्यासाठी स्लिदरचे human-summary printer (नवीन टॅबमध्ये उघडते) वापरा.
  • मालकाकडे मर्यादित मिंटिंग क्षमता आहेत. दुर्भावनायुक्त किंवा तडजोड केलेले मालक मिंटिंग क्षमतांचा गैरवापर करू शकतात. मिंटिंग क्षमतांचे पुनरावलोकन करण्यासाठी स्लिदरचे human-summary printer (नवीन टॅबमध्ये उघडते) वापरा आणि कोडचे व्यक्तिचलितपणे पुनरावलोकन करण्याचा विचार करा.
  • टोकन थांबवण्यायोग्य (pausable) नाही. दुर्भावनायुक्त किंवा तडजोड केलेले मालक थांबवण्यायोग्य टोकन्सवर अवलंबून असलेल्या कॉन्ट्रॅक्ट्सना अडकवू शकतात. थांबवण्यायोग्य कोड व्यक्तिचलितपणे ओळखा.
  • मालक कॉन्ट्रॅक्टला ब्लॅकलिस्ट करू शकत नाही. दुर्भावनायुक्त किंवा तडजोड केलेले मालक ब्लॅकलिस्ट असलेल्या टोकन्सवर अवलंबून असलेल्या कॉन्ट्रॅक्ट्सना अडकवू शकतात. ब्लॅकलिस्टिंग वैशिष्ट्ये व्यक्तिचलितपणे ओळखा.
  • टोकनच्या मागील टीम ज्ञात आहे आणि गैरवापरासाठी त्यांना जबाबदार धरले जाऊ शकते. निनावी डेव्हलपमेंट टीम्स असलेल्या किंवा कायदेशीर आश्रयस्थानांमध्ये असलेल्या कॉन्ट्रॅक्ट्सना उच्च दर्जाच्या पुनरावलोकनाची आवश्यकता असावी.

टोकनची कमतरता

टोकनच्या कमतरतेच्या समस्यांच्या पुनरावलोकनासाठी व्यक्तिचलित पुनरावलोकन आवश्यक आहे. या अटी तपासा:

  • कोणत्याही वापरकर्त्याकडे बहुतांश पुरवठा नाही. जर काही वापरकर्त्यांकडे बहुतांश टोकन्स असतील, तर ते टोकनच्या विभाजनावर आधारित ऑपरेशन्सवर प्रभाव टाकू शकतात.
  • एकूण पुरवठा पुरेसा आहे. कमी एकूण पुरवठा असलेल्या टोकन्समध्ये सहजपणे फेरफार केली जाऊ शकते.
  • टोकन्स काही मोजक्या एक्सचेंजेसपेक्षा जास्त ठिकाणी स्थित आहेत. जर सर्व टोकन्स एकाच एक्सचेंजमध्ये असतील, तर एक्सचेंजशी तडजोड झाल्यास टोकनवर अवलंबून असलेल्या कॉन्ट्रॅक्टशी तडजोड होऊ शकते.
  • वापरकर्त्यांना मोठ्या निधीचे किंवा फ्लॅश लोन्सचे संबंधित धोके समजतात. टोकन शिल्लकवर अवलंबून असलेल्या कॉन्ट्रॅक्ट्सनी मोठा निधी असलेल्या हल्लेखोरांचा किंवा फ्लॅश लोन्सद्वारे होणाऱ्या हल्ल्यांचा काळजीपूर्वक विचार केला पाहिजे.
  • टोकन फ्लॅश मिंटिंगला परवानगी देत नाही. फ्लॅश मिंटिंगमुळे शिल्लक आणि एकूण पुरवठ्यामध्ये लक्षणीय चढ-उतार होऊ शकतात, ज्यामुळे टोकनच्या ऑपरेशनमध्ये कठोर आणि सर्वसमावेशक ओव्हरफ्लो तपासणी आवश्यक असते.