暑假在杭州一家区块链网络公司实习,由于工作原因,学习了区块链的一些基础知识,关于区块链的知识,我是学习的《区块链基础知识25讲》,这本书真的非常不错,有时间的小伙伴可以拿来学习一下。当然我这里也就是微微记录一下,一是对自己学习区块链知识的一个总结,二来也是记录自己学习生活的一部分。

文章目录

  • 1.理解分层的概念
    • 软件系统的分层
      • 应用层与实现层
      • 功能性与非功能性
    • 同时使用两种标准划分
    • 完备性
  • 2.纵观全局
    • 两种软件系统
    • 去中心化系统的优势
    • 去中心化系统的劣势
    • 识别去中心化系统
    • 区块链的作用
  • 3.认识去中心化的潜力
    • 术语介绍以及点对点系统与区块链之间的联系
      • 点对点系统的定义:
      • 点对点系统的架构:
      • 点对点系统和区块链之间的关系:
    • 区块链的潜力
  • 4.发现核心问题
    • 点对点系统中的信任与完备性
    • 点对点系统中的完备性威胁
      • 技术性故障
      • 恶意节点
  • 5.消除术语的歧义
    • 术语
      • 一种数据结构
      • 一种算法
      • 一个完整的技术方案
      • 在普通场景下完全去中心化点对点系统的一个概括性术语
    • 临时定义
  • 6.理解所有权的本质
    • 所有权的基础
    • 浅谈安全
      • 身份认证
      • 鉴定
      • 授权
    • 账本的性质与意义
    • 所有权与区块链
  • 7.双花问题
    • 双花问题
    • 术语
      • 复制数字商品引起的问题
      • 去中心化点对点分布式账本中可能存在的问题
      • 分布式点对点系统中违反完备性带来的双花问题
    • 如何解决双花问题
      • 解决复制数字商品引起的双花问题
      • 解决去中心化的点对点分布式账本中潜在的双花问题
      • 解决分布式点对点系统中违反完备性的双花问题
  • 8.设计区块链
    • 起点
    • 要完成的任务
      • 描述所有权
      • 保护所有权
      • 存储交易数据
      • 准备将账本分发到一个不值得信任的环境中
      • 分布式账本
      • 向账本添加交易记录
      • 决定哪些账本代表了真相
  • 9.记录所有权
    • 目标
    • 一个点子
    • 所有权数据和交易数据
    • 它如何工作
      • 描述所有权的转让
      • 维护所有权转让的历史交易记录
    • 为什么它能够运行
    • 历史交易记录的完备性
      • 形式正确性
      • 语义正确性
      • 授权正确性
  • 10.哈希算法
    • 工作原理
      • 能够为任何类型的数据快速创建哈希值
      • 确定性
      • 伪随机
      • 单向函数
      • 防碰撞
    • 哈希值的生成模式
      • 独立哈希
      • 重复哈希
      • 组合哈希
      • 顺序哈希
      • 分层哈希
  • 11.哈希在现实世界的应用
    • 数据对比
    • 检测数据变化
    • 哈希引用
    • 及时发现数据的改变
      • 链状结构
      • 树状结构
    • 消耗大量运算
    • 区块链中对哈希引用的使用
  • 12.确认并保护用户账号的安全
    • 加密学简介
      • 对称加密
      • 非对称加密
    • 在现实世界中使用非对称加密:
      • 创造和分配公私钥
      • 使用公私钥
    • 区块链的非对称加密
      • 确认账户
      • 授权交易
  • 13.交易授权
    • 关于数字签名的一段短暂的弯路
      • 创建数字签名
      • 使用数字签名验证消息
      • 使用数字签名识别伪造的问候语
      • 区块链中的数字签名满足以下要求
      • 数字签名在区块链中有两种用途
    • 工作原理
  • 14.存储交易数据
    • 将区块链的数据结构看成是一本书
    • 区块链的数据结构
    • 在区块链数据结构中存储交易
  • 15.区块链的数据存储
    • 添加新的交易
    • 检测数据改变
    • 有序改变数据
  • 16.保护数据的安全
    • 理念
    • 不可变性的重要性
    • 工作原理:大蓝图
    • 工作原理:具体细节
      • 区块头的哈希引用
      • 创建新区块的过程
      • 区块头的验证规则
    • 现实世界中不可变数据的存储
  • 17.点对点系统中数据的存储与发送
    • 分布式点对点系统将互联网作为交流媒介具有的特点
    • 具体运行细节
      • 确保现有连接有效
      • 建立新的连接
      • 分发新的信息
  • 18.核实并添加交易数据
    • 具体操作
      • 验证规则
      • 奖励
      • 惩罚
      • 竞争
      • 对等节点控制
    • 处理不诚实的行为
  • 19.选择交易数据的历史记录
    • 具体操作
      • 最长链标准
      • 最重链标准
    • 选择一条链的结果
      • 孤儿块(孤块)
      • 重新收回奖励
      • 澄清所有权
      • 重新处理交易
      • 不断增长的共同主干
      • 最终一致性
      • 健壮的抗操纵性
    • %51攻击
  • 20.为诚信买单
    • 区块链中手续费所起到的作用
    • 用于补偿节点的支付工具的理想属性
  • 21.将所有的“碎片”整合在一起
    • 区块链的作用
      • 明确所有权
      • 转移所有权
    • 区块链的特性
      • 高可用性
      • 抗操纵
      • 可靠性
      • 开放性
      • 匿名性
      • 安全性
      • 系统弹性
      • 最终一致性
      • 保持系统的完备性
    • 区块链内部运行时实现层的功能性特征
      • 所有权逻辑
      • 交易安全性
      • 交易处理逻辑
      • 存储逻辑
      • 点对点架构
      • 一致性逻辑
    • 获得抽象的区块链技术套件
  • 22.了解区块链的缺陷
    • 区块链的技术缺陷
      • 缺乏隐私
      • 安全模式
      • 延展性的限制
      • 高成本
      • 隐藏的中心化属性
      • 缺乏灵活性
      • 临界值
    • 区块链的非技术性缺陷
    • 客服缺陷
      • 技术性缺陷
      • 非技术性缺陷
  • 23.重构区块链
    • 区块链的主要冲突
      • 透明度与隐私
      • 安全与速度
    • 解决冲突
      • 在透明度与隐私之间做出选择
      • 在安全性与速度之间做出选择
    • 4种类型的区块链
  • 24.如何使用区块链
    • 区块链的特征
    • 通用型应用场景
      • 存在证明
      • 非存在证明
      • 时间证明
      • 顺序证明
      • 身份证明
      • 作者证明
      • 所有权证明
    • 特定的使用场景
    • 分析区块链的应用
  • 25.总结与展望
    • 区块链的发展的未来发展趋势和其他可能的代替方案
      • 微小的基础改进和变更
      • 扩展性的提升
      • 概念引进
    • 区块链的主要发展方向
    • 潜在劣势
    • 未来趋势

1.理解分层的概念

软件系统的划分就像是手机的功能,有的功能是我们在现实生活中确确实实体会得到的,有些功能则是在默默在背后起着至关重要的作用

软件系统的分层

1.应用层与实现层
2.功能性与非功能性

应用层与实现层

应用层中的所有内容都是从用户需求出发的(如想要拍照、看电影、听音乐)
实现层则是将这些需求实现(如将图片音乐转化为电信号)

功能性与非功能性

功能性可以指听音乐,看电影,拍照片等实际应用
非功能性是好看的用户界面,用户信息隐私保护等等

同时使用两种标准划分

这里可以用一个手机为例子可以看到下面图片一些我们常见的功能如拍照片、打电话、发邮件这些都属于应用层的功能性特征,而漂亮的用户的界面、简单的操作这些类似于辅助性的都属于应用层的非功能性特征;永久保存本地数据,自动连接最近的基站、优化屏幕动画这些属于实现层的功能性特征,省电、确保用户隐私、高效存储数据这类也是辅助性的也自然属于实现层的非功能性特征。按照我自己的理解,区别应用层和实现层,可以类比一个应用或者网站的前端和后端,应用层对应前端,是一些我们能看到,能实地接触到的功能,实现层对应后端,是一些支撑着前端的功能,虽然我们没有深刻地体验接触到,但正是这些功能才支撑起了整个应用系统。功能性特征和非功能性特征按我的理解则是必要和非必要,功能性特征起到的是一个提供基本服务的作用,而非功能性特征则是起到一个锦上添花的作用。

完备性

完备性在任何系统中都是重要的非功能性特征,它包含数据的完备性、行为的完备性、以及安全性。
数据的完备性是指数据的完整无误。
行为的完备性是指软件系统可以顺利运行,没有逻辑错误,类似与我们编写代码不会报错吧。
安全性是指软件系统对认证用户授权有限的数据访问与使用功能,就好像我们ftp上老师既可以下载学生作业,也可以上传作业任务,而学生只能下载作业任务,以及上传自己的作业,但是不能下载ftp上的学生作业,这种就是权限的有限给予。
大多数软件错误,比如数据丢失,或被陌生人访问了用户数据,都是系统缺乏完备性导致的。

2.纵观全局

区块链在软件系统中的位置与意义就好比是发动机在汽车中的位置和意义,不同的区块链会给软件系统带来不一样的功能体验。

两种软件系统

线代软件系统主要采用两种架构:中心化架构和去中心化架构。(如图左边是去中心化架构,右边是中心化架构)

去中心化架构中的每个节点彼此相连,但没有一个节点会直接连接所有的其余节点。而去中心化架构中存在一个节点连接其余所有节点,而其余节点间不会直接相连。中心化和去中心化的软件系统可以看作系统架构的南北极

去中心化系统的优势

建立在多台计算机之上的去中心化系统主要有如下的优势:
1.更强的计算能力。
2.更低的成本。
3.更高的可靠性(当一个节点遭到攻击无法工作时,其余节点可以接管该节点的工作)。
4.自增长的能力(一个去中心化系统的计算能力是其所有节点计算能力之和)。

去中心化系统的劣势

去中心化系统具有一下劣势:
1.节点间的协调(节点间的协调过程会产生额外的开销)。
2.节点间的冗余通信(通过通信协议进行通信会产生额外的开销)。
3.对网络的过度依赖(节点以网络作为媒介进行通信)。
4.系统编程具有较高的复杂度。
5.安全问题(任何通过网络传递数据与信息都存在可靠性的问题即诚信问题)。

识别去中心化系统

在系统中尝试寻找是否有一个组成部分可以直接关闭这个系统。如果找到了,那么这个系统就是中心化的,如果找不到,就说明这个系统是去中心化的。

区块链的作用

区块链是去中心化系统中用来实现并确保系统完备性的工具(可以将其看作在系统的实现层上满足非功能性特征的工具)。

3.认识去中心化的潜力

点对点系统对一些第三方中介的经济利益造成很大的破坏。就像Napster,使人们不再依赖唱片公司获取最新的音乐资源,并可以与世界各地的人分享自己的音乐文件,而无需购买任何CD。

术语介绍以及点对点系统与区块链之间的联系

点对点系统的定义:

点对点系统是由若干个节点组成的分布式软件系统,系统中单一节点的计算资源可直接被其他节点调用。所有用户的计算机都是系统资源的提供者和享受者。

点对点系统的架构:

点对点系统是分布式计算机系统,它们由共享计算资源的各个节点组成。然而,还有一些仍然利用中心化设计思想的点对点系统。中心化系统通过维护中心节点以促进系统成员之间的交互,同时维护描述不同节点提供的服务目录或执行节点的查找和标识等任务。

点对点系统和区块链之间的关系:

区块链可被认为是实现和维护分布式系统完备性的工具。完全分布式的点对点系统可使用区块链技术来实现和维护系统的完备性。

区块链的潜力

完全去中心化的点对点系统具有极大的商业潜力,因为它们可以取代中心化系统中靠信息中介建立起来的商业模式。既然完全去中心化点对系统可以使用区块链来实现并维护完备性,那么区块链就变得十分重要了。

4.发现核心问题

在一个完全去中心化的点对点系统中,我们会遇到没有一个中心化的控制方来协调多台独立工作的计算机的问题。

点对点系统中的信任与完备性

信任与完备性是一枚硬币的两面。放在软件系统当中,完备性是对一个系统的非功能性特征的描述:完全、完整、持久、正确,并且不会失控和产生错误。而信任则引申至人类之间对可靠、真相以及对一些事物或者人无理解的相信。在一个点对点系统中,如果人们相信这个系统,并且这个系统的运作结果增强了他们的信任,那么他们就会持续地给这个系统做出贡献,系统的完备性满足了用户的预期,用户也会增强他们对系统的信任。但如果系统缺乏完备性使得用户美欧对这个系统增加信任,那么用户就会抛弃这个系统,从而使得这个系统慢慢走向终结。在点对点系统中实现完备性取决于:对节点数量的了解以及对节点可信度的了解。

点对点系统中的完备性威胁

1.点对点系统的完备性威胁主要包括技术性故障以及恶意节点。

技术性故障

点对点系统是由网络中相互连接的独立计算机组成的,任何一台计算机的任意一个硬件(或核心软件),或这个系统所依赖的网络都有发生故障的风险。因此,一个分布式系统必须面对节点故障或系统运行错误带来的风险。

恶意节点

不可信节点与恶意节点构成了点对点系统面临的最大威胁,因为它们在破坏这个系统的基石:信任。一旦用户无法信任他们的连接方,他们就不会信任这个系统,并且离开。

5.消除术语的歧义

术语

”区块链“这个术语会有以下几种含义。
作为一种数据结构的名称。
作为一种算法的名称。
作为一个完整技术方案的名称。
作为普通应用场景下完全去中心化点对点系统的一个概括性术语。

一种数据结构

数据“区块”形成的链状数据结构是通过一个特殊的编码系统来实现的,这个编码系统与书籍当中页码的编写方法类似,但要复杂得多。

一种算法

当我们把“区块链”作为一种算法来考虑时,指的是在一个完全去中心化的点对点系统中,将大量特定数据结构的数据妥协调度组织在一起的算法,类似于一种完美的民主投票方法。

一个完整的技术方案

当我们把“区块链”作为一个完整的技术方案提出来的时候,“区块链”指的是将区块链数据结构、区块链算法、密码学以及安全技术综合在一起,来确保完全去中心化点对点系统完备性的一个完整技术方案。

在普通场景下完全去中心化点对点系统的一个概括性术语

在这种情况下,“区块链”指的是一个完全的去中心化系统,而不是一个完全去中心化系统的一部分。

临时定义

区块链是一个完全分布式的点对点账本系统,其利用一个特殊算法,实现对区块内信息生成顺序的协调,并使用加密技术对区块数据进行连接,从而确保了系统的完备性。

6.理解所有权的本质

所有权的基础

一般证明所有权需要有一下3个要素。
1.对所有者的证明。
2.对事物被拥有的证明。
3.提供一个所有者和事物之间的联系。
对所有者的证明可以利用身份证、出生证明或者驾驶证,通过序列号、产品证书去区别不同的产品。这一类文件从它们生成之后就不会变化,因此对应的人和产品是不会变化的。所有者和所有事物之间的关联会象征性地通过一个账本进行记录,这个账本并不是一直不变的,而是每完成一次交易,所有权的变更都会在账本中登记。

浅谈安全

身份认证

身份认证指的是通过提供可以作为标识符的相关信息来确认使用者的身份。

鉴定

鉴定的目的是为了阻止有人冒充他人。鉴定就意味着要核实你的确是你声称的这个人。

授权

授权意味着根据对应人的身份特征准许其访问特定的资源或使用特定的服务。授权产生于一次成功的鉴定,以及对其所拥有权利的准确评估。

身份认证指的是确认使用者的身份。鉴定指的是证明你确实是你所声称的这个人。授权是让你根据之前的身份鉴定能访问特定的资源获得到特定的服务,就像之前提到的ftp上只有老师可以获取学生提交的作业,而学生则无权下载观看提交上去的作业。

账本的性质与意义


该图表明一个账本必须同时履行两种相对的功能。一方面能够读取账本中的数据来证明所有权,另一方面账本需要记录每一次所有权的转移,也就意味着新的数据需要被写入账本。这两个功能最重要的不同可以归结喂公开与隐私的不同。区块链是一个能够被任何人访问,拥有类似账本功能的巨大去中心化点对点系统,也可以将它理解为一个去中心化的账本。

所有权与区块链

通过账本和区块链来进行所有权管理之间的联系可以总结为以下5点。
1.单个账本可以用来记录与所有权相关的信息,可以看作一份区块链中存储与所有权相关的数据的账本。
2.单个账本存储在一个点对点系统中的节点上。
3.区块链算法确保了单个节点在进行每一次投票之后,能够同步到同一个状态。
4.系统的完备性是系统具备提供真实且正确所有权描述的关键。
5.在身份认证、鉴定、授权以及确保数据安全性时,必须采用密码学技术。

7.双花问题

双花问题

节点之间传递消息并且更新各个节点上的账本都需要时间,以保证更新到 最新的状态。然而,在节点之间传递信息并更新更新各节点桑的账本都需要时间,知道系统的最后一个节点收到最新的消息,并且完成对自己账本的更新之后,系统才可达到一个稳定的状态。也就是说,有的节点会比其他节点更早得知最新一次所有权转移的信息,而这就给那些提前获取账本更新的节点留下一个利用这一信息来作恶的机会。按照我自己的理解,就是有的节点会利用其他节点还没有接收到这个正确消息的时间差,给这个节点传输错误信息。

术语

“双花”也有以下3种含义。
1.复制数字商品引起的问题。
2.去中心化的点对点分布式账本中可能存在的问题。
3.完全分布式点对点系统中违反完备性的一个例子。

复制数字商品引起的问题

指在复制数字商品时,本该同一时间只有一个所有者的“加密货币”或其他数据出现多个所有者的问题。

去中心化点对点分布式账本中可能存在的问题

将信息同步到整个去中心化系统上需要花费时间,这导致了在同一个时间并不是所有的节点上都记录了完全一致的所有权信息,同步信息慢的节点会被其他拥有最新信息的节点所利用,导致在一个系统中出现同一个所有权在同一时间内多次转移。

分布式点对点系统中违反完备性带来的双花问题

双花问题可以看作去中心化点对点系统中数据一致性的问题。因为数据的一致性时系统完备性的重要组成部分,所以我们可以说双花问题是影响系统完备性的具体例子。

如何解决双花问题

解决复制数字商品引起的双花问题

该问题事实上和所有权的特性有关,如果不限定方法的话,任何可接受的将数字商品映射到其所有者的方法都可解决这个问题。

解决去中心化的点对点分布式账本中潜在的双花问题

“区块链”可以看作是去中心化点对点分布式 账本中潜在双花问题的解决方案。

解决分布式点对点系统中违反完备性的双花问题

如果在不明确应用的特殊要求和目标下,我们无法回答去快来拿相关技术是否是实现并确保系统完备性的正确工具,这就意味着可能在一些去中心化的点对点系统应用场景下,其他的诸如通过设计数据结构和特殊算法等方法,更适合用来确保系统的完备性。

8.设计区块链

起点

作为起点,我们将所研究系统的主要特征概括如下。
1.这是一个完全去中心化的点对点系统,所有计算机资源均由系统用户提供。
2.这个点对点系统的节点之间通过互联网相连接。
3.系统的节点数量,节点是否使得信赖,以及节点的可靠性都是未知的。
4.这个点对点系统的设计初衷是为了管理数字资产的所有权

要完成的任务

描述所有权

设计一个管理所有权的软件系统,必须首先决定如何描述所有权。事实证明,交易是描述所有权转移的好方法,交易的完整历史记录是识别当前所有者的关键。

保护所有权

保护所有权有3个主要部分:识别所有者、认证所有者并限制其他人获得这一数字资产。

存储交易数据

交易记录是证明所有权的核心要素,因此必须要以安全的方式进行存储,而区块链数据结构就类似对账本的数字化。

准备将账本分发到一个不值得信任的环境中

事实证明,防止交易记录被更改的最佳办法就是使其不能被修改。这就意味着账本以及其中的交易历史记录写入后就不能更改。你不用担心账本被篡改或者伪造,因为它们不能被改变。所以之后学习的附加新区块得到链式数据结构是一个可以添加新的区块,但是几乎不可能改变过去已经添加区块内的数据的结构。

分布式账本

管理所有权的分布式系统还涉及对等节点之间的交互问题。

向账本添加交易记录

为确保只添加有效和经过授权午安的交易记录,所有成员将彼此监督,并指出相连节点所犯的任何错误。

决定哪些账本代表了真相

当不同成员节点维护了不同的交易数据,点对点系统中可以存在不同版本的交易历史记录。所以我们需要找到一个查找和选择代表真相的交易历史记录的标准。

9.记录所有权

区块链中权利的交易就像是接力比赛中接力棒的交接,而需要区块链做的就是把这些交接历史记录下来。

目标

以透明的和可理解的方式记录所有权。任何查看交易记录的人,都应能够说明数字资产与其所有者的关联。

一个点子

持续维护一个账本中所有权转让的交易记录,而不是仅用账本描述当前的所有权状态。

所有权数据和交易数据

通过所有权数据或交易数据来描述所有权是两种不同的记账方式。所有权数据描述当前的所有权状态,它更类似于只显示当前可用余额的银行账户交易。交易数据则可描述所有权的转让,它更类似于列出银行账户的每笔提款、存款和转账记录的对账单。

它如何工作

描述所有权的转让

转让所有权的行为依赖于描述所有权转移的数据,这些数据包含执行所有权转让所需的所有信息。这些信息包括:
1.原所有权拥有者账户的标识符。
2.交易目标账户的标识符。
3.要交易的资产数量。
4.交易完成的时间。
5.支付给系统的费用。
6.证明原所有权拥有者的确同意进行交易。

维护所有权转让的历史交易记录

交易数据提供了按预期执行所有权转让所必需的信息。通过将交易数据添加到账本中,交易将成为历史交易记录的一部分,以用于明确所有权。区块链可维护所有交易的整个历史记录。其中的交易数据按照它们发生的顺序一次存储在区块链数据结构中。

为什么它能够运行

由于交易数据包含了注入出让所有权的账户信息,收到所有权的账户信息,以及所有权对应资产和交易的数量等信息,只要整个历史交易记录可用,就可以重建每个账户的所有权信息。因此,完整的历史交易记录足以明确所有权。

历史交易记录的完备性

为了维护系统的完备性,有必要保持历史交易数据的安全、完整、正确和一致,从而才能够确保对现有的所有权信息进行真实的描述。审查交易数据的有效性涉及3个方面的内容。
1.形式正确性。
2.语义正确性。
3.授权正确性。

形式正确性

交易的描述包含所有必需的数据,并且数据以正确的格式提交。

语义正确性

交易数据所代表的意义,具体的问题要包含所涉及的专业领域的专业问题。

授权正确性

只有拥有账户所有权的人才可以通过区块链触发一笔交易。

10.哈希算法

数据的哈希值就相当于我们的指纹,我们能够通过哈希值完成对数据的识别。

工作原理

哈希算法可以作为一个很小的计算机程序来看待,无论输入数据的大小及类型如何,它都能将输入数据转化成固定长度的输出。加密哈希算法具有以下特征。

能够为任何类型的数据快速创建哈希值

确定性

这意味着哈希算法为相同的输入数据产生相同的哈希值。

伪随机

哈希算法返回的哈希值的变化是不可预测的。

单向函数

不可能基于哈希值恢复原始输入数据。

防碰撞

不同数据产生的相同的哈希值的概率很小。

哈希值的生成模式

独立哈希

独立哈希指的是将哈希算法单独应用在每一个数据块上。

重复哈希

哈希值本身也可以被认为是一个数据块,因此也就可以将哈希值输入哈希函数来获得这个哈希值的哈希值。

组合哈希

将所有独立的数据块组合成一个总数据块,并计算其哈希值。该方法只能在单个数据块较小时使用。

顺序哈希

顺序哈希是随着新数据的产生,对哈希值进行更新的一种哈希计算方法,可以通过同时使用组合哈希和重复哈希这两种方法来实现。

分层哈希

将分层哈希应用于一对哈希值可以形成一个哈希值组成的树状结构,其顶部将产生一个新的哈希值。

11.哈希在现实世界的应用

数据对比

计算并对比数据的哈希值。如果对应的哈希值不同,那它们对应的数据就不同。如果两个或以上的哈希值相同,那么它们对应的输入数据也相同。通过对比哈希值对比数据的原理是建立在哈希计算的放碰撞性之上的。

检测数据变化

利用哈希值的对比也可以用于检测数据在传输过程中是否发生改变。

哈希引用

把所存储数据的哈希值于存储数据的物理载体的信息结合在一起计算哈希值。如果数据发生了变化,双方信息就无法保持一致,因此最后得出的哈希值就会发生变化。
哈希引用的关键在于产生数据的哈希值,即得到数据的唯一指纹。基本不存在两种不同的数据具有相同哈希值的情况,故不完整的哈希引用就是数据被修改的证明。

及时发现数据的改变

链状结构和树状结构可以及时发现数据是否被修改。

链状结构

数据通过链状结构连接起来。Data1和哈希引用R1是这种数据链表的开端。作为最初的数据,Data1没有任何哈希引用。在新的数据到来时,通过哈希引用把前后的数据连接到一起,哈希引用R2表示新到达的数据Data2和哈希引用R1的哈希引用。哈希引用R3表示Data3和哈希引用R2的哈希引用。R3又被称为链头,意味它代表着最新的数据。

树状结构

这种数据结构是科学家默克尔率先提出的,由于这种数据结构看起来更像是一颗倒过来的树,故称之为默克尔树。底部的四个方框代表着4笔交易,对每笔交易分别进行哈希引用(R1-R4),并进行两两分组。接下来,对这两组的哈希引用再进行哈希引用,即R12和R34.重复这个过程,一直到最后只有一个哈希引用,也就是得到默克尔树的根(R)。

消耗大量运算

哈希引用不仅在对比文件等简单操作上能发挥作用,同时也可让数据存储变得更加安全高效。一个哈希难题包括一下几个要素。
1.未经更改的已有数据。
2.可以随意修改的数据,即随机数。
3.使用哈希功能。
4.限制哈希值,即难度值。

解答哈希难题只能不断去试错。首先要猜一个随机数,并计算数据于随机数构成的数据集合的哈希值,然后根据限制条件去评估得到的哈希值。如果哈希值满足这些限制条件,你就成功解决了这个哈希难题;否则就只能重新选取随机数,从头开始新的哈希值计算。

区块链中对哈希引用的使用

1.存储交易数据,及时发现数据的改变。
2.提取交易数据的指纹。
3.想要修改数据就要解决哈希难题。

12.确认并保护用户账号的安全

加密学简介

对称加密

用同一种密钥进行加密和解密。

非对称加密

非对称加密使用两种对应的密钥。但是要注意一点:使用一种密钥加密数据后,只能用与之对应的另一种密钥解密,反之亦然。

在现实世界中使用非对称加密:

创造和分配公私钥

公钥是人人皆有的,人人都可以备份公钥,但是私钥就是非公开的。

使用公私钥

他人可以利用公私钥加密文档,但是只有私钥的拥有者才能打开加密文档,读取里面的信息,类似于邮箱。信息通过私钥加密后,再使用公钥进行解密,这种加密方法就好像一个公共的信息公告栏。

区块链的非对称加密

确认账户

用户账户就相当于公钥,人们使用公钥来确认账户同意转移资产。此时,区块链中的公钥就相当于是一个邮箱:用户有公开的邮箱地址(即公钥),人人都可以给他的邮箱发送邮件。

授权交易

用户通过私钥来加密交易数据,任何拥有与之对应公钥的人,都可以确认这笔代表所有权转移的交易已经发生,因为公钥就相当于用户的账号。

13.交易授权

利用等同于手写签名的数字签名对交易进行授权

关于数字签名的一段短暂的弯路

数字签名等同于手写签名。它利用哈希引用以及非对称加密技术中的公私钥对交易进行授权。数字签名主要包含3个元素。

创建数字签名

假设我想通过数字签名授权的方式,向世界发送“Hello World!”这个问候语。为此,我创建了一条包含这个问候语,以及与之相应的数字签名的消息。该图描述了对数据进行签名的整个过程。这个过程从该图左上角包含了问候语的白色方框开始。然后,我创建了这个问候语的哈希值——7F83B165,并使用我的私钥对其进行加密。这个问候语的哈希值的加密文档(黑框中包含的白色字符)就是我的问候语的数字签名。这个数字签名在两个方面是独一无二的:第一,它是唯一一种可以追溯到我的方式,因为它是使用我的私钥创建的,第二,就问候语的文本内容而言,它是独一无二的,因为它是基于这个问候语的哈希值创建的。问候语和数字签名都放在一个文件(灰色框)中,就构成了我向世界发送的数字签名信息。

使用数字签名验证消息

这条包含我的问候语的数字签名的消息,将被发送到全世界,所有人都可以使用我的公钥来验证我已经授权了这条消息。该图说明了使用数字签名验证消息的过程。这个过程从问候语开始,首先,这条消息的接收者需自己计算问候语的哈希值,得到7F83B165这个值。然后,这条消息的接收者使用我的公钥解密消息中的加密文档(数字签名)。这样可得到7F83B165这个值,也就是我想发送给世界的问候语的哈希值。接收者通过对比两个哈希值来完成验证。由于这两个哈希值是相同的,因此接收人可得出一下结论:第一,这条消息是由我签名的,因为它能够用我的额公钥解密我用私钥生成的加密文档;第二,消息中发现的问候语文本,确实是我想要发送的文本,因为解密后的文本于消息中的问候语的哈希值相同。

使用数字签名识别伪造的问候语

该图显示了我朋友的邮箱所接受到的一条消息,注意在该条消息中问候语发生了变化。某个黑客使用问号代替了原问候语中的感叹号,有意改变了这条问候语的语调。黑客修改后的问候语并不是我想要发送给世界的消息。幸运的是,数字签名会向每个人指出,这条消息已经违背了我的意愿,且已发生了改变。
首先,消息的接收方会自己创建问候语的哈希值,得到8A0B7C66这个值。然后,消息的接收者使用我的公钥对这个数字签名进行解密得到7F83B165这个值,它是我想要发送给世界的问候语的哈希值。对比这两个哈希值,会发现它们是不同的。这清楚地指出,消息中的问候语已不是我想向世界发送的问候语。因此,每个人都可得出我没有授权这条信息的结论。因此,也就没有人会让我对该消息中的问候语的内容负责。

区块链中的数字签名满足以下要求

1.它说明了账户所有者同意转移特定交易数据的所有权。
2.它对交易数据的内容是独一无二的,可防止未经账户所有者同意而用于授权其他交易。
3.只有同意转移所有权的账户所有者才能创建这样的签名。
4.它很容易被交易的另一方核实。

数字签名在区块链中有两种用途

1.签名交易。
2.验证交易。

工作原理

交易数据的数字签名由一下内容组合而成。
1.交易数据的额哈希值。
2.可追溯到账户对应私钥的加密文档。

14.存储交易数据

区块链类似于图书馆保存图书借阅卡的方式来存储交易数据。

将区块链的数据结构看成是一本书

我们把一本典型的书,变成两堆散乱的页面,并通过独一无二的参考编号将它们连接在一起。一堆页面包含内容,而另一堆页面保留页与页的顺序。为了便于理解,我们将后一堆页面称为序列化的目录。这个序列化目录的每一页都包含与其对应的上一页的参考编号和相应的内容编号。至此,我们成功地将页面地内容于序列化地目录分开,并也将页面的逻辑顺序于物理顺序分开了。由于我们使用哈希值作为参考编号,故每个人都可以通过简单的重新计算来验证其正确性。由于序列化目录的页面不再固定在书脊上,我们只能按照前一页的页面参考编号逐页向后浏览该书。为了便于理解,该表列出了发送改变前后这本书的一些属性。

区块链的数据结构

1.序列化的目录页面及其对应的内容页面组成的单元
2.序列化的目录
3.内容页面
4.目录页面的参考编号
5.内容编号

在区块链数据结构中存储交易

该图通过系统地描述了一种存储了4笔交易的区块链数据结构,对上文中的内容进行了总结。该图中给出的示例展示了一个由标记为区块1和区块2的两个区块构成的简化后的区块链数据结构。为了强调区块的重要性,它们被用虚线进行了标识。
两个区块都包含了一个区块头,分别标记为区块头1和区块头2。区块1是这个数据结构中的第一个区块,因此它不存在前一个区块,故区块头1中不包含对前一个区块头的任何引用。由于区块头2前面还有一个区块,所以区块头2保留了对前一个区块头的哈希引用,并将其标记为B1。图中描述的区块链数据结构保留了对两个不同的默克尔树的哈希引用,它们的根分别标记为R12和R34.默克尔树的根的标签可以给我们一种它们包含数据的标示(例如,根R12的默克尔树包含了被标记为交易1和交易2的两笔交易,以及指向它们的哈希引用R1和R2)。
如果加入到一个保留了区块链数据结构的分布式点对点系统当中,正如该图所示,你将收到的交易数据、所有哈希引用值和所有区块头。基于这些数据,你的计算机将根据区块链数据结构构造出系统的历史交易记录。有了这些数据和对最新区块头的引用,你可以浏览自系统创建以来所有的交易数据的历史记录,在我们的例子中只有4笔交易。请注意,对最近添加的区块头的引用称为区块链数据结构的头,因为它是添加下一个块的位置。有时,最近添加的区块头和指向它的引用都称为块链数据结构的头。在该图中,标记为B2的引用是区块链数据结构的头(Head)。重要的是不要混淆术语“Head”和“Header”:区块链数据结构由许多区块组成,每个区块都有自己的Header(区块头),但是整个区块链数据结构只有一个Head。

15.区块链的数据存储

存储保存数据的区块

添加新的交易

如图只有一个区块,且其中只包括两笔交易的一个区块链数据结构,该图最下面的交易3和交易4,还没有添加到现有的区块链数据结构当中国。要添加新的交易,步骤如下。

1.创建一个新的默克尔树,把新的交易数据加进去。

2.创建一个新的区块头(区块头2),其中包括上一个区块头(区块头1)的哈希引用(B1),以及新交易数据对应的默克尔树的根(R34)的信息。

3.给新的区块头创建一个新的哈希引用(B2),如该图所示。这也就是区块链数据结构新的头部。

检测数据改变

检测数据改变包括:
1.改变交易数据的内容。
2.改变默克尔树的哈希引用。
3.替换一笔交易。
4.改变默克尔树的根。
5.改变对区块头的引用。

有序改变数据

如果想改变或更新交易2的信息,我们需要更改交易2后面的所欲哈希引用;R2、R12、B1和B2。这也就意味着从交易2之后的第一个哈希引用到最后一个哈希引用都需要进行更新,才能确保对交易2的修改有效。这是一个带有特定目的且非常复杂精细的过程。所有这些都是为了保持区块链数据结构的一致性和有效性。任何试图改变或操作交易数据的行为都会导致整个区块链数据结构变得无效。

16.保护数据的安全

理念

在一个开放的系统中,要预先区分城市节点和不诚实节点是十分困难的,甚至是不可能的。因此,为保护历史交易记录不被不诚实节点操纵,我们首先要阻止所有人操作历史交易数据。如果任何人都不能更改历史交易数据,那么无论是遇到诚实节点还是不诚实节点,我们都不必再当心数据会被操纵了。

不可变性的重要性

不可变性意味着某些东西不可更改。不可变的数据一旦被创捷或者写入区块链之后,就不可被更改了。因此,这些数据被称为只读数据。它们的整体优势就在于仅供查阅或展示。如果需要将数据提供给其他人,而又不想失去对数据的控制权,不可变性就变得极为重要了。交出不可变数据是为了防止数据更改或被操纵的有效方法。

工作原理:大蓝图

区块链保证历史交易记录不可变的主要原理,就在于让改变历史交易记录的成本变得极高。极高的成本就会阻止人们去改变它。让历史交易记录不可变需要3个要素。
1.以一种对的方式存储历史交易记录,并让对任何历史交易记录的更改都变得十分醒目且引人注目。
2.强制加入修改历史交易记录需重新编写大部分历史交易记录的要求。
3.是更改历史交易记录的计算成本变得极高。

工作原理:具体细节

区块头的哈希引用

计算区块链数据结构中的每个区块头的哈希引用必须要有一下数据。
1.包含交易数据的默克尔树的根。
2.前一个区块头的哈希引用。
3.哈希难题的难度等级(规定哈希值前面要有多少个0)
4.开始解决哈希难题的时间。
5.解决哈希难题的随机数。

创建新区块的过程

创建一个新区块包含一下几个步骤。
1.获取包含要添加的交易数据的默克尔树的根。
2.创建新区块头对前一个区块头的哈希引用。
3.获取所需哈希难题的难度等级。
4.获取当前时间。
5.创建一个包含1至4步中所提到的区块头。
6.解决区块头中的哈希难题。
7.将解决哈希难题的随机数添加到创建的区块头中便完成了新区块的创建。

区块头的验证规则

每个区块头必须满足一下规则。
1.它必须包含对前一个区块的有效哈希引用。
2.必须包含有效交易数据的默克尔树的根。
3.必须包含正确的哈希难度等级。
4.其时间戳需在之前区块头标记的时间戳之后。
5.必须包含一个随机数。
6.上述5个数据组合在一起计算出的哈希值满足难度等级。

现实世界中不可变数据的存储

区块链数据结构的不可变性,取决于哈希难题带来的计算成本。哈希难题的难度等级又决定了需要多少算力,以及多少时间来解决它们,相应地就决定了区块链数据结构的不可变性。如果难度太低,更改区块链数据的计算成本就会下降,并且可能不会在被认为其成本高得让人望而却步,反过来就有可能鼓励人们修改交易数据的历史记录。另一方面,如果难度太高,即使是添加新区块的计算成本也会极高,这就阻碍了节点增添新交易数据的积极性。你设计一条区块链时所面临的挑战就在于,确定恰当的哈希难题的难度等级。由于技术进步,计算机的计算能力也在发生变化,这会让难度等级的设计变得更加复杂。因此,可能需要以一种动态的方式来确定难度等级。
现实生活中的区块链很少会对所有区块应用一直不变的难度等级。相反,它们通常会根据增加新区块的速度来动态地确定难度等级。这就确保了解决哈希难题所需的时间保持在一个防止节点修改历史交易记录的水平。

17.点对点系统中数据的存储与发送

由计算机组成的点对点系统,就像是特点人群组成的群体。组成点对点系统的计算机之间也会“闲聊”、交换消息以及接受新成员的加入。

分布式点对点系统将互联网作为交流媒介具有的特点

1.每台计算机都通过互联网与点对点系统相连。
2.每台计算机都有一个独特的能证明其身份的地址。
3.每台计算机都能在任何特定时间与系统断开连接,或重新建立连接。
4.每台计算机都能独立维护运行在其上的节点。
5.节点之间的沟通通过在网络上的传输信息来进行。
6.通过独特的互联网地址,信息可在互联网中从一个节点被发往另一个节点。
节点通过网络沟通,且能够随时断开连接,或重新建立连接的这一特点,会影响系统中信息的传递。信息在这类网络中的传递具有一下特点。
1.无法保证信息能够到达特定地址,信息可能丢失。
2.信息可能被重复传送。
3.信息的传送顺序可能发生改变。
这些特点会造成节点间的沟通障碍,但可以通过一下方式来解决。
1.信息以与人们传播八卦类似的方式进行传递。每个接收到新信息的节点会把信息传递给与其沟通的对等节点,而这些对等节点会以同样的方式来处理这些信息。这样就能确保最终每个节点都接受到信息。
2.由于这些信息可以通过数字指纹或者哈希值来识别,节点就能轻松识别收到的信息是否存在重复。
3.交易数据和区块头包含时间戳,因此节点就能基于时间戳对信息进行排序。

具体运行细节

分布式点对系统中的节点之间进行沟通,包含一下3个目的。

确保现有连接有效

网络中每台计算机都能独立维护与其沟通的各个节点。

建立新的连接

每台计算机都能通过向系统中的任意节点发送相应的请求信息,哎要求加入这个点对点系统。与系统只建立一次连接是有风险的,因为每个节点随时都可以终止、关闭甚至破坏一次连接。因此,在加入一个点对点系统后,一台计算机应该与系统中多个不同节点建立连接。

分发新的信息

与所有权相关的信息会在以下3种情况种进行共享。
1.一种持续的模式:新信息一旦产生就会被分发出去。每个连接到这个系统的节点最终都将接受到所有消息。
2.作为一种更新:在断开一段时间之后与系统重新建立连接的节点,将会接受它们错过的所有交易数据和区块。
3.作为加载程序的一部分:新加入系统的节点没有机会构建自己的额历史交易记录,因为它们之前并未与系统相连。因此,它们需要获得完整的历史交易记录。向新的节点发送完整的区块链数据,能够确保其成为成熟的节点。这类信息传递的形式,可看作特殊情况下节点对数据的更新。

18.核实并添加交易数据

为了确保唯一有效的交易被添加到系统中,所有节点都需要承担监督者的职责。既奖励其他对等节点添加有效交易,又需发现对等节点添加的无效交易。

具体操作

区块链算法负责管理节点处理新交易和区块的方式。这些独立的规则和流程的基本构成如下所示。
1.验证规则。
2.奖励。
3.惩罚。
4.竞争。
5.对等节点控制。

验证规则

区块链算法的最终目标是确保区块链数据结构中仅包含有效的区块。有效区块由有效交易数据和有效区块头组成。这些数据的有效性评估基于两种规则。
1.交易数据的验证规则。
2.区块头的验证规则。

奖励

创建有效的区块需要消耗能源、时间和金钱,因为产出每个区块都需要解答高成本的哈希难题。所以为了说服节点承担解谜责任的唯一方式就是为它们的有效工作提供奖励。简单来说,奖励是用来鼓励那些维护系统诚信的节点的。

惩罚

这种惩罚方式就是取消奖励,即让节点做工作证明的同时不给它们奖励,在此过程中,这些节点仍会去辨别出重复的、旧的或无用的区块,这本身就是一种惩罚。毕竟创建有效区块需要解答哈希难题,也就是需要耗费成本。因此没有奖励也是一种惩罚。

竞争

发放接待你也是需要耗费资源的。因此,通过奖励那些对系统维护由显著贡献的节点,就可以避免浪费资源。竞争实际上是在以下两个维度上张展开的。
1.速度竞争(解答这个新区块独有的哈希难题)。
2.质量竞争(对已提交的区块进行纠错)。
只有同时赢得这两场竞争的节点,才能因为提交新区块而收到奖励。质量竞争包含了对等节点控制的一个有趣策略。在就收到新区块之后,其他节点就意识到它们是速度竞争的输家,必须担任质量竞争的裁判。可以确定的是,这些裁判将会是史上最严格的裁判,因为它们此时输了速度比赛,已经实验无所失。事实上,所有节点都知道它们如果判定刚提交的区块是无效的,就能继续回到这场游戏中赚取奖励。这样一来,速度竞争就能重新开始,它们也就有机会提交自己发现的新区块。因此,质量竞争或检查已提交的区块都必须具备极高的准确度。

对等节点控制

系统中的节点是工人同时也是监工,因为它们在验证交易和创建新区块的同时会接收、审核以及验证其他节点创建的区块。每个节点的工作都会为新的有效区块的创建以及检查、拒绝或者移除无效交易数据及无效区块做出贡献。

处理不诚实的行为

区块链的目标是在完全公开的点对点系统中创建信任,这一系统是由可靠性和可信度均未知的节点维护的。在负责所有权管理的点对点系统中,包含以下几种不诚实的行为。
1.伪装成其他人提交交易。
2.接受无效的交易数据或区块。
3.通过向某节点发送大量交易数据的方式导致其崩溃。
4.拒绝处理特定的交易数据。
5.拒绝传递信息。
而以上种种不诚实的行为已经通过下列方式得到了解决。
1.交易安全的核心(身份验证、认证和通过非对称加密技术,以及数字签名的方式进行授权)在于限制了相应私钥所有者之外的人对某账户的访问权。
2.类似人类闲聊的沟通方式,确保了每个节点最终都能接收到消息。
3.即使部分节点崩溃或停止处理交易数据,系统也能正常运作。
4.区块链算法。

区块链应对不诚实节点的最重要武器,就是其诚实的绝大多数节点以及奖励和惩罚措施。大多数诚信节点及其对奖励的追求,将会导致非诚信节点无法破坏整个系统的诚信。

19.选择交易数据的历史记录

在所有网络节点之间,如何维护一个明确的历史交易记录,这样在澄清所有权请求时,无论请求哪一个节点,都会得到相同的结果。

具体操作

根据创建交易所需的计算量来选择历史交易的设想,导致了以下两个标准的出现。
1.最长链标准。
2.最重链标准。

最长链标准

如该图所示的区块链数据结构中包含了许多相互冲突的链,但最长链标准产生了一个明确的结果,也就是0101->BB11->AB12->A397->33FF这条最长链。大多数节点以及最终系统的所有节点都将使用这条链来澄清与所有权相关的请求。大多数节点以及最终系统的所有节点都将努力通过寻找一个引用0101区块作为前一个区块的新区快来扩展这个分支。

最重链标准

每条链花费的计算量可以通过其添加的所有区块的难度等级来衡量。这个值可以通过使用区块头包含的哈希难题的难易程度来计算得到。一条链积累的难度通常被称为重量。该图显示了每个区块的难度。最长的链(从根33FF到0101的链)的重量为5,而第二长的链(从根33FF到叶CCC1的链)的重量为6.因此,该图中展示的区块链数据结构列举了采用最长链标准将导致节点选择一个不代表最多计算量的链的情况。

选择一条链的结果

在冲突的链中选择一条特定的链,并将其确立为权威会带来以下结果。

孤儿块(孤块)

不属于权威版本的树状数据结构中的所有区块都会被节点所抛弃,这些被抛弃的块被称为孤儿块。

重新收回奖励

孤儿块对于澄清所有权是无用的,所以它们对权威版本的链并没有贡献。因此,对创建并提交孤儿块的节点的奖励会被回收。

澄清所有权

只有那些属于权威链上的交易才会被认为是已经发生的交易,并且被用来澄清与所有权有关的请求。孤儿块不是集体选择的链的一部分,故它们的记录的交易将不是历史交易记录的一部分。相反,它们记录的交易将被认为是从未发生的,在澄清与所有权相关的请求时,这些记录也将被视为不存在。

重新处理交易

在孤儿块中的交易数据被赋予了另一个机会,即将它们放入节点的收件箱中,重新处理,然后再添加到区块链数据结构中,从而成为权威链历史交易记录的一部分。

不断增长的共同主干

即使选择标准产生了模糊的结果,一个不那么明确的共同主干也会产生冲突的版本。你查看的区块越新,确定这个区块是否属于最长链就越难。

最终一致性

位于权威链顶端或附近的区块受到新区快的影响最大,而区块链数据结构中越老的区块收到新区快的影响越小。因此,权威链中一个区块所处的位置越深:
1.它被添加的时间越久。
2.它被包含到权威链的时间越久。
3.在它后面添加区块所做的计算量就越多。
4.它所在权威链被更改的可能性就越小。
5.它被抛弃的可能性越小。
6.它在系统节点中的接受度就越高。
7.它在节点的历史交易记录中锚定得就越稳定。
随着时间的推移,权威链中已添加区块的确定性会不断增加,并且最终会添加更多的区块,这也被称为最终一致性。

健壮的抗操纵性

只要诚实节点拥有整个系统中的大部分计算资源,它们所维护的链将得到最快的增长,并且超过任何竞争链。

%51攻击

%51攻击是为了手机或控制整个分布式系统的集体决策过程,旨在将现有权威链中的区块变成孤儿块,并建立一条包含对攻击发起者更有利的历史交易记录的新权威链。
%51攻击具有以下特点。
1.在经济上,通过改变历史交易记录来改变所有权的分配。
2.集体决策上,收集大多数的投票权以执行期望的结果。
3.技术角度上,至少暂时建立一个隐藏的中心控制节点,从而改变系统的状态。

20.为诚信买单

区块链中手续费所起到的作用

1.对系统完备性的影响:支付手段不值得信赖或毫无价值。
2.对系统开放度的影响:支付工具引入的限制性会抵消系统的开放性。
3.对系统分布式特征的影响:支付工具由一个中心化的机构来控制和管理。
4.对系统设计哲学的影响。

用于补偿节点的支付工具的理想属性

为了尽可能少地抵消区块链的特征,一种用于补偿节点的支付工具应该包含以下属性。
1.以数字形式提供;否则,它就不能被包含在区块链中。
2.在现实世界中被视为一种支付工具;否则,节点就不能利用它们的收入在现实世界中支付为维护系统完备性而产生的账单。
3.在所有国家均被接受为一种支付手段;否则,将对生活在那些不接受它作为支付工具的国家的节点失去吸引力。
4.不受资本流动的限制:否则,它从其他节点获得的奖励收到限制。
5.具有稳定的价值;否则,节点就会面临丧失购买力的经济风险。
6.时值得信赖的;否则,它会削弱区块链创造信任的能力。
7.不受任何一个组织控制;否则,它会与区块链的分布式特性发生冲突。

21.将所有的“碎片”整合在一起

区块链的作用

区块链有以下两个应用目标。

明确所有权

明确所有权意味着回答构成所有权的主要问题,即:谁拥有,拥有多少,拥有什么和什么时候拥有的?

转移所有权

转移所有权意味着改变所有权当前的状态。就这一作用而言,区块链可以让所有者将他们的财产转让给其他人。因此,它回答了另一个证明所有权的问题:谁在什么时候获得了谁的所有权。

区块链的特性

高可用性

区块链不会停机,甚至没有一个可以将它关闭的按钮。

抗操纵

没有人能单独决定区块链中交易数据的内容,也没有人可以关闭整个系统。

可靠性

区块链以良好的机制来实现它的功能。人们可以相信区块链能够正确地明确和转移所有权。

开放性

区块链并不会拒绝某些用户使用其服务,相反,它对所有人都开放。

匿名性

区块链能准确地识别其用户,但它既不维护也不揭示用户在真实世界中的身份。

安全性

区块链在个人交易层面以及整个系统层面都是安全的。就个人而言,区块链能确保所有权只保留在合法所有者的手中。从整个系统层面来看,区块链保护所有者的所有权不受操纵、伪造、双重支出和未经授权的访问。

系统弹性

即使在开放的网络中,区块链也能正确地明确和转移所有权。区块链能够抵抗广泛地针对所有权的攻击,比如伪造、双花以及通过伪装成别人来获取财产。

最终一致性

区块链不会始终产生一致的结果。相反,获得一致结果的机会将随着时间的推移而增加,最终会使整个系统具有一致性。

保持系统的完备性

区块链可保持数据的一致性,并确保单个交易和交易数据的整个历史记录的安全性。

区块链内部运行时实现层的功能性特征

所有权逻辑

交易安全性

交易处理逻辑

存储逻辑

点对点架构

一致性逻辑

获得抽象的区块链技术套件

抽象是通过识别和区分区块链的组成部分来获得的。该图展示了区块链中与应用强相关与弱相关的概念,后者反过来形成了区块链技术套件。

22.了解区块链的缺陷

区块链的技术缺陷

区块链最主要的技术缺陷包括以下几点。
1.缺乏隐私。
2.安全模式。
3.延展性的限制。
4.高成本。
5.隐藏的中心化属性。
6.缺乏灵活性。
7.临界值。

缺乏隐私

区块链中的所有交易细节,所有人都能查到。这一点是很有必要的,这样才能让所有人明确所有权并且验证新的交易。因此,缺乏隐私成为了区块链的一个缺陷。失去了透明性,区块链就无法履行其职责。然而,这种透明性通常被视作实现其应用的一个限制因素,尤其是实际用于对隐私要求较高的情况下时。

安全模式

只要某账户的私钥被故意泄露,那么这个独立账户的安全性就无法得到保障。

延展性的限制

区块链采用不可更改、且只允许添加新数据的数据结构,在新区快添加时要求给出哈希难题的解答。但采用这一安全措施的代价就是交易处理速度的下降,因此也就限制了区块链的延展性。

高成本

解答哈希难题或确保工作量证明算法正常运行都需要极高的计算成本。

隐藏的中心化属性

一些大企业或者拥有专业设备的组织个人构成的节点会有可能垄断系统。与其他行业的垄断行为一样,这一小部分企业可能滥用权力。这就导致了潜在的中心化属性,会对整个系统的分布式特性构成威胁。

缺乏灵活性

区块链是一个复杂的技术组合,由一系列经优化后相互兼容的协议组成。改变这个井然有序的系统时极具挑战性的。事实上,一旦区块链开始运作之后,没有任何一个有效方法能够改变或升级其主要部件。

临界值

会有可能遭受到%51攻击的可能

区块链的非技术性缺陷

区块链最主要的非技术性缺陷包括以下两点:
1.缺乏法律认可。
2.缺乏用户接受度。

客服缺陷

技术性缺陷

解决区块链技术性缺陷会涉及各个技术性层面的问题。解决区块链技术缺陷的重大挑战之一,就是了解技术改进和技术创新的区别。

非技术性缺陷

区块链的非技术性缺陷,可以被视作采用一项新技术所需考虑到的社会、经济、法律和心里层面的问题。随着时间的推移,新技术在用户间的接受度和普及度会逐渐提升,并且也可为人们提出法律方面的解决方案留出时间。

23.重构区块链

区块链的主要冲突

区块链面临着以下两大冲突。
1.透明度与隐私。
2.安全与速度。

透明度与隐私

区块链中交易数据的历史记录对所有人都是可见的,这是解决双花问题的基础。然而这种解决方案与隐私性背道而驰。隐私性意味着保证除双方外的人无法接触交易数据中包含的信息。由此产生的冲突就在于一方面需要透明度来明确所有权,另一方面有需要有一定的隐私。

安全与速度

在区块链数据结构中,要求被添加或重写的每个区块都要解决哈希难题,从而保证历史交易数据不会被操纵,也不会被伪造。但这样使得系统的运行速度极慢。由此产生的冲突就在于一方面要根据好事的工作量证明算法来确保历史交易记录的安全,另一方面又面临着用户对速度及系统可扩展性的要求。

解决冲突

在透明度与隐私之间做出选择

人们可以根据哪些用户或节点有权读取区块链数据或创建新交易来区分以下类型的的区块链。
1.向所有用户或节点授予读取权限以及创建新区块权限的为公有链。
2.向预先选定的一组用户或节点授予有限读取权限以及创建新区快权限的为私有链。

在安全性与速度之间做出选择

我们可以基于写入权限的授予情况来区分以下两种类型的区块链。
1.向所有人授予写入权限的无须许可的区块链。每个用户或节点都可以验证交易,向并向区块链添加新区块。
2.仅向预先选定被确定为可信任的一组数量有限的节点或用户授予写入权限的许可区块链。因此,只有具有写入权限的一组节点才能够验证交易,并参与分布式系统的共识过程。

4种类型的区块链

该表列出了四种极端情况的区块链。

24.如何使用区块链

区块链的特征

区块链是一种分布式的点对点数据存储系统,具有以下特征。
1.不可更改。
2.仅可追加数据。
3.有序。
4.具有时间戳。
5.开放和透明。
6.安全(识别、认证和授权)。
7.一致性。
区块链的这些特征不受它所存储数据的影响。因此,为了便于描述,我们可以把区块链当成一种存储数据类物品的特殊盒子。这样就可以扩大区块链的应用场景。

通用型应用场景

根据区块链的特征和它能够存储各种数据的特点,我们可以总结出以下通用的应用场景。

存在证明

证明数据的存在。具体的应用包括专利注册(如专利种的品牌名称的保存、执照编码、互联网中电子邮箱的保存)。

非存在证明

为了证明特定的账目或物品不存在。具体可用于投诉记录、罚款或判决的保存。

时间证明

这种应用下,数据的保存于录入的时间都非常重要。区块链的时间戳就可以用于追踪事件发生的顺序,如生活中快递追踪、支付追踪、竞拍开始和结束流程的追踪和预测管理等场景。

顺序证明

证明哪些事件先发生,哪些事件后发生就是这种顺序证明的典型应用场景。

身份证明

区块链能够用来存储证明某人身份或某事已发生的数据,具体的应用包括对人、动物或商品进行数字身份验证。

作者证明

这种应用场景用到了区块链可证明特定的人或机构在其上添加了特定的数据这一功能。识别和验证对核实作者的信息至关重要。授权的存在是为了防止没有权限的人在区块链上添加数据。这方面的应用包括电子出版、追踪文档内容的变化和版权保护。

所有权证明

所有权证明可用于认证和管理所有权。这种功能的实现需要依赖之前提到的所有模式(如存在证明、顺序证明、身份证明、作者证明)和3个基本的安全要素:识别、验证和授权。可应用于需管理所有权的场景,如房产证、公司股份、证券或“加密货币”。

特定的使用场景

区块链本身不知道它存储的是什么数据。因此,区块链上所存储数据的范围和应用范围就变得非常广泛了。像“加密货币”、微支付、数字资产、数字身份、公证类服务、合规和审计、税收、投票以及档案管理。

分析区块链的应用

区块链的应用在很多场景下都可以用到,考虑到区块链本身的复杂性,或许很难评估一种区块链系统的功能,并在充分考虑后进行购买、投资、或做出使用它的决定。因此,问以下一些问题,或许会对你有所帮助。
1.满足区块链的使用条件吗?
2.使用什么样的区块链?
3.使用完全对点系统的额外优势是什么?
4.应用理念是什么?
5.有哪些商业使用场景?
6.对系统做贡献并维护数据一致性的节点如何获得补偿?

25.总结与展望

区块链的发展的未来发展趋势和其他可能的代替方案

微小的基础改进和变更

只要利用不同的哈希算法和加密算法,就可以创建出不同版本的区块链。但是这些变动对区块链的影响是有限的,因为它们并没有改变其基本功能;相反,这些变动只是在细节上对系统的优化。

扩展性的提升

要提高区块链的扩展性,需要集中研究网络传输效率、存储、数据的使用和共识算法。闪电网络和跨链是两种可行的扩展方法,能够让交易时间减少到商家可接受的范围内。

概念引进

概念上的演进表明了区块链能够如何发挥作用,提供哪些服务以及用户如何与之交互。使用权、隐私、共识、交易、存储数据、数据结构是重要区块链概念的演进。

区块链的主要发展方向

总所周知,大众习惯高估技术的短期影响,而忽视其长期影响。互联网的演进和它对人类社会的影响就是上述道理的最好证明,这也意味着要预估技术创新的长期影响是非常困难的。以下几点或许是区块链长期发展的重要方向。
1.去中介化。
2.自动化。
3.标准化。
4.流水线处理。
5.提高处理速度。
6.降低成本。
7.信任协议和共识。
8.让信任变成一种商品。
9.提高技术意识。

潜在劣势

除了正面的影响,区块链同样也存在负面影响,以下是其潜在的劣势。
1.缺少隐私性。
2.缺少责任制。
3.减少就业。
4.再中介化。

未来趋势

我们可以用一些指标来推测其未来的发展趋势。比如,难以扩展和缺少隐私性的公有链的商业应用场景有限。相反、私有链则获得了商业应用的青睐。因此,未来的发展方向可能如下所示。
1.有局限的爱好者项目。
2.大规模商业应用项目。
3.公共部门项目。

终于完成我的第一篇学习博客啦!!写了一天半,还是有点小小的成就感的,不仅自己又复习了一遍关于区块链的基础知识,而且也把自己认为重要的知识点和总结写了下来。当然,大家如果对原文感兴趣的话也可以去看看英国Daniel Drescher 原著,马丹、王扶桑、张初阳译的《区块链基础知识25讲》这本书。