ความปลอดภัยและการประเมินทางเทคนิคของ Smart Contract J1USD
รายงานการวิเคราะห์เชิงสถาปัตยกรรมและการตรวจสอบความถูกต้องอย่างครอบคลุมของระบบโทเค็น J1USD บน BNB Smart Chain ผ่านการตรวจสอบภายในด้านความปลอดภัยในการอัปเกรด การควบคุมการเข้าถึงที่ไม่สามารถเปลี่ยนแปลงได้ และการแยกสภาพคล่อง
ไม่พบข้อบกพร่องระดับวิกฤต
0 Critical
พบช่องโหว่ระดับสูง 0 รายการ / ระดับวิกฤต 0 รายการในสัญญาโทเค็นหลัก
เพดานอุปทานที่เข้มงวด
1,000,000,000
จำกัดอุปทานสูงสุดที่ไม่สามารถเปลี่ยนแปลงได้ที่ 1,000,000,000 J1USD ในระดับ Bytecode
การแยกบทบาทอย่างชัดเจน
RBAC Partitioned
ที่อยู่แยกต่างหากสำหรับผู้ดูแลระบบ, ผู้อัปเกรด, ผู้สร้างโทเค็น, ผู้เผา และผู้ระงับชั่วคราว
ช่องว่างพื้นที่จัดเก็บ UUPS
__gap[42]
สำรองพื้นที่ 42 ช่อง (__gap[42]) ป้องกันการชนกันของหน่วยความจำในการอัปเกรดในอนาคต
การปรับใช้บนเครือข่ายที่ได้รับการตรวจสอบ
ที่อยู่สัญญาทางการและการตรวจสอบ
J1USD ทำงานผ่านรูปแบบ UUPS Proxy มาตรฐาน OpenZeppelin ERC-1967 ด้านล่างนี้คือสัญญาต้นฉบับที่ได้รับการตรวจสอบซึ่งปรับใช้บนเครือข่ายหลัก BNB Smart Chain
J1USDProxy.sol
ที่อยู่โทเค็น BEP-20 มาตรฐานสำหรับผู้ใช้ ยอดคงเหลือ การอนุญาต และสถานะการจัดเก็บทั้งหมดจะอยู่ที่นี่อย่างถาวร เข้ากันได้กับ Grey Wallet, MetaMask, Trust Wallet และ DEX ทั้งหมดบน BNB Chain
J1USDTokenUpgradeable.sol
ประกอบด้วยกฎเกณฑ์ทางธุรกิจที่คอมไพล์แล้ว การตรวจสอบการปฏิบัติตามกฎระเบียบ ขอบเขตเพดานอุปทาน และตัวปรับแต่งบทบาท การเริ่มต้นโดยตรงจะถูกล็อกไว้ตั้งแต่ตอนปรับใช้
0xb3B34F032923DeA2ee8476Df26894E8fA9Eb7F54). The implementation address is stateless bytecode; funds directly transferred to the implementation contract cannot be retrieved by users.การประเมินการปฏิบัติตามกฎระเบียบและนโยบาย
กลไกแบล็กลิสต์ การระงับบัญชี และการบังคับใช้มาตรการลงโทษ
การประเมินกลไกการปฏิบัติตามกฎระเบียบของโทเค็น J1USD เป็นโทเค็น BEP-20 แบบเปิดที่ใช้โมเดลแบล็กลิสต์และการระงับแบบเชิงรุก — ไม่ใช่ไวท์ลิสต์ — ทำให้มั่นใจได้ถึงการทำงานร่วมกันได้อย่างอิสระโดยไม่ต้องขออนุญาต พร้อมทั้งสามารถบังคับใช้มาตรการทางกฎหมายได้
ไม่มีข้อกำหนดไวท์ลิสต์ (โอนเงินได้อย่างอิสระ)
J1USD ไม่มีการกำหนดไวท์ลิสต์การโอน กระเป๋าเงิน Web3 มาตรฐานใดๆ บน BNB Smart Chain สามารถรับ ถือ ส่ง และเทรด J1USD บน DEX ได้อย่างอิสระโดยไม่ต้องผ่าน KYC หรือลงทะเบียนล่วงหน้า
ฟังก์ชันแบล็กลิสต์ที่ชัดเจน (การรับมือกับความเสี่ยง)
บทบาทเฉพาะ BLACKLISTER_ROLE สามารถจำกัดที่อยู่ที่เกี่ยวข้องกับการแฮก การคว่ำบาตร หรือการโจรกรรม เพื่อไม่ให้หักหรือรับเงินได้
การระงับบัญชีบางส่วนและทั้งหมดที่มีความแม่นยำสูง
สัญญารองรับทั้ง freezeAccount() และ freezeBalance(amount) ในระหว่างข้อพิพาททางการค้า จะมีการล็อกเฉพาะจำนวนเงินที่เป็นข้อพิพาทเท่านั้น โดยเงินส่วนที่เหลือยังคงมีสภาพคล่อง
การคุ้มครองการริบและทำลายตามกฎหมาย (Wipe)
WIPER_ROLE สามารถทำลายยอดคงเหลือที่ถูกระงับได้ก็ต่อเมื่อมีคำสั่งศาลหรือหน่วยงานกำกับดูแลที่มีผลผูกพันเท่านั้น การทำลายทรัพย์สินในกระเป๋าเงินโดยพลการเป็นไปไม่ได้ในเชิงโครงสร้าง
การตรวจสอบ Hook ระดับ Bytecode: _update(), _approve() และ transferFrom()
Bytecode จะบังคับใช้การตรวจสอบความถูกต้องของการหักและเพิ่มเงินอย่างเข้มงวดภายใน _update(from, to, amount):
ผู้ส่งต้องไม่อยู่ในแบล็กลิสต์ (!isBlacklisted), บัญชีต้องไม่ถูกระงับทั้งหมด (!isAccountFrozen) และจำนวนเงินที่ขอโอนต้องไม่เกิน availableBalanceOf
ผู้รับต้องไม่อยู่ในแบล็กลิสต์และไม่ถูกระงับ เพื่อป้องกันไม่ให้ผู้ไม่หวังดีฟอกเงินที่ผิดกฎหมายเข้าสู่กระเป๋าเงินที่ถูกจำกัด
ทั้งเจ้าของโทเค็นและผู้ใช้สิทธิ์ต้องไม่มีข้อจำกัด นิติบุคคลที่ถูกจำกัดสิทธิ์จะไม่สามารถมอบอำนาจหรือโอนเงินแทนบุคคลที่สามได้
สถาปัตยกรรมสัญญาอัจฉริยะ
กลไกความปลอดภัยและการวิเคราะห์ค่าคงที่
การประเมินการตรวจสอบเชิงลึกของส่วนประกอบหลัก J1USD: ความปลอดภัยในการอัปเกรด Proxy, การป้องกันการทำซ้ำทางรหัสผ่าน, การแยกหน้าที่ และระบบป้องกันเหตุฉุกเฉิน
ความปลอดภัยในการอัปเกรด UUPS
สร้างขึ้นบนมาตรฐาน UUPS ของ OpenZeppelin ตัวแปรสถานะและยอดคงเหลือจะถูกจัดเก็บไว้ในสล็อตของ Proxy เท่านั้น ฟังก์ชันสร้างของสัญญาการใช้งานจะเรียก _disableInitializers() เพื่อป้องกันไม่ให้สัญญาตรรกะถูกอ้างสิทธิ์หรือเริ่มต้นอย่างอิสระ
ค่าคงที่เพดานอุปทานที่เข้มงวด
ไม่เหมือนกับ Stablecoin ทั่วไปที่สร้างได้ไม่จำกัด J1USD บังคับใช้ supplyCeiling ในระดับสัญญา ทุกๆ การ mint() จะตรวจสอบว่า totalSupply() + amount <= supplyCeiling ผู้ดูแลระบบไม่สามารถลดเพดานลงต่ำกว่าอุปทานหมุนเวียนในปัจจุบันได้
การกำจัดการทำซ้ำของธุรกรรม
การสร้างและการเผาโทเค็นจำเป็นต้องมีแฮชอ้างอิง bytes32 ที่ไม่ซ้ำกัน (issuanceReference / burnReference) หากมีความพยายามใช้แฮชซ้ำ ธุรกรรมจะถูกยกเลิกทันทีด้วยข้อผิดพลาด ReferenceAlreadyUsed
การถ่ายโอนสิทธิ์ผู้ดูแลระบบพร้อมการหน่วงเวลา
ใช้ AccessControlDefaultAdminRulesUpgradeable การถ่ายโอนบทบาทผู้ดูแลระบบไม่สามารถทำได้ในบล็อกเดียว โดยมีระยะเวลาหน่วงที่บังคับใช้ (defaultAdminDelay) เพื่อป้องกันภัยจากการสูญเสียคีย์ส่วนตัว
ความแม่นยำในการระงับบางส่วน
แทนที่จะระงับทั้งบัญชี J1USD นำเสนอ freezeBalance จำนวนเงินที่เป็นข้อพิพาทสามารถถูกระงับได้ตามสัดส่วน ในขณะที่ availableBalanceOf ยังคงอนุญาตให้ใช้จ่ายเงินส่วนที่ถูกต้องได้ตามปกติ
ที่อยู่ระบบที่ได้รับการคุ้มครอง
ที่อยู่หลักของโปรโตคอล (พูล PancakeSwap, คลัง และสัญญาปฏิบัติการ) ถูกกำหนดให้เป็น protectedSystemAddress ทำให้ได้รับการยกเว้นจากการระงับหรือการแบล็กลิสต์
เมทริกซ์การอนุญาตสิทธิ์
สิทธิ์การควบคุมการเข้าถึงตามบทบาท (RBAC)
การตรวจสอบสิทธิ์ของผู้ดูแลระบบ, การออกโทเค็น, การเผา, การปฏิบัติตามกฎระเบียบ และการรับมือเหตุฉุกเฉิน ทุกฟังก์ชันที่มีสิทธิ์พิเศษจำเป็นต้องมีลายเซ็นการเข้ารหัสที่ตรงกับบทบาทที่ได้รับมอบหมาย
| ตัวระบุบทบาท | ฟังก์ชันที่มีสิทธิ์พิเศษ | การควบคุมความปลอดภัยและค่าคงที่ |
|---|---|---|
| DEFAULT_ADMIN_ROLE0x00 (Admin Root) | กำหนดบทบาท อัปเดตขีดจำกัดเพดานอุปทาน และระบุที่อยู่ระบบที่ได้รับการคุ้มครอง | อยู่ภายใต้ OpenZeppelin AccessControlDefaultAdminRules พร้อมการหน่วงเวลาที่บังคับใช้ |
| UPGRADER_ROLEkeccak256('UPGRADER_ROLE') | อนุมัติการอัปเกรดตรรกะ UUPS ในฟังก์ชัน _authorizeUpgrade() | จำกัดเฉพาะการกำกับดูแลแบบหลายลายเซ็น (Multisig) ไม่สามารถเปลี่ยนสถานะได้หากไม่มีสัญญาที่ถูกต้อง |
| MINTER_ROLEkeccak256('MINTER_ROLE') | ออกโทเค็น J1USD ใหม่ตามหลักประกันที่ได้รับการยืนยันหรือความต้องการในการชำระหนี้ของโปรโตคอล | ถูกจำกัดอย่างเข้มงวดด้วย supplyCeiling ที่ไม่สามารถเปลี่ยนแปลงได้และการตรวจสอบ issuanceReference |
| BURNER_ROLEkeccak256('BURNER_ROLE') | ลดอุปทานของโทเค็นระหว่างการไถ่ถอนหรือการชำระหนี้ของโปรโตคอล | ต้องใช้ burnReference ที่ไม่ซ้ำ มีกลไกอนุญาตให้เผาจากบัญชีที่ถูกจำกัดเพื่อรักษาสภาพคล่องของโปรโตคอล |
| PAUSER_ROLEkeccak256('PAUSER_ROLE') | เปิดหรือปิดสวิตช์ตัดวงจรฉุกเฉินเพื่อระงับการโอนโทเค็นตามปกติ | ความสามารถในการป้องกันฉุกเฉินสำหรับเหตุการณ์วิกฤติตลาดหรือความผิดปกติของ Bridge |
| BLACKLISTER_ROLEkeccak256('BLACKLISTER_ROLE') | เพิ่มหรือลบที่อยู่ออกจากแบล็กลิสต์การหัก/รับเงินทั่วโลก | ไม่สามารถกำหนดเป้าหมายที่อยู่ใน protectedSystemAddress ได้ และต้องระบุแฮชอ้างอิงการตรวจสอบ |
| FREEZER_ROLEkeccak256('FREEZER_ROLE') | ระงับทั้งบัญชีหรือบางส่วนของยอดเงิน (freezeBalance, freezeAllCurrentBalance) | ช่วยให้สามารถระงับเฉพาะจำนวนเงินที่มีข้อพิพาทในขณะที่เงินส่วนที่เหลือยังคงใช้ได้ ที่อยู่ระบบได้รับการยกเว้น |
| WIPER_ROLEkeccak256('WIPER_ROLE') | ทำลายยอดคงเหลือที่ถูกระงับตามคำสั่งศาลหรือหน่วยงานกำกับดูแลที่ได้รับการรับรอง | ใช้ได้เฉพาะกับบัญชีที่ถูกระงับหรืออยู่ในแบล็กลิสต์แล้วเท่านั้น และต้องไม่เกินยอดเงินที่ถูกระงับ |
| RESCUE_ROLEkeccak256('RESCUE_ROLE') | กู้คืนโทเค็น BEP-20 ของบุคคลที่สามที่ไม่เกี่ยวข้องซึ่งส่งมายังสัญญาโดยไม่ได้ตั้งใจ | ห้ามแตะต้องยอดคงเหลือของโทเค็น J1USD โดยเด็ดขาด (RescueProhibitedToken) |
โครงสร้างพื้นฐานด้านสภาพคล่องและการประเมินพูล
สภาพคล่อง DEX บนเชน vs พูลรองแบบรวมศูนย์
J1USD สร้างสมดุลระหว่างตลาด AMM แบบกระจายอำนาจที่ไม่ต้องดูแลทรัพย์สินบน BNB Smart Chain กับสมุดคำสั่งซื้อขายแบบรวมศูนย์นอกเชน นี่คือรายละเอียดของที่อยู่พูล ลิงก์การซื้อขาย และขอบเขตความปลอดภัย
พูลผู้ดูแลสภาพคล่องอัตโนมัติ (AMM)
พูลสภาพคล่องสัญญาอัจฉริยะที่ไม่ต้องดูแลทรัพย์สินซึ่งทำงานบน BNB Smart Chain ผ่าน PancakeSwap ปราศจากความเสี่ยงจากการถือครองของบุคคลที่สาม การซื้อขายดำเนินการผ่าน Bytecode ที่ไม่เปลี่ยนแปลง
พูลสภาพคล่องแบบรวมศูนย์ที่ตรึง J1USD ไว้อย่างแน่นหนากับ 1.00 USD Coin เป็นที่อยู่ระบบที่ได้รับการคุ้มครองจากการระงับ
สะพาน AMM แบบกระจายอำนาจที่เชื่อมโยงโทเค็นยูทิลิตี้ AirJIT (JIT) และสินทรัพย์ในการชำระราคาของโปรโตคอล (J1USD)
พูลสมุดคำสั่งซื้อขายภายใน
AirJIT เสนอราคาตลาดรองสำหรับคู่หลักประกันสำคัญนอกเชนโดยไม่มีที่อยู่สัญญาอัจฉริยะเฉพาะ การจับคู่คำสั่งซื้อขายดำเนินการผ่านเครื่องมือจับคู่คำสั่งซื้อขายแบบรวมศูนย์ที่มีความเร็วสูง
เซิร์ฟเวอร์นอกเชนไม่มีคีย์ส่วนตัวที่ได้รับอนุญาตให้สร้างหรือเผาโทเค็น J1USD บน BNB Smart Chain
ยอดคงเหลือในบัญชีนอกเชนภายในถูกจำกัดอย่างเคร่งครัดตามการฝากโทเค็นที่ได้รับการยืนยันบนสัญญา Proxy บนเชน
คู่เทรดรองนอกเชนที่เปิดใช้งาน (สมุดคำสั่งซื้อขาย):
ผลการประเมินและการสร้างแบบจำลองภัยคุกคาม
การวิเคราะห์ช่องทางการโจมตีและการป้องกันอย่างเป็นทางการ
การตรวจสอบอย่างละเอียดเกี่ยวกับความเสี่ยงทางเศรษฐกิจ คณิตศาสตร์ และการเข้ารหัสที่ได้รับการตรวจสอบในระหว่างการตรวจสอบทางเทคนิค
การโจมตีแบบ Reentrancy
โทเค็นสืบทอดการอัปเดตสถานะ ERC-20 ของ OpenZeppelin (_update) อย่างเคร่งครัดโดยไม่มีการเรียกสัญญาภายนอกก่อนบันทึกยอดเงิน เป็นไปตามรูปแบบ Checks-Effects-Interactions อย่างสมบูรณ์
การควบคุมราคา Oracle และ Spot
บัญชีแยกประเภทโทเค็น J1USD ไม่ได้อ้างอิง Oracle ราคาภายนอกระหว่างการโอนหรือการอนุมัติ การคำนวณยอดเงินเป็นแบบภายใน 100% จึงขจัดช่องโหว่จากการกู้ยืมแบบ Flash Loan
การแย่งชิงตรรกะการใช้งาน
Constructor ของสัญญาการใช้งานจะรัน _disableInitializers() เมื่อปรับใช้ ผู้โจมตีไม่สามารถเริ่มต้นหรือครอบครองสัญญาตรรกะได้โดยอิสระ
การยึดอำนาจการกำกับดูแลโดยไม่พึงประสงค์
การเปลี่ยนบทบาทผู้ดูแลระบบจะบังคับใช้การหน่วงเวลาที่ไม่สามารถแก้ไขได้ (defaultAdminDelay) การสูญเสียคีย์เดียวไม่สามารถเข้าควบคุมการบริหารได้ในทันที
ค่าคงที่ด้านความปลอดภัย
ค่าคงที่ความปลอดภัยที่ได้รับการตรวจสอบอย่างเป็นทางการ
สรุปการตรวจสอบตรรกะระดับ Bytecode เพื่อยืนยันว่าความสมบูรณ์ของระบบได้รับการคุ้มครองในทุกสถานการณ์ขั้นรุนแรง
การบังคับใช้เพดานอุปทาน
การสร้างโทเค็นจะถูกยกเลิกด้วย SupplyCeilingExceeded หากยอดรวมเกินเพดาน ผู้ดูแลระบบไม่สามารถปรับลดเพดานลงต่ำกว่าอุปทานหมุนเวียนได้
การตรวจสอบสถานะ supplyCeiling ใน mint()การป้องกันการทำซ้ำในการสร้างและเผา
ทุกธุรกรรมต้องมีตัวระบุ bytes32 ที่ไม่ซ้ำกัน การเรียกซ้ำจะถูกปฏิเสธด้วย ReferenceAlreadyUsed เพื่อป้องกันการทำงานซ้ำซ้อน
การจับคู่ _usedIssuanceReferences และ _usedBurnReferencesการป้องกันการยึดครองตรรกะสัญญา
สัญญาการใช้งานจะล็อกตัวเริ่มต้นใน Constructor ผู้โจมตีไม่สามารถเริ่มต้นหรือครอบครองสัญญาตรรกะพื้นฐานได้โดยอิสระ
การเรียกใช้ _disableInitializers() ใน Constructorการป้องกันการชนกันของรูปแบบการจัดเก็บข้อมูล
การจัดเก็บของ Proxy เป็นไปตามมาตรฐาน ERC-1967 ช่องว่างสำรอง 42 คำทำให้มั่นใจว่าการอัปเกรดในอนาคตจะไม่เขียนทับตัวแปรสถานะเดิม
สล็อตมาตรฐาน ERC-1967 + ช่องว่าง uint256[42]การลดความเสี่ยงจากการยึดอำนาจผู้ดูแลระบบ
การโอนย้ายบทบาท DEFAULT_ADMIN_ROLE ไม่ได้เกิดขึ้นทันที กระบวนการสองขั้นตอนพร้อมการหน่วงเวลาช่วยป้องกันภัยพิบัติจากการสูญเสียคีย์เดียว
AccessControlDefaultAdminRules พร้อม defaultAdminDelayความคุ้มกันโครงสร้างพื้นฐานที่สำคัญ
ที่อยู่ระบบที่ลงทะเบียนไว้ (พูล DEX, คลัง, สัญญาการดำเนินงาน) ไม่สามารถถูกระงับหรือแบล็กลิสต์ได้ เพื่อขจัดความเสี่ยง DoS ต่อสภาพคล่อง
การตรวจสอบ _requireNotProtected() ในฟังก์ชันการปฏิบัติตามกฎการล็อกป้องกันการดูดโทเค็นตัวเองในการกู้คืน
อนุญาตให้กู้คืนโทเค็นของบุคคลที่สามที่ส่งมาผิดพลาดได้ แต่จะบล็อกคำสั่งใดๆ ที่มุ่งเป้าไปที่สัญญาโทเค็น J1USD โดยตรง
การตรวจสอบ RescueProhibitedToken ใน rescueERC20()ระบบตัดวงจรฉุกเฉินทั่วทั้งระบบ
PAUSER_ROLE ที่ได้รับอนุญาตสามารถหยุดการโอนและการอนุมัติได้ทันทีเมื่อเกิดเหตุการณ์ผิดปกติในตลาด โดยยังคงรักษาการทำลายโทเค็นตามกฎหมายไว้ได้
ตัวปรับแต่ง whenNotPaused บน transfer/mint/approveความแม่นยำในการระงับยอดเงินแบบแยกส่วน
อนุญาตให้ระงับเฉพาะยอดเงินที่มีข้อพิพาทโดยไม่ต้องล็อกกระเป๋าเงินทั้งหมดของผู้ใช้ ทำให้เงินส่วนที่เหลือยังคงมีสภาพคล่องอย่างสมบูรณ์
การแยกเชิงคณิตศาสตร์ใน availableBalanceOf()การเปิดเผยข้อมูลอย่างมีความรับผิดชอบ
รายงานช่องโหว่ด้านความปลอดภัย
AirJIT มีโครงการเปิดเผยช่องโหว่เชิงรุก หากคุณพบข้อบกพร่องด้านความปลอดภัยใน Proxy, การใช้งาน หรือโครงสร้างพื้นฐานสัญญาอัจฉริยะของ J1USD โปรดรายงานอย่างมีความรับผิดชอบ
โปรดเข้ารหัสรายงานที่มีความละเอียดอ่อนด้วย PGP หากเป็นไปได้ เราจะตอบรับการส่งข้อมูลที่ถูกต้องทั้งหมดภายใน 24 ชั่วโมง