Files
Goa-gel-fullstack/blockchain-architecture.html
Mahi 80566bf0a2 feat: Goa GEL Blockchain e-Licensing Platform - Full Stack Implementation
Complete implementation of the Goa Government e-Licensing platform with:

Backend:
- NestJS API with JWT authentication
- PostgreSQL database with Knex ORM
- Redis caching and session management
- MinIO document storage
- Hyperledger Besu blockchain integration
- Multi-department workflow system
- Comprehensive API tests (266/282 passing)

Frontend:
- Angular 21 with standalone components
- Angular Material + TailwindCSS UI
- Visual workflow builder
- Document upload with progress tracking
- Blockchain explorer integration
- Role-based dashboards (Admin, Department, Citizen)
- E2E tests with Playwright (37 tests)

Infrastructure:
- Docker Compose orchestration
- Blockscout blockchain explorer
- Development and production configurations
2026-02-07 10:23:29 -04:00

112 lines
4.2 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>blockchain-architecture</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<style>
body {
margin: 0;
padding: 20px;
background: #1a1a1a;
color: #fff;
font-family: Arial, sans-serif;
}
h1 {
text-align: center;
color: #3b82f6;
}
.mermaid {
display: flex;
justify-content: center;
background: transparent;
}
</style>
</head>
<body>
<h1>BLOCKCHAIN ARCHITECTURE</h1>
<div class="mermaid">
graph TB
subgraph Network["Hyperledger Besu Network<br/>QBFT Consensus<br/>4 Validator Nodes"]
V1["🔐 Validator Node 1<br/>Port: 8545<br/>RPC Endpoint"]
V2["🔐 Validator Node 2<br/>Port: 8546"]
V3["🔐 Validator Node 3<br/>Port: 8547"]
V4["🔐 Validator Node 4<br/>Port: 8548"]
end
subgraph SmartContracts["Smart Contracts"]
LicenseNFT["📋 LicenseRequestNFT<br/>(ERC-721 Soulbound)<br/>• tokenId<br/>• licenseHash<br/>• metadata URI<br/>• issuerDept"]
ApprovalMgr["✅ ApprovalManager<br/>• recordApproval()<br/>• rejectRequest()<br/>• requestChanges()<br/>• getApprovalChain()"]
DeptRegistry["🏢 DepartmentRegistry<br/>• registerDept()<br/>• setApprovers()<br/>• getApprovers()<br/>• deptMetadata"]
WorkflowRegistry["⚙️ WorkflowRegistry<br/>• defineWorkflow()<br/>• getWorkflow()<br/>• workflowStates<br/>• transitions"]
end
subgraph OnChain["On-Chain Data"]
Accounts["💰 Accounts & Balances"]
NFTState["🎖️ NFT State<br/>tokenId → Owner<br/>tokenId → Metadata"]
Approvals["✅ Approval Records<br/>licenseHash → ApprovalChain"]
end
subgraph OffChain["Off-Chain Data<br/>PostgreSQL + MinIO"]
DocMeta["📄 Document Metadata<br/>• documentId<br/>• licenseHash<br/>• uploadedBy<br/>• uploadDate<br/>• status"]
LicenseReq["📋 License Request Details<br/>• requestId<br/>• applicantInfo<br/>• documents<br/>• notes"]
WorkflowState["⚙️ Workflow State<br/>• currentState<br/>• stateHistory<br/>• timestamps<br/>• transitions"]
DocFiles["📦 Actual Files<br/>• PDFs (MinIO)<br/>• Images<br/>• Proofs"]
end
subgraph DataLink["Data Linking"]
Hash["🔗 Content Hashing<br/>SHA-256<br/>Document → Hash<br/>Immutable Link"]
end
subgraph Consensus["Consensus: QBFT"]
QBFTInfo["Quorum Byzantine<br/>Fault Tolerant<br/>Requires 3/4 validators<br/>~1 block/12s"]
end
V1 -->|Peer Connection| V2
V1 -->|Peer Connection| V3
V1 -->|Peer Connection| V4
V2 -->|Peer Connection| V3
V2 -->|Peer Connection| V4
V3 -->|Peer Connection| V4
V1 -->|Deploy/Call| SmartContracts
V2 -->|Deploy/Call| SmartContracts
V3 -->|Deploy/Call| SmartContracts
V4 -->|Deploy/Call| SmartContracts
SmartContracts -->|Store State| OnChain
LicenseNFT -->|Emit Events| OnChain
ApprovalMgr -->|Record| OnChain
DeptRegistry -->|Maintain| OnChain
WorkflowRegistry -->|Track| OnChain
Hash -->|Link Via Hash| LicenseReq
Hash -->|Store Hash| OnChain
DocMeta -->|Contains Hash| Hash
LicenseReq -->|Store Details| OffChain
WorkflowState -->|Track Off-Chain| OffChain
DocFiles -->|Reference Via Hash| OffChain
Hash -.->|Immutable Anchor| NFTState
LicenseReq -.->|Linked to NFT| LicenseNFT
V1 -->|Consensus| Consensus
V2 -->|Consensus| Consensus
V3 -->|Consensus| Consensus
V4 -->|Consensus| Consensus
style Network fill:#dc2626,stroke:#991b1b,stroke-width:2px,color:#fff
style SmartContracts fill:#2563eb,stroke:#1e40af,stroke-width:2px,color:#fff
style OnChain fill:#7c3aed,stroke:#5b21b6,stroke-width:2px,color:#fff
style OffChain fill:#8b5cf6,stroke:#6d28d9,stroke-width:2px,color:#fff
style DataLink fill:#06b6d4,stroke:#0891b2,stroke-width:2px,color:#fff
style Consensus fill:#f59e0b,stroke:#d97706,stroke-width:2px,color:#fff
</div>
<script>
mermaid.initialize({ startOnLoad: true, theme: 'dark' });
mermaid.contentLoaded();
</script>
</body>
</html>