We are CMP 26 graduation group that made the first CBDC system prototype in egypt, second in africa completely from scratch
- System Architecture
- Core Services & Features
- Security & Cryptography
- Project Structure
- Prerequisites
- Quick Start & Deployment
- API & Communication protocols
- Testing
- Contributors
├── proto/ # Protobuf definitions
├── proto_gen/ # Generated proto files (Go/Python)
├── backend/ # Go server code, middleware, handlers
├── ml-nodes/ # C++ gRPC servers (Vision, Liveness, Matching)
│ ├── vision_node/
│ ├── liveness_node/
│ └── matching_node/
├── mobile/ # Flutter/Android client code
└── docs/ # Architecture notes, manuals
- Languages/Compilers: Go 1.x, Python 3.x, C++ (CMake, Make), Dart/Flutter, Kotlin
- Tools:
protoc(Protocol Buffers) - Databases: PostgreSQL, Redis
- Environment Variables:
.envfile requirements
- Public Endpoints (Plain HTTPS): e.g.,
/onboarding/create-account - Authenticated Endpoints (mTLS): e.g.,
/online/send,/online/balance - Internal Microservices (gRPC): * Vision Node (Port 50051)
- Liveness Node (Port 50052)
- Matching Node (Port 50053)
- Python installed 3.12.x
- Open cv installed
- uv installed
- go installed
- Flutter installed
- Java
bash
cd LedgerDB
bash
make run-all
bash
cd Intermediary
bash
make run-server
make build-all BASE_DIR=.
make run-all BASE_DIR=.cd Intermediary
"online_wallets.sql","offline_wallets.sql","tamper.sql","pos.sql" | ForEach-Object { Get-Content ".\db\migrations\$_" | docker exec -i intermediary-postgres psql -U test -d intermediary }
notes: must run on an actual android phone not an emulator
cd mobile-appyou then need to run this
cat > android/local.properties << 'EOF'
SERVER_IP=[YOUR IP CONNECTED ON THE SAME NETWORK]
ONBOARDING_PORT=8081
MTLS_PORT=8443
ONBOARDING_ENDPOINT=/onboarding/create-account
ONBOARDING_KEY_ALIAS=secure_onboarding_client_key
TLS_KEY_ALIAS=secure_tls_client_key
BANK_NAME=CIB
TEE_ALIAS=TEE_KEY
DATA_KEY=offline_blob
DEPOSIT_COUNTER_KEY=deposit_counter
DEPOSIT_SIGNATURE_KEY=deposit_signature
DEPOSIT_KEY_ALIAS=deposit_key
OFFLINE_SIG=offline_signature
OFFLINE_ALIAS=offline_key_v0
TEE_CERT=tee_cert_key
EOFmake run- Ziad Samer - [Onboarding and LedgerDB]
- Zeyad Mohamed - [AML and LedgerDB]
- Fatma Zenhom - [Online and Offline Wallets]
- Hana Mostafa - [Online and Offline Wallets]
Confidential — Graduation Project Documentation