# tomasbernardino/sec_ist architecture

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

- Interactive diagram: https://gitdiagram.com/tomasbernardino/sec_ist
- Repository: https://github.com/tomasbernardino/sec_ist

## Overview

DepChain is a permissioned, EVM-compatible blockchain using Basic HotStuff. A client queries balances or builds and signs a native transfer or contract call, broadcasts it, and waits for a quorum-confirmed receipt. Nodes validate and queue transactions, order them through consensus, execute decided blocks, persist state and receipts, and return responses. The graph includes the documented ISTCoin and Byzantine-mode capabilities; their implementation details were not sampled, so those links use supported enclosing source paths. Network and state wiring is based on the sampled node startup, routing, service, and link code.

Main entry points: [`common/src/main/java/ist/group29/depchain/common/network/LinkManager.java`](https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/network/LinkManager.java) (Link manager), [`server/src/main/java/ist/group29/depchain/server/service/TransactionManager.java`](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/TransactionManager.java) (Transaction manager), [`server/src/main/java/ist/group29/depchain/server/App.java`](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/App.java) (Node startup), [`client/src/main/java/ist/group29/depchain/client/ClientLibrary.java`](https://github.com/tomasbernardino/sec_ist/blob/main/client/src/main/java/ist/group29/depchain/client/ClientLibrary.java) (Client library)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client"]
  node_client_app["Client interface<br/>[App.java]"]
  node_client_lib["Client library<br/>[ClientLibrary.java]"]
  node_client_protocol["Transaction protocol<br/>[client.proto]"]
end

subgraph group_network["Consensus Network"]
  node_server_app["Node startup<br/>[App.java]"]
  node_router["Message router<br/>[MessageRouter.java]"]
  node_links["Link manager<br/>[LinkManager.java]"]
  node_auth_link["Authenticated link"]
  node_consensus["HotStuff consensus<br/>[Consensus.java]"]
  node_byzantine["Byzantine modes"]
end

subgraph group_execution["Execution State"]
  node_transaction_manager["Transaction manager"]
  node_mempool["Transaction mempool<br/>[Mempool.java]"]
  node_executor["Transaction executor"]
  node_accounts["EVM accounts"]
  node_service["Block service<br/>[Service.java]"]
  node_state[("Blockchain state")]
  node_block_record["Block receipts<br/>[BlockRecord.java]"]
  node_istcoin["ISTCoin contract"]
end

subgraph group_security["Identity Security"]
  node_crypto_manager["Threshold crypto<br/>[CryptoManager.java]"]
  node_keystores["Node client keys"]
end

node_user(("Client user"))
node_network_peers(("Peer nodes"))

node_user -->|"requests"| node_client_app
node_client_app -->|"submits queries"| node_client_lib
node_client_app -->|"submits transactions"| node_client_lib
node_client_lib -->|"encodes messages"| node_client_protocol
node_client_lib -->|"broadcasts via"| node_links
node_client_lib -.->|"replays via"| node_links
node_server_app -->|"starts"| node_links
node_server_app -->|"constructs"| node_transaction_manager
node_server_app -->|"constructs"| node_service
node_server_app -->|"starts"| node_consensus
node_server_app -.->|"selects optional"| node_byzantine
node_links -->|"sends and receives"| node_auth_link
node_links -->|"delivers payloads"| node_router
node_router -->|"dispatches consensus"| node_consensus
node_router -->|"dispatches requests"| node_transaction_manager
node_consensus -->|"exchanges consensus messages"| node_links
node_consensus -->|"signs and verifies"| node_crypto_manager
node_consensus -->|"decides blocks"| node_service
node_transaction_manager -->|"queues and removes"| node_mempool
node_transaction_manager -->|"validates against"| node_state
node_transaction_manager -->|"executes blocks through"| node_executor
node_transaction_manager -->|"sends responses"| node_links
node_service -->|"executes decided block"| node_transaction_manager
node_service -->|"persists block"| node_state
node_service -->|"records receipts"| node_block_record
node_executor -->|"executes state changes"| node_accounts
node_executor -->|"runs contract calls"| node_istcoin
node_executor -->|"updates world state"| node_state
node_state -->|"stores records"| node_block_record
node_keystores -->|"provides identity keys"| node_client_lib
node_keystores -->|"provides node keys"| node_server_app
node_network_peers -->|"exchanges messages"| node_links

click node_client_app "https://github.com/tomasbernardino/sec_ist/blob/main/client/src/main/java/ist/group29/depchain/client/App.java"
click node_client_lib "https://github.com/tomasbernardino/sec_ist/blob/main/client/src/main/java/ist/group29/depchain/client/ClientLibrary.java"
click node_client_protocol "https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/proto/client.proto"
click node_server_app "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/App.java"
click node_router "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/MessageRouter.java"
click node_links "https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/network/LinkManager.java"
click node_auth_link "https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/network/AuthenticatedPerfectLink.java"
click node_consensus "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/consensus/Consensus.java"
click node_byzantine "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/consensus/ByzantineConsensus.java"
click node_transaction_manager "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/TransactionManager.java"
click node_mempool "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/Mempool.java"
click node_executor "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/TransactionExecutor.java"
click node_accounts "https://github.com/tomasbernardino/sec_ist/tree/main/server/src/main/java/ist/group29/depchain/server/service/account"
click node_service "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/Service.java"
click node_state "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/BlockchainState.java"
click node_block_record "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/BlockRecord.java"
click node_istcoin "https://github.com/tomasbernardino/sec_ist/tree/main/server/src/main/java/ist/group29/depchain/server/service"
click node_crypto_manager "https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/crypto/CryptoManager.java"
click node_keystores "https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/keys/KeyStoreManager.java"

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_client_app,node_client_lib,node_client_protocol,node_user toneBlue
class node_server_app,node_router,node_links,node_auth_link,node_consensus,node_byzantine toneAmber
class node_transaction_manager,node_mempool,node_executor,node_accounts,node_service,node_state,node_block_record,node_istcoin toneMint
class node_crypto_manager,node_keystores toneRose
class node_network_peers toneIndigo
```

## Components

### Client

- [Client interface](https://github.com/tomasbernardino/sec_ist/blob/main/client/src/main/java/ist/group29/depchain/client/App.java): `client/src/main/java/ist/group29/depchain/client/App.java`
- [Client library](https://github.com/tomasbernardino/sec_ist/blob/main/client/src/main/java/ist/group29/depchain/client/ClientLibrary.java): `client/src/main/java/ist/group29/depchain/client/ClientLibrary.java`
- [Transaction protocol](https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/proto/client.proto): `common/src/main/proto/client.proto`

### Consensus Network

- [Node startup](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/App.java): `server/src/main/java/ist/group29/depchain/server/App.java`
- [Message router](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/MessageRouter.java): `server/src/main/java/ist/group29/depchain/server/MessageRouter.java`
- [Link manager](https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/network/LinkManager.java): `common/src/main/java/ist/group29/depchain/common/network/LinkManager.java`
- [Authenticated link](https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/network/AuthenticatedPerfectLink.java): `common/src/main/java/ist/group29/depchain/common/network/AuthenticatedPerfectLink.java`
- [HotStuff consensus](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/consensus/Consensus.java): `server/src/main/java/ist/group29/depchain/server/consensus/Consensus.java`
- [Byzantine modes](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/consensus/ByzantineConsensus.java): `server/src/main/java/ist/group29/depchain/server/consensus/ByzantineConsensus.java`

### Execution State

- [Transaction manager](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/TransactionManager.java): `server/src/main/java/ist/group29/depchain/server/service/TransactionManager.java`
- [Transaction mempool](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/Mempool.java): `server/src/main/java/ist/group29/depchain/server/service/Mempool.java`
- [Transaction executor](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/TransactionExecutor.java): `server/src/main/java/ist/group29/depchain/server/service/TransactionExecutor.java`
- [EVM accounts](https://github.com/tomasbernardino/sec_ist/tree/main/server/src/main/java/ist/group29/depchain/server/service/account): `server/src/main/java/ist/group29/depchain/server/service/account`
- [Block service](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/Service.java): `server/src/main/java/ist/group29/depchain/server/service/Service.java`
- [Blockchain state](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/BlockchainState.java): `server/src/main/java/ist/group29/depchain/server/service/BlockchainState.java`
- [Block receipts](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/service/BlockRecord.java): `server/src/main/java/ist/group29/depchain/server/service/BlockRecord.java`
- [ISTCoin contract](https://github.com/tomasbernardino/sec_ist/tree/main/server/src/main/java/ist/group29/depchain/server/service): `server/src/main/java/ist/group29/depchain/server/service`

### Identity Security

- [Threshold crypto](https://github.com/tomasbernardino/sec_ist/blob/main/server/src/main/java/ist/group29/depchain/server/crypto/CryptoManager.java): `server/src/main/java/ist/group29/depchain/server/crypto/CryptoManager.java`
- [Node client keys](https://github.com/tomasbernardino/sec_ist/blob/main/common/src/main/java/ist/group29/depchain/common/keys/KeyStoreManager.java): `common/src/main/java/ist/group29/depchain/common/keys/KeyStoreManager.java`

### Other components

- **Client user**
- **Peer nodes**

## Connections

- Client user → Client interface: requests
- Client interface → Client library: submits queries
- Client interface → Client library: submits transactions
- Client library → Transaction protocol: encodes messages
- Client library → Link manager: broadcasts via
- Client library → Link manager: replays via
- Node startup → Link manager: starts
- Node startup → Transaction manager: constructs
- Node startup → Block service: constructs
- Node startup → HotStuff consensus: starts
- Node startup → Byzantine modes: selects optional
- Link manager → Authenticated link: sends and receives
- Link manager → Message router: delivers payloads
- Message router → HotStuff consensus: dispatches consensus
- Message router → Transaction manager: dispatches requests
- HotStuff consensus → Link manager: exchanges consensus messages
- HotStuff consensus → Threshold crypto: signs and verifies
- HotStuff consensus → Block service: decides blocks
- Transaction manager → Transaction mempool: queues and removes
- Transaction manager → Blockchain state: validates against
- Transaction manager → Transaction executor: executes blocks through
- Transaction manager → Link manager: sends responses
- Block service → Transaction manager: executes decided block
- Block service → Blockchain state: persists block
- Block service → Block receipts: records receipts
- Transaction executor → EVM accounts: executes state changes
- Transaction executor → ISTCoin contract: runs contract calls
- Transaction executor → Blockchain state: updates world state
- Blockchain state → Block receipts: stores records
- Node client keys → Client library: provides identity keys
- Node client keys → Node startup: provides node keys
- Peer nodes → Link manager: exchanges messages
