硬核“拆解”以太坊

2020-07-28 14:46 栏目:经验之谈 来源:网络整理 查看()

块链2.0:可编程块链

在最后一期中,我们“拆除”了区块链1.0的代表比特币。本期我们继续拆解之旅,对象是以太博物馆,可编程区块链2.0——的代表。

比特币的区块链架构主要侧重于支持密码货币的实现。尽管它具有一定的灵活性,但它仍然非常局限于支持除密码货币之外的应用场景。

区块链2.0的核心理念是利用区块链作为可编程的分布式信贷基础设施,支持智能合同应用,优化金融领域更广泛的场景和流程的应用,这与过去比特币区块链作为虚拟货币支持平台不同。

继比特币之后,有许多平台被称为区块链2.0,其中最具代表性的是以太网平台。

硬核“拆解”以太坊

以下讨论了以太网和比特币体系结构之间差异的几个主要方面。

账户设计

比特币没有账户的概念。每个用户的余额都是根据他们在区块链的UTXO计算的。以太网的设计将区块链作为管理对象状态转换的通用分散平台,而账户是带有状态的对象。以太网有两种类型的账户:一种是外部所有账户(EOA),另一种是合同账户。

所有外部帐户都是我们的普通用户帐户,由私钥控制。

合同账户是一种特殊的可编程账户。合同存在于区块链以太网,它是代码(功能)和数据(状态)的集合。合同由所有外部账户代码控制和激活。

所有外部账户的状态都是平衡,而合同账户的状态可以是平衡、代码执行和合同存储。

以太网的状态是所有账户的状态,通过每个块中的交易进行更新,需要在整个网络中形成共识。用户和区块链以太网之间的交互需要通过账户交易来实现。

块状链设计

比特币使用默克树将交易的哈希值组成一个二叉树。顶部节点的哈希值相当于整个事务列表的指纹,可以用来验证事务列表。区块链的每个街区不仅保存着交易列表,还保存着最新的状态。以太网的状态包含一个键值表,其中键是地址,值是帐户中声明的变量。

以太网块的头中存储有三个根哈希值:一个是交易的Merkle根哈希值(比特币只存储这一个),另一个是状态的根哈希值,另一个是收据的根哈希值。

与比特币的另一个不同之处在于,以太网区块链的每个区块都省去了区块链数和区块难度。

帐户状态经常改变,经常插入新帐户,并且经常在存储器中插入和删除密钥。还要求树的根散列仅与树的数据相关,与更新顺序无关。帕特丽夏树是一种满足这些要求的数据结构,在以太网中使用的默克帕特丽夏树存储数据。

帕特里夏树,或压缩前缀树,是一个更节省空间的前缀树。对于基数树的每个节点,如果该节点是唯一的子节点,它将与父节点合并。

硬核“拆解”以太坊

PoW机制

以太博物馆吸取了比特币的教训,专门设计了一个不利于计算的模型。它采用的是输入输出密集型模型,输入输出速度慢,无论计算速度有多快,都是无用的,对专用集成电路来说也不是很有效。以太网的功率(工作量证明)算法被称为Ethash算法(一种改进的匕首-桥本算法)。

该算法对图形处理器友好。首先,考虑如果你只支持中央处理器,你担心被特洛伊木马攻击;其次,现在视频内存非常大。

光客户端算法不适合挖掘,但容易验证。

快速启动算法主要依赖于Keccake256。

除了传统的块头,数据源还引入了一个随机数数组DAG(有向无环图)(由Vitalik提出)

一个纪元包含30000个块,并且在一代中使用相同的随机数阵列。

随机数数组分为三个级别:种子值、缓存值和数据,种子值非常小。根据种子值,缓存层的初始值为16M,每一代增加128K。缓存层下面是矿工使用的数据值。数据层的初始值为1G,每一代增加8M。

在这个过程中,使用了Keccak-512算法,结果是64字节。

核心部分使用的数据单元是128字节,数据层中的每个元素都依赖于缓存层中的256个元素。

ETHASH框架主要分为两部分,一部分是DAG生成,另一部分是桥本计算的最终结果。

硬核“拆解”以太坊

主要DAG流程

DAG分为三层:种子层、缓存层和数据层。这三个层次正在逐渐增加。

硬核“拆解”以太坊

种子层非常小,并且依赖于上一代的种子层。

缓存层的第一个数据是根据种子层生成的,后一个数据是根据前一个数据生成的,这是一个序列化过程。它的初始尺寸是16M,每一代增加128K。每个元素是64字节。

数据层是要使用的数据。它的初始大小是1G,现在大约是2G,每个元素是128字节。数据层的元素取决于缓存层的256个元素

硬核“拆解”以太坊

硬核“拆解”以太坊

桥本主流程

桥本的整个过程是记忆密集型的,具体如下:

1头信息和随机数一起,做一个Keccak-512运算,得到初始单向哈希值Mix[0],128字节。

2通过另一个函数(获取DAG),映射到DAG,获取一个值,并将其与Mix[0]混合得到Mix[1],64个周期后,得到Mix[64],128字节。

3后处理后,获得混合最终值,即32字节。经过计算,得出结果。

将其与目标值进行比较,如果小于,则挖掘成功。难度值越大,目标值越小,难度越大(之前需要的0越多)。

注意:为了防止采矿机器,混合功能也已更新。

硬核“拆解”以太坊

验证过程

当矿工向网络广播数据块时,他们如何检查数据块以完成一定的工作负荷?

在验证方案中,哈希表用于计算结果和指定随机数下的执行结果摘要。根据本地计算结果,它应该与块的混合摘要值一致,并且结果低于给定的目标值,则通过密封检查,表明该块已经完成了一定量的工作量。

回到哈希表方法,这种方法直接使用缓存实时计算数据行来参与验证,这与哈希表方法类似。由于数据集也是由缓存生成的,如果没有数据集,可以直接由缓存计算。这样,对于普通节点,只需使用16MB的缓存就可以很容易地完成PoW检查,并且可以根据需要生成所需数据集的数据项。

计算和图灵完备性

作为一个通用的区块链平台,以太网需要提供比比特币更强大的计算能力,并选择了图灵的完整计算环境——以太网虚拟机(EVM)。这意味着所有可能的计算都可以在EVM上完成,包括无限循环。以太网采用经济的方法来保证以太网平台的安全性:

以太网要求每个事务应该给出最大的计算步骤,并且事务的发起者应该提供Gas作为交易费用,以便矿工将事务添加到块中。

如果实际操作超过最大计算步骤,计算将被终止,交易费将由挖掘该区块的矿工所有。

以太网的每个节点都运行EVM并执行合同代码。

EVM高级语言

比特币不提供高级语言支持,而以太网为用户编写智能合同提供高级语言。最后,以太网的高级语言将被编译成在EVM执行的EVM字节码,并部署在区块链的以太网上。以太网提供了三种编程语言:实体、蛇和LLL。

一台房P2P网络

RLPx协议

以太网节点使用RPLx编码和认证通信传输协议来传输消息包。节点可以自由发布和接受任何TCP端口上的连接,默认端口是30303。

目前,RLPx的官方版本已经实现了以下功能:单协议的UDP节点发现、由ECDSA签名的UDP、加密握手/认证、节点持久化、加密/认证TCP和TCP帧处理。

耳语协议

耳语协议是用于DApp之间通信的通信协议。耳语结合了分布式哈希表(DHT)和分组消息系统(如UDP),因此它具有两种协议的特点。耳语提供多个索引,而不是单个记录,这意味着同一记录可以有多个键,某些键可能与其他记录相同。有几种使用场景:

DAPP需要发布少量的信息,这些发布的信息应该长期保存。例如,如果一家外汇交易所公布一种货币的挂牌售价,售价可能需要保持几分钟或几天。

DApp需要向其他民主行动党发出信号,希望他们能参与某项交易的协调。

有必要提供非实时的提示或日常通讯,如聊天室应用。

DAPP需要提供暗通信,也就是说,除了彼此的哈希值之外,通信双方不知道彼此的更多细节。

事件

以太网中的事件是以太网日志和事件监控协议的抽象。日志记录提供了合同的地址、一组最多4个主题和一些任意长度的二进制数据。事件利用现有的应用程序二进制接口(ABI)函数来解析日志记录。

根据事件名称和一些列事件参数,它可以分为两个系列:索引和非索引。索引(最多3个)与事件的Keccak散列签名一起用作主题的日志记录;用于编写事件的无索引字节数组。

这就是以太博物馆拆除的结束。以太网创造了一个智能契约的时代,将区块链从1.0时代带入2.0时代。在下期,我们将进入区块链3.0时代:价值互联网。如果区块链可以连接整个世界,它会是什么样子?请期待~

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发