Hire us to Build Your Unstoppable Ethereum Applications
Ethereum is a decentralized platform that runs smart contracts: applications that run exactly as programmed without any possibility of downtime, censorship, fraud, or third-party interference.
WHAT IS ETHEREUM?
Ethereum is a platform that allows people to write decentralized applications (Đapps) using blockchain technology quickly. A decentralized application is an application that serves some specific purpose to its users but which has the important property that the application itself does not depend on any specific party existing. Rather than serving as a front-end for selling or providing a specific party’s services, a Đapp is a tool for people and organizations on different sides of an interaction used to come together without any centralized intermediary.
Even necessary “intermediary” functions that are typically the domain of centralized providers, such as filtering, identity management, escrow, and dispute resolution, are either handled directly by the network or left open for anyone to participate, using tools like internal token systems and reputation systems to ensure that users get access to high-quality services. Early examples of Đapps include BitTorrent for file sharing and Bitcoin for currency. Ethereum takes the primary developments used by BitTorrent and Bitcoin, the peer-to-peer network, and the blockchain and generalizes them to allow developers to use these technologies for any purpose.
The Ethereum blockchain can be alternately described as a blockchain with a built-in programming language, or as a consensus-based globally executed virtual machine. The part of the protocol that handles internal state and computation is referred to as the Ethereum Virtual Machine (EVM). From a practical standpoint, the EVM can be considered a large decentralized computer containing millions of objects called “accounts,” which can maintain an internal database, execute code and talk to each other.
THERE ARE TWO TYPES OF ACCOUNTS:
Externally owned account (EOAs): an account controlled by a private key, and if you own the private key associated with the EOA, you can send ether and messages from it. Contract: an account that has its own code and is controlled by code.
By default, the Ethereum execution environment is lifeless; nothing happens, and the state of every account remains the same. However, any user can trigger an action by sending a transaction from an externally owned account, setting Ethereum’s wheels in motion. If the destination of the transaction is another EOA, then the transaction may transfer some ether but otherwise does nothing. However, if the destination is a contract, then the contract, in turn, activates and automatically runs its code.
The code has the ability to read/write to its own internal storage (a database mapping 32-byte keys to 32-byte values), read the storage of the received message, and send messages to other contracts, triggering their execution in turn. Once execution stops, and all sub-executions triggered by a message sent by a contract stop (this all happens in a deterministic and synchronous order, i.e. a sub-call completes fully before the parent call goes any further), the execution environment halts once again until woken by the next transaction.
CONTRACTS GENERALLY SERVE FOUR PURPOSES:
Maintain a data store representing something useful to other contracts or the outside world; one example is a contract that simulates a currency, and another is a contract that records membership in a particular organization.
Serve as a sort of externally owned account with a more complicated access policy; this is called a “forwarding contract” and typically involves simply resending incoming messages to some desired destination only if certain conditions are met; for example, one can have a forwarding contract that waits until two out of a given three private keys have confirmed a particular message before resending it (ie. multisig). More complex forwarding contracts have different conditions based on the nature of the message sent; the simplest use case for this functionality is a withdrawal limit that is overrideable via some more complicated access procedure.
Manage an ongoing contract or relationship between multiple users. Examples include a financial contract, an escrow with some particular set of mediators, or some insurance. One can also have an open contract that one party leaves open for any other party to engage with at any time; one example is a contract that automatically pays a bounty to whoever submits a reasonable solution to some mathematical problem or proves that it is providing some computational resource.
Provide functions to other contracts, essentially serving as a software library.
Contracts interact through an activity that is alternately called either “calling” or “sending messages.” A “message” is an object containing some quantity of ether (a special internal currency used in Ethereum with the primary purpose of paying transaction fees), a byte array of data of any size, and the addresses of a sender and a recipient. When a contract receives a message, it has the option of returning some data, which the original sender of the message can then immediately use. In this way, sending a message is exactly like calling a function.
Because contracts can play such different roles, we expect that contracts will interact with each other. For example, consider a situation where Alice and Bob are betting 100 GavCoin that the temperature in San Francisco will not exceed 35ºC at any point in the next year. However, Alice is very security-conscious, and her primary account uses a forwarding contract that only sends messages with the approval of two of three private keys. Bob is paranoid about quantum cryptography, so he uses a forwarding contract that passes along only messages that have been signed with Lamport signatures alongside traditional ECDSA (but because he’s old-fashioned, he prefers to use a version of Lamport sigs based on SHA256, which is not supported in Ethereum directly).
For more information, visit www.ethereum.org.