TNT1520 / 社會人文经济 / 区块链技术篇|你真的知道以太坊吗?

0 0

   

区块链技术篇|你真的知道以太坊吗?

2019-01-29  TNT1520

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


自从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 可以实现“库”。可复用的库代码可以应用在一个合约的存储上,可以用来实现复杂的数据结构,从而使智能合约更加的强大。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多