
स्टार्कनेट स्मार्ट कॉन्ट्रैक्ट्स के लिए स्थैतिक विश्लेषक
Caracal, Starknet स्मार्ट कॉन्ट्रैक्ट्स के लिए SIERRA प्रतिनिधित्व पर एक स्थैतिक विश्लेषक उपकरण है।
पूर्व-संकलित बाइनरी हमारे रिलीज़ पेज पर उपलब्ध हैं। यदि आप Cairo कंपाइलर 1.x.x का उपयोग कर रहे हैं तो बाइनरी v0.1.x का उपयोग करें, अन्यथा यदि आप Cairo कंपाइलर 2.x.x का उपयोग कर रहे हैं तो v0.2.x का उपयोग करें।
आपको Rust कंपाइलर और Cargo की आवश्यकता है। Git से निर्माण:
cargo install --git https://github.com/crytic/caracal --profile release --force
स्थानीय प्रतिलिपि से निर्माण:
git clone https://github.com/crytic/caracal
cd caracal
cargo install --path . --profile release --force
डिटेक्टरों की सूची बनाएँ:
caracal detectors
प्रिंटरों की सूची बनाएँ:
caracal printers
एक स्टैंडअलोन cairo फ़ाइल के साथ उपयोग करने के लिए और यदि आपके पास स्थानीय cairo कंपाइलर बाइनरी है तो यह फ़ाइल को इंगित करने के लिए पर्याप्त है। अन्यथा एक बंडल कंपाइलर का उपयोग किया जाता है और आपको --corelib CLI विकल्प या CORELIB_PATH पर्यावरण चर सेट करके corelib लाइब्रेरी का पथ प्रदान करना होगा।
डिटेक्टर चलाएँ:
caracal detect path/file/to/analyze
caracal detect path/file/to/analyze --corelib path/to/corelib/src
प्रिंटर चलाएँ:
caracal print path/file/to/analyze --printer printer_to_use --corelib path/to/corelib/src
यदि आपके पास कई फ़ाइलों और कॉन्ट्रैक्ट्स वाला cairo प्रोजेक्ट है तो आपको --contract-path के साथ कॉन्ट्रैक्ट्स निर्दिष्ट करने की आवश्यकता हो सकती है। स्थानीय cairo कंपाइलर बाइनरी का उपयोग किया जाता है यदि उपलब्ध हो अन्यथा बंडल कंपाइलर का उपयोग किया जाता है। बाद के मामले में आपको ऊपर स्टैंडअलोन मामले के रूप में corelib निर्दिष्ट करने की भी आवश्यकता है। पथ वह निर्देशिका है जहाँ cairo_project.toml स्थित है।
डिटेक्टर चलाएँ:
caracal detect path/to/dir
caracal detect path/to/dir --contract-path token::myerc20::... token::myerc721::...
प्रिंटर चलाएँ:
caracal print path/to/dir --printer printer_to_use
यदि आपके पास Scarb का उपयोग करने वाला प्रोजेक्ट है तो आपको Scarb.toml में निम्नलिखित जोड़ने की आवश्यकता है:
[[target.starknet-contract]]
sierra = true
[cairo]
sierra-replace-ids = true
फिर वह पथ पास करें जहाँ Scarb.toml स्थित है। डिटेक्टर चलाएँ:
caracal detect path/to/dir
प्रिंटर चलाएँ:
caracal print path/to/dir --printer printer_to_use
Cairo स्तंभ उन कंपाइलर संस्करण(ों) को दर्शाता है जिनके लिए डिटेक्टर मान्य है।
cfg: प्रत्येक फ़ंक्शन के CFG को .dot फ़ाइल में निर्यात करेंcallgraph: फ़ंक्शन कॉल ग्राफ को .dot फ़ाइल में निर्यात करेंनिम्नलिखित विषयों पर विकी देखें:
| संख्या | डिटेक्टर | यह क्या पता लगाता है | प्रभाव | विश्वास | Cairo |
|---|
| 1 | controlled-library-call | उपयोगकर्ता नियंत्रित वर्ग हैश के साथ लाइब्रेरी कॉल | उच्च | मध्यम | 1 और 2 |
| 2 | unchecked-l1-handler-from | बिना पते की जाँच के L1 हैंडलर का पता लगाएँ | उच्च | मध्यम | 1 और 2 |
| 3 | felt252-unsafe-arithmetic | felt252 प्रकार के साथ उपयोगकर्ता नियंत्रित संचालन का पता लगाएँ, जो ओवरफ्लो/अंडरफ्लो सुरक्षित नहीं है | मध्यम | मध्यम | 1 और 2 |
| 4 | reentrancy | पता लगाएँ जब बाहरी कॉल से पहले एक स्टोरेज चर पढ़ा जाता है और बाद में लिखा जाता है | मध्यम | मध्यम | 1 और 2 |
| 5 | read-only-reentrancy | पता लगाएँ जब एक व्यू फ़ंक्शन बाहरी कॉल के बाद लिखे गए स्टोरेज चर को पढ़ता है | मध्यम | मध्यम | 1 और 2 |
| 6 | unused-events | परिभाषित लेकिन उत्सर्जित नहीं की गई घटनाएँ | मध्यम | मध्यम | 1 और 2 |
| 7 | unused-return | अप्रयुक्त रिटर्न मान | मध्यम | मध्यम | 1 और 2 |
| 8 | unenforced-view | फ़ंक्शन में व्यू डेकोरेटर है लेकिन स्थिति संशोधित करता है | मध्यम | मध्यम | 1 |
| 9 | tx-origin | एक्सेस नियंत्रण के रूप में लेनदेन मूल पते के उपयोग का पता लगाएँ | मध्यम | मध्यम | 2 |
| 10 | unused-arguments | अप्रयुक्त तर्क | निम्न | मध्यम | 1 और 2 |
| 11 | reentrancy-benign | पता लगाएँ जब बाहरी कॉल के बाद एक स्टोरेज चर लिखा जाता है लेकिन उससे पहले नहीं पढ़ा जाता | निम्न | मध्यम | 1 और 2 |
| 12 | reentrancy-events | पता लगाएँ जब बाहरी कॉल के बाद एक घटना उत्सर्जित होती है जिससे घटनाएँ क्रम से बाहर हो जाती हैं | निम्न | मध्यम | 1 और 2 |
| 13 | dead-code | निजी फ़ंक्शन जो कभी उपयोग नहीं किए गए | निम्न | मध्यम | 1 और 2 |
| 14 | use-after-pop-front | तत्व(ों) को हटाने के बाद किसी सरणी या स्पैन के उपयोग का पता लगाएँ | निम्न | मध्यम | 1 और 2 |