امنیت و ارزیابی فنی قرارداد هوشمند J1USD
گزارش جامع تجزیه و تحلیل معماری و اعتبارسنجی سیستم توکن J1USD در BNB Smart Chain. بررسی شده به صورت فنی برای امنیت ارتقاء، کنترلهای دسترسی غیرقابل تغییر، پایدارندههای عرضه و تفکیک نقدینگی بین پلتفرمها.
صفر یافته حیاتی
0 Critical
۰ آسیبپذیری بالا / ۰ آسیبپذیری حیاتی در قراردادهای اصلی توکن شناسایی شد.
سقف سخت عرضه
1,000,000,000
محدودیت غیرقابل تغییر ۱٬۰۰۰٬۰۰۰٬۰۰۰ J1USD در سطح بایتکد اعمال شده است.
تفکیک دقیق نقشها
RBAC Partitioned
آدرسهای مستقل جداگانه برای مدیر، ارتقادهنده، ضربکننده، سوزاننده و متوقفکننده.
شکافهای ذخیرهسازی UUPS
__gap[42]
شکاف رزرو شده ۴۲ اسلات (__gap[42]) برای جلوگیری از تداخل حافظه در ارتقاءهای آتی.
استقرارهای تأیید شده روی زنجیره
آدرسهای رسمی قرارداد و اعتبارسنجی
توکن J1USD از طریق الگوی ماژولار پروکسی UUPS 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 دریافت، نگهداری، ارسال و معامله کند.
قابلیت صریح لیست سیاه (انطباق با ریسک)
نقش اختصاصی BLACKLISTER_ROLE میتواند آدرسهای مخرب مرتبط با هک، تحریم یا سرقت را محدود کرده و از واریز یا برداشت وجه جلوگیری کند.
مسدودسازی دقیق جزئی و کامل حساب
قرارداد از هر دو تابع freezeAccount() و freezeBalance(amount) پشتیبانی میکند. در طول اختلافات تجاری، تنها مبلغ مورد مناقشه قفل میشود و نقدینگی سایر وجوه حفظ میگردد.
حفاظت مصادره قانونی تأیید شده (Wipe)
نقش WIPER_ROLE تنها بر اساس احکام قضایی یا دستورات نظارتی الزامآور مجاز به نابودسازی موجودیهای مسدود شده است. نابودی خودسرانه داراییهای کاربران از نظر ساختاری غیرممکن است.
اعتبارسنجی قلابها در سطح بایتکد: _update()، _approve() و transferFrom()
بایتکد اعتبارسنجیهای سختگیرانهای را برای واریز و برداشت در داخل _update(from, to, amount) اعمال میکند:
فرستنده نباید در لیست سیاه باشد (!isBlacklisted)، حساب نباید به طور کامل مسدود باشد (!isAccountFrozen)، و مبلغ نباید از availableBalanceOf بیشتر باشد.
گیرنده نباید در لیست سیاه یا مسدود باشد. این امر مانع از پولشویی وجوه نامشروع توسط مجرمان به کیف پولهای امانی محدود میشود.
مالک توکن و نماینده خرجکننده هر دو باید بدون محدودیت باشند. اشخاص محدود شده نمیتوانند سهمیه تفویض کنند یا تراکنشهای شخص ثالث انجام دهند.
معماری قرارداد هوشمند
مکانیسمهای امنیتی و تحلیل پایدارندهها
ارزیابی دقیق اجزای اصلی J1USD: امنیت ارتقاء پروکسی، جلوگیری از تکرار رمزنگاری، تفکیک وظایف و تدابیر اضطراری.
امنیت ارتقاءپذیری UUPS
ساخته شده بر پایه استاندارد UUPS اوپنزپلین. متغیرهای وضعیت و موجودیها منحصراً در اسلاتهای پروکسی ذخیره میشوند. سازنده پیادهسازی _disableInitializers() را اجرا میکند تا از تصاحب مستقل جلوگیری شود.
پایدارنده سقف سخت عرضه
برخلاف استیبلکوینهای با ضرب نامحدود، 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(). | محدود به حاکمیت چندامضایی پروتکل؛ بدون قرارداد معتبر نمیتواند وضعیت را تغییر دهد. |
| MINTER_ROLEkeccak256('MINTER_ROLE') | ضرب توکنهای جدید J1USD در برابر وثیقههای تأیید شده یا الزامات تسویه حساب. | به شدت توسط supplyCeiling غیرقابل تغییر و هش issuanceReference محدود شده است. |
| BURNER_ROLEkeccak256('BURNER_ROLE') | کاهش عرضه توکن در زمان بازخرید یا تسویه بدهیهای پروتکل. | نیازمند burnReference یکتا. استثنای محدود برای سوزاندن از حسابهای محدود جهت حفظ توان مالی. |
| PAUSER_ROLEkeccak256('PAUSER_ROLE') | فعال یا غیرفعالسازی مدارشکن اضطراری برای توقف انتقالهای عادی توکن. | قابلیت دفاعی اضطراری برای بحرانهای شدید بازار یا ناهنجاریهای پل میانزنجیرهای. |
| BLACKLISTER_ROLEkeccak256('BLACKLISTER_ROLE') | افزودن یا حذف آدرسها از لیست سیاه واریز و برداشت جهانی. | نمیتواند آدرسهای protectedSystemAddress را هدف قرار دهد. نیازمند هش پیگیری انطباق است. |
| FREEZER_ROLEkeccak256('FREEZER_ROLE') | مسدودسازی کل حساب یا مبالغ مشخص (freezeBalance, freezeAllCurrentBalance). | امکان مسدودسازی مبالغ مورد مناقشه با حفظ نقدینگی سایر وجوه. آدرسهای سیستم مصون هستند. |
| WIPER_ROLEkeccak256('WIPER_ROLE') | نابودسازی موجودیهای مسدود شده طبق حکم قضایی یا نظارتی معتبر. | فقط برای حسابهای از پیش مسدود شده اعمال میشود؛ نمیتواند از مبلغ مسدود فراتر رود. |
| RESCUE_ROLEkeccak256('RESCUE_ROLE') | بازیابی توکنهای BEP-20 شخص ثالث که اشتباهاً به قرارداد ارسال شدهاند. | دست زدن به موجودی توکن J1USD کاملاً ممنوع است (RescueProhibitedToken). |
زیرساخت نقدینگی و ارزیابی استخرها
نقدینگی DEX آنچین در برابر استخرهای ثانویه متمرکز
توکن J1USD بازارهای AMM غیرامانی غیرمتمرکز در BNB Smart Chain را با دفاتر سفارش متمرکز آفچین متعادل میکند. در اینجا مشخصات آدرسهای استخر، لینکهای معاملاتی و مرزهای امنیتی آمده است.
استخرهای بازارساز خودکار (AMM)
استخرهای نقدینگی قرارداد هوشمند غیرامانی که مستقیماً در BNB Smart Chain از طریق PancakeSwap کار میکنند. بدون ریسک نگهداری شخص ثالث؛ معاملات همتا با قرارداد از طریق بایتکد اجرا میشوند.
استخر نقدینگی متمرکز که J1USD را به طور دقیق با 1.00 USD Coin تثبیت میکند. آدرس سیستمی محافظت شده و مصون از مسدودسازی.
پل غیرمتمرکز AMM که توکن کاربردی AirJIT (JIT) و دارایی تسویه حساب (J1USD) را متصل میکند.
استخرهای دفتر سفارش داخلی
پلتفرم AirJIT بازارهای ثانویه را روی جفتهای وثیقه اصلی بدون نیاز به آدرس قرارداد اختصاصی در آفچین ارائه میدهد. تسویه حساب از طریق موتورهای تطبیق متمرکز با سرعت بالا انجام میشود.
سرورهای آفچین هیچ کلید خصوصی برای ضرب یا سوزاندن توکن J1USD در BNB Smart Chain ندارند.
موجودی حسابهای داخلی آفچین به دقت با سپردههای توکن پروکسی تأیید شده روی زنجیره محدود شده است.
جفتهای معاملاتی فعال آفچین (دفتر سفارش متمرکز):
یافتههای ارزیابی و مدلسازی تهدیدات
تحلیل بردارهای حمله و دفاعیات رسمی
بررسی جامع سطوح بالقوه حملات اقتصادی، ریاضی و رمزنگاری که در طول ارزیابی فنی مورد بررسی قرار گرفتند.
حملات ورود مجدد (Reentrancy)
توکن بهروزرسانیهای حالت ERC-20 اوپنزپلین (_update) را بدون فراخوانی خارجی غیرقابل اعتماد قبل از تسویه، به ارث میبرد. انطباق کامل با Checks-Effects-Interactions.
دستکاری اوراکل و قیمت اسپات
دفتر کل توکن J1USD هنگام انتقال به اوراکلهای قیمت خارجی مراجعه نمیکند. محاسبات ۱۰۰٪ داخلی است و دستکاری از طریق وام سریع (Flash Loan) غیرممکن است.
سرقت پیادهسازی منطق
سازنده پیادهسازی _disableInitializers() را در زمان استقرار اجرا میکند. قرارداد زیرین نمیتواند توسط مهاجم به طور مستقل تصاحب شود.
تصاحب خصمانه حاکمیت
تخصیص مجدد نقش مدیر مستلزم تاخیر زمانی تغییرناپذیر (defaultAdminDelay) است. افشای یک کلید نمیتواند بلافاصله کنترل کامل را به دست گیرد.
پایدارندههای امنیت
پایدارندههای امنیتی بررسی شده به صورت رسمی
خلاصه بررسیهای سطح بایتکد که تأیید میکند یکپارچگی سیستم در تمام شرایط بحرانی حفظ میشود.
اجرای سقف عرضه
عملیات ضرب در صورت فراتر رفتن از سقف با SupplyCeilingExceeded لغو میشود. مدیر مجاز به کاهش سقف زیر میزان گردش فعلی نیست.
بررسی وضعیت supplyCeiling در mint()جلوگیری از تکرار در ضرب و سوزاندن
هر تراکنش نیازمند یک شناسه bytes32 یکتا است. درخواستهای تکراری با ReferenceAlreadyUsed رد میشوند تا از اجرای مجدد جلوگیری شود.
نگاشتهای _usedIssuanceReferences و _usedBurnReferencesجلوگیری از سرقت منطق پیادهسازی
قرارداد پیادهسازی مقداردهی اولیه را در سازنده قفل میکند. مهاجمان نمیتوانند قرارداد منطق را به طور مستقل تصاحب کنند.
فراخوانی _disableInitializers() در سازندهمحافظت در برابر تداخل چیدمان حافظه
حافظه پروکسی از استانداردهای ERC-1967 پیروی میکند. فاصله ۴۲ کلمهای تضمین میکند که ارتقاءهای آتی متغیرهای موجود را بازنویسی نکنند.
اسلاتهای استاندارد ERC-1967 + شکاف uint256[42]کاهش ریسک تصاحب خصمانه مدیریت
انتقال DEFAULT_ADMIN_ROLE آنی نیست. فرآیند دو مرحلهای با تاخیر زمانی اجباری از فجایع ناشی از لو رفتن کلید جلوگیری میکند.
قوانین AccessControlDefaultAdminRules با defaultAdminDelayمصونیت زیرساختهای حیاتی
آدرسهای سیستم ثبتشده (استخرهای DEX، خزانهداری، قراردادهای عملیاتی) مسدود نمیشوند و خطر DoS بر نقدینگی برطرف میشود.
بررسی _requireNotProtected() در توابع انطباققفل جلوگیری از تخلیه خود در بازیابی توکن
امکان بازیابی توکنهای شخص ثالث ارسال شده به اشتباه را میدهد، اما فراخوانیها برای برداشت خود توکن J1USD را کاملاً مسدود میکند.
بررسی RescueProhibitedToken در rescueERC20()مدارشکن اضطراری سراسری
نقش PAUSER_ROLE میتواند در صورت بروز بحران در بازار، فوراً انتقالها را متوقف کند، در حالی که احکام قانونی همچنان حفظ میشوند.
اصلاحکننده whenNotPaused بر روی transfer/mint/approveدقت مسدودسازی موجودی تفکیک شده
امکان مسدود کردن مبالغ مورد مناقشه را بدون قفل کردن کل کیف پول کاربر فراهم میکند و باقی وجوه پاک را کاملاً نقد نگه میدارد.
تفکیک حسابی در availableBalanceOf()افشای مسئولانه آسیبپذیریها
گزارش یک آسیبپذیری امنیتی
پلتفرم AirJIT یک برنامه فعال برای افشای آسیبپذیریها دارد. اگر مشکلی در پروکسی J1USD، پیادهسازی یا زیرساخت قرارداد هوشمند پیدا کردید، با مسئولیت گزارش دهید.
در صورت امکان گزارشهای حساس را با PGP رمزگذاری کنید. ما ظرف ۲۴ ساعت تمام گزارشهای معتبر را بررسی و تأیید میکنیم.