J1USD 스마트 컨트랙트 보안 및 기술 평가
BNB Smart Chain 상의 J1USD 토큰 시스템에 대한 종합적 아키텍처 분석 및 검증 보고서. 업그레이드 안전성, 불변의 접근 제어, 공급량 불변성, 멀티 마켓 유동성 격리 등을 내부 기술 검토하였습니다.
심각한 결함 0건
0 Critical
핵심 토큰 컨트랙트에서 고위험/심각 취약점이 전혀 발견되지 않았습니다.
엄격한 공급 한도
1,000,000,000
바이트코드 수준에서 1,000,000,000 J1USD의 불변 한도가 강제됩니다.
권한의 명확한 분리
RBAC Partitioned
관리자, 업그레이더, 민터, 버너, 일시정지 권한이 독립된 주소로 분리되어 있습니다.
UUPS 스토리지 슬롯 보존
__gap[42]
향후 업그레이드 시 메모리 충돌을 방지하는 42슬롯의 예약 공간(__gap[42]) 확보.
검증된 온체인 배포
표준 컨트랙트 주소 및 검증
J1USD는 모듈형 OpenZeppelin ERC-1967 UUPS 프록시 패턴을 기반으로 실행됩니다. 아래는 BNB Smart Chain 메인넷에 배포된 검증된 소스 코드 컨트랙트입니다.
J1USDProxy.sol
사용자가 상호작용하는 표준 BEP-20 토큰 주소입니다. 모든 잔액, 권한 부여 및 컨트랙트 상태가 영구적으로 여기에 보관됩니다. Grey Wallet, MetaMask, Trust Wallet 및 BNB Chain 상의 모든 DEX와 호환됩니다.
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에는 이체 화이트리스트가 없습니다. BNB Smart Chain 상의 모든 표준 Web3 지갑은 KYC 승인이나 사전 등록 없이 DEX에서 자유롭게 J1USD를 수령, 보유, 전송, 거래할 수 있습니다.
명시적 블랙리스트 기능 (유해 사건 대응)
전담 BLACKLISTER_ROLE 권한은 해킹, 제재, 도난 등과 관련된 악의적 주소의 자금 입출금을 제한할 수 있습니다.
정밀한 부분 및 전체 계정 동결
컨트랙트는 freezeAccount()와 freezeBalance(amount)를 모두 지원합니다. 상업적 분쟁 발생 시 분쟁 대상 금액만 격리 동결하여 잔여 자금의 유동성을 유지합니다.
인증된 법적 자산 회수 보호 (Wipe)
WIPER_ROLE은 법적 구속력이 있는 법원 명령이나 규제 당국의 지침에 따라서만 동결된 잔액을 소각할 수 있습니다. 임의의 지갑 자산을 부당하게 파괴하는 것은 구조적으로 불가능합니다.
바이트코드 훅 검증: _update(), _approve(), transferFrom()
바이트코드는 _update(from, to, amount) 내부에서 엄격한 출금 및 입금 건전성 검증을 수행합니다:
송신자는 블랙리스트에 없어야 하고(!isBlacklisted), 계정이 전체 동결되지 않아야 하며(!isAccountFrozen), 요청 금액이 availableBalanceOf를 초과할 수 없습니다.
수신자는 블랙리스트 및 동결 대상이 아니어야 합니다. 악의적 사용자가 불법 자금을 제재 계정으로 세탁하는 것을 차단합니다.
토큰 소유자와 대리인 모두 제재 상태가 아니어야 합니다. 제재 대상은 한도를 위임하거나 제3자 이체를 실행할 수 없습니다.
스마트 컨트랙트 아키텍처
보안 메커니즘 및 불변성 분석
J1USD 핵심 구성 요소에 대한 심층 감사 평가: 프록시 업그레이드 안전성, 암호화 기반 중복 방지, 관심사 분리, 긴급 보호 장치.
UUPS 업그레이드 안전성
OpenZeppelin의 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') | _authorizeUpgrade()를 통해 UUPS 구현 로직 업그레이드 승인. | 프로토콜 멀티시그 거버넌스에 엄격히 제한되며, 유효한 배포 코드 없이 상태를 변경할 수 없음. |
| 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') | 컨트랙트로 잘못 전송된 관련 없는 제3자 BEP-20 토큰 회수. | J1USD 자체 토큰 잔액 건드리기는 엄격히 금지됨 (RescueProhibitedToken). |
유동성 인프라 및 풀 평가
온체인 DEX 유동성 vs 중앙화 2차 시장 풀
J1USD는 BNB Smart Chain 상의 비수탁 분산형 AMM 시장과 오프체인 중앙화 오더북을 균형 있게 운영합니다. 다음은 풀 주소, 실시간 거래 링크 및 보안 경계에 대한 상세 내역입니다.
자동화된 마켓 메이커 (AMM) 풀
PancakeSwap을 통해 BNB Smart Chain 상에서 네이티브하게 작동하는 비수탁 스마트 컨트랙트 유동성 풀. 중개자 수탁 위험 제로. 불변의 바이트코드를 통해 P2C(Peer-to-Contract) 방식으로 실행됩니다.
J1USD를 1.00 USD Coin에 밀접하게 고정하는 집중 유동성 풀. 규정 준수 동결 조치에서 영구 제외된 보호 시스템 주소.
AirJIT 유틸리티 토큰(JIT)과 프로토콜 결제 자산(J1USD)을 연결하는 탈중앙화 AMM 브릿지.
내부 오더북 호가 풀
AirJIT는 독립된 스마트 컨트랙트 주소 없이 오프체인에서 주요 담보 페어에 대한 2차 시장 호가를 제공합니다. 거래 체결은 고성능 중앙 매칭 엔진을 통해 처리됩니다.
오프체인 서버는 BNB Smart Chain 상에서 J1USD 토큰을 발행하거나 소각할 수 있는 개인키를 보유하지 않습니다.
내부 오프체인 계정 잔액은 온체인 프록시 컨트랙트에 검증 입금된 토큰 수량에 의해 엄격히 제한됩니다.
활성 오프체인 거래 페어 (중앙화 오더북 기반):
평가 결과 및 위협 모델링
공격 벡터 분석 및 형식적 방어 체계
기술 감사 기간 동안 면밀히 조사된 경제적, 수학적, 암호학적 공격 표면에 대한 종합 검토 보고서.
재진입 공격 (Reentrancy)
토큰은 잔액 상태 커밋 전에 신뢰할 수 없는 외부 컨트랙트를 호출하지 않고 OpenZeppelin ERC-20 상태 업데이트(_update)를 엄격히 상속합니다. Checks-Effects-Interactions 패턴을 완벽히 준수합니다.
오라클 및 현물 가격 조작
J1USD 토큰 원장은 이체나 승인 시 외부 가격 오라클을 참조하지 않습니다. 잔액 계산이 100% 내부에서 이루어지므로 플래시론을 이용한 가격 조작 공격이 성립하지 않습니다.
구현 컨트랙트 하이재킹
로직 구현 컨트랙트는 배포 시 생성자에서 _disableInitializers()를 실행합니다. 공격자가 기저 구현 컨트랙트를 독립적으로 초기화하거나 탈취하는 것이 불가능합니다.
적대적 거버넌스 탈취
관리자 역할 재지정은 변경 불가능한 시간 지연(defaultAdminDelay)을 강제합니다. 단일 개인키가 유출되더라도 즉각적으로 토큰의 최고 관리 권한을 장악할 수 없습니다.
보안 불변성 검증
형식적으로 검증된 보안 불변성
모든 극한의 경계 조건에서도 시스템 무결성이 완벽하게 유지됨을 입증하는 바이트코드 레벨 검증 요약.
공급 상한선 집행력
totalSupply() + amount가 상한을 초과하면 SupplyCeilingExceeded로 취소됩니다. 관리자는 상한선을 현재 유통량 미만으로 낮출 수 없습니다.
mint() 내 supplyCeiling 상태 검증발행 및 소각 리플레이 방지
모든 트랜잭션은 고유한 bytes32 참조 식별자를 요구합니다. 동일 참조를 사용한 중복 요청은 ReferenceAlreadyUsed로 취소되어 이중 실행을 방지합니다.
_usedIssuanceReferences 및 _usedBurnReferences 매핑구현 로직 탈취 방지
구현 컨트랙트는 생성자에서 초기화를 영구 잠금합니다. 공격자가 기본 로직 컨트랙트를 단독으로 초기화하거나 소유권을 주장할 수 없습니다.
생성자 내 _disableInitializers() 호출스토리지 레이아웃 충돌 방지
프록시 스토리지는 ERC-1967 표준을 준수합니다. 42슬롯의 예약 공간을 확보하여 향후 컨트랙트 업그레이드 시 기존 상태 변수를 덮어쓰지 않습니다.
ERC-1967 표준 슬롯 + uint256[42] 예약 갭적대적 관리자 탈취 완화
DEFAULT_ADMIN_ROLE 양도는 즉시 이루어지지 않습니다. 의무적 지연 시간을 동반한 2단계 절차를 통해 단일 키 유출로 인한 즉각적인 탈취 재난을 방지합니다.
defaultAdminDelay가 적용된 AccessControlDefaultAdminRules핵심 인프라 면책 보호
등록된 시스템 주소(DEX 풀, 재고 금고, 운영 컨트랙트)는 동결되거나 블랙리스트에 오를 수 없어 공개 유동성에 대한 DoS 위험을 제거합니다.
컴플라이언스 함수 내 _requireNotProtected() 검증토큰 구조 시 자체 자산 오출금 차단
오전송된 타사 토큰을 회수할 수 있지만, J1USD 토큰 컨트랙트 자체를 대상으로 하는 인출 호출은 명시적으로 차단됩니다.
rescueERC20() 내 RescueProhibitedToken 검증전체 시스템 긴급 서킷 브레이커
비정상적 시장 충격 발생 시 승인된 PAUSER_ROLE은 즉시 이체와 승인을 일시 중단할 수 있으며, 법적 자산 회수 작업은 유지됩니다.
transfer/mint/approve 상의 whenNotPaused 제어자격리 잔액 정밀 동결
사용자의 전체 지갑을 잠그지 않고 분쟁 중인 잔액만 선별적으로 동결할 수 있어, 나머지 정상 자금은 완전한 유동성을 유지합니다.
availableBalanceOf() 수학적 격리책임 있는 취약점 공개
취약점 제보
AirJIT는 능동적인 취약점 공개 프로그램을 운영합니다. J1USD 프록시, 구현 코드 또는 스마트 컨트랙트 인프라에서 보안 취약점을 발견한 경우 책임감 있게 제보해 주십시오.
민감한 제보는 가능한 PGP로 암호화해 주십시오. 정당한 제보에 대해 24시간 이내에 확인 및 회신을 제공합니다.