当前位置:首页 » 《随便一记》 » 正文

区块链基本原理概述_sillysunny的博客

1 人参与  2021年11月17日 16:23  分类 : 《随便一记》  评论

点击全文阅读


1. 简介

        有关区块链的介绍文章太多了,自己读了很多篇,感觉还是理解不深。我在这里也以自己的理解来做个说明,个别图片和表格来自网络,如果原作者认为不合适可以联系作者删除。本文的主要内容已作为ICAA 2021英文会议论文“Overview of the basic principles of blockchain”发表,觉得有必要与国内读者分享。

  作为比特币的底层实现技术,区块链受到了政府部门和企业的高度关注,并在金融领域和非金融领域展开了广泛研究与应用。区块链本质上是一个由若干区块构成的数据链,这条数据链被分散保存到多个计算机节点。这些计算机节点相互独立,相互不信任,没有一个权威的中心节点,因而区块链被认为是一个“去中心化”、“去信任”的系统。在这两个概念中,“去中心化”是方法,“去信任”是目的,后者需要通过前者来解决;很多人强调前者,但后者才是根本。“去信任”是指去除第三方信任,交易双方不经过可信的第三方而直接交易。然而,区块链本身并不要求交易双方互信,交易数据允许存在造假和欺骗,由此导致在比特币的底层可能同时存在多条区块链,但通过“共识机制”、“奖励”、“造假惩罚”等措施,最终区块链为比特币建立了一套可靠的、可信任的解决方案。然而,在一些小型应用中,“共识机制”和“奖励”并不能从根本上解决“去信任”或数据造假问题。当前开发的很多区块链应用,某种程度上都建立在“信任”的基础上,与比特币的区块链有较大区别;即便如此,其中的一些系统仍能解决其他技术所难以解决的问题,并具有较高应用价值。本文重点阐述比特币的区块链的基本原理,并为基于区块链技术开发应用提供一些合理化建议。

2. 区块链与比特币

2.1 区块链发展历史

         比特币是上层应用,区块链是比特币的底层实现软件。区块链的发展经历了三个阶段,分别是1.0、2.0、3.0。

        区块链1.0是以比特币为代表的虚拟货币时代,实现了货币的去中心化与支付手段,涌现出了大量的山寨币等。区块链1.0支持两个人之间的虚拟货币交易,无法普及到其他行业。

        区块链2.0多了智能合约的概念。一个交易允许多个人共同签名后发送给别人。智能合约给金融领域提供了更加广泛的应用场景,譬如多方合同下的商品买卖。区块链2.0的代表是以太坊,支持智能合约并提供编程接口,用户可以开发自己的虚拟货币。区块链2.0通常应用于金融领域。

        区块链3.0则将区块链应用于金融行业之外的其他行业。区块链3.0被称为互联网技术之后的新一代技术创新,足以推动更大的产业改革。由于不再依赖于第三方或某机构获取信任与建立信用,区块链技术能够提高整体系统的工作效率。区块链3.0的代表是Hyperledger Fabric,该软件在交易时不需要手续费。

2.2 比特币的价值和获取

        比特币从诞生之日起,具有浓厚的投机性,且缺乏第三方监管。像人民币、美元、欧元都是依赖国家信用和黄金储备等而作为流通货币,但比特币的信用却是一些数学算法。由于不具备明确的价值基础,因而在中国被认为是非法活动。

        比特币至少可以通过三种途径获得。一是从一些交易网站上购买获得;二是别人通过比特币软件转账而获得;三是通过比特币软件挖矿获得。“挖矿”是区块链的核心概念之一,在后续将逐步对其展开描述。本文不讨论非法交易,只是对区块链的基本原理进行探讨研究。

3. 两个数学算法

       区块链采用了两个基础的数学算法:非对称加密和哈希函数。通过这两个算法对数据进行加密和解密,并使得数据很难被第三方破解。

3.1 非对称加密算法

       对称加密只有一个密钥,加密和解密都使用它。譬如,用“123456”作为密码压缩一个文件夹,在解压时也同样使用该字符串。

       非对称加密则有两个不同的密钥:公钥和私钥。如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。通常将公钥发给其他人,私钥自己留着;其他人可以通过公钥进行加密,但只有自己才有私钥解密,因而安全性较高。

3.2 哈希算法

        数学中的模运算(取余数)是一种极简单的哈希算法。譬如1,2,3,4,5,6,7,10001除以4后的余数分别为1,2,3,0,1,2,3,1。以另一种形式可以写成:hash(1)=1, hash(2)=2, hash(3)=3, hash(4)=0, hash(5)=1, hash(6)=2, hash(7)=3, hash(10001)=1。可以看出,在哈希算法中,不同的数可能有相同的值。

        科学家们创建了很多更复杂的哈希算法,譬如MD5、SHA1、SHA256等。下表列出了字符串“Hello World!”对应的各个哈希算法的取值。

哈希算法

哈希值

二进制位数

MD5

ED076287532E86365E841E92BFC50D8C

128

SHA1

2EF7BDE608CE5404E97D5F042F95F89F1C232871

160

SHA256

7F83B1657FF1FC53B92DC18148A1D65DFC2D4B1FA3D677284ADDD200126D9069

256

        这些哈希算法具有这样的特点:

  • 给定一个字符串key,容易计算其哈希值value;
  • 给定一个哈希值value,很难推出对应的key。

       虽然从理论上来说,可能有多个key对应同一个value,但实际上概率很低。因此,可以近似地认为key与value是一一对应的,value被称为key的数据指纹。数据指纹意味着很难造假,一个value只能找到一个匹配的key。

4. 区块链逻辑结构

4.1 链表

  区块链由“区块”和“链”两个词组成。“区块”用于保存数据。对于比特币来说,大约每10分钟产生1个区块,由其存放10分钟内的所有交易。交易存放的是货币所有权从一个人到另外一个人的流转信息。每个交易都需要一定的手续费,在区块链中被称之为“汽油”。

  数据链有正向链、反向链、双向链之分。

  • 正向链。支持从链表的头向后搜索。
  • 反向链。支持从链表的尾部向前回溯搜索。
  • 双向链。支持双向搜索,是一种效率较高的数据结构。

  区块链采用反向链,便于从后向前追溯。对比几种链表结构,有下列结论。

  命题1. 高性能不是区块链考虑的根本因素。

  另外,区块链中的第一个区块被称之为“创世区块”。

4.2 去中心化

        如图1所示,左侧是一个中心化的架构。节点5中的数据库可以被其他4个节点所共享,便于读取和修改操作。

        右侧是一个去中心化的P2P架构,所有节点对等,并且每个节点都保存一个完整的区块链。这种架构本质上是一种多副本备份机制,具有更好的可靠性。

图1. 中心化与区块链

图2. 块结构

   命题2. 区块链不能太大。

  对于比特币来说,世界上任何人都可以参与挖矿。区块链太大可能导致普通电脑无法保存整个区块链,导致很多人无法参与。10多年以来,当前的区块链只有300g之多,能够为一般电脑所保存。

  命题3. 区块链不要更新太快。

  再次强调,这里是指比特币的区块链。一个区块需要包括一段时间之内的几乎所有的交易。由于交易在互联网的所有节点之间进行传递,如果更新太快,则可能有些交易不能被打入区块链;另外,由于所有节点都可以挖矿,互联网上会存在多个不一致的区块链。

4.3 挖矿

  区块链由多个区块组成,所谓挖矿是指生成一个新区块的过程。

  如图2所示,一个区块由区块头和区块体组成[参见: https://cloud.tencent.com/developer/news/167233 ; http://www.woshipm.com/blockchain/1022259.html]。

  区块体包含10分钟内的所有交易。图中显示了4个交易,给每个交易求哈希值,得到hash1、hash2、hash3、hash4。然后每两个再求hash值,一直到最后得到一个hash1234,即为区块头中的默克尔根。如果在区块体中添加、删除、修改某一个交易,则默克尔根就会变化。

  区块头主要包括6个要素:hash(parent)、版本、默克尔根、时间戳、难度目标、随机数。所谓挖矿,就是确定这6个值。

  在前一个区块也包含这6个要素,它们的hash值即为hash(parent)。由此可知,如果某一个区块造假,则需要修改它后面所有区块的hash(parent),难度很大。

  为了使得每10分钟生成一个区块,设置了难度目标值。随着计算机的性能越来越高,该值是动态变化的。如下面公式所示,系统每隔2016 个区块会根据上一周期的挖矿时间来调整挖矿难度。对于一个具体的区块而言,该值是固定不变的。

DifficultyTarget = 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/Difficulty

从这里可以查到,第674000区块的难度为21,448,277,761,059.70。从674001区块查到第674000区块中6个要素的哈希值如下。这个哈希值前面有19个0,要满足这个条件就必须进行大量的计算,求出其他的几个要素。

00000000000000000007f8d1652e3bf35c9d2672be4834fef6ebc6f1c407bd8c

在6个要素中,hash(parent)、版本、默克尔根、难度目标都是固定的。时间戳表示区块生成的时间,随机数是可变的。在分布式系统中,不要求每个计算机的时钟完全一致,时间戳的变化对别人而言意义不大;因而为了简化挖矿难度,时间戳也可以事先确定。这样,在6个要素中只需要求出随机数。

随机数通常从0开始一个个地尝试,看6个要素的哈希值是否满足难度。如果某个随机数满足难度,就表示挖矿成功。新的区块生成后被广播到相邻的其他节点。

第674000区块的随机数为4,275,554,107,可见挖矿的工作量挺大。在区块链中,把这样的工作量叫做工作量证明POW。

从事挖矿的人称为矿工。由于第1个挖矿成功的人会有比特币奖励,并且能收获所有交易的手续费,因而矿工都在想方设法提高挖矿效率。

命题4. 高性能是矿工追求的因素。

4.4 共识机制

  若同一时段只有一个合法区块被生产出来,而没有与之竞争的其他合法区块,该区块将会被接收;若存在竞争区块,则51%以上的节点确认,累计难度最大且最长的链最终会被接收,没有被接收的其他合法区块则成为孤块,被淘汰出局。

  所谓共识机制,即指得到大多数(51%以上)节点确认。

4.5 去信任

  在互联网中,节点之间没有绝对的信任。实际上,如果大多数节点都造假,则区块链将没有价值。为了防止造假,除了去中心化外,区块链至少还采用了下面几项措施。

  • 当一个节点收到另一个节点的区块后,会通过哈希值对区块链进行检查确认,如果区块链造假或者不是最长的区块链,则丢弃。
  • 挖矿成功会有奖励,并且能获得该区块中所有交易的手续费。自从中本聪创建第1个区块并获得50枚比特币后,每挖出21万个区块(大约4年)后,奖励减半。当没有奖励后仍能获得手续费。
  • 造假代价很大。对于区块1、区块2、...、区块n构成的区块链。如果区块1造假,则需要重新计算该区块的随机数;从而导致区块2中的hash(parent)变化,又需要重新计算区块2的随机数;进而需要计算后续所有区块的随机数。实际上,如果造假者的算力超过全网51%挖矿节点的算力,则造假成功。

  命题5. 区块链造假代价很高。

5. 区块链类型

  区块链分为三种类型:公有链、私有链、联盟链。

5.1 公有链

  比特币的区块链是一种公有链,它有如下特点。

  1)公有的、全开放的、去中心化;

  2)数据全网公开,不适合银行、政府、证券等;

  3)不能篡改数据;

  4)处理交易速度慢、效率低:全网节点共同参与,每个节点都参与决策(判断真伪);

  5)如果发行电子货币,则是各国政府所不能支持的行为。

  私有链、联盟链就是对公有链的开放性、效率进行改进的结果。

5.2 私有链

  私有链不对外开放,只有被授权节点才能参与,是部分“去中心化”的区块链。主要用户有金融机构、大型企业、政府部门等。譬如央行发行的数字货币,只能由央行进行记账,个人不能参与。另外,阿里、百度、京东等大型公司也会构建自己的私有链,侧重区块链的数据安全。

5.3 联盟链

        联盟链也称行业链,是公司与公司、组织与组织之间构建的区块链。通常选定多个节点参与区块共识决策,其他节点仅参与交易而不参与决策,这是一种“多中心化”的区块链。用户群体包括银行、证券、保险、集团企业等。

6. 区块链应用

6.1 应用开发考虑

  随着区块链技术的发展,越来越多的区块链应用开始出现。特别是由于政府的鼓励支持,需要避免不结合实际情况而一窝蜂地采用区块链技术的过热情形。在确定采用区块链技术开发应用之前,需要从下面几个方面来综合考虑。

  • 传统方法。一个应用如果能够采用传统方法来实现,则不必采用区块链技术。
  • 去中心化。去中心化只是意味着数据的多个副本,不是采用区块链的绝对理由。数据库MySQL、Oracle、MongoDB以及分布式存储系统Ceph等都支持多副本,并且具有很高的性能。
  • 去信任。去信任意味着需要防止数据造假,这是采用区块链的一个理由。
  • 可追溯。区块链可以对数据造假进行追溯,数据库一般不具有可追溯特点,这也是采用区块链的一个理由。

  性能。如果应用频繁更新,采用区块链意味着数据量很大,需要很大的存储设备,对于一些不具备条件的应用则不适合。另外,在区块链中检索数据极不方便,效率极低。

6.2 融合传统数据库的开发方法

  在确定采用区块链技术开发应用之后,需要考虑一个问题:是否将所有数据都保存到区块链?

  区块链在性能、数据检索等方面都不如传统数据库;另外,如果所有数据都保存到区块链,则会特别大。一种可行的方法是在应用中采用“区块链+数据库”的方式来保存数据。那些防止造假需要追溯的重要信息可放到区块链,其他信息则放到数据库。在区块链应用方面,数据通常保存在多处。因此数据库应具有性能高、支持多备份的特点;甚至可以采用高性能、高可用、高可扩展的Ceph分布式存储系统来保存数据。

7. 总结

  区块链具有“去中心化”、“去信任”、“去第三方”的特点,本质上是一个分布式数据存储系统。将区块链保存到多个计算机节点,通过“共识机制”、“奖励”、“造假惩罚”等措施,最终区块链为比特币建立了一套可靠的、可信任的解决方案。然而,区块链也存在一些缺点,包括性能较差、检索困难等,进而出现了公有链、私有链、联盟链等适合不同应用场合的类型。私有链和联盟链在某种程度上已经不再是“去中心化”、“去信任”的区块链。在开发应用时,应综合考虑多种因素来确定是否有必要采用区块链技术;在一些区块链应用中,可以采用“区块链+数据库”的方式来保存数据,即将需要追溯的关键信息保存到区块链,而其他信息保存到数据库或分布式存储系统。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/31001.html

区块  节点  数据  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1