什么是区块链
一条链,多个数据块(区块)串联起来的链表, 这条链的存储更新维护都是运行在一个分去中心的P2P网络系统之上的。
比特币
分布式记账本,账本记录的是交易记录,比特币这条链上记录了所有的比特币交易记录,按照时间顺序打包成一个个区块,串联记录起来。
比特币为例,简单的区块链是如何运行的
P2P & 对等网络
对等网络可以对比中心式网络来看
中心式网络存在一个中心节点, 网络内的所有其他节点都直接链接中心节点, 中心节点进行数据处理,一旦中心节点出现问题, 整个网络都不可用。
对等网络,网络中的每个节点地位相等, 节点间相互链接,每个节点既可以作为客户端向其他节点请求数据,也可以作为服务端,为其他节点提供服务。这种网络结构下某个节点出现问题, 不会影响整个网络。
比特币在P2P网络之上,实现了一套共识机制, 分布式存储了区块链的数据。
分布式存储
传统的互联网系统的分布式存储一般指网络中有多个节点都能存储数据, 每个节点只存储总数据集的一部分,每个节点存储的数据是不同的。使用数据时整个存储系统,对外能表现出拥有全量的数据。相当于把多台机器的存储能力整合到一起,组成一个高性能的存储系统
比特币的分布式存储, 是每个节点都存储全量的数据,存储了整个区块链的数据, 多个节点存储的数据是相同的。系统中有多少个节点,区块链的数据就有多少个备份。整个系统共同维护了一套数据的多个备份。这样就不会因为某个节点的数据损坏丢失等问题影响到整个系统,甚至说只要有一个节点还存储着全部数据,整个系统就可以恢复。
共识
在P2P网络上这么多节点维护同一套数据就会有一些问题,节点间如何达成一致?节点1 要在数据A后边存储一条新的数据B, 节点2要在数据A后边存储一条新数据C,我们最终要维护一套相同的数据,所以A后边到底是存储B还是C呢?多个节点如何就这类问题达成一致呢? 如果是中心式系统的话,很好解决这种问题, 决策都由中心节点处理,其他节点听话干活就行。P2P网络上没有中心节点,每个节点地位相等,那么大家如何达成共识呢。比特币系统的解决方式是,通过POW的方式让某一个节点抢到决策权,其他节点跟随他的决策。通俗讲每个节点都在拼命算一道很难的数学题,谁先算出答案,这一轮谁就听谁的。通过这样的方式来达成一致。
所以比特币是这样运行的
很多计算机运行了比特币的客户端程序,运行了客户端程序,这台计算机就成为了比特币P2P网络中的一个节点。这些节点不断从网络中收集比特币的转账交易记录,同时也将这些数据广播给其他节点。每个节点都在收集交易记录,同时也都在算一道很难的数学题,当某一个节点算出答案时,会将自己收集到的交易数据打包成块(区块),并将这个区块广播到网络上让所有节点校验、存储起来。这样所有节点就共同存储了一套相同的区块数据,这些区块按照产生的先后顺序,连成一条链-> 区块链。这样的一个系统某些节点故障,不会影响系统的整体运行,也不会丢失数据。没有中心,也就很难被中心所操控。
比特币-分布式账本
上边讲了分布式系统上共同维护同一套数据是如何运行的。比特币就是维护了一个账本,账本记录了所有交易记录,有了所有交易记录,也就能算出每个账户的正确余额。新产生的交易记录被节点按照规则不断记录到区块链上, 已经记录的数据不可更改。维护起这样一个账本就实现了比特币的查询余额、转账等基本操作。
区块链有什么不一样
费了这么大力气,就实现了个转账? 这个我银行卡转账支付宝转账比有什么厉害的地方,为什么要用区块链要用比特币?
大家都在讲区块链解决了信任问题,是解决了什么信任问题
先换个问题 我为什么愿意把家里得两头牛,换成几张纸币?因为我对国家的信任,对国家发行维护的这套货币系统的信任,然后我为什么愿意拿着这几张纸去银行换成一张塑料卡片,换成网银里的几个数字呢?这是我对银行的信任,信任银行能够随时给我兑换现金,信任在网银上转账时,那堆数字的处理不会出错。信任银行系统不会崩溃。
那如果我信任比特币 信任的是什么?信任的是机器是机器执行的代码,代码就是设定好的逻辑,不变的规则,能够在机器上严格的执行。信任比特币是信任这套构建在P2P网络上的分布式系统足够健壮稳定,运行在其之上的这一套记账的代码能够严格正确的记录数据。
区块链带来的不一样的地方,是这种信任模式的转变,从对人对组织机构的信任,能转变成对机器对代码的信任,这种转变能带来变革的地方,都会有无限的想象空间。