风险提示:防范以虚拟货币/区块链名义进行的非法集资风险。 ——银保监会等五部门

一本四十七万页的账本

白话区块链 2017-12-17 22:01:05
微信分享

扫码分享

这里说的账本是指比特币的底层载体---区块链。区块链是一种更加底层的技术,它的作用是记载信息。

作者:历史文章 / 来源:白话区块链

2017-07-21 万精油虫师 白话区块链

白话区块链,从入门到精通,看我就够了!

 

 

本文转载自公众号“肉摩陀"

整编|WangMe

 

世上真的有这么一本账本么?有!那么大一本账,体积多大呢?答案是150Gb。

 

这里说的账本是指比特币的底层载体---区块链。区块链,正如它的名字所显示,分为区块和链两部分,区块即是block,链即是chain,合称blockchain。

 

不过区块链技术并不是天然绑定比特币的,但比特币却需要区块链作为载体,所以区块链是一种更加底层的技术,它的作用是记载信息。信息可能是交易记录,产品生产数据,合约履行情况等等。只不过“这本”四十七万页的账本,恰好记载了比特币的交易记录,又正好比特币火了,所以人们才觉得区块链等于比特币。

 

那区块链有什么特别呢 

 

首先,该本账本并不存在于一个单一中央服务器内,而是存在于所有装了客户端的电脑硬盘上,也就是所谓的区块链分布式存储。这里你可以想象区块链就是一部电影,每个客户端(钱包)安装完成后,都会从网上自动下载一部和原片一模一样的副本,保存到本地硬盘。这里用到的技术相信下载过BT的人都知道,叫做P2P。但该账本是加密的,在没有私钥的情况下,谁都无法查看账本内的详细交易记录,也不能交易,关于私钥,具体请参考详情参考聊聊钱包 私钥 公钥 地址

 

其次,该账本一共有四十七万页之多,也就是四十七万个区块。每页或者说每个区块里都记录着成百上千的交易记录,要保证四十七万页的顺序不出错,是不是想着就头大了呢!物理世界的书本或账本每一页都会有页码表示前后关系,区块链世界里每个区块都由区块头和数据主体构成。区块头相当于页码,记录了本区块头,前一区块头,下一区块头的hash值。通过这些hash值的前后关联,保证了区块的顺序,所以区块头即是页码和链。

 

下图是第19999个区块,第20000个区块和第20001个区块头之间的指向关系,每个区块头里都有一个唯一hash值,并记载了前一个区块头的hash,和后一个区块的hash,彼此互联,成为一条链。

 

需要注意的是,比特币区块的起始区块,0号区块(创世区块),是不指向任何之前区块的,因为它是第一块。

 

那有人可能会问,能不能把区块头黑掉,替换成我编写的信息呢?

 

答案是,几乎不可能!

 

因为区块头的hash值是对区块头数据进行SHA256算法加密后生成的一段字符串。该字符串会因为输入的数据不同而不同,区块头本身是一串二进制数据,你改了其中任何一个数字,通过SHA256算法后,就会产生不同的hash值。举个例子,我们从网上下载zip文件包时,通常也会包含一段MD5的字符串,该字符串原理类似SHA256,它的作用是验证文件的完整性。)

 

如果hash值变了,那就需要去更改本区块之前和之后对应的区块,然后是和那些区块对应的区块,以此类推生生不息,你需要修改整条链上的所有区块,并且还需要把网络上超过51%的副本都修改了,才能起作用,考虑到这本账本有四十七万页之多,以及网络上的众多副本,这个修改的工作量将会大的惊人。

 

那区块头是怎么和区块主体连接呢

 

靠merkle值,下图显示了区块头内包含的merkle值,merkle值是通过merkle树算法,将区块内所有交易数据生成的一串加密字符串。假设一个区块里有10000笔交易,现在让每两笔交易合并,通过两次SHA256算法生成一个merkle值,然后这5000个merkle值两两合并,再生成一个新的merkle值,以不断重复该过程,直到最后产生唯一的一个merkle值,这个值称作merkleroot值。这个过程有点像踢足球时候的32进16,16进8,8进4淘汰赛,只不过这里不淘汰,而是合并。

 

下图中区块头里打了红色的字符串就是merkleroot

 

 

用merkle树算法的好处是,即使区块内的交易数据很多,也只需要很少的路径就能算出merkleroot,比如100万笔交易只需要20步就可以算出根merkle值,如下图:

 

 

正因为merkle值的这个特点,使得SPV简单支付(simplified payment verification)和轻钱包成为可能。正常情况下一个包含区块头和主体数据的区块大约是1M,而区块头大小只有80字节,用户可以通过仅下载区块头,再下载每次与自己发生merkle值计算的相对交易的merkle值(你可以理解为所有和你提过比赛的球队)。

 

回到上面提到的含100万笔交易的区块,你只需要下载该区块的20个merkle节点数据,就能算出merkleroot值,从而证明交易的合法性,这样的轻钱包的大小可以控制在40m以内。不过SPV和轻钱包的交易确认,仍然需要依赖网络上拥有完整区块计算机的数据。

 

因为区块链技术的以上特点,使得它实现了去中心化,不可篡改,可追溯交易记录等等功能。不过作为代价,你需要下载所有的区块链数据,就比特币的应用来说,已经有上百G了,而不同的区块链应用会有不同大小的账本,我想说,愿你有个足够大的硬盘。

 

 

 

 

【勘误】

7月19日文《聊聊钱包、私钥、公钥和地址》中的“ getaddressbyaccount”为笔误,正确应为“getaddressesbyaccount”。

 

 

点击“阅读原文”,查看公众号所有历史消息。

白话区块链

区块链世界入口第一站,人人都能看懂的区块链;24 小时热点实时追踪。