币圈子-打造专业区块链媒体平台

什么是以太坊技术?以太坊技术的9个核心概念详解

2018-10-11 09:31:51 | 来源:互联网 | 9166人阅读 | 作者:币圈子
全文导读
很多人都或多或少听说过以太坊,但是对于以太坊你了解多少?以太坊作为区块链技术2.0,它被称为公链之王(未来可能更有胜者),它的价值来自哪里,与区块链1.0又有什么不同。自从2008年比特BTC币出现以来,它的存在已经渐渐为一部

很多人都或多或少听说过以太坊,但是对于以太坊你了解多少?以太坊作为区块链技术2.0,它被称为公链之王(未来可能更有胜者),它的价值来自哪里,与区块链1.0又有什么不同。

1.png

自从2008年比特BTC币出现以来,它的存在已经渐渐为一部分人所接受,人们也积极展开了基于BTC的商业应用的思考与开发。但是随着应用的扩展,人们发现BTC的设计只适合虚拟货币场景,由于存在着非图灵完备性、缺少保存状态的账户概念,以及PoW挖矿机制所带来的资源浪费和效率问题,在很多区块链应用场景下并不适用。

因此人们需要一个新的基于区块链的具有图灵完备性、高效共识机制、支持更多应用场景的智能合约开发平台,以太坊在这种情况下应运而生。

以太坊的目的是对脚本、竞争币和链上元协议等概念进行整合和提高,使得开发者能够创建任意的基于共识的、可扩展的、标准化的、图灵完备的、易于开发和协同的应用。

以太坊是一个通用的全球性区块链,可以管理金融和非金融类型应用的状态。以太坊的新颖在于其神奇的计算机网络,它促成了一种新型的软件应用,真正的去中心化应用。将信任逻辑嵌入小程序里,运行在区块链上。而与BTC相比,以太坊建立了一种新的密码学技术基础框架,在其上开发应用更加容易,并对轻客户端友好,同时允许应用共享一个可行的去中心化应用打开了大门。从长远来看,它所带来的改变将影响全球经济和控制结构。

以太坊是个平台和编程语言,包括数字货币以太币(Ether),以及用来构建和发布分布式应用的以太脚本(EtherScript)。

以太币ETH和著名的数字货币比特币BTC有非常多的相似之处。两者均为数字货币且无法伪造,都以去中心化的方式运行来保证货币供应不被某一方所控制。以太坊的另一半重要特性是提供一个完整的编程语言环境,有时也被叫作以太脚本。编程语言是人类用来控制计算机工作的,因此,用任何编程语言写好的指令对计算机来说都是准确无误没有歧义的。

从最底层角度来看,以太坊是一个多层的、基于密码学的开源技术协议。它的不同功能模块通过设计进行了全面的整合,作为一个整体,它是一个创建和部署去中心化应用的综合平台。虽然,以太坊看起来像由多个互相联系的开源项目的构成的混合体,但是它的进化一直被明确目标所引导,所以各个组件可以协同地组装在一起。

以太坊是区块链与智能合约的完美结合,是智能合约的完整解决方案,被设计成了一个通用的去中心化平台,拥有一套完整的、可以扩展其功能的工具,在P2P网络、加密、HttpClient等技术的支持下实现了一个类似于比特币的区块链。它通过工作量证明机制实现共识、由矿工挖矿,通过P2P网络广播协议来实现对区块链的同步等操作。

以太坊不同于比特币的是可以在上面任意编写智能合约,通过智能合约实现强大的功能,实现去中心化应用的开发。在以太坊上部署的智能合约运行在以太坊特有的虚拟机上,通过以太坊虚拟机和RPC接口与底层区块链进行交互。

以太坊技术的9个核心概念

1.以太坊虚拟机:EVM

EVM是以太坊中智能合约的运行环境。它是以太坊项目中的另一个主要创新。它是由许多互相连接的计算机组成的。任何人都可以上传程序,并让这些程序自动执行,同时保证现在和所有以前的每个程序的状态总是公共可见的。

2.以太坊账户

以太坊中有两类账户,它们共用同一个地址空间:外部账户:该类账户被公钥-私钥相对控制;合约账户:该类账户被存储在账户中的代码控制。外部账户的地址是由公钥决定的,合约账户的地址是在创建合约时由合约创建者的地址和该 地址发出过的交易数量计算得到。

两类账户的唯一区别是:外部账户没有代码,人们可以通过创建和签名一笔交易从一个外部账户发送消息。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取、写入、发送其它消息和创建合约。

以太坊的账户包含4个部分:

a.随机数,用于确定每笔交易只能被处理一次的计数器;

b. 账户目前的以太币余额;

c.账户的合约代码(如果有的话);

d.账户的存储(默认为空)。

3.以太坊消息

以太坊的消息在某种程度上类似于比特币的交易,但是两者之间存在3点重要的不同。

1)以太坊的消息可以由外部实体或合约创建,然而比特币的交易只能从外部创建;

2)以太坊消息可以选择包含数据;

3)如果以太坊消息的接收者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念。

4.以太坊交易

以太坊中“交易”是指存在从外部账户发出的消息的签名数据包。交易包含消息的接收者、用于确认发送者的签名、以太坊账户余额、要发送的数据和被称为STARTGAS和GASPRICE的两个数值。为了防止代码出现指数型爆炸和无限循环,每笔交易需要对执行代码所引发的计算步骤做出限制。STARTGAS就是通过需要支付的燃料来对计算步骤进行限制,GASPRICE是每一计算步骤需要支付矿工的燃料价格。

5.燃料Gas

以太坊上的每笔交易都会被收取一定数量的燃料Gas,设置Gas的目的是限制交易执行所需的工作量,同时为交易的执行支付费用。当EVM执行交易时,Gas将按照特定规则被逐渐消耗。Gas价格由交易创建者设置,发送账户需要预付的交易费用=GASPRICE*Gas amount。如果执行结束还有Gas剩余,这些Gas将被返还给发送账户。无论执行到什么位置,一旦Gas被耗尽就会触发一个out-of-gas异常。同时,当前调用帧所做的所有状态修改都将被回滚。

6.存储、主存和栈

每一个账户都有一块永久的内存区域,被称为储存,其形式为Key-value,key和value的长度均为256位。相对于主存和栈,存储的读操作开销较大,一个合约只能对它自己的储存进行读写。

第二个内存区被称为主存。合约执行每次消息调用时都有一块新的被清除过的主存,主存可以按字节寻址,但是读写的最小单位为32字节。操作主存的开销随着主存的增长而变大。

EVM不是基于寄存器的,而是基于栈的虚拟机。所有的计算都是在一个被称为栈的区域内执行。可以把栈里的元素放到存储或者主存中。

7.指令集

EVM的指令集被房间保持在最小规模,以尽可能避免可能导致共识问题的错误。所有的指令都是针对256位这个基本的数据单位进行操作,具备常用的算术、位、逻辑和比较操作,也可以进行条件和无条件跳转。可约可以访问当前的相关属性,比如它的编号和时间戳。

8.消息调用

合约可以通过消息调用的方式来调用其它合约,或者发送以太币到非合约账户,消息调用 和交易非常类似,它们都有一个源,一个目标,数据负载,以太币,Gas和返回数据。事实上每个交易都可以被认为是一个顶层消息调用,这个消息调用会依次产生更多的消息调用。

一个合约可以决定剩余Gas的分配,如果在内部消息调用时发生了out-of-gas异常或者其它异常,合约将得到通知。被调用的合约会拥有崭新的主存,并能够访问调用的负载。

9.代码调用和库

以太坊中存在一种特殊类型的消息调用 ,被称为callcode。它跟消息调用几乎完全一样,只是加载来自目标地址的代码将在发起调用的合约上下文中运行,这意味着一个合约可以在运行时从另外一个地址动态加载代码。存储、当前地址、余额都指向发起调用的合约,只有代码是从被调用地址获取的。这使得Solidity可以实现“库”。可复用的库代码可以应用在一个合约的存储上,可以用来实现复杂的数据结构,从而使智能合约更加的强大。

温馨提示:文章不代表币圈子立场,不构成任何投资建议,谨防风险!本文来源于币圈子网站,转载请注明出处!侵权必究!
相关阅读
扩展阅读