首页
学习
活动
专区
工具
TVP
发布

白话解读区块链(四)账本怎么写-区块链的结构

现在我们来了解一下区块链本身,到底什么是区块链,它的组成结构是什么?我们还是从一开始那个班级的例子讲起。

班级里有100个同学,每个同学手里都有一本小账本,账本上记录了大家的工作量,以及获得的奖励还有互相交易的信息。实际上,每一个同学都是一个“节点”,每位同学手里的账本就是分布式数据库。在之前的文章中我们简单的介绍过账本里的一部分内容,现在我们来详细的做一下讲解。

我们从头开始,现在这个班级刚刚成立,所有同学们手里的账本都是空白的,然后大家都在认真的解答作业题(挖矿和维护账本),这时候小明发现他解出了一道题,然后他马上在自己的账本上记录了如下信息:

1小明的一个比特币地址(用来存放他挖出的币)

2 向这个地址中发送的比特币(最开始每次可以挖50个,随时间推移减半)

3 小明的公钥

小明将这些信息和其他一些必要信息做了一个打包,这个包好的东西就是“区块”。把这些信息用自己的私钥进行签名以后,小明用大喇叭广播到全班,这时候所有同学都会收到小明记录的信息,之后,首先大家要验证这条消息是不是小明发出的,这很容易,只需要验证小明的签名即可,接下来是要验证小明的算术题是否真的算对了,这也很容易只需要验证小明的哈希计算结果是否符合要求,当所有程序都验证完毕以后,大家会投票确定小明这个区块是否有效,当一半以上的同学都确认有效以后,那么大家会在自己的账本上记下和小明账本相同的内容,这个过程就是同步。在这之后,如果小明想把自己的一部分比特币发送给小红,那么他就要再次广播,告诉所有同学,要将自己的10个比特币发送给小红,这其实就是一个交易的过程,是小明对小红支付比特币的过程,但是小明现在还无法支付,因为交易必须写在下一个区块里,而他还没有解出“作业题”,无法创建下一个区块,不过他也不用担心,现在所有同学都收到了小明的交易申请,当下一个同学解出作业题以后,就有权力打包新的区块,在新的区块里他会把小明的交易打包进去,这样小明的支付操作就在下一个区块中完成了。

以上我们用非常简略的方式讲解了一下挖矿以及交易的过程,现在我们来了解一下区块的具体构造。区块主要有两个部分,第一个部分是“头部信息”,第二部分是主体数据,我们先来看主体,也就是账本的内容。

账本的内容是以二叉树的形式记录的,并且这个结构中使用了哈希指针,这种使用了哈希指针的二叉树叫做梅克尔树。我们现在假设有四笔交易,也就是四份数据,我们把每两份数据分成一组,然后对每份数据进行哈希计算,得到的两个哈希结果依然分成一组,我们把哈希的结果作为指针指向数据的地址,这样就得到了这个数据的不可篡改的位置,现在我们有两组哈希指针,我们再将这两组哈希指针再次做哈希计算,最后就能得到唯一的一组哈希指针,叫做根节点。通过下图我们可以直观的了解这个过程。

这样做是如何确保数据不被篡改呢?我们只需要记住根节点的哈希值就可以了,如果有人修改了底部任意一个数据,那么此数据的哈希值就会变化,哈希值变化以后,会再次向上传导,导致上一层的哈希指针再次变化,最终会一层层的传递到最顶层,也就是根节点,那么我们就可以检测到有人修改了数据,我们通过这种树状结构加哈希指针的形式,只要记住最后的一组哈希值,就可以保证整个区块的数据不被篡改。

树状结构中每一个数据都是一笔交易,例如用户A向用户B支付比特币。但是每个区块中都有一个特殊交易,也叫币基交易,这个交易的内容就是挖矿,里面主要有以下几项内容,第一就是矿工的地址,挖矿奖励的比特币就会发送到这个地址上,之后还有比特币的数量和签名等等,还有一项对挖矿至关重要的数据就是一个随机数,这个随机数有32位,由矿工自己决定数值,我们先记下它,之后会讲解到它的用途。

主体数据介绍完以后,我们来看一下头部信息。头部信息主要包含以下几个部分:

1 前一个区块头部信息的哈希值

2 梅克尔树根节点信息

3 随机数(32位)

4 哈希目标值

前一个区块头部信息的哈希值是区块中重要的结构,它和梅克尔树种的哈希作用相同,都是为了防止数据被篡改,保证数据的安全性。每一个区块的头部中都有指向前一个区块的哈希指针,所有的区块都被这样的哈希指针一个个穿成一链,就叫做区块链。

当有人修改区块链中某一个区块的数据时,那么首先会导致梅克尔树根节点的哈希改变,紧接着整个区块头部的哈希值就会改变,那么就会和下一个区块中头部信息里存储的哈希值不一样,为了保证数据一致,修改数据的黑客就需要再次修改下一个区块中的数据,想办法让哈希指针同步,但是这样一步步的修改,最终会修改到最新的区块的头部信息上,而只要我们记住并且锁定最新出现的区块的头部信息,我们就可以防止任意一个区块的数据被篡改,这就是区块链技术最重要的应用。

接下来我们说明一下头部信息和币基交易的数据中的随机数的作用,还记得之前讲过的挖矿过程吗?实际上就是计算目标哈希值的过程,在头部信息中的随机数,是矿工用来多次修改进行哈希计算的数据,矿工把这个随机数与其他头部信息结合并计算,直到计算出比目标哈希值小的结果,这个区块才算做有效,但是这个随机数只有32位,也就是说最多只有232中可能,有可能尝试了所有的组合,依然无法得到目标哈希值,这时候就需要币基交易中的随机数了,矿工只需要对币基交易中的随机数做很小的改变,例如加1,就会使得梅克尔树根节点的哈希完全变化,这样每次币基交易中的随机数+1,在头部信息的哈希计算中就有232种计算可能,这样就一定可以计算出目标哈希值了。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券