b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

结构体数组在Ethereum的世界里,数据的最终存储形式是[(3)

电脑杂谈  发布时间:2018-02-09 15:40:12  来源:网络整理

小技巧:Block的成员hash会缓存上一次Header计算出的哈希值,以避免不必要的计算。

Block的哈希值等于其Header的(RLP)哈希值,这就从根本上明确了Block(结构体)和Header表示的是同一个区块对象。考虑到这两种结构体所占内存空间的差异,这种设计可以带来很多便利。比如在数据传输时,完全可以先传输Header对象,验证通过后再传输Block对象,收到后还可以利用二者的成员哈希值做相互验证。

成员分散存储在底层

Header和Block的主要成员变量,最终还是要存储在底层中。Ethereum 选用的是LevelDB, 属于非关系型,存储单元是[k,v]键值对。我们来看看具体的存储方式(core/database_util.go)

这里的hash就是该Block(或Header)对象的RLP哈希值,在代码中也被称为canonical hash;num是Number的uint64类型,大端(big endian)整型数。可以发现,num 和 hash是key中出现最多的成分;同时num和hash还分别作为value被单独存储,而每当此时则另一方必组成key。这些信息都在强烈的暗示,num(Number)和hash是Block最为重要的两个属性:num用来确定Block在整个区块链中所处的位置,hash用来辨识惟一的Block/Header对象。

通过以上的设计,Block结构体的所有重要成员,都被存储进了底层。当所有Block对象的信息都已经写进后,我们就可以使用BlockChain结构体来处理整个块链。

2. HeaderChain和BlockChain

BlockChain结构体被用来管理整个区块单向链表,在一个Ethereum客户端软件(比如钱包)中,只会有一个BlockChain对象存在。同Block/Header的关系类似,BlockChain还有一个成员变量类型是HeaderChain, 用来管理所有Header组成的单向链表。当然,HeaderChain在全局范围内也仅有一个对象,并被BlockChain持有(准确说是HeaderChain只会被BlockChain和LightChain持有,LightChain类似于BlockChain,但默认只处理Headers,不过依然可以下载bodies和receipts)。它们的UML关系图如下所示:

在结构体的设计上,BlockChain 同HeadeChain有诸多类似之处。比如二者都有相同的ChainConfig对象,有相同的Database接口行为变量以提供[k,v]数据的读取和写入;BlockChain 有成员genesisBlock和currentBlock,分别对应创世块和当前块,而HeaderChain则有genesisHeader和currentHeader;BlockChain 有bodyCache,blockCache 等成员用以缓存高频调用对象,而HeaderChain则有headerCache, tdCache, numberCache等缓存成员变量。除此之外,BlockChain 相对于HeaderChain主要增多了Processor和Validator两个接口行为变量,前者用以执行所有交易对象,后者可以验证诸如Body等数据成员的有效性。

Engine是共识算法定义的行为接口。共识算法是整个数字货币体系最重要的概念之一,它在理论上的完整性,有力的支撑了“去中心化”这个伟大设想的实现。落实在代码层面,consensus.Engine就是Ethereum系统里共识算法的一个主要行为接口,它基于符合某种共识算法规范的算法库,提供包括VerifyHeaders(),VerifyUncles()等一系列涉及到数据合法性的关键函数。不仅仅BlockChain和HeaderChain结构体,在Ethereum系统里,所有跟验证区块对象相关的操作都会调用Engine行为接口来完成。目前存在两种共识算法规范,一种是基于运算能力(proof-of-work),叫Ethash;另一种基于某个投票机制(proof-of-authority),叫Clique。具体内容在之后的文章中会有更多展开。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-69032-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...