主页 > imtoken安卓app > 区块链技术指南学习笔记1

区块链技术指南学习笔记1

imtoken安卓app 2023-06-30 05:28:26

区块链技术指南学习笔记1

区块链的诞生

区块链是金融科技(Fintech)领域的一项重要基础技术创新。

区块链作为分布式账本技术(DLT)系统的核心技术,被认为在金融、物联网、商业贸易、征信、资产管理等诸多领域具有广阔的应用前景。 区块链技术尚处于快速发展的早期阶段,涉及分布式系统、密码学、博弈论、网络协议等诸多学科,给学习和实践带来了极大的挑战。

从几千年的记账技术演进来看,区块链其实是记账问题向分布式场景发展的自然结果。 记账技术的发展变化如下:

账本科技的变化

分布式记账

复式记账方式虽然记录了交易的来龙去脉,不易出错,但本质上仍然是一种中心化的模式。

集中记账系统使用方便,但在很多情况下仍存在诸多问题:账本掌握在个人手中,数据一旦丢失,无法找回; 当同时涉及多个交易方时,需要分别维护,如果各自的账本不一致,对账会比较困难。

很自然地会想到利用分布式系统的思想来实现分布式账本(Distributed Ledger):多个交易方共同维护同一个共享的分布式账本; 打开不同阶段交易的来龙去脉; 账本规模、效率、可靠性和合规性。

但在分布式场景下,如何避免参与者恶意篡改或破坏记录呢? 谁应该决定将交易记录写入分类账?

2009年1月,基于区块链结构的比特币网络悄然问世,它融合了现代密码学和分布式网络技术等重要成果。 随后几年,比特币网络稳定支持纯分布式场景下的海量转账交易。 这让人们意识到,区块链这种看似极其简单的数据结构,其实满足了分布式记账的基本需求,基于区块链结构的分布式记账技术开始大量出现。

然而,目前的分布式账本技术还处于发展初期,还有很多问题没有解决,包括权限管理、隐私保护、性能优化、互操作性等。

分布式记账和区块链

选项一

各方都可以任意读写账本,一旦发生新的交易,就会被添加到账本中。 在这种情况下,如果参与方诚实可靠,则该方案可以正常运作; 但是一旦参与者恶意篡改已经发生的记录,就无法保证账本记录的正确性。

在这里插入图片描述

方案二

为了防止参与者篡改交易记录,需要引入一定的验证机制。 自然,我们可以借鉴信息安全领域的Digital Digest技术。 每增加一条新的交易记录到账本上,参与方就可以使用哈希算法对完整的交易历史进行数字化总结,得到当前交易历史的“指纹”。 此后的任何时候,每个参与者都可以重新计算交易历史的数字摘要。 一旦指纹不匹配,就意味着交易记录被篡改了。 同时,通过追踪指纹变化的位置,可以定位到被篡改的交易记录。

在这里插入图片描述

第三种解决方案

方案(2)可以解决账本记录的防篡改问题,但在实际生产应用中仍存在较大缺陷。 由于每次追加新的交易记录都需要从头计算所有历史数据的数字摘要,当交易历史量很大时,数字摘要的计算成本会变得非常高。 而且,随着新交易的出现,计算成本会越来越大,系统的可扩展性很差。

为解决可扩展性问题比特币的理解,需要进一步改进如方案(3)。 注意每一个summary都保证了从开始到summary位置的完整历史。 当有新交易发生时,只需要对新交易进行额外验证,即增量部分。 因此,可以改进计算摘要的过程,以验证旧的摘要值加上新的交易内容。 这样不仅解决了防篡改的问题,也解决了扩展性的问题。

在这里插入图片描述

方案(3)中的账本结构就是一个区块链结构。

在这里插入图片描述

加密货币(比特币)

自 20 世纪 50 年代计算机问世以来(ENIAC,1946 年),人们一直在尝试使用信息技术来提高支付系统的效率。 除了各种用作电子支付方式的银行卡外,自20世纪80年代以来,利用密码学构造的数字货币(加密货币)也成为研究热点。

加密货币已经探索了 30 多年,典型成果包括 e-Cash、HashCash、B-money 和 Bit Gold。

目前除了比特币等分布式技术,还有很多中心化代理模式的数字货币机制,包括Paypal、支付宝甚至Q币。 通过与现有支付系统的配合,也可以高效地进行代理交易。

时至今日,关于比特币的话题依然充满争议。 但大多数人应该都同意,比特币是数字货币史上,乃至整个金融史上一个了不起的社会学实验。 比特币网络自上线以来,在全球范围内不间断运行了10年,无人管理,成功处理了数千万笔交易,最大单笔支付超过1.5亿美元。 比特币网络从未发生重大系统故障的情况很少见。

比特币网络目前由数千个核心节点组成,不需要任何中心化支撑机构参与。 稳定和上升的交易量完全由分布式机制支撑。 比特币第一次真正实现了一种实用意义上安全可靠的去中心化数字货币机制,这也是它受到无数金融科技从业者青睐的根本原因。

比特币作为概念货币,主要希望解决现有货币体系面临的几个核心问题:

要实现数字货币机制,最重要的是建立完整的交易记录系统,形成合理的货币发行机制。 这个交易记录系统必须能够准确、公正地记录每一笔已经发生的交易,并且不能被恶意篡改。 对比现有的银行系统可以看出,现有的银行机制作为金融交易的第三方中介,是有偿提供交易记录服务的。 如果参与交易的多方完全信任银行的记录(数据库),则不存在信任问题。 但如果是流通规模更大(甚至跨多家银行)的货币呢? 哪家银行的系统可以提供完全可靠和不间断的服务? 唯一可能的解决方案是分布式账本。 这个账本可供所有用户自由访问,任何人都不能恶意篡改或控制记录的数据。 为了实现这样一个前所未有的账本系统,比特币网络巧妙地设计了区块链结构,提供了可靠、不可篡改的数字货币账本功能。

区块链的价值

区块链擅长的是如何在多方之间达成合约,并保证合约的顺利执行。

从技术角度来看,普遍认为区块链具有以下特点:

区块链核心技术概述 区块链定义与原理

从狭义上讲,区块链是一种以区块为基本单元的链式数据结构。 在区块中使用数字摘要来验证之前的交易历史,适用于不可篡改和可扩展的分布式记账场景。 需要。

广义上,区块链也指基于区块链结构的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。

区块链的基本原理理解起来并不复杂。 先看三个基本概念:

区块链的目标是实现一个分布式的数据记录账本,只允许添加,不允许删除。 账本的底层结构是一个线性链表。 链表由“块”串联组成(如下图所示),在后续块中记录前导块的哈希(Hash)值。 一个区块(以及区块中的交易)是否合法可以通过计算哈希值来快速判断。 网络中的节点可以提议添加一个新区块,但该区块必须经过共识机制确认。

在这里插入图片描述

以比特币为例,了解区块链工作流程

首先,用户通过比特币客户端发起一笔交易,消息被广播到比特币网络进行确认。 网络中的节点将接收到的等待确认的交易请求打包在一起,并添加上一个区块头的哈希值等信息,形成一个区块结构(预哈希+交易+元数据)。 然后,尝试寻找一个nonce串(随机串)放入区块中,使区块结构的哈希结果满足一定的条件(比如小于某个值)。 这个计算 nonce 字符串的过程通常被称为“挖掘”。 nonce 字符串的查找需要一定的计算能力。

一旦节点找到满足条件的nonce串,则该块在格式上是“合法的”,成为候选块。 节点在网络中广播它。 其他节点收到候选区块并验证后,发现确实合法后,将此区块认定为新的合法区块,加入到自己维护的本地区块链结构中。 当大多数节点接受该区块时,意味着该区块被网络接受,该区块中包含的交易得到确认。

这里有两个关键步骤。 一是完成对一批交易的共识(创建合法的区块结构); 另一种是在链结构中加入一个新的区块,并被网络认可,以保证以后不可篡改。 当然,在实现中会有很多额外的细节。 (创建块结构+添加后识别)

比特币基于计算能力(寻找随机数字符串)的共识机制称为工作量证明(PoW)。 这是因为没有已知的快速启发式算法可以使哈希结果满足一定的条件,只能对nonce值逐一进行暴力计算。 尝试的次数越多(工作量越大),计算出的概率就越大。

通过调整对哈希结果的约束,比特币网络控制了平均 10 分钟左右的时间来生成一个合法的区块。 计算区块的节点将获得区块内所有交易的管理费和协议固定的奖励费(目前为12.5个比特币,每四年减半)。

任何人都可以加入比特币网络。 如果网络中存在恶意节点,是否可以进行恶意操作,篡改区块链中的记录,从而破坏整个比特币网络系统? 例如,最简单的一种是故意拒绝承认他人生成的合法候选区块,或者干脆拒绝其他节点的交易请求。

事实上,由于比特币网络中有大量(估计有数千个)维护节点,而且大部分节点都在正常工作,所以它们默认只识别看到的最长链结构。 只要网络中一半以上的节点不提前串通作恶,最长的那条链就有很大概率成为最终的合法链。 而且随着时间的推移,这个概率会越来越大。 比如6个区块生成后,即使有一半的节点联合起来推翻确认结果,概率也只有(1/2)^6≈1.6%,小于1/60的可能性。 10 个区块后,概率将降至千分之一以下。

当然,如果整个网络中的大部分节点联合起来作恶,也会导致整个系统无法正常工作。 实现这一点往往意味着付出高昂的代价,与作恶所获得的利益相比,往往得不偿失。

区块链的演变

比特币区块链面向转账场景,支持简单的脚本计算。 很自然地想到,如果引入更复杂的计算逻辑,将会支持更多的应用场景。 这是智能合约。 智能合约除了提供货币交易功能外,还可以提供更灵活的功能,进行更复杂的操作。 引入智能合约后的区块链,已经超越了简单的数据记录功能,实际上具有了“智能计算”的含义; 进一步,可以在区块链中加入权限管理、高级编程语言支持等,实现更强大的分布式账本系统,支持更多的业务场景。 具体演化场景如下:

在这里插入图片描述

区块链和分布式会计

在这里插入图片描述

现代复式簿记系统最早出现在文艺复兴时期的意大利,至今仍是会计学科的核心方法。 复式记账法同时记录每一笔账目的来源和去向。 首次在记账流程中嵌入对账核对功能,提高了记账过程的可靠性和可追溯性。 区块链实现了完整交易历史的记录和保护。 从这个角度来看,区块链是第一个自带对账功能的数字账本结构。 更广泛地说,区块链实现了去中心化记录。参与系统的节点不属于同一组织,并且彼此

可以信任也可以不信任; 链上数据由所有节点共同维护,每个节点存储记录的完整或部分副本。

与传统记账技术相比,基于区块链的分布式账本具有以下特点:

误解

目前,作为一项相对年轻的技术,区块链本身还在快速发展,相关概念中仍有一些值得探讨的东西。

下面总结一些常见的认知误区。

区块链是完全创新和颠覆性的。 区块链作为多种现有技术的融合,与现有的会计技术和信息系统一脉相承。区块链在解决多方合作、可信计算等问题上向前迈进了一步,但并不意味着它是无所不能的(永远不会有通用的技术),它不会很快颠覆现有的许多

商业模式。 长期以来,区块链的应用场景仍需不断探索,区块链在发展自身的同时,也会与现有系统共存互通。

区块链一定是去中心化的,去中心化的一定比中心化的设计好。 比较两种技术的优劣势,首先要确定场景前提,区块链也是如此。 某种技术不可能在任何场景下都是最优的。 目前区块链的两大形态——公有链和联盟链——在技术选择上存在较大差异,正是因为它们所面临的场景不同

不同的。 集中式设计往往具有设计简单、管理完善、性能高、安全可控等特点,但其容错性能较差; 去中心化(多中心化)设计可以提高容错性能,并且可以使用多方共识来降低被篡改的风险。 但这意味着设计更复杂,性能更差。 从实际需求出发,现有的区块链技术大多处于绝对中心化和绝对去中心化之间,以实现不同指标的平衡。 例如,一些公链为了提高性能,会选择一些有代表性的节点参与共识。

区块链离不开加密数字货币。 虽然区块链的早期应用之一是比特币等加密数字货币,但时至今日,区块链技术已经异军突起,并且两者都朝着不同的方向发展。财务角度; 后者从技术角度探讨和研究分布式账本技术的商业价值。

价值,并尝试扩展到更多分布式互信场景。

区块链是一种数据库技术。 虽然区块链中可以使用数据库技术,也可以用来存储或管理数据(Data Management)技术,但其需要面对的核心问题是多方数据互信与协作(Data Collaboration)问题。 这是传统数据技术无法解决的。 另外,单纯从数据存储或管理的角度来看,区块链的效率可能没有传统数据库高,所以一般不建议将大量原始数据直接放到区块链系统中。 当然,区块链系统可以与现有的数据库和大数据技术很好地结合,也有人尝试将区块链的一些特性引入数据库设计中,解决去中心化管理的问题,例如BigchainDB。

Token 等同于加密数字货币。 在区块链概念出现之前,代币(token)在计算机系统中被广泛使用。 作为权限证明,它可以协助计算机系统进行身份验证等操作。 区块链作为一个分布式系统,在某些场景下(比如游戏积分)自然会借用Token机制,为应用生态的管理带来便利。 加密数字货币试图利用数字技术实现货币功能,强调经济价值,与计算机系统中的原有功能没有必然联系。

分布式系统核心技术一致性问题

一致性问题是分布式领域最基础、最重要的问题,也是半个世纪以来的研究热点。

随着业务场景越来越复杂,计算规模越来越大比特币的理解,单点系统往往难以满足高扩展性(Scalability)和高容错(Fault-tolerance)的要求。 这时候就需要多台服务器组成集群,构建一个更强大、更稳定的“虚拟超级服务器”。 工作量越大,处理集群的规模越大,设计和管理的难度就越大。 谷歌全球搜索集群系统,包括数十万台服务器,每天响应数百亿次互联网搜索请求。

在集群系统中实现一致性并不是一件容易的事。 不同的节点可能处于不同的状态,在不同的时间收到不同的请求,节点可能随时发生故障。 保持对外反应的“一致性”,就像训练一群鸭子步调一致。 难度可想而知。

那么为什么一致性问题很重要呢?

举个现实生活中的例子,多个售票处同时售卖某条线路的火车票,而且这条线路有多个站点,如何保证任何一个区间都不会超售(同一个座位是卖给两个人)的情况?

这个问题似乎没有那么难。 在现实生活中,经常会采用分段、车站售票的机制。 但要支持大量用户并行购票并不容易(参考12306案例)。 尤其是计算机系统往往需要实现远远超出物理世界的高性能和高可扩展性要求,挑战会变得更大。 这也是为什么每年促销季到来的时候,各大电商平台都要提前完善自己的系统。

共识算法

共识通常与一致性一词一起讨论。 严格来说,两者的含义并不完全相同。

共识,特指分布式系统中多个节点之间就某件事(比如多个事务请求,谁先执行?)达成共识的过程。 因此,达成某种共识并不意味着一致性得到保证。

共识算法解决的是分布式系统对某个提案(Proposal)、大多数节点达成共识的过程。 提案在分布式系统中的含义非常广泛,比如多个事件发生的先后顺序、某个key对应的值、谁是主节点等。凡是可以达成一致的信息都可以认为是一个提议。

无论是在现实生活中还是在计算机世界中,都必须解决两个基本问题才能达成共识:

理论上,如果分布式系统中的每个节点都能够以非常“理想”的性能(瞬时响应、超高吞吐量)稳定运行,并且节点之间的通信是瞬时传递的(比如量子纠缠),那么共识过程就不是很满意的。 困难,只需通过广播进行即时投票和回答。 不幸的是,这样一个“理想”的系统在现实中并不存在。 不同节点之间的通信存在延迟(光速的物理限制,通信处理延迟),任何一个链路都可能出现故障(系统规模越大,故障的可能性越高)。

例如,通信网络会中断,节点会失效,甚至被入侵的节点会故意伪造消息,破坏正常的共识过程。 一般来说,出现故障(Crash或Fail-stop,即没有响应)但没有信息被篡改的情况称为“Non-Byzantine Fault”或“Crash Fault”; 伪造信息被恶意响应的情况称为“拜占庭故障”(Byzantine Fault),对应的节点为拜占庭节点。 显然,在后一种情况下,因为“闹事者”的存在,更难达成共识。

此外,任何处理都是有成本的,共识也是如此。 当存在一定的信任前提(如经过验证的接入节点、节点性能稳定、安全性高)时,相对容易达成共识,共识性能也高; 相反,在不受信任的场景下很难达成共识。 付出很大的代价(如时间、经济、安全等),性能往往很差(如工作量证明算法)。

通用算法

根据解决的场景是否允许拜占庭故障,共识算法可以分为崩溃容错(CFT)和拜占庭容错(BFT)。

对于非拜占庭错误的情况,已经有很多经典算法,包括Paxos(1990)、Raft(2014)及其变体。 这种容错算法往往性能更好,处理速度更快,容忍的故障节点不超过一半。

对于必须容忍拜占庭错误的情况,它包括以PBFT(Practical Byzantine Fault Tolerance,1999)为代表的确定性系列算法,以及以PoW(1997)为代表的概率算法。确定性算法一旦达成共识,就是不可逆,即共识是最终结果; 而概率算法的共识结果是暂时的,随着时间的推移

或者某种强化,共识结果被推翻的概率越来越小,最后成为事实结果。 拜占庭式的容错算法往往性能较差,容忍的故障节点不超过 1/3。

此外,最近提出的改进算法如 XFT(Cross Fault Tolerance,2015)可以提供类似 CFT 的处理响应速度,并且可以在大多数节点正常工作时提供 BFT 保证。 Algorand算法(2017)在PBFT的基础上进行了改进,通过引入可验证的随机函数解决了提案选择问题。 理论上,它可以在容忍拜占庭错误的前提下获得更好的性能(1000+ TPS)。

理论证明告诉我们,即使在可靠网络通信的情况下,可扩展分布式系统共识问题的一般解的下限是——无下限(无解)。 这个结论被称为“FLP不可能原理(在网络可靠但允许节点故障(即使只有一个)的最小异步模型系统中,不存在可以解决一致性问题的确定性共识算法)”。 这个原理极其重要,可以看作是分布式领域的“不确定性原理”。