以太币是以太坊上的货币。以太坊上的每次活动都需要消耗以太币做为费用,成功产生区块的矿工也会获得以太币进行奖励,以太币可以通过交易平台很容易地兑换为法定货币。
当前存在两种以太坊区块链。其中,以太坊经典,其货币表示为ETH,而硬分叉版本则表示为ETH,且处于持续增长状态,并且正在进行积极的开发。然而,ETC也有自己的追随者,以及一个处于壮大过程中的专业社区,同时也是以太坊的“非分叉”原始版本。本章主要讨论ETH,这也是目前最活跃的官方以太坊区块链。
以太坊中的另一个重要概念是gas(燃料)。以太坊区块链上的所有交易都需要支付所执行的计算成本,该成本称作gas或燃料(crypto fuel),这也是以太坊提出的一个新概念。是以太坊当前的内部货币。使用gas进行计价,用户能够预先确定一个交易执行成本,这就是gas成本。
采用gas,当以太币价格暴涨时,gas价格可适当调低。而暴跌时,则可适当调高gas价格。
例如使用智能合约里的函数去修改一个字符时,这个交易将会小号一定的gas,由于gas的使用成本已经确定,因此用户可以有规律的使用智能合约。
gas作为交易费用是由交易发起者预先支付的。相应地,每次操作均会消耗gas。其中,每项操作都包含与之关联的预定义数量的gas。同时,每笔交易均指定了交易所消耗的gas量。如果在交易完成之前耗尽了gas,那么由交易执行的任何操作都将回滚。如果交易成功执行,那么任何剩余的gas都将退回至交易的发起者。
需要注意的是,gas不应与采矿费用混为一谈。采矿费是一种不同的概念,用于向矿工支付gas费用。
以太坊的共识机制基于GHOST协议,该协议由Sompolinsky和Zohar于2013年12月首次提出。
对于快速生成时间所导致的旧区块和孤立区块,最重观察子树贪婪算法(Greedy Heaviest Observed Subtree,GHOST)最初是作为一种机制来缓解此类问题的。在GHOST中,旧区块被添加至计算中,进而获得最长的重链。在以太坊中,旧区块称作Uncles或0mmers.
以太坊中的世界状态定义为以太坊区块链中的全局状态,基本上可表示为以太坊地址和账户状态之间的映射。其中,地址长度定义为20个字节。另外,映射行为表示为一种数据结构,并通过递归长度前缀(RLP)实现序列化。
这里,RLP是一种用于以太坊中的特定编码方案,对网络存储和传输执行二进制数据的序列化操作,并将最终状态存储于帕特里夏(Patricia)树中。RLP函数将一个数据项作为输入,可以是一个字符串或一个数据项列表,并生成适合在网络上存储和传输的原始字节。RLP不对数据进行编码;其主要目的是对结构进行编码。
1、以太坊虚拟机
EVM是一种简单的基于堆栈的执行器,运行字节码指令,以便在系统状态间进行转换。其中,虚拟机的字大小设置为256位;栈大小则限制为1024个元素,并基于LIFC(后进先出)队列。
EVM是一类图灵完备机,但会受到运行指令时所需的gas量的限制。这意味着,由于gas这一需求条件的限制,将不可能出现无线循环(可能导致拒绝服务攻击)。除此之外,EVM还支持异常处理,例如gas量不足或无效的指令。在这种情况下,机器将立即停止并将错误返回至执行代理。
EVM是一个完全隔离的沙箱运行环境。也就是说,在EVM上运行的代码不能访问任何外部资源,例如网络或文件系统。
如前所述,EVM是一个基于堆栈的架构,且设计为big-endian格式,对应的字大小为256位宽,允许Keccak 256位哈希和椭圆曲线密码计算。
这里存在两种存储类型可用于合约和EVM。类型一称作内存,并定义一个字节数组。当合约完成代码执行任务时,内存将被清除,这与RAM十分类似。另一种类型则称为存储,即永久性地存储在区块链上,同时也是一类键-值存储。
内存空间会受到gas费用的限制。此处,字数组(字寻址)则是与虚拟机相关的存储结构,且具有非易失性特征,并作为系统状态的一部分维护。此外,在尺寸和存储方面,键-值均为32字节大小。程序代码存储在虚拟只读存储器(虚拟ROM)中,并可以使用CODECOPY指令访问。此处,CODECOPY指令用于将程序代码复制到主内存中。最初,在EVM中,所有的存储和内存均设置为0图6.7显示了EVM的设计环境,其中虚拟ROM存储了程序代码,对应代码使用CODECOPY被复制到主内存中。随后,主内存通过EVM读取(引用程序计数器并逐步骤执行指令)。其中,程序计数器和EVM堆栈会随着每次指令执行而更新。
EVM优化是一个较为活跃的研究领域,近期的研究表明,为了达到较高的性能,可对EVM进行优化和调优。同时,关于Web装配(WASM)应用的可能性,相关研究已经在进行中。WASM由谷歌、Mozilla和微软联合开发,目前正被w3C社区组织设计为开放标准。WASM的目标是能够在浏览器中运行机器代码,从而以本机速度运行。类似地,EVM 2.0的目标则是能够在CPU中以本地方式运行EVM指令集,从而提升运行速度和效率。
EVM操作
在一天放区块链中,数据会以文件的形式被永久记录,我们称这些文件为区块。一个区块是一些或所有最新交易的记录集,且未被其他先前的区块记录。可以将区块想象为一个城市记录者其记录本上单独的一页纸(对房地产产权的变更记录),或者是股票交易所的总账本。在绝大多数情况下,新区块会被加入到记录的最后(在比特币中的名称为区块链),一旦写上,就再也不能改变或删除。每个区块记录了它被创建之前发生的所有事件。
以太坊区块中包含了多种组件,其中包括区块头、交易列表以及Ommers或Uncles头列表。
其中,交易列表仅是区块中所含的全部交易列表。此外,该区块还包括了Uncles头列表。相比较而言,最重要和最复杂的部分是区块头,下面将对此加以讨论。
区块头是以太坊区块中最为重要的组件。每个区块中,对整个区块链起决定作用的是区块头,其中涵盖了大量的细节内容和相关信息。
The block is the most important component of the block. In each block it is the block head , , which contains a great deal of details and relevant information.
对于所耗费的计算,Ether可视为一种货币奖励,并通过交易和区块验证确保网络安全。Ether用在以太坊区块链中,用于在EVM上支付合约的执行。除此之外,Ether还用于购买gas,进而执行以太坊区块链上的相关计算。
去中心化共识的基础是参与节点的点对点网络,节点维持和保护着区块链(维护并保证区块链网络的安全)。
以太坊网络数据EthStats.net是以太坊网络实时数据的仪表板,这个仪表板展示了重要的信息,诸如现在的区块、散表难度、gas价格和gas花费等。页面上显示的节点只是精选了网络上的实际节点。任何人都可以在EthStats仪表板上添加他们的节点。Github上的Eth-Netstats README描述了如何连接。
using Taiwan network dataEthStats.net is a dashboard for real-time data on Taiyu network, which displays important information, such as the current block, spread difficulty, gas prices and gas costs. The nodes shown on the page are just the actual nodes on the network. Anyone can add their nodes to the EthStats dashboard. Eth-Netstats README on Github describes how to connect.
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
发表评论