上一篇: 区块链非技术介绍25步读书总结之二
区块链是如何工作的
8. 为区块链做计划
- 为了设计纯粹的分布式P2P系统来管理所有权,必须解决以下任务:
- 描述所有权
- 保护所有权不受未授权的访问
- 存储交易数据
- 为在不可信赖的环境中分发账单做准备
- 形成分配账单的系统
- 添加和验证账单的新交易
- 决定哪些账单代表真相 (而不是伪造的)
- 上述任务将在以下12个步骤中谈到。
9. 记录所有权
- 交易数据提供以下信息来描述所有权转让:
- 发起交易并将所有权转让给其他账户的账户的标识符
- 要接该收所有权的帐户的标识符
- 要转移的货物数量
- 交易完成的时间
- 向系统支付执行交易的费用
- 交出所有权的账户的所有者同意该转让的证明
- 交易数据的完整历史记录是一个审计追踪,它提供了人们如何获得和转让所有权的证据。
- 任何不属于该历史的交易都被视为从未发生过。
- 通过将交易添加到交易数据的历史记录并允许它影响把所有已完成的交易汇总起来所造成的结果来执行交易。
- 交易数据添加到历史记录中的顺序必须保留,以便在汇总这些数据时产生相同的结果。
为了保持完整性,只有这些交易数据才会添加到区块链数据结构中。 区块链的数据结构实现以下三个标准:
- 正式的正确性
- 语义正确
- 授权
10. 散列(哈希)数据
- 无论输入数据的大小如何,哈希函数都可以将任何类型的数据转换为固定长度的数字。
- 有许多不同的哈希函数在它们产生的哈希值的长度方面有所不同。
- 加密散列函数是一组重要的散列函数,可为任何类型的数据创建数字指纹。
- 加密哈希函数具有以下属性:
- 快速为任何类型的数据提供散列值
- 确定性
- 伪随机性
- 单向使用
- 耐碰撞
- 哈希函数应用于数据可以通过使用以下模式来完成:
- 重复散列
- 独立散列
- 组合散列
- 顺序散列
- 分层散列
11. 现实世界里的散列
- 散列值可以被用于:
- 比较数据
- 检测应该保持不变的数据是否已被更改
- 以变化敏感的方式引用数据
- 以变化敏感的方式存储数据集合
- 创建计算量大的任务
12. 识别和保护用户帐户
- 密码学的主要目标是保护数据不被未经授权的人访问。
- 主要的加密活动是:
- 加密:通过使用加密密钥将其转换为密码文本来保护数据
- 解密:利用匹配的加密密钥将密码文本转换回有用的数据
- 不对称加密总是使用两个互补的密钥:用其中一个密钥创建的密码文本只能用另一个密钥解密,反之亦然。
- 当在现实生活中使用非对称密码术时,这些密钥通常被称为公钥和私钥,以突出其作用。公钥与每个人共享,而私钥保密。为此,非对称密码术也被称为公私密钥密码术。
- 公钥和私钥有两种典型用例:
- 每个人都使用公钥来加密只能由相应私钥的所有者解密的数据。这种数字化形式上相当于一个公共邮箱,每个人都可以放入信件,但只有所有者可以打开它。
- 私钥的所有者用它来加密可以被拥有相应公钥的每个人解密的数据。这种数字化形式相当于证明作者身份的公告板。
- 区块链使用非对称加密来实现两个目标:
- 识别帐户:用户帐户是公共密钥。
- 授权交易:交出所有权的账户的所有者用相应的私钥创建一段密码文本。这段密码文本可以通过使用相应的公钥进行验证,这恰好是交出所有权的账户号码。
13. 授权交易
- 文件上的手写签名表明其作者与签署文件的内容达成一致,并授权其执行。
- 手写签名的证据力是基于手写体的唯一性。
- 数字签名是数字形式上与手写签名(在功能上)是对应的。
- 数字签名有两个目的:
- 识别其作者(身份的)唯一性
- (数字签名)表达作者同意文件的内容并授权文件的执行
- 在区块链中,交易的数字签名是交易数据的加密哈希值,该交易数据使用与切换所有权的账户相对应的私钥进行加密。
- 区块链中的数字签名可以唯一地追溯到一个特定的私钥和一个进程中的特定交易。
14. 存储交易数据
- 区块链数据结构是由有序的单元(这个单元被称为块或区块)组成的特定类型的数据结构。
- 区块链数据结构的每个区块都包含区块标题和包含交易数据的Merkle树。
- 区块链数据结构由两个主要数据结构组成:一个有序的被链接起来的多个区块标题和多个Merkle树。
- 我们可以把有序的区块链标题想象成老式的图书馆卡片目录: 单独的目录卡片根据它们被添加到目录中的顺序进行排序。
- 每个区块标题引用其前面的区块标题, 这样就保持构成区块链数据结构的各个区块标题和区块的顺序。
- 区块数据结构中的每个区块块标题由其加密哈希值所标识,并包含对其前面区块标题的哈希引用来保持顺序的特定于应用程序的数据的散列引用。
- 指向特定应用程序的数据的哈希值通常是Merkle树的根,该Merkle树保存了多个应用数据的哈希值索引。
15. 使用数据存储
- 要将新交易数据添加到区块链数据结构中,要执行的步骤如下:
- 创建一个新的Merkle树,其中包含要添加的所有新交易数据。
- 创建一个新的区块头,其中包含一个索引到其前一个区块头的散列值和包含新的交易数据的Merkle树的根。
- 创建一个散列引值,这个值索引到新建的的区块头,它现在是区块链数据结构的当前头。
- 更改区块连中的某个区块数据,需要更新这个区块以及其之后的所有区块的散列值。
- 当区块链更改数据的是后, 区块链数据结构追求一种激进的所有或一个也没有的方法: 或者是从导致变化的点开始完全改变整个数据结构,直到整个链的头部或者最好保持什么都不变。
- 从区块链当中的部分更改数据的或部分的变化将使整个区块链数据结构处于不一致的状态,这将被轻松快速地检测出来。
- 彻底改变区块链数据结构 被故意弄成一个非常复杂的过程。
- 区块链数据结构对变化的高敏感度归因于散列值索引的属性。
16. 保护数据存储
- 区块链通过将交易数据存储在不可变的数据存储中来保护交易数据的历史不受操纵和伪造。
- 通过利用两个想法使交易数据的历史不可改变:
- 将交易数据存储在对变化敏感的区块链 数据结构中,当改变时区块链数据时,需要从导致改变的点开始,直到整个链的头部。
- 要求解决散列拼图的问题,以便在区块链数据结构中写入,重写或添加每个区块头。
- 散列拼图对每个区块头都是唯一的,因为它取决于其独特的内容。
- 毋庸置疑, 在更改区块数据时需要重写区块链数据结构,这样做的成本使其对操作交易数据历史记录没有吸引力。
- 要求在每次写入时解决散列拼图问题,在区块链数据结构中重写或添加区块头将其变为只能做附加(操作)的数据存储。
- 区块头至少包含以下数据:
- 对其前面区块的头部的散列索引
- 包含事务数据的Merkle树的根
- 其哈希拼图的解决的难度
- 开始解决散列拼图的时间
- 解决散列拼图所使用的随机数
17. 把数据存储分布到网络的节点中
- 分布式对等系统中的计算机通过数字网络相互通信。
- 由于互联网的普及,通过互联网连接各个节点,迫切需要建立一个分布式的对等系统。
- 使用互联网作为通信媒介的对等系统具有以下特点:
- 计算机通过互联网相互连接。
每台计算机都由一个唯一的地址标识。 - 每台计算机可以断开连接并重新连接系统在任何给定的时间。
- 每个计算机独立地维护它与之通信的对等体的列表。
- 节点之间的通信基于消息。
- 消息通过使用它们的唯一地址通过因特网从一个节点发送到另一个节点。
- 计算机通过互联网相互连接。
- 由于网络的缺陷,节点之间的通信具有以下特征:
- 消息不保证到达收件人,它们可能会在中途丢失。
- 消息可能会不止一次地到达。
- 消息可能按照与发送顺序不同的顺序到达。
- 区块链通过以下方式抵消通过不可靠网络进行通信的缺陷:
- 消息以八卦(留言gossip)风格发送。接收到消息的每个节点都会将其转发给与其通信的对等方,而这些对方又会以相同的方式处理消息。
- 重复的交易或数据块会根据其加密散列值进行标识和过滤。
- 每个节点都可以对收到的信息排序,因为交易数据和块头包含时间戳。
- 组成对等系统的计算机之间的通信有三个目的:
- 保持现有连接持续工作
- 建立新连接
- 分发新信息
- 转发所有权相关信息发生在三种情况:
- 以持续的方式将新交易数据和新块转发给连接到系统的所有节点
- 作为断开一段时间后重新连接到系统的节点的更新
- 作为将整个最新版本的区块链数据结构副本传输到新节点的加入到系统过程的一部分,以确保它们在加入系统后成为(收到)完整(信息)的节点
18. 验证和添加交易数据
- 区块链算法是一系列规则和指令,用于管理交易数据的处理和添加到系统中的方式。
- 区块链算法解决的挑战是保证系统对所有人开放,同时确保只有有效和授权的交易才能被添加到区块链里。
- 区块链算法利用胡萝卜加大棒的方法,结合竞争和同伴控制。
- 区块链算法的主要思想是允许系统的所有节点充当同伴的监督者,并对他们将有效和授权的交易添加到区块链以及发现同伴的错误的行为进行奖励。
- 根据区块链算法的规则,系统的所有节点都有动力正确处理交易,并监督和指出其他任何错
- 区块链算法基于以下概念:
- 交易数据和块头的验证规则
- 用于提交有效的区块的奖励规则
- 破坏系统完整性的惩罚规则
- 基于处理速度和质量的对手之间的竞争机制
- 同伴之间的控制
- 竞赛规则建立了两步节奏,控制着网络中每个节点的工作。 在任何给定的时间点,系统的所有节点都处于以下两个阶段中的任何一个:
- 评估由其他节点创建的新块
- 努力的创建新的区块以成为下一个被同伴评估的节点
- 工作节奏由是由于消息到达各个节而施加的。
- 大多数诚实节点及其争取奖励的努力将超过不诚实节点破坏系统完整性的企图。
19. 选择交易历史
- 通过网络发送新块的延迟或几乎同时创建新块的两个节点导致区块链数据结构变成树形或柱状仙人掌的形状,其分支产生于具有冲突的版本的交易历史的共有主干。
- 选择相同版本的交易历史是集体决策问题。
- 分布式共识是集体决策问题中纯粹分布式对等系统成员之间的协议。
- 集体决策区块链的制作问题具有以下事实特征:
- 所有节点都在相同的环境中运行,包括网络,维护区块链数据结构副本的节点,以及控制节点行为的区块链算法。
- 决策问题是在所有节点上选择一致(认同)的交易历史。
- 所有节点都努力获得最大收益,而收益是通过向区块链数据结构添加新的有效区块获得的。
- 为了实现其目标,所有节点将其新区块发送给所有对等方以使其被检查和接受。结果,每个节点在共同维护的区块链数据结构的环境中留下其单独的足迹。
- 所有节点使用相同的标准来选择交易数据的历史。
- 最长链标准指出每个节点独立的选择包含最多块的树形区块链数据结构的路径。
- 最重链条准则表明每个节点独立地选择具有最高聚合难度的树形区块链数据结构的路径。
- 选择树形区块链 - 数据结构的一条路径具有以下后果:
- 孤儿区块
- 报销奖励 (reclaimed reward)
- 澄清所有权
- 重新处理交易
- 日益增长的共同主干
- 最终的一致性
- 对(非正常)操纵的强健性
- 一个区块越是位于权威链的更深处:
- 自从它被添加的时间越长
- 自从包含在区块链数据结构中以来的时间越长
- 花费在增加后续的区块的共同努力越多。
- 它受到属于最长链的块的随机变化的影响越小。
- 它被抛弃的可能性越小。
- 系统的节点越接受它。
- 它的共同历史就越多。
- 在授权的区块链中包含块的确定性随着时间的推移而增加,并且随着更多块被添加最终被称为最终一致性。
- 51%的攻击是企图在集体决策过程中收集或控制整个投票权的大部分,其目标是将作为权威链的一部分的块转变为孤立块,并建立一个包含一个新的权威链的新权威链。 从攻击者的角度来看,交易历史更为有利。
- 一个51%的攻击具有以下特点:
- 经济上:通过改变交易数据的集体历史来改变所有权的分配
- 决策:收集大部分投票权以强制执行预期结果。
- 技术上:破坏系统的完整性。
- 架构上:至少暂时建立一个隐藏的中心性元素,改变系统的状态。
- 经济上:通过改变交易数据的集体历史来改变所有权的分配
20. 系统完整性的代价
- 区块链利用费用来补偿其同同伴为系统完整性做出贡献。
- 用于补偿同行的支付工具对区块链的主要方面产生影响,例如:
- 完整性
- 开放性
- 分布式属性
- 系统的哲学
- 补偿同行的支付工具的理想属性是:
- 能够以数字形式提供
- 在现实世界中被接受
- 在所有国家都被接受
- 不受资本流动限制
- 可信赖
- 不受单一中央组织或国家控制
- 加密货币是一种独立的数字货币,其所有权由区块链管理 将其用作支付工具,以补偿其同行维护系统的完整性。
21. 综述
- 区块链是一个纯粹的分布式P2P系统,它提出了对所有权进行管理的一下方面的问题:
- 描述所有权:交易数据的历史
- 保护所有权:数字签名
- 存储交易数据:区块链数据结构
- 准备分类账:不变性
- 分发分类账:通过网络传递流言式信息
- 处理新交易:区块链算法
- 决定哪个分类账代表真相:分布式共识
- 对区块链进行分析涉及以下几个方面:
- 应用目标
- 它的属性
- 它的内部功能
- 区块链有两个应用目标:
- 澄清所有权
- 转让所有权
- 区块链实现其应用目标,同时具有以下品质:
- 高度可用
- 需要审查的(censorship proof, 当系统内的某些内容需要更改时,需要进行审查)
- 可靠的
- 开放的
- 伪随机的
- 安全的
- 有弹性的
- 最终一致的 (Eventually consistent)
- 保持(系统完整的
- 在内部,区块链由对管理所有权的应用程序目标具体或不可知的组件组成。
- 区块链的应用程序特定组件是:
- 所有权逻辑
- 交易数据
- 交易处理逻辑
- 交易安全
- 不确定的组件:
- 区块链技术套件
- 纯分布式P2P架构
- 区块链技术套件包括:
- 存储逻辑
- 共识逻辑
- 数据处理逻辑
- 非对称加密
hello
nice post
test
test 2
test 3