diff --git a/README.md b/README.md
index 8d01976..c6444a8 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,19 @@
-# DECASCarbonCreditsBacklog
+# CarbonCreditsBacklog
DECA's Carbon Credits OrbitDB Code and configs, everything you need for setting up a node.
**IMPORTANT: Please verify that the database address matches the smart contract address**
+## Table of Contents
-# CarbonCreditsBacklog
+[[_TOC_]]
-## Carbon Credit Structure
+## A Carbon Credit Structure (Example):
```sh
/*
@@ -54,9 +55,9 @@ DECA's Carbon Credits OrbitDB Code and configs, everything you need for setting
## Requirements
* Node.js >= 12
-* IPFS Daemon
+* IPFS Daemon 0.4.23
-## Instalation
+## Installation
**Download and install Node.js v12.x and npm.**
@@ -77,13 +78,15 @@ DECA's Carbon Credits OrbitDB Code and configs, everything you need for setting
* IPFS Daemon
-> Go to and download for your platform https://dist.ipfs.io/#go-ipfs
+> Download and install go-ipfs v0.4.23 into your architecture
```sh
+ $ wget https://dist.ipfs.io/go-ipfs/v0.4.23/go-ipfs_v0.4.23_linux-amd64.tar.gz
$ tar xvfz go-ipfs.tar.gz
$ cd go-ipfs
$ ./install.sh
```
+**Note: In this example we use amd64(x86_64) architecture, for a diferent one go [here](https://dist.ipfs.io/go-ipfs/v0.4.23)**
> Test
@@ -97,6 +100,67 @@ DECA's Carbon Credits OrbitDB Code and configs, everything you need for setting
$ ipfs init
```
+
+> It is necessary to enable [circle relay](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) in the node to be able to replicate the database to react with js-ipfs for it is necessary to use the following configuration
+
+```sh
+ $ vim ~/.ipfs/config
+ "Swarm": {
+ "AddrFilters": null,
+ "ConnMgr": {
+ "GracePeriod": "20s",
+ "HighWater": 900,
+ "LowWater": 600,
+ "Type": "basic"
+ },
+ "DisableBandwidthMetrics": false,
+ "DisableNatPortMap": false,
+ "DisableRelay": false,
+ "EnableRelayHop": true
+ }
+```
+
+>We also need to make sure our go node can be dialed from the browser. For that, we need to enable a transport that both the browser and the go node can communicate over. We will use the web sockets transport.
+
+>To enable the transport and set the interface and port we need to edit the ~/.ipfs/config one more time. Let's find the Swarm array and add our desired address there.
+
+```sh
+ $ vim ~/.ipfs/config
+ "Swarm": [
+ "/ip4/0.0.0.0/tcp/4001",
+ "/ip4/0.0.0.0/tcp/4004/ws",
+ "/ip6/::/tcp/4001"
+ ],
+
+```
+
+
+# [OrbitDB](https://github.com/orbitdb/orbit-db)
+
+OrbitDB is a **serverless, distributed, peer-to-peer database**. OrbitDB uses [IPFS](https://ipfs.io) as its data storage and [IPFS Pubsub](https://github.com/ipfs/go-ipfs/blob/master/core/commands/pubsub.go#L23) to automatically sync databases with peers. It's an eventually consistent database that uses [CRDTs](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type) for conflict-free database merges making OrbitDB an excellent choice for decentralized apps (dApps), blockchain applications and offline-first web applications.
+
+## Usage local
+
+**Clone the repo**
+
+```sh
+ $ git clone https://gitlab.com/deca-currency/carboncreditsbacklog.git
+ $ cd carboncreditsbacklog
+```
+
+**Install the dependencies:**
+
+```sh
+ $ npm install
+```
+
+### InterPlanetary File System (IPFS) Configs:
+**Start IPFS Daemon** (Note: pubsub-experiment is necesary to work with OrbitDB)
+
+```sh
+ $ ipfs daemon --enable-pubsub-experiment
+```
+
> Configure ipfs as a service, set your self in the repository directory and do as follows:
```sh
@@ -127,38 +191,12 @@ WantedBy=multi-user.target
```sh
$ sudo systemctl daemon-reload
$ sudo systemctl enable ipfs.service
- $ sudo systemctl start publicNode.service
+ $ sudo systemctl start ipfs.service
$ sudo systemctl status ipfs.service
```
**NOTE: service must be set as active (running), if not please verify the preview steps**
-
-# [OrbitDB](https://github.com/orbitdb/orbit-db)
-
-OrbitDB is a **serverless, distributed, peer-to-peer database**. OrbitDB uses [IPFS](https://ipfs.io) as its data storage and [IPFS Pubsub](https://github.com/ipfs/go-ipfs/blob/master/core/commands/pubsub.go#L23) to automatically sync databases with peers. It's an eventually consistent database that uses [CRDTs](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type) for conflict-free database merges making OrbitDB an excellent choice for decentralized apps (dApps), blockchain applications and offline-first web applications.
-
-## Usage local
-
-**Clone the repo**
-
-```sh
- $ git clone https://gitlab.com/deca-currency/carboncreditsbacklog.git
- $ cd carboncreditsbacklog
-```
-
-**Install the dependencies:**
-
-```sh
- $ npm install
-```
-
-**Start IPFS Daemon** (Note: pubsub-experiment is necesary to work with OrbitDB)
-
-```sh
- $ ipfs daemon --enable-pubsub-experiment
-```
-
**Start the DecaCC Interface**
```sh
@@ -167,7 +205,7 @@ OrbitDB is a **serverless, distributed, peer-to-peer database**. OrbitDB uses [I
**Note: With this you can use OrbitDB but only in your local node**
-## Usage with replication
+## Usage with replication (optional)
You need to do all the past steps.
@@ -237,9 +275,9 @@ connect QmZL1otpiCzWMEJTHXbQ5Hb4aFE7TKLjAuuBAAet1WAgtD success
```
**NOTE: it is possible that you won't connect at the first try with most of the nodes, so you can wait for 10 or 15 minutes to verify again**
-# For Public NODES updater as service
+## For Public NODES updater as service
-## This is in case you want to have a node that is just for public access and constantly replicating the last data in orbit DB
+### This is in case you want to have a node that is just for public access and constantly replicating the last data in orbit DB
> Configure public nodes updater service, set your self in the repository directory and do as follows:
@@ -282,7 +320,75 @@ WantedBy=multi-user.target
```
**NOTE: service must be set as active (running), if not please verify the preview steps**
-# IPFS pin projects receipts
+# Configure WebSocket on IPFS
+
+You can help us to increase the speed of replication of the database at react [DECA Carbon Credits](http://search.deca.green/). To do this, once the node is configured as a service and the database is replicated, it is necessary to enable the connection through WebSocket Secure to do so in order to have a DNS.
+
+### Requirements
+
+* 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
+ $ sudo apt update
+ $ sudo apt install python-certbot-nginx
+```
+
+
+> In a nginx configuration add the proxy pass to the websocket.
+
+```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:4004;
+ 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;
+ }
+}
+```
+
+### Add SSL Certificate
+
+**This is necessary because otherwise the web browser will not be able to connect to the WebSocket**
+
+```sh
+ $ sudo certbot --nginx -d example.com
+```
+
+
+Finally renew the certificate with the following command and restart nginx
+
+```sh
+$ sudo certbot renew --dry-run
+$ sudo service nginx restart
+```
+
+**Remember to open the port in the firewall**
+
+**Now restart up Nginx!**
+
+
+# IPFS pin projects receipt
**You can help us by pinning DECA's project receipts into IPFS which will give deeper trust to DECA.**
@@ -316,3 +422,29 @@ QmYw6JTNABDDfXvc3U2BfURjF5Zzx9eG3N43wJqHc4upDL
```
As you can see in the above example we pin the receipt by running " ./receipts.sh ", also we Download this receipt with should be allocated in the directory projects Receipts.
+
+***
+# License
+
+[**GPLV3**](./LICENSE).
+
+# Information and contacts.
+***Gitter***
+https://gitter.im/deca-currency/community
+
+***Developers***
+- Jose [jose@deca.eco](mailto:jose@deca.eco)
+- David [david@deca.eco](mailto:david@deca.eco)
+
+## ToDo
+ - Update OrbitDB with IPFS 5.0 support
+ - Update to IPFS 5.0
+ - Create a LXC or a Docker.
+
+## References:
+
+[**OrbitDB**](https://youtu.be/CjYKrbq8BCw)
+
+[**SSL in the Server**](http://werkzeug.pocoo.org/docs/0.14/serving/)
+
+[**SSL in Client**](http://steven.casagrande.io/articles/python-requests-and-ssl/)