首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

虾说区块链-53-《精通比特币》笔记八

一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。

区块链-《精通比特币》笔记八:

《精通比特币》第二版网络在线阅读地址:

http://book.8btc.com/books/6/masterbitcoin2cn/_book/ch08.html

区块结构:区块类似公开账本中各个数据的集合,理解为一个存储数据账本记录的容器,包括:元数据的区块头和构成区块主体的一长串交易信息。区块头是80字节,交易一般来说平均为250字节,区块中包含超过500个交易,故完整的一个区块比区块头大大约1000倍。具体结构:block size(4bytes)、blockHeader(80bytes)、transactcounter(1-9bytes)、transactions。

区块头:区块头有三组元素组成,一组引用父区块hash值得数据,这一组数据用于和前一区块相连,一组元数据,具体包括了难度值、时间戳、nonce,与挖矿相关,一组merkle root,用于有效总结区块中所有交易的数据结构。具体结构:version(4bytes)、previous block hash(32bytes)、merkle root(32bytes)、timestamp(4bytes)、difficulty target(4bytes)、nonce(4bytes)。

区块标识符:区块链中广泛用到很多加密的hash值,那么区块的主标识即它的加密hash值,通过SHA-256算法对区块头二次hash计算得到一个数字指纹,产生一个32字节的hash值,称作区块头hash值,通过对这个区块头计算,表明唯一明确的标识一个区块,所有网络的中节点通过对区块头的hash计算来获取区块的hash值。区块的hash值不包含在区块的数据结构中,一般情况下区块hash是当区块从网络中接收的时候每个独立节点自己计算,作为区块元数据的一部分存储在独立的数据库表中,用于索引更快的从磁盘中检索区块。

除了区块头hash值以外,还有个区块高度的概念,区块高度理解为创世区块后的一个记录值。区块高度不是区块的唯一标识符,在区块生成过程中,可能出现两个或两个以上的区块有相同的高度,当然区块高度也作为元数据存储在一个索引数据表中便于快速检索。

创世区块:2009年bitcoin的出现,第一个区块被称为创世区块,所有后续的区块,追溯后最终都到达创世区块。创世区块中有一句bitcoin最为著名的话:“The Times 03/Jan/2009Chancellor on brink of second bailout forbanks.”这句话是泰晤士报当天的头版文章标题。

区块链接:从区块链中全节点来看,本地保存了从创世区块开始的所有完整的副本,随着区块的产生,区块链不断扩展,每一个节点接入都会传入这些区块信息,并通过区块头hash值,父区块hash值验证,继而更新连接到最新的区块上。

Merkle树:merkle是一种hash二叉树,之前的文章有专门的章节写过这个内容。“树”在计算机中是一种数据结构,在bitcoin中merkle树用来归纳一个区块中的所有交易,同事生成整个交易打包后的数字指纹,提供一种校验区块是否存在的高效途径,生成一个完整的merkle树需要递归对hash节点进行hash,将新生成的hash节点插入到merkle树中,一直到只剩下一个hash节点,那即为merkle根。Bitcoin中merkle树两次用到SHA-256算法,称为double-SHA-256。从数据结构效率来算,N个数据元素加密后插入merkle树,那么最多计算为2*log~2~(N)即可检验出任意数据是否在该树中。

Merkle树计算:bitcoin中所有的交易不存储在merkle树中,是通过将数据hash后,然后hash值在叶子节点,叶子节点之间hash值串联进行hash,归纳到父节点,以此类推。A = SHA256(SHA256(Transaction A))、HAB =SHA256(SHA256(H~A~ + H~B~))。在merkle树种出现偶数的叶子节点,那么就通过串联,出现奇数节点,那么需要交易归纳,最后的交易复制一份构成偶数节点,这种称为平衡树。不管区块中交易有多少,交易都会归纳,产生一个32字节的数据作为merkle根。在证明一个特定的交易时候,一个节点需要计算log~2~(N)个32字节的hash值,形成一个特定的交易到树根的认证路径或者merkle路径即可。

Merkle树和SPV:在SPV节点中merkle被广泛使用,在SPV节点中不下载整个区块,仅保留区块头,那么使用认证路径或者merkle路径来验证交易存在于区块中。

Bitcoin测试:现在bitcoin区块链环境中除了bitcoin主干网以外还有:testnet、segnet、regtest。

Testnet:用于测试区块链、网络、货币的总称,是一个功能齐全的P2P网络,包括钱包,测试币,挖矿等功能。理解为生产bitcoin的测试环境。

Signet:隔离见证测试网络,用于帮助隔离见证的开发和测试。

Regtest:回归测试,bitcoin的一个核心功能,允许创建本地区块链进行测试。

上述三个环境提供一系列的测试环境,用于钱包、客户端、交易所等应用程序的开发。

本文由币乎社区(bihu.com)内容支持计划赞助。

之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171227B0D7HL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券