Безпека та технічна оцінка смарт-контракту J1USD
Комплексний звіт з архітектурного аналізу та перевірки токен-системи J1USD на BNB Smart Chain. Проведено внутрішній технічний огляд безпеки оновлень, незмінного контролю доступу, інваріантів емісії та сегрегації ліквідності.
Нуль критичних проблем
0 Critical
0 високих / 0 критичних вразливостей виявлено в основних контрактах токена.
Жорстка межа емісії
1,000,000,000
Незмінний ліміт в 1 000 000 000 J1USD зафіксовано на рівні байткоду.
Розподіл ролей
RBAC Partitioned
Окремі адреси для адміністратора, оновлення, емісії, спалювання та паузи.
Слоти пам'яті UUPS
__gap[42]
Резервний зазор у 42 слоти (__gap[42]) запобігає конфліктам пам'яті при оновленнях.
ПЕРЕВІРЕНІ РОЗГОРТАННЯ ON-CHAIN
Канонічні адреси контрактів та верифікація
J1USD функціонує за модульним шаблоном проксі OpenZeppelin ERC-1967 UUPS. Нижче наведено перевірені вихідні контракти, розгорнуті в основній мережі 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 може знищувати заморожені баланси виключно на підставі обов'язкових судових або регуляторних рішень. Довільне знищення активів гаманців є структурно неможливим.
Перевірка хуків на рівні байткоду: _update(), _approve() та transferFrom()
Байткод виконує сувору перевірку дебету і кредиту всередині _update(from, to, amount):
Відправник НЕ повинен бути в чорному списку (!isBlacklisted), рахунок НЕ повинен бути повністю заморожений (!isAccountFrozen), а сума не може перевищувати availableBalanceOf.
Одержувач НЕ повинен бути в чорному списку та НЕ повинен бути заморожений. Запобігає відмиванню коштів через обмежені кастодіальні гаманці.
Власник і оператор токенів повинні бути вільні від обмежень. Обмежені суб'єкти не можуть делегувати ліміти або здійснювати перекази третіх осіб.
АРХІТЕКТУРА СМАРТ-КОНТРАКТУ
Механізми безпеки та аналіз інваріантів
Поглиблена оцінка ключових компонентів J1USD: безпека оновлень проксі, криптографічна дедуплікація, розподіл обов'язків та аварійні запобіжники.
Безпека оновлень UUPS
Побудовано на стандарті UUPS від OpenZeppelin. Змінні стану та баланси зберігаються суто в слотах проксі. Конструктор реалізації викликає _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 vs Централізовані вторинні пули
J1USD підтримує баланс між некастодіальними децентралізованими ринками AMM на BNB Smart Chain та централізованими офчейн-книгами ордерів. Нижче наведено адреси пулів, торгові посилання та межі безпеки.
Пули автоматичних маркет-мейкерів (AMM)
Некастодіальні пули ліквідності на смарт-контрактах, що працюють на BNB Smart Chain через PancakeSwap. Ризик утримання третіми особами нульовий; угоди виконуються peer-to-contract через незмінний байткод.
Пул концентрованої ліквідності, що жорстко прив'язує J1USD до 1,00 USD Coin. Захищена системна адреса з імунітетом до заморозок.
Децентралізований міст AMM, що зв'язує утилітарний токен AirJIT (JIT) та розрахунковий актив (J1USD).
Внутрішні пули книги ордерів
AirJIT котирує вторинні ринки за основними парами забезпечення офчейн без окремих адрес смарт-контрактів. Зведення ордерів відбувається через високопродуктивні механізми метчингу.
Офчейн-сервери не мають закритих ключів, які б дозволяли випускати або спалювати токени J1USD на BNB Smart Chain.
Внутрішні баланси рахунків офчейн суворо обмежені перевіреними депозитами на ончейн-проксі-контракті.
Активні офчейн-торгові пари (Книга ордерів):
РЕЗУЛЬТАТИ ОЦІНКИ ТА МОДЕЛЮВАННЯ ЗАГРОЗ
Аналіз векторів атак та формальний захист
Вичерпний огляд економічних, математичних та криптографічних векторів атак, перевірених під час технічного аудиту.
Атаки повторного входу (Reentrancy)
Токен успадковує оновлення стану ERC-20 від OpenZeppelin (_update) без викликів зовнішніх контрактів до оновлення балансів. Повна відповідність шаблону Checks-Effects-Interactions.
Маніпуляція оракулами та спотовими цінами
Реєстр токена J1USD не звертається до зовнішніх оракулів цін під час переказів. Арифметика на 100% внутрішня, що унеможливлює маніпуляції через миттєві кредити (flash loans).
Захоплення логіки реалізації
Конструктор реалізації викликає _disableInitializers() при розгортанні. Базовий контракт логіки не може бути ініціалізований або захоплений зловмисником.
Вороже захоплення управління
Перепризначення ролей адміністратора вимагає незмінної часової затримки (defaultAdminDelay). Компрометація одного ключа не дозволяє негайно захопити контроль.
ІНВАРІАНТИ БЕЗПЕКИ
Формально перевірені інваріанти безпеки
Підсумок логічних перевірок на рівні байткоду, які підтверджують цілісність системи за будь-яких екстремальних умов.
Дотримання межі емісії
Операції емісії скасовуються з помилкою SupplyCeilingExceeded, якщо ліміт перевищено. Адміністратору заборонено знижувати ліміт нижче поточної емісії.
Перевірка supplyCeiling у mint()Захист від повторів при випуску та спалюванні
Кожна операція вимагає унікального ідентифікатора bytes32. Повторні виклики відхиляються з ReferenceAlreadyUsed, унеможливлюючи подвійне виконання.
Таблиці _usedIssuanceReferences та _usedBurnReferencesЗахист логіки реалізації від захоплення
Контракт реалізації блокує ініціалізатори у конструкторі. Зловмисники не можуть самостійно ініціалізувати або заволодіти базовим контрактом.
Виклик _disableInitializers() у конструкторіЗахист структури слотів пам'яті
Сховище проксі відповідає стандарту 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 підтримує активну програму розкриття вразливостей. Якщо ви виявили проблему безпеки в проксі J1USD, реалізації або інфраструктурі, повідомте про це відповідально.
За можливості шифруйте конфіденційні звіти за допомогою PGP. Ми підтверджуємо всі обґрунтовані звернення протягом 24 годин.