区块链理论基础整理

一、历史

​ 密码朋克(cypherpunk)(包含很多密码学家大佬)

​ 2008年中本聪发明比特币

​ 1.微观:数字货币,其价值来源于人对其的信任和共识。

​ 2.宏观:去中心化的记账系统


二、区块链是什么

​ 区块链本质就是一个分布式数据库。(该数据库由一串使用密码学方法产生的数据区块有序链接而成,区块中包含有一定时间内产生的无法被篡改的数据记录信息)

​ 数据库记录的内容可以因应具体的业务而变化,没有特殊的设定。网络上每一个节点都有一个全量的数据库副本,每一个节点都可以写入数据,并将数据同步到其它节点中去。

​ 区块链之所以叫区块链,是因为它由区块和链表组成。每个区块都包含2部分:

1.区块头

​ 区块头记录了其父区块的哈希值、本区块的哈希值和生成时间等信息。每一个区块的哈希值都是不一样的,根据其区块体的内容和上一个区块的哈希值生成。

2.区块体

​ 区块体记录的就是具体的业务数据。(比特币为例,其区块体记录了比特币网络中发生的每一笔交易数据。)

​ 可以对区块体的内容进行加密,保证数据只公开给有访问权限的人。

​ 每个区块都有一个父区块的指针,就形成了区块链。


三、区块链能做什么

​ 如果区块链只是一个分布式的数据库。区别于其他数据库,其最大的特点就是去中心化。

​ 传统的数据库都是主从的模式,读操作在从库完成,写操作都是在主库完成,主库就是一个中心化的库。而区块链在每一个节点都能进行写操作,没有一个中心化的库存在。再结合上文提到的防篡改的特性,区块链有很高的置信度。就算某个节点被黑客攻破,也不会影响到其它节点。而中心化的数据库一旦主库被黑或者被管理员删库,就GG了。

​ 基于区块链极高的置信度和可靠性,所有交易类的场景都能应用上。目前用的最广泛的就是数字货币。在其它小范围的商业场景下,也会利用区块链做一些商业联盟之间的业务。比如金融行业,保险公司跟银行之间的委托保险买卖业务;供应链各个环节的数据追踪;数字化作品的版权确认等。


四、区块链不能做什么

​ 因为区块链是一个分布式的数据库,就涉及到数据的同步问题。而将新的数据同步到全网是一个非常耗时的过程。以比特币为例,确认一笔交易平均需要1个小时的时间。另外,区块链也不擅长处理高并发的业务。目前来说,其每秒最多也只能并发处理500个请求。所以对于实时性要求高的业务,区块链并不合适。


五、区块链特性

1.去中心化

​ 区块链在每一个节点都能进行写操作,没有一个中心化的库存在。

2.不可伪造
3.不可篡改

​ 由于各个区块根据区块的哈希值串联起来,而区块的哈希值是根据区块体的内容和上一个区块的哈希值而生成的。一旦对区块的内容进行了更改,哈希值就会改变。这会导致它子区块的哈希值会跟着变,一直传导到各个子孙区块。如果没有51%的节点配合,这种篡改是不可能生效的。

4.不可复制
5.匿名
6.基于密码学
7.分布式
8.可溯源
9.账本公开

六、区块链缺点

1.效率

​ 数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间。

2.能耗

​ 区块的生成需要矿工进行无数无意义的计算,非常耗费能源。

​ 因此,区块链的适用场景,其实非常有限。

​ 1.不存在所有成员都信任的管理当局

​ 2.写入的数据不要求实时使用

​ 3.挖矿的收益能够弥补本身的成本


七、区块链类型

根据网络范畴:
1.共有链

​ 特点:完全对外开放,任何人都可以任意使用,没有权限的限定,没有身份认证,不但可以任意参与使用,而且发生的所有数据都可以任意查看,完全公开透明。

​ 例子:比特币、EOS、eth、NEO

2.私有链

​ 特点:不对外开放,仅在组织内部使用。需要提交身份认证,而且具备一套权限管理体系。

​ 例子:企业的票据管理、财务审计、供应链管理

3.联盟链

​ 特点:联盟链的网络范围结余共有链和私有链之间,通常是使用在多个成员角色的环境下。往往由不同权限的成员 参与,一般也是具有身份认证和权限设置。

​ 例子:R3CV、IBM farbric、

4.主流项目
根据部署环境:
1.主链

​ 最长的链。部署在生产环境中真正的区块链系统,只有主链才会真正被推广使用,各项功能的设计都相对完善。

2.测试链

​ 测试用,可更改算法测试。

根据对接类型:
1.单链

​ 能够单独运行的区块链系统

2.侧链

​ 将不同的链结合起来的区块链。侧链能起到一个对主链功能扩展的作用,很多在主链中不方便实现的功能可以在侧链中实现,而侧链再通过与主链数据交互增强自己的可靠性。

3.互联链

​ 各个区块链互联。类似互联网。


八、区块链架构

v1.0

​ 比特币

1551015130442

v2.0

​ 以太坊、智能合约、eth(主要与金融领域结合)

1551015156447

​ v2.0最大的特点就是支持智能合约。在以太坊中,使用智能合约开发工具开发合约程序,并且编译为字节码,最终部署到以太坊的区块链账本中。部署后的智能合约是运行在虚拟机上的,成为“以太坊虚拟机”。正式通过这样的智能合约的实现,扩展了区块链系统的功能。

v3.0

​ 社会、物联网、存储(区块链与各个行业融合)

1551015167298

​ 超越了对数字货币或者金融的应用范畴,而将区块链技术作为一种泛解决方案,可以在其他领域使用,比如行政管理、文化艺术、企业供应链、医疗健康、物联网、产权登记等,可以认为是面向行业应用。

​ 行业应用一般是需要具备企业级属性(比如身份认证、许可授权、加密传输等)并且对数据的处理性能也会有要求,因此企业级场景下的应用,往往都是联盟链或者私有链。


九、区块链协议分层

6.应用层

​ 转账和记账等功能

5.合约层

​ 基本代码

​ 算法机制

​ 智能合约

4.激励机制

​ 发行机制

​ 分配机制

3.共识层

​ POW

​ POS

​ DPOS

​ DBFT

​ 其他

2.网络层

​ p2p网络

​ 传播机制

​ 验证机制

1.数据层

​ 区块数据

​ 链式结构

​ 数字签名

​ 哈希函数

​ Merkel树

​ 非对称加密


十、区块链工作流程步骤

1.发送节点将新的数据记录向全网广播
2.接收节点对收到的数据记录信息进行检验,比如记录信息是否合法,通过检验后,数据记录将被纳入一个区块中
3.全网所有的接收节点对区块执行共识算法(有工作量证明法、权益证明法等)
4.区块通过共识算法过程后被正式纳入区块链中存储,全网节点均表示接受该区块,而表示接受的方法,就是将该区块的随机散列值视为最新的区块散列值,新区块的制造者将以区块链为基础进行延长

​ 比特币为例:

​ 1.节点分为:①发送节点②接收节点

发送节点在比特币体系里就是用于提交交易信息的用户。接收节点在比特币体系里面就是通常指矿工。

如果有新的交易要提交,那么发送节点就会在比特币网络进行交易信息的广播。矿工则要一直监听比特币网络里是否有交易广播。

​ 2.矿工收到广播的交易信息后,需要校验这个信息的签名等内容是否合法。如果校验通过后,就需要将收到的所有交易信息按照一定的规则组装成一个数据块,也就是区块。

​ 3.刚刚组装的区块还只是在自己这里,还未被纳入比特币网络中正式的区块链中。

如何才能被正式纳入呢?这里就涉及到共识算法了。

因为每个矿工都可能组装了自己的区块,在每10分钟之内,只可能有一个区块被纳入正式区块链,那么所有的矿工就要根据规则在最短的时间内使自己的区块被其它矿工认可,谁最先做到,那么谁的区块就会被正式纳入。

​ 4.能纳入区块链的规则就是共识算法,比特币中使用的共识算法是工作量证明法。即让所有的矿工都去寻找一个随机数,这个随机数是通过Hash算法算出来的,并且算出来的随机数需要满足一定的条件才是大家认可的随机数(需要满足该随机数能使整个区块的哈希值小于目标值),谁先计算/猜到这个随机数,它的区块就能被全网接受。

​ 5.然后这个区块就可以纳入正式区块链,放到链条的最后面,然后各个节点再开始挖下一个区块,就这么一直接连接下去。

​ 6.挖到有效区块的节点可以获得奖励,这个奖励主要有2部分组成:

​ ①比特币体系约定每挖到一个有效区块奖励25比特币。

​ ②交易手续费。(交易信息的提交节点需要以比特币形式付这一笔交易手续费)


十一、区块链应用

1.资产:数字资产发行、支付(跨境支付)、交易、结算
2.记账:股权交易、供应链金融、商业积分
3.不可篡改:溯源、众筹、医疗证明、存在性证明
4.点对点:共享经济、物联网
5.隐私:匿名交易

十二、区块链的安全问题

1.区块链安全是因为其不可更改特性和分布式特性。

​ 即如果要修改区块链中的数据,必须完成下面两件事情:

​ ①你需要计算出修改区块之后的所有区块的哈希值,这需要非常庞大的计算能力。

​ ②你需要让超过50%的区块链用户同意你的修改。同时完成上面两件事情在短时间(甚至较长时间)内基本上是不可能的,所以区块链很安全。

2.51%攻击

​ 举个例子:

​ 假设我具备了全网51%的算力,那么我可以偷偷的计算出一个这样的区块链,包含所有的比特币交易到我的私人账户的信息。这个区块链的长度为10,但是我不向全网进行广播。同时,我将所有的比特币放入到交易市场进行售卖。这笔交易记录在正常的区块链中。

​ 当我交易所得美元进行提取时,正常的区块链长度应该是9。而我的隐藏的区块链长度是10,同时,将这个区块链广播到网络中去,然后通过观察网络会认为我后发的区块是正确的,从而到达修改了那笔交易记录的目的。

3.双花问题

​ 何为双花问题?从表意上来说,就是一个人在同一时间进行了两笔交易。这个问题,一直是支付系统的难点。无论是中心化的支付系统,还是去中心化的交易系统,都得面对这个问题。

​ 举个例子:

​ 某人手里有20块钱。他同时与两个人进行了一笔20块钱的交易。现实生活中,你可以明确地发现问题。但是,相对于支付系统而言,并发的情况经常发生。一旦一个不完善的支付系统,双花问题是很容易发生的。当然,后端处理过程中,可以通过队列的形式来解决问题。但是,对于去中心化的交易系统而言,这个问题也需要解决。

每一笔交易的产生,都会产生一个区块,那么,往往会发现这么一种情况,如图:

1551015183439

我们可以看到,Block A和Block B就会同时去连接上一个区块。那么,相对于这个问题,比特币系统采用的规则就是选最长的那条链。通常,比特币采用的是6次确认规则。在1小时内,根据10分钟产生一个区块的原则,往往会生成一条6个长的区块。那么,只要确认下这条区块,就可以避免去连接其他区块了。

​ 理论上是,区块链越长,准确性越高。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部