Why running an IOTA full node is easy and how community improvements made it user-friendly.

Matthieu Lanvert
12 min readFeb 27, 2018

A solid misunderstanding exists about IOTA, the foundation is facing a lot of fud articles and some of them are talking about how difficult it is to use iota technologies. In this article, we are going to show that it’s easy to install and run an iota full node through every possibility and configurations and how the improvement from the community made running a full node a children task. I’m not part of the foundation.

What is iota ?

If you still don’t know what is iota, or how it is working, you should check the iota’s foundation blog or/and his whitepaper. Some blogs are doing it well also like tangle blog or this article.

Different node/wallet in iota

When you are new user on iota you need to understand the difference between a light and a full node and which wallet types there are.

  • Full Node (GUI): This is an IRI (IOTA Reference Implementation) running and being accessed locally through a GUI. Any full node needs neighbors node via their static IP in order to function (or need to turn under Nelson, but don’t worry we’ll come back about it later).
  • Headless Node: A full node running in your local console, it has the same requirements as a GUI full node, but you can open multiple Seeds (users accounts) at the same time.
  • Light Wallet (GUI): A local interface that accesses a full node in a different environment with your seed. Here’s some list of them: iotanodes.org, iota.dance

All of them are linked on a full node.

A lot of people still don’t get the point of running their own full node. If you still don’t see the incentive to run a full node for iota and to perform proof of work without monetary compensation you should read this article and see this illustration from Sabri Goldberg, an IOTA foundation member.

I- Setup

For a simple node that should not spam, you’ll need a system with at least these parameters.

  • 8GB of storage (go for 12GB if you want to use some monitoring such grafana). Space does not have to be larger than 30GB
  • 2 cores (can works with 1 too but not recommended)
  • 4GB of RAM

It’s not recommended to run a node on a desktop computer if you are looking for static neighbors (but it’s okay if you are using bolero or only Nelson) because most of them are looking for nodes that run 24h/7 without interruption and always synced. Once you’ll stop a node on a computer, he will need to sync again on the next start. In this case, prefer a VPS with these primary parameters, there is also a good tutorial for deploying VPS with static neighbors and monitoring there.

I hope you’ll try to run your own full node after reading this article. The best option is still a VPS on datacenter 24/7. But you can find some tutorial if you want to run it on a Raspberry, and still run it even if it’s on your computer.

There are many hosters for VPS and you have free choice. However, it is known that some providers have problems with the UDP protocol (such as Scaleway)- at least in the way IRI uses it. It’s important cause many neighbors want to use only UDP. You can see a small list of EU / German host providers who already have nodes running on their machines. The offers are pretty similar, but Hetzner stands out with its server exchange. There you can rent high physical servers (instead of virtual servers) relatively cheap. Here’s a list of physical/virtual private servers :

Hetzner | Contabo | Netcup | Strato | Scaleway (TCP only) | Amazon AWS | DigitalOcean | OVH | So you Start | Exoscale

I- IRI full node deployment with static neighbors :

I.1- Installation

We’re going to, in this section, deploy IRI, IOTA Reference Implementation. IRI is based on Java, but you don’t need to learn this language to run a full node, we’ll just clone this project: https://github.com/iotaledger/iri.

First, make sure you have java and maven installed and JAVA_HOME set. Then install the latest version of IRI on your computer through those commands :

git clone https://github.com/iotaledger/iri
cd iri
mvn clean compile && mvn package

You have successfully installed iri, you now need some statics neighbors addresses in order to run your full node. I recommend you to have 4,5 neighbors on basic configuration (4gb RAM, 1/2 cores), less than 3 and your node will be too slow and not more than 7.

First, let’s create an ini file to store all command line options we’ll need. It’s the easier way to update your neighbor’s list.

cat << "EOF" | sudo tee iota.ini
[IRI]
PORT = 14265
UDP_RECEIVER_PORT = 14600
TCP_RECEIVER_PORT = 15600
API_HOST = 0.0.0.0
IXI_DIR = ixi
HEADLESS = true
DEBUG = false
TESTNET = false
DB_PATH = mainnetdb
RESCAN_DB = false

REMOTE_LIMIT_API = "removeNeighbors, addNeighbors, interruptAttachingToTangle, attachToTangle, getNeighbors, setApiRateLimit"

NEIGHBORS =
EOF

In the bottom of the file, you can see the NEIGHBORS value, for now, it’s empty so starting IRI now won’t work. You need to add your neighbor’s addresses here.

Take now a look at the port list, we have both UDP and TCP receiver port. In order of having a working neighbor, you need both to add you to your list of neighbors. You can send to your neighbors one of your node addresses :

#Many neighbors want to use UDP only so you can only note this one
udp://your_ip:14600
tcp://your_ip:15600

I.2- Searching Neighbors

Now let’s find some neighbors to add. Don’t panic it’s not that hard, you just need to ask for neighbors on discord (not longer slack): https://discord.gg/GMVXSvM.

Once you are on the discord, go in #rank-yourself and write the command !rank fullnode. You’ll join fullnode.

You’ll see a new text channel named #nodesharing. Ask for neighbors there, there is a lot of people asking for neighbors there every day.

Properly demand through private message should be this way :

Hi, I’m looking for neighbors too! Message me if you are interested. There is my config : <Fill there the configuration of your full node>.

People are generally looking for people on VPS or with a big performance, but they can add you too for few days if you want to test running a full node.

Now that you have some neighbors, modify the value of NEIGHBORS in your iota.ini file :

NEIGHBORS = udp://address1:12345 tcp://address2:12345 tcp://address3:12345

Don’t forget to leave a blank between addresses. Add them to your ini file.

I.3- Start IRI

It’s incredibly simple, just change x with your iri version:

java -jar iri-x.x.x.x.jar -c iota.ini

Well done, you did just the hardest way to launch a full node, your node will be synced once you’ll see the last milestone in your terminal.

II- CarrIOTA Nelson :

We can thank SemkoDev team and their GitHub. The authors are Roman Semko (GithubTwitter) and Vitaly Semko (GithubTwitter)

II.1- What is CarrIOTA Nelson ?

Made by SemkoDev, “Nelson is a tool meant to be used with IOTA’s IRI Node. It automatically manages neighbors of your full node, negotiating connections, finding new neighbors and protecting against bad actors.”. While running, Nelson will download an entry set of trusted Nelson peers for new Nelson instances.

Image associée

You can find every information here : https://github.com/SemkoDev/nelson.cli.

https://semkodev.com/

Yes, Nelson just removed the hardest part of deploying a full node: finding and managing neighbors.

It’s will be way easier now to deploy a full node, let’s see what changed :

II.2- Prerequisites?

  • Installed Java, downloaded the IRI jar file and know how to start it (clone the file & start it)
  • Nelson is running on Node.js, so you’ll need to install node (at least version LTS 8.9.4). If you are on ubuntu 16.04, please install the latest version separately: https://nodejs.org/en/download/package-manager/ (Ubuntu 16.04 apt comes with an outdated Node version (4.X).
  • You may need to open some ports in your router in order to run Nelson node: UDP 14600 | TCP 15600 | TCP 16600

II.2- Install & Start Nelson node

  • Install and run nelson with -gui option in order to provide a simple GUI interface in your console. More information on Nelson.cli’s GitHub.
#Installation of Nelson 
npm install -g nelson.cli
#Run Nelson with GUI interface.
nelson --gui --getNeighbors
  • You can also run Nelson as a service through the node process manager pm2:
Bolero Node#If you don't installed pm2 :
npm install pm2 -g
#---------------------------
pm2 startup
pm2 start nelson -- --config /path/to/nelson-config.ini
pm2 save
# Get Nelson logs:
pm2 monit

As your Nelson node stays online and knows his neighbors, it will rely less and less on the initial entry points.

III- CarrIOTA Bolero Node:

We can thank again SemkoDev team and their GitHub. The author is Roman Semko (GithubTwitter)

III.1- What is Bolero ?

CarrIOTA Bolero is a cross-platform desktop application (Windows, Mac & Linux) that lets you start an IOTA full node with a single click (using IRI & Nelson P2P). In other words, if it wasn’t “user-friendly” for people so far, it’s now basically just pressing a single button to launch your full node through bolero application:

Image associée
https://medium.com/deviota/carriota-bolero-alpha-has-begun-d23b69b71fd6

III.2- Prerequisites

III.3- Install and Start

Download a package corresponding to your OS from releases. There is executable for Mac and Windows, on Linux you might need to start bolero.run from a command line. That’s it, your bolero application will first download the database (approximately 5GB) then you’ll be synced and can use it as a full node for your IOTA wallet with this address :

http://localhost:14265

CarrIOTA simplifies a lot the deployment of an IOTA full node through Nelson which removes the hardest part: managing your neighbors yourself. And bolero makes the deployment of a full node an activity easy for everyone, even if don’t know how it’s working.

V- CarrIOTA field

We can thank again SemkoDev team and their GitHub. The author is Roman Semko (GithubTwitter)

V.I- What is it ?

We’re gonna speak here about another product from CarrIOTA: The CarrIOTA field. It’s not related to the installation of a full node, but more about what you can do with your node. You may be aware of the insensitivity of running a full node for IOTA, but recently an update from the CarrIOTA Field change this insensitivity:

https://semkodev.com/carriota-field-node-intel-and-balancing/

First of all, CarrIOTA field is a combination of a Client (IRI) and a server app. It’s providing to your full node :

  • Provide anonymous node statistics to be able to visualize the whole IRI-Node network without compromising on security.
  • Simplify node selection for light wallets
  • Optimise node performance and usage of the node resources for the benefit of the whole network
  • Hence, decrease the confirmation times and increase confirmations per second.
  • Provide protection against DDoS attacks
  • Incentivise node owners
  • Add additional security through multiple confirmations for exchanges and critical applications.

Once you have some full node running, adding it the field will provide you these benefits. It acts as a proxy for IRI, sending it regular statistics about the IRI and it’s neighbors, accepting connections only from the field server.

The server side is a little more complicated, but thankfully, you can see it through his beautiful website : http://field.carriota.com/

Recently they added a sponsor field space where people can donate to the field server or particular node. All donation will be distributed to the nodes based on their work each week. So now, you can earn money by running a full node under CarrIOTA Field. And you can see your node activity through this website :

http://field.carriota.com/

The website provides your primary information about what your node is doing on the tangle. Here, we can see my node is named “Hystenal” as I configured at the installation, what version of IRI and if it’s enabled and the most important: “Does my node is synced with last milestones?”.

Your reward from the season comes from what command does your node did and the amount of the season donation. You’ll earn different amount of points based on the difficulty of the command. The Field Server collects the funds in two ways :

  • Sponsorship and donations by the community. A leaderboard will be provided listing the top sponsors.
Top 27 (3³) because IOTA is running with ternary digit instead of binary digit.
  • Paid service for critical applications with additional confirmations and layers of security.

The website provides you, your node statistics on the current season:

Actually, you can’t use the CarrIOTA field with Bolero but it will be integrated soon so that everyone can participate. You can be under the CarrIOTA field with Nelson or static neighbors. Each arrow represent one of your neighbors from your node that is on the CarrIOTA. For example on my node, we can see 3 neighbors: Selfhoster, IOTANode.Party and IOTA84307. Here are my neighbors information from my full node iota running under VPS :

We can see I have 4 neighbors, we recognize my neighbors Selfhoster and Iotanodeparty and one of the two last must be my third neighbors on the field.

Here’s the representation of the CarrIOTA field with all nodes:

V.2- Setup and Installation

All information is available on the CarrIOTA field Github.

Prerequisites

  • The Field is running on Node.js so you’ll need to install node (at least version LTS 8.9.4) and npm (node package manager) or yarn package manager.
  • If you are trying to run a Field node at home, you may need open the port TCP 21310 (apart from the ports for your IRI)

Warning

  • For Image-based Linux installations: Field relies on a unique machine identification. Image-based/VPS installations usually have the same id. If you run it, your field might be blacklisted or wrongly listed on the field server. To change the ID, do the following :
# 1. Remove the existing machine ID file:
sudo rm /var/lib/dbus/machine-id

# 2. Generate a new machine id:
sudo dbus-uuidgen --ensure

# 3. Reboot to apply the new machine ID system-wide:
sudo shutdown -r now

Installing

Globally install Field:

#With NPM
npm install -g field.cli
#Or with YARN
yarn install -g field.cli

And run it

field --pow --address SOZAIPJMQUBOFCTDTJJDXCZEKNIYZGIGVDLFMH9FFBAYK9SWGTBCWVUTFHXDOUESZAXRJJCJESJPIEQCCKBUTVQPOW

The --pow option allows the Field server to pass "attachToTangle" jobs to your IRI.

With the --address option you can specify an IOTA address for donations.

You can use a .ini file to configure Field with --config field-config.ini

You can also run CarrIOTA field as a service with node process manager :

# Install the process manager:
npm install pm2 -g

# Make pm2 start at startup:
pm2 startup

# Start the Field as service
# If you created a field config somewhere on your system, provide the path to the config:
pm2 start field -- --config /path/to/field-config.ini

# Otherwise you can just do: pm2 start field

# Save current processes running with pm2 to startup on boot:
pm2 save

# Get Field logs:
pm2 monit
# or
pm2 log

Contributing

Matthieu LANVERT (GithubLinkedinTwitter)

IOTA Donations welcome:

TPYVRQCNPITTGWTCOLWQJXEGQZOLYUDKLZUTKTNVYRRHXETCVHYJSZYCNRGNJAYJMOSFZHSEUGTNTPFICFPFSUHMVX

--

--

Matthieu Lanvert

SRE Devops at Padok. Working with Docker, Kubernetes, Ansible, Terraform… Found of new technologies and particulary IOTA. Find more at https://www.padok.fr/