Ethereum on ARM. PoC ARMbian image for Nanopc-T4 (a high performance ARM board with RK3399 CPU, 4GB RAM and NVMe SSD). Full node up and running from scratch in 2:30 hours with Parity (warp mode). 3 days for Geth (fast mode).


Hi there :-). It’s been a while.

In late 2016 [1] I released a Raspberry Pi 2/3 image that turned this device into a full Ethereum node and, few months later [2], a set of scripts for customizing an Armbian [3] image and turning a bunch of ARM devices into Ethereum nodes as well. However, the rapid Ethereum development and the continue growth of the blockchain (as well as the increase in hardware requirements) made pretty much impossible to run an full Ethereum node with these kind of boards.

By that time, no ARM board had the necessary resources to synchronize the whole chain. But high performance SoCs are starting to show up and these ones are more than capable of doing such demanding tasks.

Today, I’m releasing a Proof of Concept Eth Armbian image [4] for the brand new and powerful NanoPc-T4 [5] that, again, turns this device into a full Ethereum node and shows the potential of these tiny boards.

If you own this board you can give it a try it by flashing a MicroSD.
SEE INSTALL INSTRUCTIONS [6].

In case you own a similar device you can build your own Armbian image using the customization scripts (see above link)

**DISCLAIMER**: So far, the image is running smoothly and the performance is really outstanding, but it is based on an Armbian devel fork [7] with the Rockchip kernel [8] (NVMe doesn’t work on mainline kernel yet) so it may have stability issues. I expect to release a more solid image in the coming weeks(TM). Currently, there is no official Armbian support for this device (it will, for sure [9])

#ETH Armbian image

This is what the Eth Armbian image does once flashed and plugged in:

– Automatically resize the SD card
– Partition and format the NVMe SSD drive (in case is detected), and mount it as /home for storing the Ethereum blockchain under ethereum user
– Change the hostname to something like “ethnode-2fed2ha5” (HEX chunk based on the MAC hash).
Automatically reboots for this change to take effect.
– Runs Geth (v1.8.12) by default as a Systemd service in Light Server mode and starts syncing the Blockchain
– Watch the client binary and respawn it in case it gets killed
– Includes Parity client as well so you can switch both clients
– Includes Swarm (POC3) binary for testing purposes

You can optionally:

– Install the OS in the eMMc card through the armbian-config script (not tested)
– Change to Parity client or modify the clients settings

**DISCLAIMER: Keep in mind that without a NVMe SSD drive there’s absolutely no chance to sync the blockchain.**

#Syncing the Blockchain

##Some numbers

Parity client (–warp –memory-cache 3072) is up in 2:30 hours (25GB) and keeps synchronizing the whole blockchain in the background.

Geth client (–fast –cache 3072) takes 3 days to sync the whole blockchain (106 GB), which is pretty impressive for this kind of device taking into account that it takes 2-3 days for some decent laptops [10] (see this great Karalabe explanation to get familiar with the Geth sync process [11]).

##Sync modes

There are several Ethereum clients and sync modes but I’m just focusing on Geth and Parity clients running as Full Ethereum nodes. For further info, I recommend reading this post by Afri Schoedon [12]

By default, Geth client runs on light server mode so we can support light clients. This behaviour can be easily changed but I encourage users who run a full node to leave this option enabled.

You can tweak the clients configuration by editing the files in /etc/ethereum/ and restarting the service.

#Stake and sharding

According to Vitalik on “Marginal Revolution” [13]:

*“Casper doesn’t try to impose very low latency or high performance requirements on individual nodes; we are trying to design for consumer laptops, even though we are aware that in reality some degree of pooling will be inevitable.”*

So I think there is solid possibility we can stake with this (or a similar) ARM board, but of course, that remains to be seen. Hopefully, sharding should also lower the hardware requirements for staking.

#Build your own image

There are other interesting SoCs out there that can be suitable for running as Eth nodes. If you own one, feel free to build your own image and give it a try. Building scripts updated here [6].

Instructions for building an Armbian image can be found here [14] (I strongly recommend the Vagrant environment).

Keep in mind that I’m building the image with David Huang Armbian fork (Devel branch) [7], not the official Armbian repo.

#ARM SoCs

IMO, ARM boards have plenty of advantages over x86 desktops and servers for running as Ethereum nodes, such as follows:

– Low consumption (max 24W for this board)
– Small form factor
– Hardware and software resources are pretty much dedicated to this specific task. No graphic environment, browsers or other apps running.
– High efficiency and great price/performance ratio. For 200 $ you have a board with great hardware resources, and particularly a insane storage throughput
– Hardware vulnerabilities: The Ethereum network shouldn’t rely on 1 CPU Architecture (see SPECTRE issues, for instance). Vulnerabilities are no longer a software problem but a hardware one as well.

The ultimate goal of this PoC is validate such ARM devices for supporting the Ethereum network and testing if stake and sharding will be possible on these devices.

#Board features [15]

– Rockchip 3399RK (64 bits 6 core CPU)
– 4 GB RAM LPDDR4
– SSD M.2 NVMe x4 slot (PCIe) and 16 GB eMMC onboard
– USB 3
– 1Gbp Ethernet

I’ve been looking forward to a device with features like the Nanopc-T4, particularly, 4GB RAM and a fast SSD. The PCIe SSD slot (with 4 lanes) is insanely fast and far superior to SATA SSDs [see 16]. I ordered a 256 GB NVMe x4 SSD for this PoC [17].

This is not a cheap board (at least compared to a Raspberry or equivalent) but the NVMe M.2 SSD throughput is mind blowing and worth the price gap. Overall, the SoC performance is impressive.

#Thanks

Last but not least. Thanks to the Armbian team for their impressive work supporting these kind of devices and to David Huang for supporting this specific board and fixing some u-boot compiling problems.

#References

– [1] [Let’s build an army of Ethereum nodes!](https://www.reddit.com/r/ethereum/comments/52po3w/lets_build_an_army_of_ethereum_nodes/)
– [2] [Ethereum on ARM](https://www.reddit.com/r/ethereum/comments/5o4nim/ethereum_on_arm_etharmbian_full_ethereum_node_is/)
– [3] [Armbian](https://www.armbian.com/)
– [4] [EthArmbian_5.45_Nanopct4_Debian_stretch_default_4.4.132.img](http://www.ethraspbian.com/downloads/EthArmbian_5.45_Nanopct4_Debian_stretch_default_4.4.132.img.zip)
– [5] [FriendlyElec NanoPC-T4](http://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=225)
– [6] [userpatches github](https://github.com/diglos/userpatches)
– [7] [David Huang Armbian fork (devel branch)](https://github.com/hjc4869/armbian-build/tree/development)
– [8] [Official Rockchip linux kernel](https://github.com/rockchip-linux/kernel)
– [9] [NanoPC-T4 Armbian forum thread](https://forum.armbian.com/topic/7498-nanopc-t4/)
– [10] [how long for the blockchain to sync fully? reddit](https://www.reddit.com/r/ethereum/comments/8s5l5w/how_long_for_the_blockchain_to_sync_fully/)
– [11] [Karalabe Geth syncing explanation](https://github.com/ethereum/go-ethereum/issues/16218#issuecomment-371454280)
– [12] [Geth and Parity syncing explained by Afri Schoedon](https://dev.to/5chdn/the-ethereum-blockchain-size-will-not-exceed-1tb-anytime-soon-58a)
– [13] [Vitalik on sharding](https://marginalrevolution.com/marginalrevolution/2018/06/ask-vitalik-buterin.html#blog-coment-159826704)
– [14] [Armbian image build documentation](https://docs.armbian.com/Developer-Guide_Build-Preparation/)
– [15] [NanoPC-T4 board features](http://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=225)
– [16] [TkRaiser comment on NVMe SSD performance](https://tech.scargill.net/nanopc-t4-from-friendlyarm/#comment-43949)
– [17] [Samsung SSD 970 EVO NVMe M.2 250GB](https://www.samsung.com/us/computing/memory-storage/solid-state-drives/ssd-970-evo-nvme-m-2-250gb-mz-v7e250bw/)

View Reddit by diglos76View Source