เครื่องสแกนการอนุญาตอนุญาตให้สแกนโปรโตคอล DeFi หรือระบบสัญญาอัจฉริยะใดๆ สำหรับฟังก์ชันที่ได้รับอนุญาต โดยส่งคืนรายการสัญญาอัจฉริยะ ฟังก์ชันที่ได้รับอนุญาตที่ระบุ และเจ้าของสิทธิ์ที่เกี่ยวข้อง
ในการสแกนโปรโตคอลสำหรับฟังก์ชันที่ได้รับอนุญาต โปรโตคอลเป้าหมายจะถูกระบุในแง่ของห่วงโซ่และชุดที่อยู่ของสัญญาที่ปรับใช้ทั้งหมด สัญญาเหล่านี้ทั้งหมดจะต้องได้รับการตรวจสอบใน Public Block Explorer คุณสามารถดูรายชื่อเชนและนักสำรวจที่รองรับได้ที่นี่ จากนั้นเครื่องสแกนสิทธิ์จะดาวน์โหลดซอร์สโค้ดของสัญญาจาก explorer สแกนสิทธิ์เหล่านี้ อ่านเจ้าของสิทธิ์จากช่องจัดเก็บข้อมูลที่เกี่ยวข้อง และเขียนผลลัพธ์ในไฟล์เอาต์พุต
solc
ไพเลอร์สร้างและเปิดใช้งานสภาพแวดล้อม Python เสมือน และติดตั้งแพ็คเกจ Python ที่จำเป็นด้วย
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
คัดลอกไฟล์ .env.example
ไปยัง .env
และกรอก URL ของผู้ให้บริการ RPC ของคุณและคีย์ Block Explorer API ที่ถูกต้อง ทั้งนี้ขึ้นอยู่กับเครือข่ายที่ใช้งานสัญญา จากนั้นโหลดตัวแปรด้วย
source .env
กรอกไฟล์ ./contracts.json
ให้สมบูรณ์ด้วยชื่อลูกโซ่และที่อยู่ของสัญญาทั้งหมดของโปรโตคอล ค้นหารายการเครือข่ายที่รองรับได้ที่นี่
จากนั้นรันสคริปต์สแกนเนอร์ด้วย
python src/main.py
หมายเหตุ หากคุณไม่มีเวอร์ชันคอมไพเลอร์ solc
ที่ถูกต้อง สคริปต์จะถูกติดตั้งโดยอัตโนมัติ
สคริปต์จะเขียนผลลัพธ์ของเครื่องสแกนลงในไฟล์ใหม่ ./permissions.json
เมื่อคุณวิเคราะห์เสร็จแล้ว คุณสามารถปิดใช้งานสภาพแวดล้อม Pyhton ได้อีกครั้งด้วยคำสั่งต่อไปนี้
source deactivate
เครือข่ายที่รองรับในการดึงข้อมูลและคัดกรองสัญญา
"mainnet:" : (".etherscan.io", "etherscan.io")
"optim:" : ("-optimistic.etherscan.io", "optimistic.etherscan.io")
"goerli:" : ("-goerli.etherscan.io", "goerli.etherscan.io")
"sepolia:" : ("-sepolia.etherscan.io", "sepolia.etherscan.io")
"tobalaba:" : ("-tobalaba.etherscan.io", "tobalaba.etherscan.io")
"bsc:" : (".bscscan.com", "bscscan.com")
"testnet.bsc:" : ("-testnet.bscscan.com", "testnet.bscscan.com")
"arbi:" : (".arbiscan.io", "arbiscan.io")
"testnet.arbi:" : ("-testnet.arbiscan.io", "testnet.arbiscan.io")
"poly:" : (".polygonscan.com", "polygonscan.com")
"mumbai:" : ("-testnet.polygonscan.com", "testnet.polygonscan.com")
"avax:" : (".snowtrace.io", "snowtrace.io")
"testnet.avax:" : ("-testnet.snowtrace.io", "testnet.snowtrace.io")
"ftm:" : (".ftmscan.com", "ftmscan.com")
"goerli.base:" : ("-goerli.basescan.org", "goerli.basescan.org")
"base:" : (".basescan.org", "basescan.org")
"gno:" : (".gnosisscan.io", "gnosisscan.io")
"polyzk:" : ("-zkevm.polygonscan.com", "zkevm.polygonscan.com")
"blast:" : (".blastscan.io", "blastscan.io")
เครื่องสแกนการอนุญาตไม่รับประกันว่าชุดที่อยู่สัญญาที่ให้ไว้นั้นสมบูรณ์ หรือในความเป็นจริงแล้วสัญญาเป็นส่วนหนึ่งของโปรโตคอล
สิทธิ์จะถูกระบุโดยการใช้ตัวดัดแปลง onlyOwner
หรือการตรวจสอบ msg.sender
ในฟังก์ชันสัญญา อาจมีรูปแบบอื่นของการอนุญาตที่ไม่ได้บันทึกด้วยวิธีนี้
เครื่องสแกนสิทธิ์จะพยายามอ่านเจ้าของสิทธิ์จากที่จัดเก็บสัญญาโดยตรง สิ่งนี้อาจล้มเหลวได้ โดยเฉพาะอย่างยิ่งหากสัญญาใช้รูปแบบความสามารถในการอัปเกรด และควรได้รับการตรวจสอบด้วยตนเอง
เครื่องสแกนสิทธิ์จะระบุ เฉพาะ สิทธิ์และเจ้าของเท่านั้น แต่ไม่ได้ประเมินผลกระทบหรือความเสี่ยงของการอนุญาตดังกล่าว
เครื่องสแกนสิทธิ์ถูกสร้างขึ้นบนเครื่องวิเคราะห์แบบคงที่ของ Slither เราขอขอบคุณทีมงาน Trail of Bits ที่สร้างเครื่องมือโอเพ่นซอร์สนี้และงานทั้งหมดที่พวกเขาทำเพื่อความปลอดภัยในภาค DeFi