Demystifying Ethereum Private Blockchain in less than 4 minutes!

Saif Rehman
Jan 2, 2018 · 4 min read

What is Ethereum?

Ethereum is a open-source public blockchain, it also features development of smart contract in a language called Solidity, and provides Turing-Complete Virtual machine that is Ethereum Virtual Machine, which can execute script using an international network of public node.

What is Private Blockchain?

Building a Private Ethereum Blockchain

Setting up Required Tool

Let’s setup the environment required to build private ethereum blockchain

Installing Geth (go-ethereum)

brew tap ethereum/ethereum
brew install ethereum
brew install ethereum --devel

Installing Truffle

npm install -g truffle

Installing Solidity

npm install -g solc

Setting up Ethereum Private Blockchain

Creating the project directory and navigating to the project

mkdir project
cd project

Creating the genesis block

touch genesis.json

Paste the following code in genesis.json and save the file

{"config": {"chainId": 42,"homesteadBlock": 0,"eip155Block": 0,"eip158Block": 0},"alloc": {"0x0000000000000000000000000000000000000001": {"balance": "111111111"},"0x0000000000000000000000000000000000000002": {"balance": "222222222"}},"coinbase"   : "0x0000000000000000000000000000000000000001","difficulty" : "0x20000","extraData"  : "","gasLimit"   : "0x8880000","nonce"      : "0x0000000000000042","mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000","parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000","timestamp"  : "0x00"}

Create a folder to store your chaindata

mkdir privchain

Initiate the chaindata in privchain directory

geth --datadir privchain init genesis.json

Open a new tab in terminal and run the private ethereum blockchain

geth --port 3000 --networkid 58342 --nodiscover --datadir=./privchain --maxpeers=0  --rpc --rpcport 8545 --rpcaddr --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,miner"
Your Private Ethereum Blockchain is up running :)

Open a new tab in terminal and connect to the private blockchain so that your can create a account and mine some ether before deploying the smart contract

geth attach
This will open up Geth Javascript Console

Create and unlock you account

> personal.newAccount('password')
> personal.unlockAccount(web3.eth.coinbase, "password", 15000)

Start mining Ether

> miner.start()
Ether getting mined

Check how many Ether you have mined

web3.fromWei(eth.getBalance(eth.coinbase), "ether")

To stop mining


Creating a smart contract and deploying it on private ethereum blockchain

Navigate to the same directory of the project and initialize truffle

truffle init

Create a new file called Hello.sol in contracts folder and paste in the following code

pragma solidity ^0.4.15;contract Hello {string public message; function Hello() {message = "Hello, World"; }}

Create a new file called 2_deploy_contracts.js in migartion folder and paste in the following code

var Hello = artifacts.require("./Hello.sol");module.exports = function(deployer) {deployer.deploy(Hello);};

Now to to your truffle.js and replace the current code with the following code

module.exports = {rpc: {host:"localhost",port:8545},networks: {development: {host: "localhost",port: 8545, // port where your blockchain is running network_id: "*",from: "f6a9eb4b8dd10ce0cd8fb8d8a54eb03d57d9c578",gas: 18000000}}};

The from hex code which represent your account comes following line on code in Geth Javascript Console

> personal.listAccounts[0]

Save all your changes and run

truffle compile
truffle migrate
If everything works well, you will see something like this.

Test if you have successfully deployed the smart contract by initializing truffle console in a new terminal tab

truffle console

Test if you can access your contract

> var app
> Hello.deployed().then(function(instance) { app = instance; })
You have successfully deployed your first smart contract in a private ethereum blockchain

Next Step?

Running private ethereum blockchain network on IBM Cloud :)

Saif Rehman

Written by

Software Engineer @ IBM.