以太坊将比特币针对数字交易的功能进一步进行了拓展,面向更为复杂和灵活的应用场景,支持了智能合约这一重要特性。算法
以太坊:项目最初的目标是打造以个智能合约的平台,该平台支持图灵完备的应用,按照智能合约的约定逻辑自动执行,理想状况下将不存在故障停机、审查、欺诈,以及第三方干预等问题编程
以太坊核心实现是基于比特币网络的核心思想进行了拓展,所以在不少设计特性上都与比特币网络十分相似。
基于以太坊项目,以太坊团队目前运营了一个公开的区块链平台——以太坊网络。智能合约开发者使用官方提供的工具和以太坊专用应用开发语言 Solidity,能够很容易地开发出运行在以太坊网络上的“去中心化”应用。网络
以太坊区块链底层也是一个相似比特币网络的P2P网络平台,智能合约运行在网络中的以太坊虚拟机里。网络自身是公开可接入,任何人均可以接入并参与网络中数据的维护,提供运行以太坊虚拟机的资源。异步
与比特币项目相比,以太坊区块链的技术特色主要包括:编程语言
基于比特币的核心思想,以太坊提出了许多创新的技术概念:智能合约、基于帐户的交易、以太币和燃料函数
智能合约
智能合约是以太坊中最为重要的一个概念,即以计算机程序的方式来缔结和运行各类合约。工具
智能合约做为运行在以太坊虚拟机中的应用,能够接受来自外部的交易请求和事件,经过触发运行提早编写好的代码逻辑,进一步生成新的交易和事件,能够进一步调用其余智能合约。区块链
智能合约的执行结果可能对以太坊网络上的帐本状态进行更新。这些修改因为通过了以太坊网络中的共识,一旦确认后没法被伪造和篡改spa
帐户
以太坊直接用帐户来记录系统状态,每一个帐户存储余额信息、智能合约代码和内部数据存储等。以太坊支持在不一样的帐户之间转移数据,以实现更为复杂的逻辑。设计
以太坊帐户分为两种类型:
当合约帐户被调用时,存储其中的智能合约会在矿工出的虚拟机中自动执行,并消耗必定的燃料。燃料经过外部帐户中的以太币进行购买
交易
交易在以太坊中是指从一个帐户到另外一个帐户的消息数据。消息数据能够是以太币或者合约执行参数。
以太坊采用交易做为执行操做的最小单位。每一个交易包括以下字段:
以太币
以太币是以太坊网络中的货币。以太币主要用于购买燃料,支付给矿工,以维护以太坊网络运行智能合约的费用。
燃料
燃料(Gas),控制某次交易执行指令的上限。每执行一条合约指令会消耗固定的燃料。当某个交易还未执行结束,而燃料消耗完时,合约执行终止并回滚状态。
为了支持更复杂的智能合约,以太坊在很多地方进行了改进,包括交易模型、共识、对攻击的防御和可扩展性
运行环境
以太坊采用以太坊虚拟机做为智能合约的运行坏境。以太坊虚拟机是一个隔离的轻量级虚拟机环境,运行在其中的智能合约代码没法访问本地网络、文件系统或其余进程。
对同一个智能合约来讲,每每须要在多个以太坊虚拟机中同时运行多份,以确保整个区块链数据额一致性和高度的容错性。但这也限制了整个网络的容量
开发语言
以太坊为编写智能合约设计了图灵完备的高级编程语言。目前Solidity是经常使用的以太坊合约编写语言之一。
智能合约代码编写完毕后,用编译器编译为以太坊虚拟机专用的二进制格式(EVM bytecode),右客户端上传到区块链中,以后在矿工的以太坊虚拟机中运行
以太坊采用了帐户的模型,状态能够实时地保存到帐户里,而无需像比特币的UTXO模型那样去回溯整个历史。
以太坊目前采用了基于成熟的PoW共识的变种算法Ethash协议做为共识机制。为了防止ASIC矿机矿池的算力攻击,跟原始PoW的计算密集型Hash运算不一样,Ethash执行时须要消耗大量内存,反而跟计算效率关系不大。
以太坊网络在下降攻击方面的核心设计思想仍然是经过经济激励机制防止少数人做恶:
可扩展性是以太坊网络承接更多业务量的最大制约。以太坊项目将来但愿经过分片机制来提升整个网络的扩展性。
分片:是一组维护和执行同一批智能合约的节点组成的子网络,是整个网络的子集。
分片前,全部节点都须要处理全部的智能合约,节点的处理能力会限制网络的最大处理能力。分片后,同一片内的合约处理是同步的,彼此达成共识,不一样分片之间则能够是异步的,能够提升网络总体的可扩展性。