i am Chris Smith

Protocol Engineer, Security Researcher, Software Consultant

Up and Running with a Private Go-Ethereum Network

Setting Up AWS

We are going to focus on getting this set up on AWS since that is the most flexible for a team to work on contracts in the future.

This is not a tutorial on AWS (though if I come across Geth specific tips, I’ll include them.) Once your AWS is set up you can SSH into it using: ssh -i /path/my-key-pair.pem [email protected] (where ec2-user is the right user for your environment and the @ address for your server). If you get an error about the permissions for your .pem file being wrong, you should enter: chmod 400 /path/my-key-pair.pem

You can also use AWS-CLI by following these instructions.

Getting Geth installed

Once you have SSH’ed into your AWS machine you should be on an Ubuntu command line. From here, you can follow the Geth install instructions. Personally, I used the following commands:

  • sudo apt-get install software-properties-common
  • sudo add-apt-repository -y ppa:ethereum/ethereum
  • sudo apt-get update
  • sudo apt-get install ethereum

Once these are run, you will be able to run Geth, in all its glory, on your AWS. Check that Geth is installed with geth --help

Getting your first node set up

Since we are setting up our own network we do not get the benefit of the work that has gone into the live Ethereum chain or the test chains. However, we get the benefit of being the only ones on the chain and being in complete control of it. At this early stage for me, some of the downsides of having your own chain seem to be:

  • doing more setup work
  • being responsible for the security/safety/uptime/connections of your own network.

Genesis Files

This is a .json file that sets up the basic configuration of your network. It handles things like giving an initial account Ether (which should not be entirely necessary), setting the mining difficulty, and many other items that I am not 100% what they do. Here is my genesis file.

You need to put the contents of that file on your AWS server. I prefer to place the files for ethereum in a directory, so here is how I get the file up there.

  • mkdir ethchain
  • cd ethchain
  • nano genesis.json
  • This last command will open a text editor in your terminal. Paste in the genesis files.
  • You can save the file (write out) with CTRL+O
  • Then exit with CTRL+X
  • You can check that your contents got saved with cat genesis.json.

Ok, at this point you should have everything in place to start your first node. (If you want to read some docs about what you are about to do, you can geth --help or visit the github repo.)

Let’s get that node started

We are going to need a data directory to hold stuff. So mkdir datadir from within your ethchain directory. Now we need to initialize the node. Use get --datadir ~/ethchain/datadir/ init genesis.json. You will probably see some warnings about accounts and etherbase. Do not worry about these.

Now we are ready to get it started with:

geth --identity "[SOMETHING]" --rpc --rpcport "8545" --nodiscover --rpccorsdomain "*" --datadir ~/ethchain/datadir/ --port "30301" --networkid [PICK A NUMBER FOR YOUR NETWORK] --verbosity [1-6 number] --rpcapi "db,eth,net,web3" --nat "any" console 2>> ~/ethchain/ethchain.log

Lets dig into these a bit:

  • --identity: This is the name of your node (as it will appear on the chain)
  • --rpcpost: You can define your own and it should probably be unique between nodes.
  • --nodiscover: This is very important as it prevents your network from being discovered by other random nodes.
  • --port: This should be unique between node and will need to be an open port.
  • --networkid: This should be something unique from other networks, but will be the same among all your nodes.
  • --verbosity: This will determine how much you see in your logs (6 is the highest). While trying to get everything set up, I prefer 5, but after that a 4 usually is good in my limited experience.
  • 2>> ~/ethchain/ethchain.log: this pipes your logs into this file.

Once your node is started you can open a new terminal window, ssh back into your server. Once there, you can enter tail -F ~/ethchain/ethchain.log, this will stream your logs in this terminal window.

Assuming this is all working, you now have a Geth root node running! Congratulations!!!

Play around a bit

Create a new account: personal.newAccount()
This will ask you for a password. Save this and the address it returns to you someplace safe. Check your balance: primary = eth.accounts[0]
balance = web3.fromWei(eth.getBalance(primary), "ether");
Of course this will be 0 for now. We will get into mining and connecting your second node in the next post.


Things are moving fast in this world and I am very new to it. I could not have put together this information without these great resources: