如何用架构师思维解读区块链技术?

学习区块链之前有一些基础知识需要提前掌握好如下知识点

  • P2P

  • 不可逆算法

  • 不对称加密算法

  • Merkle树

  • CAP理论

  • 最终一致性算法

如果用一句话来描述比特币要做什么,那么可以这样描述:做一个去中心化电子货币发行交易系统。

这里有三个关键词:去中心化/电子货币发行/电子货币交易

1. 去中心化 分布式存储要解决的3个基本问题
    1. 网络结构

        一种方式是可采用类似Hadoop中HDFS的方式,由某个中心节点NameNode进行协调访问,但这种方式就会带来单点风险,破坏了中心节点,整个体系都将不可访问。

        或者采用Cassandra无中心化投piao机制维护整个集群状态,但是这种方式在全球化开放式部署中会导致根本无法收敛。

        比特币采用了一种更加简单直接的方式,利用P2P协议维护整个比特币网络集群,不需要某个中心节点协调节点之间的通信,不需要所有机器投piao维护集群状态。而是通过P2P协议进行节点之间的数据传输,任何节点都可以随时加入或者离开比特币网络集群,而不会对比特币网络集群产生影响,也不需要特意去修复这个集群中的故障机器。

    利用P2P协议进行节点之间数据传输主要有两个功能点:

        a. 把需要存储的数据广播到所有节点上进行储存。
b. 查询整个网络集群中所有节点的最新数据,如果自己节点的数据与大部分节点的数据不一致,则更新自身的数据与大部分节点存储的数据一致。

        交易过程:某人将一笔交易数据往A服务器上提交,A服务器验证数据合法性后存储到自身的数据库中,同时把这笔交易数据点对点的传输到比特币网络集群的其它服务器上,只需要少数服务器确认完成后即可认为交易完成,因为每个服务器维护的自身与整个网络集群的数据状态,当少量服务器都认为与整个集群一致时,此时从概率上就是一致的。在最终一致性一节中将继续对这种网络结构下的数据存储进行描述。


    2. 数据不可篡改性

        通过区块链(账本链)保证数据不可串改。系统每过一段时间满足一定条件生成一个账本,如:用当前帐本的顺序号,上一个帐本的所有记录的hash值,系统时间戳(10分钟一个维度),再找一个随机值,几个数据加在一起Hash后满足一定的条件,比如开始多少位都是0,那么系统就接收这个新帐本。

        产生的新帐本通过帐本顺序号串在上个帐本之后,形成一个帐本的链式结构,新的帐本依赖于上一个帐本的数据和当前系统时间戳,因此一旦新帐本产生后,历史帐本的数据就无法被篡改,因为一旦篡改,就与之后的帐本对不上,帐本被破坏,按照上节网络结构中描述的自动更新为网络集群中大部分节点维护的相同的帐本。

        一旦形成了链式帐本后就无法去更改某个历史帐本中的数据,更改了某个历史帐本,那么在它之后的所有帐本都需要更改,但是每个帐本都是根据当前的系统时间戳验证hash值是否满足条件才能接收,所以无法去篡改历史帐本的数据。

        为了防止上个帐本的数据被篡改,产生新的帐本需要依赖于上一个帐本中的所有交易记录的hash值,这样一旦上个帐本的数据发生变化就与新帐本对应不上。但是帐本中所有交易记录计算hash值是一件耗时的计算,因此比特币采用了merkle树对某个帐本中的所有交易记录进行hash计算。它主要是解决帐本中交易记录hash计算的效率问题。

        
    3. 最终一致性

        是分布式存储就绕不开CAP理论,比特币也一样,比特币采用P2P协议进行节点之间的数据传输,放弃了CAP中的Consistency,采用了AP两个维度。

上节中描述了帐本的产生基本机制,用当前帐本的顺序号,上一个帐本的所有记录的hash值,系统时间戳(10分钟一个维度),再找一个随机值,几个数据加在一起Hash后满足一定的条件,比如开始多少位都是0,那么系统就接收这个新帐本,这就是这个集群中所有节点的共识,所有节点只接收这样的帐本,而寻找这个随机值是需要庞大的计算能力。在比特币中称它为Proof-of-Work(POW)挖矿。

当每隔10分钟找到这个值,就是生成了新的帐本。但网络集群都是开放的,可能同时找到了两个值,在集群中少部分节点中产生了2个帐本,针对这种情况比特币系统设计为:整个网络集群采用少数服从多数原则,集群中大部分采用了哪个帐本,少数节点服从多数节点,丢弃没被大多数采用的帐本,达到最终一致性。

        
2. 电子货币发行

    本质上讲,比特币系统自身就可以寻找一个随机值,产生新的帐本。但是比特币把发行货币和寻找新帐本背后的计算力结合在一起。寻找新帐本需要消耗计算力,谁找到了符合新帐本条件的随机值,代表了他消耗了大量的计算力,新帐本一旦被系统接收,那么系统自动在该新帐本中记录一条转帐给他一定个数比特币的纪录,就完成了货币的发行。

    比特币的运行必须依赖于新帐本的产生,而谁找到新帐本,谁就能获得系统自动生成的转帐纪录,也就是获得了一定数量的比特币,这就是挖矿。这也就激励了人们不断的投入到挖矿中,不断的挖出新帐本,通过激励维持着比特币系统的运行。

    交易也需要提供交易分,分给忙碌记账的矿工。

3. 电子货币交易  

    比特币采用了非对称加密技术对用户的帐户操作,公钥就是用户的帐户号码,谁找到了新帐本,系统自动往新帐本发现者的公钥帐户,记一条特定数量比特币的纪录。当用户要消费比特币时,需要用私钥进行签名,系统会用帐户号码也就是公钥验证签名是否正确,并且根据用户的帐户号码从历史的交易中计算出当前帐户中的真实金额,确保用户操作的资金在帐户真实金额之内。这里的设计有两个要点:

  1. 插入的每一条纪录都需要用私钥签名,系统用帐户号码也就是公钥进行验证签名是否正确,验证正确则认为合法。

  2. 如果满足第一个条件,则验证插入的纪录中转帐金额是否正确,验证的方式是对该公钥以往的所有交易纪录进行计算得出该帐户当前的金额,如果不超过该金额值则为合法。

https://mp.weixin.qq.com/s/jyXsazsCGbStJFVT7el9vg

猜你喜欢

转载自my.oschina.net/u/3705388/blog/1633207