我理解的区块链

我从2016年开始接触比特币技术,一年多以前开始读比特币源码,从比特币摸到了以太坊,再从以太坊接触到了EOS, CITA,Hyperledger Fabric等,对区块链的认识和理解也浅入深,虽然离专家水平还太远,打算从技术角度说说我的理解。

小说<三体>有一段类似的话:

一个穷凶极恶的人,如果想让别人认为他是安全的,那么他必须自己把手绑起来,而不是手里拿着刀。

在一个黑暗森林的守宙中,一个文明想证明自己是安全的,那么必须把自己裹在低光速黑域中。

我觉得如果说整个互联网是一个黑暗森林,那么区块链也许就是能证明一个互联网服务是安全的,或者是可信任的。因为区块链技术已经把信息篡改的手已经绑起来了。

分布式账本

首先,区块链是一个分布式账本,人类早就知道鸡蛋不能放在同一个篮子里,要分在不同一篮子里,这个比喻当然不够恰当,因为区块链里的分布式账本,是把一份同样的账本分别存储(备份)到不同的机器,如果是一条公链,任何人都可以备份到这个账本;如果是一个联盟链,加入到这条链的所有许可机器,都可以备份到账本。

这些账本只要有数据更新,就全立即同步,把更新内容同步到其它的机器上。只要网络不出问题,都会努力使自己的账本数据最新,这样账本就有了公开性。分布式存储,这个概念并不新鲜。

把一定时间内(比如10秒)的记账数据(交易)打成一个包(按照一定的结构组织起来),区成一个区块,这个区块中放入了上一个区块的区块hash,当下一个区块打包时,也将当前区块计算出来的hash放入区块中,这样就形成了一条单向链表,从0块到N块的一条链。

那么是怎么做到不可篡改的呢?对于区块链来说,不可篡改这个概念其实并不准确,由于块中只记录了交易,所有的数据状态改变都是通过交易来完成,只能说所有的数据篡改都会留下痕迹。

当机器(节点)收到新的数据(块)时,就会对数据进行验证,把每一条交易都检查一遍,如果是合约,那就用把交易再本地虚拟机里再执行一遍,只有全部都检查通过了,才会接收这个最新的块。(由此也可以想到随机数为什么是伪随机数)

共识

决定谁来打包这个块,就是共识。也就是大家共同维护同一账本的共同约定。

为了维护同一本账本,必须要先出一个打包交易的机器,这样账本才能不断地更新数据和状态。但怎么选择哪台机器来作这个工作,里面却是充满了现实中人类社会协作的影子。

给出一道题,谁最快解出来谁打包(pow)

能力越大,责任越大(pos)

选出一群人来代表群众(dpos)

投票得到大多人承认,就是合法的(BFT,PBFT,Tendermint)

区块存储 

从区块链存储的角度,我觉得区块链只是一种新的信息的组织方式。

经典的软件架构设计模式MVC,即模型,视图,控制器。

如果把MVC模式来理解区块的存储,我觉得可以分为MVS,即模型,视图,存储。

V:视图,区块只是存储数据的一种视图,我们同步到的区块有区块头,交易列表等,这些都只是存储的数据的外在表现,而并非实际的存储就是如此。

M:模型,把底层的数据用各种树的形式结构化起来,目的是为了更好地检索和更新。

S:存储,真正存储在各种key-value数据库中的数据

区块存储以后打算展开再来写。

应用

既然区块链只是一种新的信息组织方式,我觉得区块链的应用在于信息本身。

1.信息公开,区块链的特点并不是不可篡改,而是把所有修改信息的痕迹都记录下来,基于这个特点,可以用来做信息公开,这样信息公开方就相当于把自己修改信息的手绑起来了。想到前几天电影流浪地球的影评被修改的问题,是不是可以使用区块链技术来消除市场的质疑。现在的各种产品溯源,也是这种想法。

但这样会不会又引发另一个问题,就是为了圆一个谎言,需要再编5个谎言去圆它。 

2.信息标准化。联盟链各组织之间,通过区块链实现信息共享和标准化,现在各银行之间已有的安全认证机制是否有可能替代。

挑战

区块链是利用密码学技术,达到某种共识的分布式账本。我觉得在应用上也存在几个挑战:

密码学:这是区块链应用最重要的基础之一,所有账户,交易都基于密码学的安全性,如果密码学本来出现问题,比如sha-2被攻破,公私钥被破解等,那现有的公链的安全性将无复存在。

共识:我觉得找到一种高效安全的共识,能高效地使用区块链的关键