# avi2004-cpu/chain architecture

> Architecture diagram of the GitHub repository avi2004-cpu/chain, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/avi2004-cpu/chain
- Repository: https://github.com/avi2004-cpu/chain

## Overview

ChainGuard provides an Express API for identity registration and lookup, asset minting and transfer, and risk-scored access requests with decision-log retrieval. The backend routes requests through a shared Hyperledger Fabric gateway to separate identity, asset, and access-control chaincode contracts. Access requests call the risk engine before submitting a decision for ledger logging; the sampled risk engine is currently a stub that throws, so this workflow is not yet operational as written. The README excerpt is empty, and unsampled documentation or network configuration may describe additional capabilities not shown here.

Main entry points: [`backend/src/server.js`](https://github.com/avi2004-cpu/chain/blob/main/backend/src/server.js) (Express Server), [`backend/src/routes/access.js`](https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/access.js) (Access Routes), [`backend/src/gateway/connection.js`](https://github.com/avi2004-cpu/chain/blob/main/backend/src/gateway/connection.js) (Fabric Gateway), [`backend/src/routes/identity.js`](https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/identity.js) (Identity Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Backend API"]
  node_server["Express Server<br/>[server.js]"]
  node_identity_route["Identity Routes<br/>[identity.js]"]
  node_asset_route["Asset Routes<br/>[assets.js]"]
  node_access_route["Access Routes<br/>[access.js]"]
end

subgraph group_decision["Access Decision"]
  node_risk["Risk Scoring<br/>[riskEngine.js]"]
end

subgraph group_ledger["Fabric Contracts"]
  node_identity_cc["Identity Contract<br/>[identity.go]"]
  node_asset_cc["Asset Contract<br/>[asset.go]"]
  node_access_cc["Access Log Contract<br/>[access_control.go]"]
end

subgraph group_connect["Fabric Connection"]
  node_gateway["Fabric Gateway<br/>[connection.js]"]
end

node_client(("API Client"))
node_peer["Fabric Peer"]
node_ledger_state[("Fabric Ledger State")]

node_client -->|"sends HTTP requests"| node_server
node_server -->|"mounts /identity"| node_identity_route
node_server -->|"mounts /assets"| node_asset_route
node_server -->|"mounts /access"| node_access_route
node_identity_route -->|"gets contract"| node_gateway
node_asset_route -->|"gets contract"| node_gateway
node_access_route -->|"gets contract"| node_gateway
node_access_route -->|"computes risk"| node_risk
node_gateway -->|"connects over gRPC"| node_peer
node_identity_route -->|"submits and evaluates"| node_identity_cc
node_asset_route -->|"submits and evaluates"| node_asset_cc
node_access_route -->|"logs and reads decisions"| node_access_cc
node_identity_cc -->|"reads and writes"| node_ledger_state
node_asset_cc -->|"reads and writes"| node_ledger_state
node_access_cc -->|"reads and writes"| node_ledger_state

click node_server "https://github.com/avi2004-cpu/chain/blob/main/backend/src/server.js"
click node_identity_route "https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/identity.js"
click node_asset_route "https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/assets.js"
click node_access_route "https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/access.js"
click node_risk "https://github.com/avi2004-cpu/chain/blob/main/backend/src/risk-engine/riskEngine.js"
click node_gateway "https://github.com/avi2004-cpu/chain/blob/main/backend/src/gateway/connection.js"
click node_identity_cc "https://github.com/avi2004-cpu/chain/blob/main/chaincode/identity/identity.go"
click node_asset_cc "https://github.com/avi2004-cpu/chain/blob/main/chaincode/asset/asset.go"
click node_access_cc "https://github.com/avi2004-cpu/chain/blob/main/chaincode/access-control/access_control.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_identity_route,node_asset_route,node_access_route,node_client toneBlue
class node_risk,node_ledger_state toneAmber
class node_identity_cc,node_asset_cc,node_access_cc toneMint
class node_gateway toneRose
class node_peer toneIndigo
```

## Components

### Backend API

- [Express Server](https://github.com/avi2004-cpu/chain/blob/main/backend/src/server.js): `backend/src/server.js`
- [Identity Routes](https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/identity.js): `backend/src/routes/identity.js`
- [Asset Routes](https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/assets.js): `backend/src/routes/assets.js`
- [Access Routes](https://github.com/avi2004-cpu/chain/blob/main/backend/src/routes/access.js): `backend/src/routes/access.js`

### Access Decision

- [Risk Scoring](https://github.com/avi2004-cpu/chain/blob/main/backend/src/risk-engine/riskEngine.js): `backend/src/risk-engine/riskEngine.js`

### Fabric Contracts

- [Identity Contract](https://github.com/avi2004-cpu/chain/blob/main/chaincode/identity/identity.go): `chaincode/identity/identity.go`
- [Asset Contract](https://github.com/avi2004-cpu/chain/blob/main/chaincode/asset/asset.go): `chaincode/asset/asset.go`
- [Access Log Contract](https://github.com/avi2004-cpu/chain/blob/main/chaincode/access-control/access_control.go): `chaincode/access-control/access_control.go`

### Fabric Connection

- [Fabric Gateway](https://github.com/avi2004-cpu/chain/blob/main/backend/src/gateway/connection.js): `backend/src/gateway/connection.js`

### Other components

- **API Client**
- **Fabric Peer**
- **Fabric Ledger State**

## Connections

- API Client → Express Server: sends HTTP requests (evidence: `backend/src/server.js`)
- Express Server → Identity Routes: mounts /identity (evidence: `backend/src/server.js`)
- Express Server → Asset Routes: mounts /assets (evidence: `backend/src/server.js`)
- Express Server → Access Routes: mounts /access (evidence: `backend/src/server.js`)
- Identity Routes → Fabric Gateway: gets contract (evidence: `backend/src/routes/identity.js`)
- Asset Routes → Fabric Gateway: gets contract (evidence: `backend/src/routes/assets.js`)
- Access Routes → Fabric Gateway: gets contract (evidence: `backend/src/routes/access.js`)
- Access Routes → Risk Scoring: computes risk (evidence: `backend/src/routes/access.js`)
- Fabric Gateway → Fabric Peer: connects over gRPC (evidence: `backend/src/gateway/connection.js`)
- Identity Routes → Identity Contract: submits and evaluates (evidence: `backend/src/routes/identity.js`)
- Asset Routes → Asset Contract: submits and evaluates (evidence: `backend/src/routes/assets.js`)
- Access Routes → Access Log Contract: logs and reads decisions (evidence: `backend/src/routes/access.js`)
- Identity Contract → Fabric Ledger State: reads and writes (evidence: `chaincode/identity/identity.go`)
- Asset Contract → Fabric Ledger State: reads and writes (evidence: `chaincode/asset/asset.go`)
- Access Log Contract → Fabric Ledger State: reads and writes (evidence: `chaincode/access-control/access_control.go`)
