New

Building Blockchain applications using Ethereum

In this article, we will introduce a permissionless blockchain implementation called Ethereum. The chapter will cover the core features of Ethereum platform, how to setup a local instance of Ethereum, deploy smart contracts and build an end-to-end sample application.

As per the Ethereum website -

“Ethereum is a decentralized platform

that runs smart contracts, applications that run exactly as programmed without

the possibility of downtime, censorship, fraud or third party interference.”

Let’s understand this definition in a

detail by understanding the terminology and core features of an Ethereum

platform.

Core Features of Ethereum platform

In this section, we will talk about the core features of the Ethereum

platform.

Application

An application in an Ethereum platform is

referred to as a DApp (decentralized application). The DApp typically comprises

of a frontend and a backend code. The frontend code is developed using

programming languages like JavaScript. The frontend code communicates with the

backend code on the blockchain network. The backend code is referred to as a

smart contract and is typically developed using a higher-level language like

Solidity.  The smart contract runs on the

decentralized Ethereum network. The DApp maps to the application layer of our

reference architecture.


*Note - The

frontend part of the DApp does not run on Ethereum network. So in an Ethereum context,

a DApp could be simply referred to as the smart contract running in the

Ethereum network.*

Smart Contract

We had described smart contract earlier

in Chapter 1. Smart Contract defines and executes transactions in the form of a

software code. It comprises of operations that act on the state of the

blockchain.

This smart contract acts as a digital

contract, which can be used to move value and ownership of assets between

parties in a given network or across networks. These contracts can be between a

consumer to consumer - like a wire transfer between individuals using their

cell phones without any intermediary, a business to business - like a trade

finance contract where multiple parties are involved viz. exporter bank,

importer bank and shipment vendor, a business to consumer - like an insurance

or a health contract which rewards people for their good health behaviors or

even between system to system - which enables system to work in a secure and

autonomous way, for instance, a contract that defines whether a new device can

connect seamlessly to your connected home.

The smart contract in an Ethereum network

runs inside an Ethereum Virtual Machine (EVM) and its available on every node

in the Ethereum network. Every node has the same copy of the smart contract and

runs the same code/logic. We would go through the process of developing and

deploying a smart contract during the course of this chapter.

The Smart contract maps to the smart

contract layer of our reference architecture.


*Note – Solidity

is compiled into bytecode that is executed on EVM.*


Ether and Gas

To run applications on the public Ethereum blockchain network, you

need ethers. Ether is a form of payment – a digital fuel that client applications

need to pay in order to deploy the smart contract and execute its

operations.  Each operation requires some

computation; this computation work is referred to as a gas. Different

operations require different gas units, which is auto calculated by the system.

Based on the gas required, the client needs to pay the appropriate ethers.

Think of ether being paid for a gas, as a software service fee for executing

the code on the network.


Note - Ether is a form of digital currency,

similar to Bitcoin. But instead of using ether as a market currency, the design

of Ethereum platform uses ether as a means to run the decentralized

applications.


Ethereum Wallet

The Ethereum Wallet allows you to hold

and secure ethers and other crypto-assets created on Ethereum. It also allows

you to write, deploy and use smart contracts. We would soon see Ethereum Wallet

in action as part of our sample application demonstration. The Ethereum Wallet

can be mapped to the application layer of our reference architecture, which

provides a capability to interact with our Ethereum network.

One important point is to understand how

consensus is reached across the Ethereum network and data (i.e., blocks)

committed to Ethereum. In the next section, we will talk about this in detail.

Consensus Algorithm in Ethereum

We briefly discussed in chapter 1,

different consensus algorithms like Proof-of-Work (PoW), Proof-of-Stake (PoS)

and Practical Byzantine Fault Tolerance (PBFT). Ethereum currently uses the PoW

algorithm and the plan is to move to PoS in a later release. Let’s understand

the PoW consensus algorithm in more detail and what problem it is trying to

solve in a decentralized public network.

Ethereum blockchain uses permissionless

consensus.  Permissionless here means

that any node can join and participate in the network and execute or validate

the transactions. Out of all the public nodes in the network, majority of the

nodes, say 51% out of 100 must agree on the validity of the transaction to

arrive at a consensus. Once consensus is reached, the transaction is committed

to Ethereum. Now, in the absence of a central governing authority, how can one

assure that 51% of these nodes are genuine and no one has added or manipulated

nodes to drive transaction in their favor. That’s where the PoW algorithm is

applied to drive consensus throughout the network.

The following points explains the PoW

algorithm in simple terms

  • In a PoW based Ethereum network, each node needs to solve a mathematical puzzle to propose their transaction or to be more precise, an

    intent to create and commit the block. To solve this mathematical puzzle, it

    requires lot of computation, power (energy) and time in terms of CPU resources.

    The nodes solving this puzzle are referred to as miners.

  • The mathematical puzzle is all about finding a message digest based on input message + the digest of the previous block.


*Note – A

message digest is a

cryptographic hash function

containing a set of digits created by a one-way hashing formula. Digest basically ensures data is not

altered and the integrity of the message is maintained between the sender and

receiver.*


  • The mathematical puzzle should be less than the difficulty level of the system. The difficulty level is an arithmetically derived number set by the

    system. For more details, refer to the example below.

  • Once the puzzle is solved, all other nodes should agree to the solution and apply the same formula to arrive at a consensus.

  • The node that is the first to solve the mathematical puzzle, and eventually verified and agreed by all other nodes is rewarded for its work. In

    the Ethereum network, this would imply a node being rewarded with some ethers

    for solving the puzzle.

Given below is an example of PoW algorithm.

Let’s assume there is a chain of 2 blocks already committed on the

network. A new block 3 needs to be added to the existing chain. Let’s

understand the sequence of flow as to how this third block of transaction would

be committed:

Every node in the network will take up the challenge of creating the

third block and committing the same to the blockchain. For this to achieve,

each of the nodes will try to solve a mathematical equation. In the context of

Ethereum, it is a digest value that needs to be created and it has to be less

than some difficulty level preset by the system. The mathematical equation could

be something like the following:

Problem to solve: Calculate digest (3) which should be < (less

than) the difficulty level

*The equation and

its context:*

Let’s assume the difficulty level is preset as 000000000000000….. 781.

Now the digest (3) is calculated

using hash algorithm (say sha256) and

by creating the hash of the values: block 2, digest 2 and nonce

Note: Nonce can be any arbitrary value that is incremented every time

the node makes an attempt to find the correct digest(3) value. In short, nonce is incremented to find a solution

to the equation.

*Overview of the

solution:*

Now, each node would start solving this equation by incrementing the

nonce value. Let’s say B3 is the new block to be committed, B2 is the previous

block i.e. block 2 and D is the difficulty level. If equation is solved the

result is Yes, else it is No. The following snippet shows how a node tries to

solve the equation:

  • Iteration 1 - Sha256 (Block 3, Block 2, 1) < D Outcome – No
  • Iteration 2 - Sha256 (Block 3, Block 2, 2) < D Outcome – No

…

  • Iteration 2000008
    • Sha256 (Block 3, Block 2, 4000008) < D Outcome – Yes

The miner node will keep trying until the outcome is Yes. It is like a

rat race where every node attempts to be the first to get the outcome as ‘Yes’.

As you can see from the above snippet, at nonce value 4000008, the equation is

solved, i.e., the digest(3) value is

less than the difficulty level. The node that solves this equation propagates

the nonce value of 4000008 to all the other nodes in the network for

verification. All other nodes would simply take this nonce value and verify if

it is indeed less than the difficulty level. The other nodes just need one-step

to verify this equation with least computing power.

Once verified, the block will get committed, i.e., chained to the

previous block and the miner is rewarded with ethers for the work done.


Note – As you can see in above example, the blockchain is a chain of hashes, each linked to previous one, i.e., Digest of 3 contains Digest 2, Digest of 2 contains Digest 1 and so on. Adding a new block in between by an intruder implies changing the entire hash sequence till the very beginning, which seems virtually impossible.

In the next part of the article, we will build a crowdsourcing application using an Ethereum platform.