메인 콘텐츠로 건너뛰기

모바일 아키텍처

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 파일이 있습니다.

메인 네비게이션 허브

앱은 허브 앤 스포크 네비게이션 패턴을 사용합니다:

인덱스화면설명
0WalletSubHub지갑 관리, 잔액, 전송
1DashboardSubHub네트워크 개요, 메트릭
2NodeSubHub노드 상태 모니터링 (NHS 점수)
3GameGateScreen내러티브 게임 (가로 모드)
4NewsSubHub네트워크 뉴스 및 업데이트
5BuySaviScreen토큰 구매
6FaucetScreen테스트넷 파우셋 요청
7CommunityScreen커뮤니티 기능

지갑

키 파생

  • 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 릴리스