टोकन एकीकरण चेकलिस्ट
किसी भी यादृच्छिक (arbitrary) टोकन के साथ इंटरैक्ट करते समय इस चेकलिस्ट का पालन करें। सुनिश्चित करें कि आप प्रत्येक आइटम से जुड़े जोखिमों को समझते हैं, और इन नियमों के किसी भी अपवाद का औचित्य साबित करते हैं।
सुविधा के लिए, सभी स्लिथर यूटिलिटीज़ (opens in a new tab) को सीधे किसी टोकन पते पर चलाया जा सकता है, जैसे:
स्लिथर ट्यूटोरियल का उपयोग करना
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 (opens in a new tab) पर उपयुक्त संपर्कों की तलाश करें।
- महत्वपूर्ण घोषणाओं के लिए उनके पास एक सुरक्षा मेलिंग सूची है। महत्वपूर्ण समस्याएं पाए जाने या अपग्रेड होने पर उनकी टीम को उपयोगकर्ताओं (आप जैसे!) को सलाह देनी चाहिए।
ERC अनुरूपता
स्लिथर में एक यूटिलिटी, slither-check-erc (opens in a new tab) शामिल है, जो कई संबंधित ERC मानकों के प्रति टोकन की अनुरूपता की समीक्षा करती है। यह समीक्षा करने के लिए slither-check-erc का उपयोग करें कि:
- ट्रांसफर (transfer) और transferFrom एक बूलियन (boolean) लौटाते हैं। कई टोकन इन फ़ंक्शंस पर बूलियन नहीं लौटाते हैं। परिणामस्वरूप, अनुबंध में उनके कॉल विफल हो सकते हैं।
- यदि उपयोग किया जाता है, तो name, decimals, और symbol फ़ंक्शंस मौजूद हैं। ये फ़ंक्शंस ERC-20 मानक में वैकल्पिक हैं और हो सकता है कि मौजूद न हों।
- Decimals एक uint8 लौटाता है। कई टोकन गलत तरीके से uint256 लौटाते हैं। यदि ऐसा है, तो सुनिश्चित करें कि लौटाया गया मान 255 से कम है।
- टोकन ज्ञात ERC-20 रेस कंडीशन (opens in a new tab) को कम करता है। ERC-20 मानक में एक ज्ञात ERC-20 रेस कंडीशन है जिसे हमलावरों को टोकन चुराने से रोकने के लिए कम किया जाना चाहिए।
- टोकन एक ERC-777 टोकन नहीं है और ट्रांसफर (transfer) और transferFrom में कोई बाहरी फ़ंक्शन कॉल नहीं है। ट्रांसफर फ़ंक्शंस में बाहरी कॉल रीएंट्रेंसी (reentrancies) का कारण बन सकते हैं।
स्लिथर में एक यूटिलिटी, slither-prop (opens in a new tab) शामिल है, जो यूनिट परीक्षण और सुरक्षा गुण उत्पन्न करती है जो कई सामान्य ERC खामियों की खोज कर सकती है। यह समीक्षा करने के लिए slither-prop का उपयोग करें कि:
- अनुबंध slither-prop से सभी यूनिट परीक्षणों और सुरक्षा गुणों को पास करता है। उत्पन्न यूनिट परीक्षण चलाएं, फिर एकिड्ना (opens in a new tab) और मैन्टिकोर (opens in a new tab) के साथ गुणों की जांच करें।
अंत में, कुछ ऐसी विशेषताएं हैं जिन्हें स्वचालित रूप से पहचानना मुश्किल है। इन स्थितियों के लिए मैन्युअल रूप से समीक्षा करें:
- ट्रांसफर (transfer) और transferFrom को शुल्क नहीं लेना चाहिए। अपस्फीतिकारी (Deflationary) टोकन अप्रत्याशित व्यवहार का कारण बन सकते हैं।
- टोकन से अर्जित संभावित ब्याज को ध्यान में रखा जाता है। कुछ टोकन टोकन धारकों को ब्याज वितरित करते हैं। यदि ध्यान में नहीं रखा गया तो यह ब्याज अनुबंध में फंस सकता है।
अनुबंध संरचना
- अनुबंध अनावश्यक जटिलता से बचता है। टोकन एक सरल अनुबंध होना चाहिए; जटिल कोड वाले टोकन के लिए उच्च स्तर की समीक्षा की आवश्यकता होती है। जटिल कोड की पहचान करने के लिए स्लिथर के human-summary printer (opens in a new tab) का उपयोग करें।
- अनुबंध SafeMath का उपयोग करता है। जो अनुबंध SafeMath का उपयोग नहीं करते हैं, उन्हें उच्च स्तर की समीक्षा की आवश्यकता होती है। SafeMath के उपयोग के लिए मैन्युअल रूप से अनुबंध का निरीक्षण करें।
- अनुबंध में केवल कुछ गैर-टोकन-संबंधित फ़ंक्शंस हैं। गैर-टोकन-संबंधित फ़ंक्शंस अनुबंध में किसी समस्या की संभावना को बढ़ाते हैं। अनुबंध में उपयोग किए गए कोड की व्यापक रूप से समीक्षा करने के लिए स्लिथर के contract-summary printer (opens in a new tab) का उपयोग करें।
- टोकन का केवल एक पता है। बैलेंस अपडेट के लिए कई प्रवेश बिंदुओं वाले टोकन पते के आधार पर आंतरिक बहीखाता (bookkeeping) को तोड़ सकते हैं (उदा.,
balances[token_address][msg.sender]वास्तविक बैलेंस को नहीं दर्शा सकता है)।
मालिक के विशेषाधिकार
- टोकन अपग्रेड करने योग्य नहीं है। अपग्रेड करने योग्य अनुबंध समय के साथ अपने नियम बदल सकते हैं। यह निर्धारित करने के लिए कि क्या अनुबंध अपग्रेड करने योग्य है, स्लिथर के human-summary printer (opens in a new tab) का उपयोग करें।
- मालिक के पास सीमित मिंटिंग क्षमताएं हैं। दुर्भावनापूर्ण या समझौता किए गए (compromised) मालिक मिंटिंग क्षमताओं का दुरुपयोग कर सकते हैं। मिंटिंग क्षमताओं की समीक्षा करने के लिए स्लिथर के human-summary printer (opens in a new tab) का उपयोग करें, और कोड की मैन्युअल रूप से समीक्षा करने पर विचार करें।
- टोकन रोके जाने योग्य (pausable) नहीं है। दुर्भावनापूर्ण या समझौता किए गए मालिक रोके जाने योग्य टोकन पर निर्भर अनुबंधों को फंसा सकते हैं। रोके जाने योग्य कोड की मैन्युअल रूप से पहचान करें।
- मालिक अनुबंध को ब्लैकलिस्ट नहीं कर सकता। दुर्भावनापूर्ण या समझौता किए गए मालिक ब्लैकलिस्ट वाले टोकन पर निर्भर अनुबंधों को फंसा सकते हैं। ब्लैकलिस्टिंग सुविधाओं की मैन्युअल रूप से पहचान करें।
- टोकन के पीछे की टीम ज्ञात है और उसे दुरुपयोग के लिए जिम्मेदार ठहराया जा सकता है। अनाम विकास टीमों वाले अनुबंध, या जो कानूनी आश्रयों (legal shelters) में रहते हैं, उन्हें उच्च स्तर की समीक्षा की आवश्यकता होनी चाहिए।
टोकन की कमी (Scarcity)
टोकन की कमी के मुद्दों की समीक्षा के लिए मैन्युअल समीक्षा की आवश्यकता होती है। इन स्थितियों की जांच करें:
- किसी भी उपयोगकर्ता के पास अधिकांश आपूर्ति का स्वामित्व नहीं है। यदि कुछ उपयोगकर्ताओं के पास अधिकांश टोकन हैं, तो वे टोकन के विभाजन (repartition) के आधार पर संचालन को प्रभावित कर सकते हैं।
- कुल आपूर्ति पर्याप्त है। कम कुल आपूर्ति वाले टोकन में आसानी से हेरफेर किया जा सकता है।
- टोकन कुछ से अधिक एक्सचेंजों में स्थित हैं। यदि सभी टोकन एक ही एक्सचेंज में हैं, तो एक्सचेंज के साथ समझौता होने पर टोकन पर निर्भर अनुबंध से भी समझौता हो सकता है।
- उपयोगकर्ता बड़े फंड या फ्लैश लोन से जुड़े जोखिमों को समझते हैं। टोकन बैलेंस पर निर्भर अनुबंधों को बड़े फंड वाले हमलावरों या फ्लैश लोन के माध्यम से होने वाले हमलों पर सावधानीपूर्वक विचार करना चाहिए।
- टोकन फ्लैश मिंटिंग की अनुमति नहीं देता है। फ्लैश मिंटिंग से बैलेंस और कुल आपूर्ति में भारी उतार-चढ़ाव हो सकता है, जिसके लिए टोकन के संचालन में सख्त और व्यापक ओवरफ़्लो जांच की आवश्यकता होती है।