基本概念
本章主要介绍区块链的基本概念,通过通俗的讲解让大家对区块链有一个整体的认识。了解区块链的概念,基本的技术,以及实现方式。
为什么要学习区块链呢
从个体角度去看,随着数字化的发展,区块链技术已经从小众走向了大众,大家多多少少都听说过区块链的相关信息,不论是好的还是坏的。包括之前火爆的元宇宙,数字藏品,WEB3等概念都跟区块链息息相关,区块链也一定程度的改变了,金融的模式,企业的模式,了解学习区块链,可以让你先行一步,寻找到更多的机会。至少可以帮助你不被割韭菜,或者被人夹带私货进行价值观输出。
从宏观角度去看。人口,气候,科技,政治,等问题凸现。世界各国尤其是中国,在大力提倡可持续发展。而随着互联网的发展,数字世界与现实世界结合日益加深。越来越多的国家通过数字科技去解决可持续发展的问题,而区块链正是两者进一步融合的重要基础,它解决了互联网没有解决的问题,价值的传递。是的,互联网解决了信息传递问题,并没有解决价值传递问题。而价值传递就是现实世界的重要运行基础,区块链技术的出现,解决了数字世界价值传递的问题。也为通过数字科技技术去解决现实问题打开了大门。
区块链好学么?
区块链包括分布式计算,密码学,博弈论,三个方面的内容,理解起来有点难!
区块链是一门“底层”技术,这就加深了区块链理解的难度。很多人都试图用简单的概念去解释区块链,比如,区块链是分布式计算,让所有人达成共识一致来共同维护“账本”。很多类比解释是:区块链就是,区块+链,记账+认账就是区块链,区块链就像打麻将等等。这些都可以帮助理解区块链的人更理解区块链。很多想学习区块链,但是没有前置知识积累的,不理解的依旧很难理解。因为概念太抽象,类比也不准确。概念你看不到摸不着,不能像买个手机一样拿在手里特别直观。就好比你可以看见电线,但你看不见电。你可以看见APP,但你看不见代码,就算看见代码了,没学过编程也不知道代码写的是什么意思。
区块链是一门“加密”的技术,使用密码学来保证安全的传输,验证信息;保证交易的真实性,难以篡改。密码学是数学的一个分支,正因为数学与密码学的复杂性,很难轻而易举的说清楚,所以区块链解释起来也就很复杂。举个例子,区块链里使用了椭圆曲线加密算法,你还记得什么是椭圆曲线,能理解椭圆曲线为什么能构成的密码算法吗?区块链有大量的这类“数学”的应用,很难让人有一个简单明了的理解。
而且很多是概念套概念,一个名词涉及到的概念里还有其他名词还有其他概念。比如记账这个名词,有单式记账,有复式记账。但是区块链用的是什么?区块链用的是三式记账。你可能先要了解记账,一定程度了解复式记账(标准会计技术),了解一定的技术,才可能明白三式记账是什么,以及为什么用三式记账。这里区块链术语,大概有一千多条。(参看本书的术语部分)。
所以本书会从基本概念,历史发展,技术方案,具体应用,发展等多角度去描述区块链,为你打造一个了解,理解,认知,应用的全逻辑过程。让你快速从入门到精通区块链。
区块链是什么样的技术?
首先,判断一个技术的基本逻辑是这样。
技术应用通常用来解决以下两方面的问题:
1 能解决生产力问题
2 能解决生产关系问题
那么区块链是什么样的技术呢?
区块链一个偏重解决生产关系的技术,从生产力上来看,区块链是一个公开的分布式账本技术。也是一种底层技术,一种“基座”,为其他技术赋能,提高更多能力与效力的技术,并不直接产生生产力。主要用来区块链是解决各类实体之间价值转换的信用问题的技术,也就是说区块链是解决生产关系的技术。
各种区块链概念
1 区块链是使用密码技术将共识确认的区块,按照顺序追加形成的分布式账本。
2 用简单的说法区块链就是区块+链,什么是区块呢?每一个区块就是一个打包记录的账本。
3 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式结构,并以密码学的方式保证的,不可篡改的分布式账本。
4 狭义来讲,区块链是一种采用密码学算法和链式关联结构组织数据块,由参与节点共同维护以保证数据几乎不可能被修改的、最终保证数据一致性的分布式数据存储技术。
5 广义来讲,区块链指在所有节点均不可信的点对点网络中,通过共识算法和经济学常识建立信任机制,并最终实现节点数据存储一致性的网络系统
6 区块链,本质上是一个分布式共识账簿技术
7 一种通过去中心化的方式按照一定的时间顺序集体记录、维护一个可靠交易数据库的技术,即按照一定的时间顺序借助分布节点 将数据区块以顺序相连的方式组合成的链式数据结构的公开交易数据记录技术
8 区块链是一个分布式的共享账本和数据库,具有去中心化,不可篡改,全程留痕,可以追溯,集体维护,公开透明等特点。(人民日报,2019年11月《区块链是换道超车的突破口》)
区块链概念的理解
从以上概念的共性,我们来理解区块链。我们可以理解区块链的本质是一种账本一种数据库的技术,是一种加密的技术,是一种集体维护但是分散存在(分布式)的技术。
用通俗的说法来理解:很多人一起在记录同一内容的账本(内容)。同一内容意味着大家的记录都是一样的,极难改变已经记录的内容,
从整体结构的角度来理解:区块链可以理解成一个将各个节点连成一个链条的分布式的公共账本,是一种点对点的记账系统,其中每一个节点都可以在区块链上面记录信息。其基本理念是通过建立一个基于网络的公共账本(数据区块),由网络中所有参与的用户共同在账本上记账,在该区块链网络中所有的数据都是公开透明的,且可被用于验证信息的有效性。这样,每一个区块包含了一组网络交易的信息,不需要信任中介就能在技术层面保证信息的真实性和不可篡改。在区块链系统中,一个节点就是一个“服务器”。任何一个节点都可以记账,而且直接连接另外一个节点(即点对点模式),中间无须第三方服务器。当其中两个节点发生交易时,这笔加密的交易会广播到其他所有节点(记账),目的是防止交易双方篡改交易信息。
从技术本质的角度来理解:区块链本质上是一个去中心化和信任化的数据库,是一连串使用密码学方法产生关联的数据块,其利用数据存储、点对点传输、共识机制、加密算法等,让每个数据块都包含某一段时间内网络上交易的数据信息,以用于验证信息是否有效,并生成下一个区块。可以说,区块链是一个利用去中心化和去信任化的方法,依靠集体来共同维护的可靠的数据库技术方案。区块链是一场全民参与的记账,所有的系统背后都有一个数据库,你可以把这个数据库看成一个巨大的账本。当然,这个大账本并非由特定的人来记账,取而代之的是一种软件。我们可以把交易的双方或者多方当作区块链的客户端软件,每个人都在不同的设备上独立记账,而区块链就好似一个巨大的平台,每个客户端所记的账都会在这个平台上展示出来。各方通过这种方式建立联系,加强信任,一旦一方出现问题或者遇到紧急情况,则可以由一个人通知到所有人,避免人与人一对一传话,节省了沟通成本。当然这些人都必须在区块链范围之内。
从开发者角度去理解:区块链数据结构是一种有序的、后向连接的交易区块列表。区块链既可存储于扁平文件,也可存储于简单数据库。比特币核心使用谷歌的LevelDB数据库存储区块链元数据。区块是“后向”连接的,每个区块都有链接指向链条上的前序区块。区块链通常可想象为一个垂直堆栈,新的区块堆叠在其他区块的顶部,第一个区块是堆栈的基础。区块堆叠在其他区块之上的形象比喻导致了一些名词的引入,比如,“高度(height)”指本区块到第一个区块的距离,“顶部(top)”或“顶端(tip)”指最新加入的区块。
区块链构成
区块与链构成了区块链。
区块是什么?
绝大部分区块链的区块构成都包括这两部分:区块头与区块体。区块头类似“标题与摘要”,区块体里是交易(内容)。
区块是在区块链上承载交易数据的数据包,是一种被标记上时间戳和之前一个区块的哈希值的数据结构,区块经过区块链的共识机制验证并确认区块中的交易。大部分区块链系统,都拥有这三部分:本区块的哈希值(包括本区块的大小、生成时间等所有信息)、所有交易单(每一笔交易的详细情况)与在其先后的区块哈希值(即前后区块中所有交易信息经过算法压缩后形成的一个字符串)。
区块链中的每个区块,在其头部使用一个通过SHA256加密哈希算法生成的哈希值进行标识。每个区块头还包含一个“前序区块哈希”的字段,对前序区块(父区块)进行引用。换句话说,每个区块在区块头中均存有父区块的哈希。将每个区块连接到其父区块的哈希序列形成了一条可以一直追溯到第一个区块(创世区块)的链条。
虽然一个区块只能有一个父区块,但它却可以临时拥有多个子区块。每个子区块都指向相同的父区块,在“前序区块哈希”字段中拥有相同的父区块哈希。多子区块的现象是区块“分叉(fork)”时才发生的临时状态,其原因是不同的矿工几乎同时发现了不同的新区块。“分叉”最终都会得以解决,只有一个子区块会成为区块链的一部分。虽然一个区块可以有多个子区块,但每个区块只能有一个父区块,这是因为区块只有一个“前序区块哈希”字段,指向它唯一的父区块
“前序区块哈希”字段位于区块头部,因此会影响当前区块的哈希。如果父区块的标识改变,子区块的标识也会随之变化。当一个父区块以任意方式改变时,父区块的哈希值必然跟着变化。而父区块哈希的改变,又迫使子区块“前序区块哈希”指针跟着变化。这必将导致子区块哈希的变化,进一步导致了孙区块到子区块指针的变化,从而孙区块哈希也必须改变,以此类推。这种串联影响可以确保一旦一个区块有了多个后代,除非重新计算所有的后续区块,这个区块就没法修改。因为重新计算需要极大的计算量,长区块链的存在使区块链中较。
创世区块
区块链中的第一个区块叫作创世区块,是区块链中所有区块的共同祖先,也就是说,如果从任何一个区块开始,沿着区块链回溯,最终都会到达创世区块。每个节点启动时,其区块链中至少包含一个区块,因为创世区块是被静态编码的,无法被修改。每个节点都“知道”创世区块的哈希和结构、其创建时间,以及它包含的唯一一个交易。这样每个区块都拥有了区块链的起始点,一个安全的“根”,从它开始就可以构建一条可信任的区块链。
区块头
区块头一般来说包含3个区块元数据集合。第一个是到前序区块哈希的引用,在区块链中将本区块与前面的区块相连;第二个是元数据集,即难度(difficulty)、时间戳(timestamp)、随机数(nonce);第三个元数据集是默克尔树(merkle tree)根,一个高效概括区块中所有交易的数据结构。
- 版本号(verison):当前使用的版本
- 上一区块哈希值(previous-block header-hash):前序区块哈希区块的主标识符是它的加密哈希,或者称为数字指纹,通过对区块头运行两次SHA256计算得到。结果的32字节哈希值叫作区块哈希(block hash),但是称其为区块头哈希(block header hash)更准确,因为只有区块头被用于哈希计算。举例来说。000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f是第一个比特币区块的区块头哈希。区块哈希只唯一标识一个区块,没有歧义,任何节点通过对区块头进行简单哈希计算就可以独立得到标识。需要注意的是,区块哈希并没有包含在区块的数据结构中,既不会在区块传输时存在,也不会作为区块链的一部分保存到节点的持久化存储设备中。实际上,区块哈希只在节点从网络上接收到区块时才自行计算生成。区块哈希可以保存在一个独立的数据库表中,作为区块元数据的一部分,以便索引和从磁盘上快速存取区块。
- 时间戳(timestamp):本区块大致创建时间,unix时间戳(时间戳是指从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,通常是一个字符序列,唯一地标识某一刻的时间。)。
- 难度值(difficulty):本区块工作量证明算法的难度值
- 随机数(nonce):用于工作量证明算法的计数器。也就是“挖矿”的答案。
- 默克尔树根节点的哈希值:本区块交易信息默克尔根的哈希值
- 区块容量
- 区块高度:标识区块的另一种方式是它在区块链中的位置,被称为区块高度(block height)。第一个被创建的区块高度为0,它与前面提到的区块哈希为000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f的区块是一样的。因此,一个区块可以通过两种方式标识:引用区块哈希或者引用区块高度。在区块链中,每个被加到上一区块顶部的后续区块,都要比前一区块“高”一个位置,就像堆叠到其他盒子上面的盒子。
特别说明:很多人会认为时间戳来确定交易的先后顺序,实际上区块链的网络中一般没有一个中心化的时间服务器,因此各个节点的时间可能不一致,也就不能通过时间戳的值来确定交易的先后顺序。比如在比特币区块链中的假设是各个节点的时间不超过2小时的偏离。比特币论文里面说的”时间戳“不是我们上面说的时间戳,而是区块哈希。因为只有块哈希才能真正的保证区块的先后顺序,虽然严格来讲哈希不体现时间,不能算真正的时间戳。因此,当我们谈到区块链的时间戳服务时,并不是指具体区块头里的时间戳信息,而是把区块链中的各区块生成的顺序作为一种广义的时间戳服务。这种区块顺序的时间戳服务可以防止双重支付,也可以提供一个溯源的作用。
区块体
区块体中则主要包含交易计数和交易详情。每一笔交易都会被永久地记入数据区块中,而且任何人都可以查询。区块体中的Merkle树将会对每一笔交易进行数字签名,如此可以确保每一笔交易都不可伪造且没有重复交易。所有的交易将通过Merkle树的Hash过程产生一个唯一Merkle根值记入区块头。
链是怎么构成
通过引用前序区块头哈希,将区块连接成一条链区块的生成时间由系统设定,通常平均每几分钟区块链中会生成一个新区块。由于每个区块中都包括了前一个区块和后一个区块的哈希值,这种设计使得每个区块都能找到其前后节点,从而可以一直追溯至起始节点,形成一条完整的交易链条,通过引用前序区块头哈希,将区块连接成一条链。即构成区块链。区块链(Blockchain)由区块按照发生的时间顺序,通过区块的哈希值串联而成,是区块交易记录及状态变化的日志记录。
区块链的简易流程
一般来说区块链的交易分为:创建交易,交易传播,交易验证,验证结果广播,写入区块链。
- 创建交易。发起者用私钥对前一次交易和目标交易者签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单。
- 交易传播。将交易单广播至全网,每个节点都将收到的交易信息纳入一个区块中。
- 交易验证。每个节点通过相当于解一道数学题的工作量证明机制,从而获得创建新区块的权力,并争取得到数字货币的奖励。
- 网络节点验证。当一个节点找到解时,它就向全网广播该区块记录的所有盖时间戳交易,并由全网其他节点核对。
- 写入区块链。全网其他节点核对该区块记账的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块链。
区块链是如何保证交易的可靠性
区块链去区中心化的系统,整个系统中没有类似银行的中介机构来验证交易。区块链中的交易采用一系列密码学加密技术的方法来“代替银行”做为“可信的中间人”。其中交易验证是采用加密技术--非对称性加密。什么是非对称性加密?一把钥匙打开一把锁是对称性加密,一把锁用一把钥匙打开,用一把钥匙关闭就是非对称性加密。也叫公钥私钥加密。
如何保证我的钱只能是我花出去--数字签名
数据加密
为了确保数据的传输安全,某些区块链应用需要对区块进行加密后再传输。另外,除了传输内容本身的加密外,为了安全传递密钥,也需要对钥匙进行加密。数据加密算法主要有两大类,分别为对称加密算法和非对称加密算法。对称加密算法主要用于对区块链的交易和区块进行加密,其加密钥匙和解密钥匙使用同一把钥匙。而非对称加密又包含两种:一种是公钥加密–私钥解密,就是我们平常所说的数字信封,其主要目的是用来安全传递密钥;另外一种是私钥加密–公钥解密,就是我们通常所说的数字签名,其目的主要用来作为签名使用,防止各种抵赖行为的发生。
数字签名的主要目标是用来确认信息的发送者认可自己曾经的行为。类似传统的签名一样,一旦某人签署了某份文件,则表示其认可所签署文件的真实性,并能证明为自己所签署。
首先生成私钥跟公钥,私钥用于签名,公钥用于验证签名,接着进行数字签名--通过私钥加密需要传输的信息。最后验证签名--通过公钥,传输的信息,数字签名,是否是私钥拥有者签署的。
在区块链第一个应用比特币中,我们区块链浏览器中看到的交易信息,其中输入脚本就是数字签名。在比特币系统里,每个人都可以产生自己的公钥私钥,通过公钥地址可以产生“钱包地址”,通过私钥来进行转账。
如何保证交易记录的真实与不可篡改--哈希函数
我们先了解下哈希函数
哈希函数,通俗的讲,就是任何数据通过计算得到固定长度的一个值。是一种从任何一种输入数据中创建小的数字“指纹”的方法。哈希函数把输入数据按一定的算法计算出来,生成固定长度的摘要,叫作哈希值的“指纹”。哈希值通常看上去像一些随机字母和数字组成的固定长度的字符串。哈希函数一般具有这样的特点:哈希值能和输入数据一一对应,给定输入数据,非常容易通过哈希函数计算得出固定长度的哈希值,但给定哈希值,要逆向计算出输入数据需要有天文数字的计算量。而且也没有办法找到两个相同的输入数据通过哈希计算得出同一个哈希值(密码学术语叫“碰撞”)。
公式是:F(X)=Y 特点是:已知Y很难知道X,两个不同的X得不到同一个Y。
安全哈希算法(Secure Hash Algorithm,SHA)是一个密码哈希函数家族。这一组函数是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)发布。目前有SHA-1、SHA-2和SHA-3系列哈希标准。SHA-1在2005年2月被中国密码学家王小云教授在理论上找到“碰撞”;2017年2月,谷歌正式宣布实现对SHA-1的碰撞攻击。而早在2011年,美国国家标准与技术研究院NIST已经推荐使用SHA-2系列哈希标准。SHA-256就是SHA-2系列中的一个函数,是输出值为256位的哈希算法。到目前为止,还没有出现对SHA-256算法的有效攻击。它也是目前多数区块链平台所采用的哈希函数。区块链通常采用双哈希函数(SHA-256),即将任意长度的原始数据经过2次SHA-256哈希运算后转换为长度为256位(32字节)的二进制数字来统一存储和识别。
那么哈希函数是如何保证交易记录不可篡改呢?前文我们已经介绍了区块的构成,以及哈希函数在其中的作用。现在我们再用通俗语言阐述一遍。区块链是通过哈希函数把区块链接在一起的。每个区块都包含前一个区块的哈希值,我们假设第一个区块,区块1的区块头是A区块体是A,那么按照区块链的构成。区块2的区块头是AB,区块体是B,区块3的区块头是ABC,区块体是C,…… 以此类推。根据哈希函数的特点,当我们想修改区块1里的交易信息的时候,意味着区块链的信息都会改变,从而保证交易记录极难篡改。
可能大家会问:那么区块体中的交易数据修改,不修改区块头不就行了吗。实际上,区块头中的默克尔树的数据,就是根据交易体中的数据计算出来的。也就说,改动了交易数据,区块头的哈希值一样会出现变化。
其他人为什么会帮我记账--共识与挖矿
那么我们的交易记录是如何添加到区块链上的?一般来说,第一,区块链的记账者,会把交易记录添加到最长链上。第二,通过共识算法,确定谁来成为这笔交易的记账者,以及按照约定的方式来进行记账。
通过共识,也就是大家都认可的一套准则,可以在没有中心机构的情况下,记录这本交易到区块链之中。而通过挖矿以及其他形式的激励机制,进行记账与记账奖励。
共识--怎么记账
区块链的自信任主要体现于分布于区块链中的用户无须信任交易的另一方,也无须信任一个中心化的机构,即可实现交易。这种信任的前提是区块链的共识机制(consensus),即在一个互不信任的市场中,要想使各节点达成一致的充分必要条件是每个节点出于对自身利益最大化的考虑,都会自发、诚实地遵守协议中预先设定的规则,判断每一笔记录的真实性,最终将判断为真的记录记入区块链之中。换句话说,如果各节点具有各自独立的利益并互相竞争,则这些节点几乎不可能合谋欺骗你,而当节点们在网络中拥有公共信誉时,这一点体现得尤为明显。区块链技术正是运用一套基于共识的数学算法,在机器之间建立“信任”网络,从而通过技术背书而非中心化信用机构来进行全新的信用创造。
区块链中比较常用的共识算法是POW,工作量证明,也就是大家常常听到的挖矿。
挖矿--谁来记账
挖矿在区块链中并非绝对必要的。是做为确认记账权归属,以及激励节点记录账本与交易的一种方式、以比特币为例实际上是穷举随机数算法,把上个区块的哈希值加上10分钟内的全部交易单打包,再加上一个随机数,算出一个256位的字符串哈希值,输入的随机数Nonce使哈希值满足一定条件就获得这个区块的交易记账权。新产生的区块需要快速广播出去,以便其他节点进行对其验证,以防造假。每个区块存着上一个区块的哈希值,可以溯源到源头,只有经过验证后才最终获得区块的交易记账权。
nonce就是工作量证明的关键,寻找nonce答案的过程就是“挖矿”的过程,“挖矿”过程就是计算过程,计算一个值使得当前区块头的哈希值小于一个系统规定值。用公式来表示:区块头的哈希值<=2^256/(难度*2^32),难度越高,寻找哈希值越难。
区块链的应用与价值
区块链是账本。 区块链是信任机器。 区块链是世界计算机。
区块链可以做存证平台。 区块链可用作应用平台。 区块链可以做价值转移支付结算的金融平台。