Ethereum

Last updated: Jan 18, 2018

Website: https://ethereum.org
Whitepaper: https://github.com/ethereum/wiki/wiki/White-Paper
Yellowpaper: https://ethereum.github.io/yellowpaper/paper.pdf

Mission

To provide a decentralized blockchain platform where developers can create transparent and autonomous smart contracts and applications that run without any possibility of downtime, censorship, fraud, or third-party interference.

Overview

First block: July 30 2015
Block explorer: https://etherscan.io/
Supply limit: 100,000,000+ ETH
Issuance: Block reward
Block confirmation: Proof-of-Work
Mining algorithm: Ethash
Developments: Casper

Summary

Ethereum is a blockchain protocol for building decentralized applications created by Vitalik Buterin. Instead of keeping track of transactions, Ethereum keeps track of accounts in the network. Accounts are different from wallets because they can be programmed to perform an action. Programmed accounts are called smart contracts that execute their code when they receive instructions. Ethereum uses ether (ETH) as a token to send transactions between accounts and to pay for additional costs incurred when using the protocol.

Accounts are public addresses that collectively determine the state of the entire Ethereum network. The two types of accounts are externally owned accounts, which act like regular wallets; and contract accounts, which are programmed with code. Accounts contain 4 elements that determine its state:

  • nonce; the number of transactions/messages sent from the account
  • balance; the amount of ether stored on the account
  • storageRoot; a hash of the data stored on the account
  • codeHash; a hash of the code programmed into the account

Externally owned accounts are public addresses that are like regular wallets, storing ether that can be accessed with a private key. These account addresses are generated cryptographically from an elliptic curve private key, similar to the way Bitcoin wallets are generated, except Ethereum addresses are hashed with Keccak-256.

Contract accounts are public addresses that are programmed with code. They do not have a private key. Instead, contract accounts are created when a user sends a transaction to the network with instructions on how to program the contract account. The public address of this contract account is then computed deterministically and cryptographically from the address of its creator and how many transactions the creator has sent. When contract accounts receive messages from the Ethereum network, whether they are sent from other contract accounts or externally owned accounts, they execute their programmed code.

Transactions are signed packages of data that are sent from externally owned accounts. Ethereum transactions contain additional parameters that provide instructions to the recipient. An entire transaction is composed of the following fields:

  • nonce; the number of transactions/messages sent from the account.
  • value; the amount of ether to be sent
  • to; the address of the recipient
  • v, r, s; private-key signature
  • gasLimit; maximum amount of gas the sender is willing to pay to complete the transaction
  • gasPrice; the price in ETH the sender is willing to pay per unit of gas paid

Additionally, transactions that create a contract account will also include an ‘init’ field that specifies the code to be programmed into the contract account.

Messages are similar to transactions, but they are only sent from contract accounts. They also include an additional field called ‘data’ which specifies the input it received in order to execute its code and send its message.

Gas represents computational effort in the Ethereum network. It represents the value miners and users attribute to performing different tasks in the network. Users place gas limits on transactions to declare how much gas they are willing to spend to complete the transaction. Miners can increase or decrease the gas limit of blocks to accommodate additional transactions or protect themselves from network spam.

Miners are computers in the Ethereum network that perform the calculations necessary to solve a block’s hash and confirm transactions onto the blockchain. Ethereum uses an algorithm called Ethash to create a hash that takes a lot of memory to solve. This is meant to make mining ‘ASIC resistant’, reduce the effectiveness of pooling together specialized processing units, and promote decentralization of miners. The difficulty level of this hash is automatically adjusted to ensure new blocks are added on average every 15 seconds. A static block reward of 3 ETH is given to the miner for performing this work, as well the cost of gas paid by transactions in the block. Miners also maintain a copy of the distributed blockchain as part of their work.

ethereum ice age, scalability, and casper

Proof-of-work mining at a large scale requires immense computational power, electricity, and resources. The community decided that this would not be a sustainable model for Ethereum to scale. Their solution is to adopt a proof-of-stake protocol named Casper, which requires a hardfork to implement. The Ethereum Ice Age is a new block difficulty adjustment scheme, increasing the difficulty of mining blocks exponentially. This will eventually cause block times to increase until the network ‘freezes’ because block times become too long for the network to be useful. This forces users to switch over to the Casper hardfork and continue the chain using proof-of-stake instead.

Casper is a proof-of-stake protocol to solve Ethereum’s scalability issue. Proof-of-stake allows users to lock up some of their tokens and become a validator. Blocks will lose their static reward but transaction fees are distributed to all validators proportional to the amount locked up as a ‘stake’. This is currently under development.