If you are a blockchain enthusiast in these days, there is a good chance you have heard about NEO. NEO, arguably dubbed the “Ethereum Killer” promises to be a tailor made dApp platform for digitizing assets. This blog is not scoped to give everyone an introduction on NEO itself. So, I highly suggest reading the white paper from here.
What interests me mostly apart from NEOs approach with GAS and NEO to drive an economy for digitizing and managing assets is how it is built. Since it has its “ties” with Ethereum, my initial idea was it would probably be another Ethereum fork. And to my surprise, NEO is actually built from scratch. It has been on github since 2015 and totally built on C#. To be specific, net core. A quick look at the .csproj file tells me this is running on Asp.net core 2.0.2 now. Apart from whatever the promise it brings, this alone justifies my interest on how this is built.
The goal of today here is to deploy a NEO private net on Azure. Don’t get confused since for this time I won’t be using Azure Blockchain As A Service. Although the Azure Blockchain Workbench is indeed intriguing, that is a story for another day since Azure BAAS doesn’t support NEO out of the box yet. So we will go ahead with an Ubuntu Server 17.10.
According to NEO docs, we need to have access to a certain number of RPC ports in our newly created VM. The port description from the doc is here.
We will use the test net ports here, not the main net. We are going to add port 20332-20336, 30332-30336 to the inbound rules.
When that is taken care of, we will move to the final validation stage and create the VM. Now from the information found newly created resource page we would go ahead and ssh into the newly created VM.
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" $ sudo apt-get update $ sudo apt-get install docker-ce
To verify docker-ce is running, try the official hello world or ask systemctl.
$ sudo docker run hello-world $ sudo systemctl status docker
After all said and done, we will pull the docker image cityofzion/neo-privatenet. This is a 4 Node NEO private net with 100M NEO and a lot of GAS. It also comes with a pre-loaded wallet. To pull and run the docker image, do the following:
$ sudo docker pull cityofzion/neo-privatenet $ sudo docker run -d --rm --name neo-privnet -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp cityofzion/neo-privatenet
Now, we are going to check out that preloaded wallet inside that docker container. To do that, execute the following:
$ sudo docker exec -it neo-privnet /bin/bash * Consensus nodes are running in screen sessions, check 'screen -ls' * neo-python is installed in /neo-python, with a neo-privnet.wallet file in place * You can use the alias 'neopy' in the shell to start neo-python's prompt.py with privnet settings * Please report issues to https://github.com/CityOfZion/neo-privatenet-docker root@b6477e009639:/neo-python#
The banner will tell you that the screen sessions are running the consensus nodes and neo-python is already installed.
ls and you will see that
neo-privnet.wallet is present there. We will run the pre-installed
neopy and open the wallet.
neopy neo> open wallet neo-privnet.wallet
The password for this is
coz. To check the balance, execute:
We have around 100m NEO and 16K gas as promised!
There you go! You have your own NEO private net running over azure. To connect to the hosted private net from a remote client, we need to modify our neo client configuration. That is a story for another day.