모바일 아키텍처
savitri-mobile은 iOS 및 Android용 Flutter 애플리케이션으로, 지갑 관리, 노드 모니터링, 거버넌스 참여 및 내장 내러티브 게임을 제공합니다.
기술 스택
| 레이어 | 기술 |
|---|---|
| 프레임워크 | Flutter 3.16+, Dart 3.0+ |
| 상태 (DI) | Riverpod |
| 상태 (이벤트) | BLoC / Cubit |
| 스토리지 | SQLite (sqflite), FlutterSecureStorage, SharedPreferences |
| 암호화 | flutter_rust_bridge를 통한 Rust FFI |
| 네트워킹 | HTTP, WebSocket |
| 인증 | 로컬 인증 (생체인식), FlutterSecureStorage |
아키텍처 패턴
세 레이어의 클린 아키텍처:
presentation/ (화면, 위젯, bloc)
│
domain/ (엔티티, 리포지토리, 사용 사례)
│
data/ (데이터 소스, 모델, 리포지토리 구현)
애플리케이션에는 676개의 Dart 파일이 있습니다.
메인 네비게이션 허브
앱은 허브 앤 스포크 네비게이션 패턴을 사용합니다:
| 인덱스 | 화면 | 설명 |
|---|---|---|
| 0 | WalletSubHub | 지갑 관리, 잔액, 전송 |
| 1 | DashboardSubHub | 네트워크 개요, 메트릭 |
| 2 | NodeSubHub | 노드 상태 모니터링 (NHS 점수) |
| 3 | GameGateScreen | 내러티브 게임 (가로 모드) |
| 4 | NewsSubHub | 네트워크 뉴스 및 업데이트 |
| 5 | BuySaviScreen | 토큰 구매 |
| 6 | FaucetScreen | 테스트넷 파우셋 요청 |
| 7 | CommunityScreen | 커뮤니티 기능 |
지갑
키 파생
- BIP-39: 니모닉 구문 생성 (12/24 단어)
- BIP-44: 파생 경로
m/44'/1337'/0'/0/0 - Ed25519: 성능을 위한 Rust FFI를 통한 키 생성
보안
- 개인 키는
FlutterSecureStorage에 저장 (iOS의 Keychain, Android의 EncryptedSharedPreferences) - 민감한 작업에 생체인식 인증
- dApp 연결을 위한 WalletConnect v2
데이터베이스
SQLite 스키마
- 데이터베이스:
savitri_mobile.db - 버전: 15 (15번의 마이그레이션 단계)
- 암호화:
DbEncryption싱글톤을 통한 AES-256-GCM 컬럼 레벨 암호화 - 패턴:
DatabaseHelper.instance싱글톤
플랫폼 지원
- 네이티브: DB 경로에
ApplicationDocumentsDirectory사용 - 웹: 미지원 (
UnsupportedError발생)
노드 모니터링
앱은 JSON-RPC를 통해 연결된 노드를 모니터링합니다:
- NHS 점수 (노드 상태 점수): 대시보드에 표시되는 복합 메트릭
- 블록 생성: 실시간 블록 높이 및 최종화 상태
- 피어 수: 연결된 피어 모니터링
- PoU 점수: 검증자의 합의 참여 점수
내러티브 게임
앱에 내장된 내러티브 게임:
- 10개 챕터, 각 챕터마다 여러 레벨
- 게임 엔진: BLoC 상태 관리를 가진 커스텀 Dart 엔진
- 화면: 50+ 유형의 게임 화면 (시네마틱 대화, 코드 리뷰, 결정 트리 등)
- 위젯 라이브러리: 커스텀 위젯 (터미널, 아카이브 타임라인, 저울 등)
- 에셋: 챕터별 동영상 콘텐츠, 게임 JSON 데이터
- 가로 모드: 게임은 가로 방향으로 실행
게임 시스템
| 시스템 | 설명 |
|---|---|
game_engine | 메인 게임 루프 |
narrative_state | 스토리 진행 |
scene_renderer | 화면 렌더링 |
badge_catalog | 업적 시스템 |
anomaly_tracker | 이상 탐지 미니게임 |
archive_system | 게임 내 문서 아카이브 |
balance_tracker | 게임 내 경제 |
photo_system | 사진 수집 |
witness_mode | 관찰 모드 |
tips_catalog | 팁 시스템 |
IoT 통합
앱에는 IoT 센서 관리가 포함됩니다:
- 장치 등록 및 모니터링
- 센서 데이터 시각화
- IoT 에너지 서비스 통합
workmanager를 통한 백그라운드 데이터 수집
Rust FFI 브릿지
성능에 중요한 암호화 작업은 flutter_rust_bridge를 통해 Rust를 사용합니다:
// Dart 측
final signature = await rustBridge.signMessage(privateKey, message);
final isValid = await rustBridge.verifySignature(publicKey, message, signature);
Rust에 위임된 작업:
- Ed25519 키 생성
- BIP-39/44 키 파생
- 트랜잭션 서명
- 해시 계산
부정 행위 방지 시스템
TAP 게임에는 부정 행위 방지 조치가 포함됩니다:
- 패턴 분석: 자동화된 탭 탐지
- 신뢰 점수: 행동 기반 사용자별 신뢰 점수
- AURA 공식: 부정 행위 방지 점수 알고리즘
현지화
지원 언어 (ARB 파일):
| 언어 | 파일 |
|---|---|
| 영어 | app_en.arb |
| 이탈리아어 | app_it.arb |
| 스페인어 | app_es.arb |
| 프랑스어 | app_fr.arb |
| 힌디어 | app_hi.arb |
| 러시아어 | app_ru.arb |
| 중국어 | app_zh.arb |
빌드
cd savitri-mobile
flutter pub get
flutter run # 디버그
flutter build apk # Android 릴리스
flutter build ios # iOS 릴리스