世上真的有这么一本账本么?有,那么大一本账,体积多大呢?答案是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了,而不同的区块链应用会有不同大小的账本,我想说,愿你有个足够大的硬盘。
关于区块链是什么,这篇文章就介绍的差不多了,以后会花时间介绍一下专门的密码保管软件---1password,即使不用区块链的人,也有必要了解一下这个软件,对于上网账户安全还是很有必要的。
Kindly Reminder
截至本文完成,最新比特币区块编号是475237,大小999Kb,比特币总市值380亿美金。
版权说明
本文首发自微信公众号:“肉摩陀”
无需申请版权许可即可转载,转载时请注明作者
苹果用户请看下图
领取专属 10元无门槛券
私享最新 技术干货