Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhanced Documentation and Dockerfile Fix, pdf-ui Package Version Bumped, No Removals Detected. #1205

Merged
merged 8 commits into from
Jun 7, 2024
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ Learn more; [docs.sanchogov.tools](https://docs.sanchogov.tools/).

- [GovTool Backend](./govtool/backend/README.md)
- [GovTool Frontend](./govtool/frontend/README.md)
- [GovTool Infrastructure](./infra/)
- [GovTool Infrastructure](./infra/terraform/README.md)
- [GovTool deployment process](./scripts/govtool/README.md)
- [Documentation](./docs/)
- [Tests](./tests/)

Expand Down
Binary file added docs/architecture/Architecture diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
110 changes: 110 additions & 0 deletions docs/architecture/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# GovTool Software Architecture Documentation

**Valid as of: 2024-04-30**

## Overview

This documentation outlines the software architecture of the GovTool project.
GovTool is the decentralized application composed of a React frontend,
Haskell backend connected to db-sync, and a Node.js
utility backend that serves validation of the governance actions metadata.

## Frontend

# Technology Stack

- [React](https://react.dev/): The library for web user interfaces.
- [Vite](https://vitejs.dev/): The build tool for modern web development.
- [TypeScript](https://www.typescriptlang.org/): The language for static typing.
- [@mui](https://mui.com/): The library for React components.
- [react-query](https://tanstack.com/query/latest): The library for data fetching.
- [react-router](https://reactrouter.com/): The library for routing.
- [cardano-serialization-lib](https://github.com/Emurgo/cardano-serialization-lib): The library for serialization and deserialization of Cardano data structures.

# Description

Frontend is a React application using Vite as a built tool to enhance development speed and optimize production builds. Frontend interacts with the backend service via REST API and with the Cardano blockchain via cardano-serialization-lib and connected supported wallets (for the list of compatible wallets go [here](https://docs.sanchogov.tools/how-to-use-the-govtool/getting-started/get-a-compatible-wallet)).

# Components

- **Direct voter** - direct voter is a DRep which does not have a metadata and have all the ADA delegated to themselves. This component combines the registration and delegation process into one step. Direct voters are not visible in the DRep directory.
Direct voters ui components are (no specific file names are provided as they might be continuosly updated):

- Direct voter registration card - UI component visible on the dashboard allowing to navigate to the Direct voter registration form. It displays current Direct voter status and amount of ADA.
- Direct voter registration form - UI component allowing to register as a Direct voter and delegate all the ADA to themselves. Under the hood metadata anchor is mocked with provided default values.
Direct voter uses following CSL services:
- TransactionBuilder - to build the transaction
- CertificatesBuilder - to build the delegation certificate
- DrepRegistration - to build the DRep registration certificate

- **DRep** - DRep is a Decentralized Representative which has a metadata and can delegate ADA to other DReps. DRep registration and delegation are separate processes. DReps are visible in the DRep directory.

DRep ui components are (no specific file names are provided as they might be continuosly updated):

- DRep registration card - UI component visible on the dashboard allowing to navigate to the DRep registration form. It displays current DRep status and amount of ADA.
- DRep registration form - UI component allowing to register as a DRep. Under the hood metadata anchor is mocked with provided default values.
DRep uses following CSL services:
- TransactionBuilder - to build the transaction
- CertificatesBuilder - to build the DRep registration certificate
- DrepRegistration - to build the DRep registration certificate
- DrepDeregistration - to build the DRep deregistration certificate
- DrepUpdate - to build the DRep update certificate

**Note**

- Sole Voter can become a DRep by providing the metadata.
- DRep can become a Sole Voter by delegating the ADA to themselves.

- **DRep directory** - DRep directory is a list of all registered DReps. It displays DRep metadata, and amount of Voting Power. DRep directory is visible for all users. DRep directory is the part of delegation pillar.

DRep directory allows to delegate ADA to DReps. It uses following CSL services:

- Credential
- DRep
- Certificate
- VoteDelegation

- **GA Submission** - GA Submission is a form allowing to submit a Governance Action. GA Submission is the part of governance pillar. GA Submission uses following CSL services:

- TransactionBuilder - to build the transaction
- CertificatesBuilder - to build the governance action certificate
- GovernanceAction - to build the governance action certificate

Additionaly, GA Submission uses Metadata validation service to validate the metadata.

## Backend

# Technology Stack

- [Haskell](https://www.haskell.org/): An advanced, purely functional programming language.
- [cardano-node](https://github.com/IntersectMBO/cardano-node): The core component that is used to participate in a Cardano decentralised blockchain.
- [cardano-db-sync](https://github.com/IntersectMBO/cardano-db-sync): A component that follows the Cardano chain and stores blocks and transactions in PostgreSQL.

# Description

The backend of our application is built using Haskell, a purely functional programming language known for its strong static typing, high-level abstractions, and expressive syntax.

Our backend interacts with the Cardano blockchain through two main components: `cardano-node` and `cardano-db-sync`.

# Components

- **Cardano Node**

The `cardano-node` is the core component that our backend uses to participate in the Cardano decentralized blockchain. It allows our application to create transactions, submit them to the network, and listen for new blocks and transactions.

- **Cardano DB-Sync**

The `cardano-db-sync` component follows the Cardano chain and stores blocks and transactions in a PostgreSQL database. This allows our application to query blockchain data in a structured and efficient manner.

## Application Logic

The application logic is implemented in Haskell. It handles requests from the frontend, reads from the DB-Sync, and sends responses back to the frontend.

## Data Storage

Our application uses PostgreSQL for data storage. The `cardano-db-sync` component populates the database with blockchain data, and our application logic also stores additional data as needed, such as governance actions.

## Architecture diagram

**Valid as of: 2024-06-06**
![Architecture diagram](<Architecture diagram.png>)
2 changes: 1 addition & 1 deletion govtool/frontend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ ARG VITE_NETWORK_FLAG=0
ARG VITE_SENTRY_DSN
ARG NPMRC_TOKEN
ARG VITE_USERSNAP_SPACE_API_KEY
ARG VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED
ARG VITE_IS_PROPOSAL_DISCUSSION_FORUM_ENABLED='false'

ENV NODE_OPTIONS=--max_old_space_size=4096
WORKDIR /src
Expand Down
2 changes: 1 addition & 1 deletion govtool/frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion govtool/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"@emurgo/cardano-serialization-lib-asmjs": "12.0.0-alpha.29",
"@hookform/resolvers": "^3.3.1",
"@intersect.mbo/intersectmbo.org-icons-set": "^1.0.8",
"@intersect.mbo/pdf-ui": "^0.1.2",
"@intersect.mbo/pdf-ui": "^0.1.3",
"@mui/icons-material": "^5.14.3",
"@mui/material": "^5.14.4",
"@rollup/plugin-babel": "^6.0.4",
Expand Down
Loading
Loading