Ethereum System
Blockchain
A blockchain is a distributed computing architecture where every network node executes and records the same transactions, which are grouped into blocks. Only one block can be added at a time, and every block contains a mathematical proof that verifies that it follows in sequence from the previous block. In this way, the blockchain’s “distributed database” is kept in consensus across the whole network.
The current block number can be viewed on the Ethstat website.
Security
Individual user interactions with the ledger (transactions) are secured by strong cryptography. Nodes that maintain and verify the network are incentivized by mathematically enforced economic incentives coded into the protocol.
Decentralization
On traditional server architectures, every application has to set up its own servers that run their own code in isolated silos, making sharing of data hard. If a single app is compromised or goes offline, many users and other apps are affected. On a blockchain, anyone can set up a node that replicates the necessary data for all nodes to reach an agreement and be compensated by users and app developers. This allows user data to remain private and apps to be decentralized like the Internet was supposed to work.
Ethereum Virtual Machine
The Ethereum Virtual Machine (a.k.a. EVM) is the runtime environment for smart contracts in Ethereum. It is actually completely isolated, which means that code running inside the EVM has no access to network, filesystem, or other processes. This EVM makes Ethereum a programmable blockchain. It allows users to create their own operations of any complexity they wish. In this way, it serves as a platform for many different types of decentralized blockchain applications, including but not limited to cryptocurrencies.
Every Ethereum node runs the EVM in order to maintain consensus across the blockchain. Decentralized consensus gives Ethereum extreme levels of fault tolerance, ensures zero downtime, and makes data stored on the blockchain forever unchangeable and censorship-resistant.
Ethereum Wallet
Accounts represent identities of external agents (e.g., human personas, mining nodes or automated agents). Accounts use public key cryptography to sign transaction so that the EVM can securely validate the identity of a transaction sender.
Accounts play a central role in Ethereum: they are essential for users to interact with the Ethereum blockchain via transactions.
Account address
Account addresses are the last 20 bytes of a SHA-3 hash of a public key which is generated at account creation. This address is most often in this form : 0x0421d217d2D572244c16e6dc58E87C10d73579
UF
Keyfile
Every account is defined by a pair of keys, a private key and public key. Every private key/address pair is encoded in a Keyfile. The critical component of the keyfile, your account’s private key, is always encrypted, and it is encrypted with the password you enter when you create the account.
If you loose your account password, there will be no possibility to ask to any entity for a password recovery. Your account and its content will thus be lost. If you delete accidentally the keyfile, the account will too be unusable. Make sure you backup your keyfiles regularly
Popular wallets
Here is a non exhaustive list of wallets.
- My Ether wallet
MyEtherWallet is nn open source, javascript, client-side tool for generating Ethererum Wallets & sending transactions. - Mist ethreum wallet
The Mist Ethereum wallet, and its parent Mist project, are being developed under the auspices of the Ethereum Foundation. It is the GUI-based option for creating accounts with the geth command. - EtherLi
EtherLi is the worlds first multi-signature Ethereum web wallet. This is the first Ethereum wallet that allows you to access your funds from anywhere on the web while taking advantage of multi-signature security layered with two-factor authentication for outgoing transactions.
Create and manage your account
There are two methods to create and manage your Ethereum account.
- Command Line Interface (a.k.a. CLI) tool based on the geth command.
- Graphical User Interface (a.k.a. GUI) based option for creating accounts.
The “official” Mist ethereum wallet. and its parent Mist project, are being developed under the auspices of the Ethereum Foundation, hence the “official” status. Versions of the wallet app are available for Linux, Mac OS X, and Windows.
As of 2016-05-13, The Mist wallet is still a beta software and shall be used at your own risk. A bug can leave you with a broken wallet and a potential lost of your wallet content.
Solidity
Contracts live on the blockchain in a Ethereum-specific binary format called Ethereum Virtual Machine (EVM) bytecode. Contracts are typically written in some high level language such as Solidity and then compiled into bytecode to be uploaded on the blockchain.
Solidity is the DEV-created (i.e. Ethereum Foundation-created), Javascript-inspired statically-typed language that can be used to create smart contracts on the Ethereum blockchain. There are other languages you can use as well (LLL, Serpent, etc). The main points in favour of Solidity is that it is statically typed and offers many advanced features like inheritance, libraries, complex user-defined types and a bytecode optimizer.
The best way to try out Solidity right now is using the Browser-Based Compiler.
All needed information to start writing code with Solidity can be found on the Read the doc website.
Contract
The contract is the basic structure of Solidity. It is a prototype of an object which lives on the blockchain. A contract may be instantiated into a contract-account (or 'object', or sometimes just 'account') at which point it gets a uniquely identifying address with which is may be called. The address here is similar to a reference or pointer in C-like languages, or just a plain old object in Javascript. Like plain objects in many object-oriented languages, contracts can never run themselves - they may only be called, or, put another way, they can only react to the receipt of a message; they can never be proactive.
To make it do something when it receives a message, we can introduce a function. The syntax of a function is similar to Javascript: it begins with the function
keyword, then has a parenthesised parameter list, and finally has a braced expression block.
Example:
contract MyBasicAddition { function() { var two = 1 + 1; } }
Smart contract
From Vitalik Buterin in ethereum blog: a smart contract is a mechanism involving digital assets and two or more parties, where some or all of the parties put assets in and assets are automatically redistributed among those parties according to a formula based on certain data that is not known at the time the contract is initiated.
History
The phrase and concept of smart contracts was developed by Nick Szabo as far back as 1994, with the goal of bringing what he calls the "highly evolved" practices of contract law and practice to the design of electronic commerce protocols between strangers on the Internet. Nick is a computer scientist known for his research in digital contracts and digital currency. Although Szabo has repeatedly denied it, people have speculated that he is the one behind Satoshi Nakamoto, the designer of Bitcoins.
In 1996, as part of a startup doing bond trading on the net, Ian Grigg created a method to bring a classical 'paper' contract into touch with a digital accounting system such as cryptocurrencies. The form, which became known as the Ricardian Contract, was readily usable for anything that you could put into a written contract, beyond its original notion of bonds.
In short: write a standard contract such as a bond. Insert some machine-readable tags that would include parties, amounts, dates, etc that the program also needed to display. Then sign the document using a cleartext digital signature, one that preserves the essence as a human-readable contract. OpenPGP works well for that. This document can be seen on the left of this bow-tie diagram.
Definition
A smart contract is a collection of code (its functions) and data (its state) that resides at a specific address on the Ethereum blockchain. Contract accounts are able to pass messages between themselves as well as doing practically Turing complete computation. They are little programs that execute “if this happens then do that”, run and verified by many computers to ensure trustworthiness.
A smart contract is a mechanism involving digital assets and two or more parties, where some or all of the parties put assets in and assets are automatically redistributed among those parties according to a formula based on certain data that is not known at the time the contract is initiated.
Properties
The key property of a smart contract is simple: there is only a fixed number of parties.
Smart contracts are written using the Solidity language. A contract in the sense of Solidity is a collection of code (its functions) and data (its state) that resides at a specific address on the Ethereum blockchain. You will find a collection of very basic smart contracts on fivedogit github. For an exhaustive list of smart contracts on the Ethereum network, please visit Etherchains website.
Smart contract code validation
INCOMPLETE
You can verify a smart contract with the following verification tools. These websites will allow you to review source code, as well as attached transactions.
Decentralized applications
A decentralized application (a.k.a. DAPP) is similar to a smart contract, but different in two key ways:
- a decentralized application has an unbounded number of participants on all sides of the market.
- decentralized application need not be necessarily financial.
Visit this link to see a list of current DAPP projects.
Decentralized organizations
In general, a human organization can be defined as combination of two things:
- a set of property
- a protocol for a set of individuals
The idea of a decentralized organization (a.k.a. DO) takes the same concept of an organization, and decentralizes it. Instead of a hierarchical structure managed by a set of humans interacting in person and controlling property via the legal system, a decentralized organization involves a set of humans interacting with each other according to a protocol specified in code, and enforced on the blockchain
Decentralized autonomous organizations
The ideal of a decentralized autonomous organization (a.k.a. Introduction to the DAO) is easy to describe: it is an entity that lives on the internet and exists autonomously, but also heavily relies on hiring individuals to perform certain tasks that the automaton itself cannot do.
The DAO is a corporation whose bylaws are written entirely in code.
Wikipedia defines a corporation as “a company or group of people authorized to act as a single entity (legally a person) and recognized as such in law.” While The DAO is a group of people authorized to act as a single economic entity, no governmental body recognizes it as such.
See also
- Ethereum blog terminology guide
- Erights: home of E, the secure distributed persistent language for capability-based smart contracting
- bitsonblocks: introduction to smart contracts
- Nick Szabo Smart contract idea - 1997
- Nick Szabo: Contracts with bearers - 1997/1999
- Ethereum Homestead: connecting to the network
- Solidity workshop