
Recently, AWS had been promoting their ARM64 based instance type heavily, like m6g, c6g instance type. I worked with the team that backed up the ARM instances very closely when I was working in the AWS EC2 team. It was a startup Annapurna Labs (http://www.annapurnalabs.com/) that was acquired by AWS a few years back. Since then, Annapurna Labs had been expanded to accelerate all the virtualization infrastructure of AWS EC2/S3/Networking businesses and becoming the core technology advantage of the AWS Nitro System.
Long story short, I am very interested to see if I can bring harmony blockchain client software running on the ARM64 platform.
Harmony blockchain is a sharded, high performance, low fee public blockchain with full EVM compatibility, but with fast 5s finality and block time. The blockchain client was written in golang which should be supported on the ARM64 platform. There were a few issues, but I managed to solve them. Since Harmony is using an older release of EVM (v1.8.27), I have to fork the go-ethereum repo to fix a bug in one of the crypto libraries of go-ethereum.
Quickstart
- launch m6g/c6g instance; ssh into the instance
- install build tools
sudo yum install glibc-static gmp-devel gmp-static openssl-libs openssl-static gcc-c++
- download harmony git repos
mkdir -p $(go env GOPATH)/src/github.com/ethereum
cd $(go env GOPATH)/src/github.com/ethereum
git clone https://github.com/harmony-one/go-ethereum.gitmkdir -p $(go env GOPATH)/src/github.com/harmony-one
cd $(go env GOPATH)/src/github.com/harmony-onegit clone https://github.com/harmony-one/mcl.git
git clone https://github.com/harmony-one/bls.git
git clone https://github.com/harmony-one/harmony.gitcd harmony
make arm_static
It works!
The CPU is almost constant at 6% of the c6g instance, which is around $50 per month for on-demand.

In comparison, CPU usage is around 8% on a c5.large instance, which is around $62 per month for on-demand.

It is a fun side project I spared a few hours to get it working. The ARM64 instance on AWS is 20% cheaper and 20% faster than the instance in the same class. So, I’d recommend trying it out. Or use it as a backup node. The official released Harmony binary is still amd64 based.
Or you may try to launch a Harmony node on a Raspberry Pi 4 board, which is also ARM64 architecture. I haven’t got time to try it yet.
Extra
As a side project, I’ve created a Github repo (https://github.com/LeoHChen/harmony-arm) to keep track of the progress on the further updates of Harmony On ARM.
Also, you can find a pre-built Harmony binary on ARM64 on the release page or you may download the init release of the binary directly here.
