243 lines
7.1 KiB
Markdown
243 lines
7.1 KiB
Markdown
# DecaGraphics
|
|
|
|
DECA Charts Code and settings to calculate price, quantity and percentage of reserve in carbon credits.
|
|
|
|
**IMPORTANT: Please verify that the database address matches the smart contract address.**
|
|
|
|
Official Carbon credits database address ([orbitdb](https://github.com/orbitdb/orbit-db))
|
|
**/orbitdb/zdpuAykPJ4qtBg2toS2vxr5eaPfGEBJmvGerM7V7x8qn5c8hW/decaCCDB**
|
|
|
|
## Table of Contents
|
|
|
|
[[_TOC_]]
|
|
|
|
## General Folder Structure
|
|
|
|
```sh
|
|
├── ABI.js
|
|
├── getEth.js
|
|
├── index.js
|
|
├── package.json
|
|
├── README.md
|
|
├── scriptChildNode.js
|
|
├── scriptMainNode.js
|
|
└── services
|
|
├── decaGraphicsChild.service
|
|
└── decaGraphicsMain.service
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
Before you begin, ensure you have met the following requirements:
|
|
|
|
* Node.js >= 10
|
|
|
|
## Installation
|
|
|
|
**Download and install Node.js v10.x and npm.**
|
|
|
|
> Using Ubuntu
|
|
|
|
```sh
|
|
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
|
|
$ sudo apt-get install -y nodejs
|
|
```
|
|
|
|
> Using Debian, as root
|
|
|
|
```sh
|
|
$ curl -sL https://deb.nodesource.com/setup_10.x | bash -
|
|
$ apt-get install -y nodejs
|
|
```
|
|
|
|
**Clone the repo, switch to decagraphics and run npm install**
|
|
|
|
```sh
|
|
$ git clone https://gitlab.com/deca-currency/decagraphics.git
|
|
$ cd decagraphics
|
|
$ npm install
|
|
```
|
|
|
|
> It's recommended to fix security vulnerabilities in dependencies using the command.
|
|
|
|
```sh
|
|
$ npm audit fix
|
|
```
|
|
|
|
It is necessary to have installed mongodb locally in case of making a connection to another server modify the connection url of mongodb.
|
|
|
|
> Once the installation is done, it is necessary to create a database with three collections with the following names:
|
|
```sh
|
|
$ mongo
|
|
use DecaGraphics
|
|
db.createCollection("decaPrice")
|
|
db.createCollection("decaGeth")
|
|
db.createCollection("decaCCTS")
|
|
```
|
|
|
|
> After that it is necessary to set the environment variables in an .env file as in the example .envSample file.
|
|
|
|
```sh
|
|
APIKEY=
|
|
USERDB=
|
|
PASSDB=
|
|
DBNAME=
|
|
INFURAKEY=
|
|
CONTRACTADDRS=
|
|
```
|
|
|
|
In both scripts it is necessary to set the variable 'dates' to the following date in unixtime from there the script will start to run the calculations automatically.
|
|
|
|
**Once everything is configured it is necessary to have ipfs running as a service the configuration can be found in [carboncreditsbacklog](https://gitlab.com/deca-currency/carboncreditsbacklog) as well connecting to the nodes mentioned there in order to replicate the orbitdb carbon credits database bd.**
|
|
|
|
> The scripts can be tested using node as well the service rest which will take the data from mongodb and expose it in a json format in order to do the calculations on the web page
|
|
|
|
```sh
|
|
$ node scriptMainNode.js
|
|
$ node index.js
|
|
```
|
|
|
|
To verify the data can be done from a browser taking into account the use of cors or from a bash.
|
|
|
|
```sh
|
|
$ curl localhost:5000/decaPrice
|
|
$ curl localhost:5000/decaGeth
|
|
$ curl localhost:5000/decaCCTS
|
|
```
|
|
|
|
## Development
|
|
|
|
* The dependencies are already in the package.json
|
|
* Ethereum Node
|
|
* Bitcoinaverage Api
|
|
|
|
The rest service was made in express.js and cors was applied to accept only requests coming from deca.eco as well as helmet.js was used to give a better security to the application and the good practices of [express](https://expressjs.com/es/advanced/best-practice-security.html).
|
|
|
|
The main script is scriptMainNode.js performs the calculations found in the document [DECAAnalyticsETHPrice](./pdf/DECAAnalyticsETHPrice.pdf) the other script is backup and is used on another node in case the main one fails.
|
|
|
|
|
|
## Deploy
|
|
|
|
### Prerequisites
|
|
|
|
* Nginx >= 1.14.0
|
|
* Certbot >= 1.6
|
|
|
|
Install Nginx
|
|
|
|
```sh
|
|
$ sudo apt update
|
|
$ sudo apt install nginx
|
|
```
|
|
|
|
Install Certbot
|
|
|
|
```sh
|
|
$ sudo add-apt-repository ppa:certbot/certbot
|
|
```
|
|
|
|
> The script is configured as a service to be able to perform the calculations automatically. The configuration file is located in the service folder.
|
|
|
|
```sh
|
|
$ sudo vim /etc/systemd/system/decaGraphics.service
|
|
[Unit]
|
|
Description=Deca Graphics Updater
|
|
|
|
[Service]
|
|
WorkingDirectory=/home/nodemaster/decagraphics/
|
|
ExecStart=/usr/local/bin/node /home/nodemaster/decagraphics/scriptMainNode.js
|
|
User=nodemaster
|
|
Restart=always
|
|
LimitNOFILE=10240
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
**NOTE: in this example user that runs ipfs, node and orbitdb instance is nodemaster, also the node location is at /usr/local/bin/node**
|
|
|
|
**NOTE1: set WorkingDirectory where is the repository, for this example /home/nodemaster/decagraphics/**
|
|
|
|
**NOTE2: set where is index.js mostly in the repository as follow path to node path, for this example /home/nodemaster/decagraphics/scriptMainNode.js**
|
|
|
|
> Enable the service
|
|
|
|
```sh
|
|
$ sudo systemctl daemon-reload
|
|
$ sudo systemctl enable decaGraphics.service
|
|
$ sudo systemctl start decaGraphics.service
|
|
$ sudo systemctl status decaGraphics.service
|
|
```
|
|
**NOTE: service must be set as active (running), if not please verify the preview steps**
|
|
|
|
> It is possible to check in the service logs if any error occurred in the service.
|
|
|
|
```sh
|
|
● graphicsDeca.service - Graphing Calculator
|
|
Loaded: loaded (/lib/systemd/system/graphicsDeca.service; enabled; vendor preset: enabled)
|
|
Active: active (running) since Thu 2020-07-23 17:18:50 UTC; 4h 23min ago
|
|
Main PID: 629182 (node)
|
|
Tasks: 12 (limit: 464185)
|
|
CGroup: /system.slice/graphicsDeca.service
|
|
└─629182 /usr/bin/node /home/nodemaster/decagraphics/scriptMainNode.js
|
|
|
|
Jul 23 21:40:02 icowebsrv node[629182]: zdpuAzCgWw1vAt8yKXFUR49uyhuD4W2jN4fKVmzwXwc9QvKzm
|
|
Jul 23 21:40:02 icowebsrv node[629182]: Insert decaPrice
|
|
Jul 23 21:40:02 icowebsrv node[629182]: zdpuB1YDWAcW9Ljq6WFo4HKXoaHRYKXfL1B9H4dMDRttcGzXF
|
|
Jul 23 21:40:02 icowebsrv node[629182]: Insert decaGeth
|
|
Jul 23 21:40:02 icowebsrv node[629182]: zdpuAwMn2mjAMAq9w2siJzi6wqc1W7rDi1fw61iuJdaUTnji8
|
|
Jul 23 21:40:02 icowebsrv node[629182]: Insert decaCCTS
|
|
```
|
|
|
|
Once the service is working properly it is necessary to configure the service subtract to be able to access the data from [deca.eco](https://deca.eco/).
|
|
|
|
In the nginx config add the proxy pass
|
|
|
|
|
|
|
|
```sh
|
|
$ vim /etc/nginx/conf.d/example.com.conf
|
|
server {
|
|
listen 80 default_server;
|
|
listen [::]:80 default_server;
|
|
server_name example.com www.example.com;
|
|
root /var/www/example.com;
|
|
index index.html;
|
|
try_files $uri /index.html;
|
|
location / {
|
|
proxy_pass http://localhost:5000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
```
|
|
|
|
**Remember to open the port in the firewall**
|
|
|
|
**Remember to leave the rest service running in a tmux session and check the port.**
|
|
|
|
**Now restart up Nginx!**
|
|
|
|
|
|
### Add SSL Certificate
|
|
|
|
```sh
|
|
$ sudo certbot --nginx -d api.deca.eco
|
|
```
|
|
|
|
**It is recommended to redirect all http traffic to https**
|
|
|
|
Finally renew the certificate with the following command and restart nginx
|
|
|
|
```sh
|
|
$ sudo certbot renew --dry-run
|
|
$ sudo service nginx restart
|
|
```
|
|
|
|
# Information and contacts.
|
|
|
|
***Developers***
|
|
- Jose [jose@deca.eco](mailto:jose@deca.eco) |