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