Deca Graphics
Go to file
osmarperez 0910895b68 Merge branch 'release/1.2' 2020-07-23 18:36:00 -05:00
pdf fix bugs and readme update 2020-07-23 18:32:19 -05:00
services fix bugs and readme update 2020-07-23 18:32:19 -05:00
.envSample fix bugs and readme update 2020-07-23 18:32:19 -05:00
.gitignore fix bugs and readme update 2020-07-23 18:32:19 -05:00
ABI.js fix bugs and readme update 2020-07-23 18:32:19 -05:00 fix bugs and readme update 2020-07-23 18:32:19 -05:00
getEth.js initial commit 2020-06-17 13:54:29 -05:00
index.js fix bugs and readme update 2020-07-23 18:32:19 -05:00
package.json fix bugs and readme update 2020-07-23 18:32:19 -05:00
scriptChildNode.js fix bugs and readme update 2020-07-23 18:32:19 -05:00
scriptMainNode.js fix bugs and readme update 2020-07-23 18:32:19 -05:00


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) /orbitdb/zdpuAykPJ4qtBg2toS2vxr5eaPfGEBJmvGerM7V7x8qn5c8hW/decaCCDB

Table of Contents


General Folder Structure

├── ABI.js
├── getEth.js
├── index.js
├── package.json
├── scriptChildNode.js
├── scriptMainNode.js
└── services
    ├── decaGraphicsChild.service
    └── decaGraphicsMain.service


Before you begin, ensure you have met the following requirements:

  • Node.js >= 10


Download and install Node.js v10.x and npm.

Using Ubuntu

   $ curl -sL | sudo -E bash -
   $ sudo apt-get install -y nodejs

Using Debian, as root

   $ curl -sL | bash - 
   $ apt-get install -y nodejs

Clone the repo, switch to decagraphics and run npm install

   $ git clone
   $ cd decagraphics
   $ npm install

It's recommended to fix security vulnerabilities in dependencies using the command.

   $ 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:

   $ mongo
   use DecaGraphics

After that it is necessary to set the environment variables in an .env file as in the example .envSample file.


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 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

   $ 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.

   $ curl localhost:5000/decaPrice
   $ curl localhost:5000/decaGeth
   $ curl localhost:5000/decaCCTS 


  • 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 as well as helmet.js was used to give a better security to the application and the good practices of express.

The main script is scriptMainNode.js performs the calculations found in the document DECAAnalyticsETHPrice the other script is backup and is used on another node in case the main one fails.



  • Nginx >= 1.14.0
  • Certbot >= 1.6

Install Nginx

   $ sudo apt update
   $ sudo apt install nginx

Install Certbot

   $ 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.

   $ sudo vim /etc/systemd/system/decaGraphics.service 
    Description=Deca Graphics Updater

    ExecStart=/usr/local/bin/node /home/nodemaster/decagraphics/scriptMainNode.js


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

 $ 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.

● 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

In the nginx config add the proxy pass

$ vim /etc/nginx/conf.d/
server {
    listen         80 default_server;
    listen         [::]:80 default_server;
    root           /var/www/;
    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

   $ sudo certbot --nginx -d 

It is recommended to redirect all http traffic to https

Finally renew the certificate with the following command and restart nginx

$ sudo certbot renew --dry-run
$ sudo service nginx restart

Information and contacts.