Deploy IOTA full node to cheap ARM boards

yillkid
BiiLabs Co., Ltd.
Published in
3 min readDec 24, 2017

IOTA is an open-source distributed ledger protocol launched in 2015 that goes ‘beyond blockchain’ through its core invention of the ‘Tangle’, which is a quantum-resistant Directed Acyclic Graph (DAG), whose digital currency IOTA has a fixed money supply with zero inflationary cost. The tutorial illustrates how we can build IOTA full nodes from scratch on cheap ARM-based single board computers (SBC).

The most famous ARM-based SBC would be Raspberry Pi, and Raspberry Pi 3 (RPi3) is powered by 1.2GHz 64-bit quad-core ARMv8 CPU. Asus Tinker Board is another RPi3-like SBC with several advantages over RPi3. Tinker board is selected for building IOTA full nodes because of its superior features such as 2GB onboard RAM, gigabit Ethernet, and faster ARM cores, comparing to RPi3.

The simplified performance comparison is shown as following:

System Requirement

Hardware:

Software:

Installation

Install ASUS Tinker Debian image:

  • Some unknown power management problem maybe occur on version 1.8, my suggestion is version 1.9
  • Flash the OS image (change if and of parameter value by yourself)
$ dd if=output.img of=/dev/sdc seek=0 bs=16M conv=notrunc
  • Boot and connect Tinker board with SSH protocol (default user/password: linaro/linaro)

Config Network (DHCP)

$ sudo vi /etc/network/interfaces# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Install Oracle Java™ SE Runtime Environment

su -
# echo “deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main” | tee /etc/apt/sources.list.d/webupd8team-java.list
# echo “deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main” | tee -a /etc/apt/sources.list.d/webupd8team-java.list
# apt-key adv — keyserver hkp://keyserver.ubuntu.com:80 — recv-keys EEA14886
# apt-get update
# apt-get install oracle-java8-installer
# exit
$ sudo apt-get install oracle-java8-set-default

Install NodeJS and NPM

Reference: How to install Node.js LTS on Debian 9 stretch

Build RocksDB

  • Clone IOTA-Deploy script
$ git clone https://github.com/deviceproof/iota-deploy.git
$ cp iota-deploy/scripts/rocksdb/* .
$ ./BUILD-rocksdb.sh

Install IRI

$ cp iota-deploy/scripts/iri/* .
$ BUILD-iri.sh [IRI_version_to_build]

iri-1.4.1.4 is known to work out of the box.

Deploy IRI

Create a configuration file for IRI.

[IRI]
PORT = 14265
UDP_RECEIVER_PORT = 14265
NEIGHBORS =
IXI_DIR = ixi
HEADLESS = true
DEBUG = false
ZMQ_ENABLED = true

Launch IRI service.

$ ./run.sh <IRI_version> <path_of_config_file>

You can download a IOTA ledger (RocksDB database) compressed from this link (milestone:310872).

Install CarrIOTA Nelson

Upgrade Nodejs to v8.9.3 at least.

  • Nodejs (ubuntu or Debian): refer to: Upgrade to Nodejs 8
$ sudo npm install -g nelson.cli

Run CarrIOTA Nelson:

$ nelson — gui — getNeighbors

Check syncing milestoneIndex by IRI restful API:

$ curl -s http://localhost:14265 \
-X POST \
-H ‘Content-Type: application/json’ \
-H ‘X-IOTA-API-VERSION: 1.4.1’ \
-d ‘{“command”: “getNodeInfo”}’ | python -m json.tool
Donate(IOTA):BXEOYAONFPBGKEUQZDUZZZODHWJDWHEOYY9AENYF9VNLXZHXBOODCOTYXW9MGGINTEJPLK9AGOPTPODVXDZJIP9IE9

--

--