NOVA Crypto Banking Service A Banking Service with Cryptocurrencies for New University of Lisbon) - Banner #1
- The NOVA Crypto Banking Service it’s a Banking Service with Cryptocurrencies for New University of Lisbon.
- It’s a Byzantine Fault-Tolerant platform, using distributed Consensus Proofs Agreements on all the operations/transactions of the system.
-
This platform it’s implemented in Java, and uses some Frameworks/Libraries such as Node.js, React.js and JavaScript, for Web Front-end, H2 for Back-end Persistent Databases, Spring and RESTful/REST (Representational State Transfer) for Web Services, JSON (JavaScript Object Notation), JWT (JSON Web Tokens) for Objects’ Serialization, and Bft-SMaRt for Byzantine Fault-Tolerant State Machine Replication.
-
The platform also uses HTTPS (HTTP 1.1) using Web Connections over TLS Protocol 1.2 (Transport Layer Security Protocol 1.2) for Server-Only Authentication, using Self-signed Certificates.
-
Our platform it’s intended to support multiple machines (replicas), in a distributed (and decentralized) fashion, even with faulty nodes, guaranteeing the Dependability and Reliability of the System.
-
-
Our platform it's composed by 3 (three) main components (or modules):
-
Client/User Web App:
- A React.js Web Application/Interface for the Clients/Users, built in Node.js, and JavaScript;
- Click here to see its content:
-
Server's (Proxy's) REST API:
- A Spring Application/Interface using RESTful/REST (Representational State Transfer) API for the interactions between the Client/User and the Server (Proxy), responsible for the mapping of the correct and valid states of the System, derived from the operations of the Clients/Users;
- Click here to see its content:
-
Byzantine Fault-Tolerant Server (State Machine Replica):
- A Bft-SMaRt based Byzantine Fault-Tolerant Server, replicated and distributed for all the heterogeneous nodes of the System, in a decentralized fashion, keeping the current valid state and data of the global system, storing it at Back-end Persistent Databases, using H2;
- Click here to see its content:
-
-
-
Cloning the project:
- Clone the project, doing the following command in a Terminal/Prompt (e.g., Git Bash):
-
git clone https://github.com/fmpisantos/CSDG6.git
-
- You should see the following output:
- This will create a Project's Structure with 3 (three) main components, similar to the following:
CSDG6 ├── clientw1 ├── csd ├── CSDBftServer
- The previously mentioned 3 (three) main components of the Project's Structure, are the following:
- Byzantine Fault-Tolerant Server (State Machine Replica);
- Server's (Proxy's) REST API;
- Client's/User's React.js/Node.js Web App;
- Clone the project, doing the following command in a Terminal/Prompt (e.g., Git Bash):
-
Starting the Byzantine Fault-Tolerant Server (State Machine Replica):
-
Open the CSDBftServer, in the Project's Structure's folder, as a Project, in your IDE (e.g., JetBrains' IntelliJ IDEA), as demonstrated following:
-
Create a Main configuration to the BankService Java class, as demonstrated following:
-
Configure a custom Main Configuration, giving as Program argument, one of the Replica's ID defined in the Hosts' Configuration (Hosts.config file), click Apply and then, OK, as demonstrated next:
-
Run the Main Configuration for the BankService Java class, created previously;
-
The output should look something similar to the following:
-- Using view stored on disk -- Using view stored on disk -- ID = 0 -- N = 4 -- F = 1 -- Port = 11000 -- requestTimeout = 2000 -- maxBatch = 400 -- Using MACs -- In current view: ID:0; F:1; Processes:0(/127.0.0.1:11000),1(/127.0.0.1:11010),2(/127.0.0.1:11020),3(/127.0.0.1:11030),
-
-
Repeat the process for the number of Replicas of the System, which you want to create, as long as they are defined in the Hosts' Configuration (Hosts.config file), always providing the Replica's ID, as a Program Argument to the Main Configuration of the BankService Java class;
-
As you can see, the Key Exchange/Agreement for the Consensus Proofs Agreements between the active Replicas, are made, using the Diffie-Hellman Key Exchange/Agreement:
-- Using view stored on disk -- Using view stored on disk -- Diffie-Hellman complete with 0 -- ID = 1 -- N = 4 -- F = 1 -- Port = 11010 -- requestTimeout = 2000 -- maxBatch = 400 -- Using MACs -- In current view: ID:0; F:1; Processes:0(/127.0.0.1:11000),1(/127.0.0.1:11010),2(/127.0.0.1:11020),3(/127.0.0.1:11030),
- Starting the Server's (Proxy's) REST API:
-
Open the csd, in the Project's Structure's folder, as a Project, in your IDE (e.g., JetBrains' IntelliJ IDEA), as demonstrated following:
-
Open the CsdApplication Java class, as demonstrated following:
-
Run the Main configuration to the CsdApplication Java class, as demonstrated following:
-
During the resulting output, you should be able to see the Server's (Proxy's) REST API connecting to the Byzantine Fault-Tolerant Replicas previously created:
(...) Connecting to replica 0 at /127.0.0.1:11000 Channel active Connecting to replica 1 at /127.0.0.1:11010 Channel active Connecting to replica 2 at /127.0.0.1:11020 Channel active Connecting to replica 3 at /127.0.0.1:11030 Channel active (...)
- Starting the Client/User Web App:
-
Run the 2 (two) following commands in a Terminal/Prompt (e.g., Git Bash):
-
npm install
-
npm start
-
-
Then, you will probably be redirected to Web Page similar to the presented following:
-
Now, you can register yourself in the NOVA Crypto Banking Service system, interacting with the Web App, previously created, as shown next:
-
Then, you will be redirected to the Login Page, where you can login to the system, as demonstrated next:
-
After that, you can create/deposit NOVA Coins on your personal account, as demonstrated next:
-
You can see all the other users are registered in the NOVA Banking Service system, doing the following operation:
-
You can also transfer NOVA Coins to the other Clients/Users, as illustrated next:
- Our system uses a cryptocurrency, called NOVA Coin, represented as following:
- Forged in FCT NOVA (Faculty of Sciences and Technology of New University of Lisbon / NOVA School of Science and Technology), in 2020;
- Our Motto:
- Omnis Civitas Contra Se Divisa Non Stabit (Latin);
- Any city divided against itself will not remain (English);
-
- E-mail:
-
- E-mail:
-
- Personal Page:
- E-mail:
-
- Personal Page:
- E-mail: