主页 > imtoken官网下载 > 【来龙去脉系列】什么是区块链?

【来龙去脉系列】什么是区块链?

imtoken官网下载 2023-09-07 05:13:04

2008年底,比特币之父中本聪发表了一份长达九页的白皮书,介绍了他所研究的电子现金系统。 2009 年初,中本聪在位于芬兰赫尔辛基的一台小型服务器上挖出了第一个比特币区块。 Block——创世区块,当天《泰晤士报》头版关于救助银行的新闻标题被写入创世区块,这也代表了比特币的诞生。

区块链是比特币的底层技术。 可以理解为一种公共记账机制(技术方案),并不是一个具体的产品。 其基本思想是:通过在互联网上建立一套公共账本,网络中的所有用户共同在账本上记录和核对账本,以保证信息的真实性和不可篡改。 之所以叫“区块”链,顾名思义,是因为区块链存储数据的结构是由网络上的“存储块”组成的链。 所有信息交换数据。 随着时间的推移,这条链将继续增长。

【来龙去脉系列】什么是区块链?_时间戳

图 3:区块链是一种公共分类账机制

一、区块链的特点

区块链具有去中心化、去信任化、可扩展性、匿名化、安全可靠等特点。 去中心化:由于区块链依靠各个节点共同维护系统,保证信息传输的真实性,基于数据的分布式存储,不存在某个中心的集中管理,所以某个节点不会被攻击或篡改. 影响整个网络的健康运行。 去信任:任意两个节点之间连接的建立不需要信任对方的身份,双方之间的数据交换也不需要相互信任的基础。 由于网络中的所有节点都可以扮演“监督者”的角色,因此无需担心欺诈。 可扩展性:区块链是一种底层开源技术,可以在其上实现各种扩展、去中心化、去信任化的应用。 匿名化:数据交换双方可以匿名,网络中的节点可以在不知道对方身份和个人信息的情况下交换数据。 安全可靠:由于任何节点之间的活动都受到全网的监督,数据库采用分布式存储,对于黑客来说,一来无法伪装和进行欺诈活动,二来无法仅通过征服某个节点来控制网络节点。

【来龙去脉系列】什么是区块链?_区块链_02

图 4:区块链的特点

2. 区块链的作用

下面就传统货币和比特币(数字货币)分别介绍一下区块链所起到的作用。

在传统的货币交易模式中,银行管理账户采用集中管理。 中央数据库由银行建立,每个人的银行账户信息和账户中的余额都由银行统一管理。

例如:A要转一笔钱给B,银行O需要核对对账,然后修改A和B的账户,把钱转给B。

【来龙去脉系列】什么是区块链?_数位_03

图 5:传统货币交易模型

基于区块链技术的比特币交易模型消除了银行作为中央数据库的作用。 每个比特币用户的电脑都是一个节点,每个节点都可以存储数据。 节点连接起来形成一个巨大的网络。 的网络。

例如:A向周围节点广播:我要转一个比特币给B,然后A将比特币信息发送给周围节点进行验证,周围节点确认A持有比特币的合法性。 当一定数量的节点通过验证时,交易成立,周围节点记录交易并确认比特币的新主人是B。然后周围节点广播给网络中的其他节点,直到所有节点记录交易.

(图6:基于区块链的比特币交易模型)

比特币交易通过区块链技术增强数据的真实性和不变性。 该系统依赖于网络上多个参与者的公平约束,因此每几个节点的权利和义务是平等的,每个节点将把所有数据存储在区块链上。 即使节点损坏或受到攻击,也不会对账本造成任何威胁。 同样,当一笔交易发生时,全世界的用户都可以充当监管者。 如果大家不认可交易的合法性,交易就无法完成,区块链上的数据由大家共同维护。

2. 区块链的发展与应用

一、技术演进:区块链是如何产生的

《1982

拜占庭将军问题

Leslie Lamport等人提出拜占庭将军问题,将达成共识和决定是否跨军队派兵到计算领域的过程延伸,试图建立一个容错的分布式系统,即使某些节点出现故障。 为保证系统的正常运行,基于零信任的多个节点可以达成共识,保证信息传输的一致性。 2008年出现的比特币区块链解决了这个问题。

莱特币是比特币?_比特币与数字货币技术_比特币是什么技术

David Chaum 提出密码学网络支付系统

David Chaum提出了一种注重隐私和安全的密码在线支付系统,具有不可追踪的特性,成为比特币区块链在隐私和安全方面的雏形。

《1985

椭圆曲线密码学

Neal Koblitz 和 Victor Miller 分别提出了椭圆曲线密码学(Elliptic Curve Cryptography,ECC),这是密码学中首次将椭圆曲线用于建立公钥加密算法。 与RSA算法相比,使用ECC的好处是可以用更短的密钥来达到同样的安全强度。

“1990

David Chaum根据之前的理论创建了一个不可追踪的密码在线支付系统,也就是后来的eCash,但eCash并不是一个去中心化的系统。

Leslie Lamport 提出了 Paxos,一种具有高容错性的共识算法。

“1991年

使用时间戳确保数字文件安全

Stuart Haber 和 W. Scott Stornetta 提出了一种使用时间戳来确保数字文件安全的协议。 这个概念后来被比特币区块链系统采用。

《1992

Scott Vanstone等人提出椭圆曲线数字签名算法(ECDSA)

《1997

Adam Back 发明 Hashcash 技术

Adam Back发明了Hashcash(哈希现金),这是一种工作量证明算法(Proof of Work,POW)。 该算法依靠代价函数的不可逆特性,实现了易验证难破解的特点。 用于阻止垃圾邮件。 Hashcash后来成为比特币区块链采用的关键技术之一。

Adam Back 于 2002 年正式发表了 Hashcash 论文。

《1998

Wei Dai 发布匿名去中心化电子现金系统 B-money

Wei Dai 发布了 B-money,一种匿名去中心化电子现金系统比特币是什么技术,它引入了工作量证明机制,强调点对点交易和不可更改的特性。 但是,在B-money中,并没有使用Adam Back提出的Hashcash算法。 魏戴的很多设计后来都被比特币区块链所采用。

Nick Szabo 发布 Bit Gold

Nick Szabo 发布了去中心化数字货币系统 Bit Gold,参与者可以贡献计算能力来解决加密难题。

《2005

比特币是什么技术_莱特币是比特币?_比特币与数字货币技术

可重复使用的工作量证明 (RPOW)

Hal Finney 提出了一种可重复使用的工作量证明机制(Reusable Proofs of Work,RPOW),结合 B-money 和 Adam Back 提出的 Hashcash 算法创建了一种加密货币。

“2008年

区块链 1.0:加密货币

数字货币和支付系统的去中心化

比特币

中本聪(Nakamoto)发表了一篇关于比特币的论文,描述了一种点对点的电子现金系统,可以在去信任的基础上建立去中心化的电子交易系统。

《2012

Blockchain2.0:智能资产、智能合约

市场是去中心化的,可用于股票、债券等货币以外的数字资产的流通。例如Colored Coin是基于比特币区块链的开源协议,可以在区块链上发行多种资产

“2014年

区块链 3.0:更复杂的智能合约

更复杂的智能合约,将区块链用于政府、医疗保健、科学、文化和艺术

》2016

区块链2.5:金融领域应用、数据层

Blockchain2.5:强调token(币桥)应用、分布式账本、数据层区块链、金融应用与人工智能结合

区块链 3.0:更复杂的智能合约

更复杂的智能合约,将区块链用于政府、医疗保健、科学、文化和艺术。

2. 区块链应用——比特币的发展

自2008年底首次提出以来,以比特币为代表的区块链技术和区块链应用在短短8年时间里经历了飞速发展。

【来龙去脉系列】什么是区块链?_区块链技术_04

图 7:区块链发展历程

3. 通用区块链

比特币是什么技术_比特币与数字货币技术_莱特币是比特币?

区块链未来应用空间巨大:从理论上讲比特币是什么技术,围绕区块链的开源系统可以创造出非常丰富的服务和产品,而比特币只是区块链巨大应用空间的冰山一角。

【来龙去脉系列】什么是区块链?_区块链_05

图 8:区块链的可能应用

3. 区块链五项关键技术

比特币区块链的关键核心技术包括使用Hashcash算法证明工作量,交易过程使用椭圆曲线数字签名算法保证交易安全,在每笔交易和每个区块中使用多次交易。 Hash函数和Merkle Tree,同样使用时间戳来保证区块顺序

比特币区块链的关键核心技术包括使用Hashcash算法进行工作量证明,让区块链中的每个节点都有机会参与验证实现公平,交易过程使用椭圆曲线数字签名算法为了保证交易的安全性,在每笔交易和每个区块中使用多个Hash函数和Merkle Trees,不仅可以节省存储空间,更重要的是,通过将前一个区块的Hash值添加到新区块中,让每个区块环环相扣,从而达到所谓的可追溯不可更改的特性,同时也使用时间戳来保证区块的顺序。 下面将依次对这些关键技术进行讲解。

关键技术1

采用工作量证明实现去中心化和公平

首先,最关键的机制是工作量证明(POW),它是一种让每个参与节点都参与交易验证的方式,以实现一个单一的系统,可以由多方共同维护,共享同一个账本来记录交易形成一个基于零信任的去中心化 P2P 网络体系。

工作量证明是让任何一个计算节点花费时间和计算资源来计算一组数学公式的结果,而要完成一个有效的工作量证明,需要经历一系列的尝试和失败。 但是,一旦这个值被计算出来,其他参与节点也可以使用相关的数学公式来方便地验证这个值是否有效。

比特币区块链采用Hashcash算法(hash cash algorithm)作为工作量证明,让每个节点通过POW计算产生每一个有效的新区块,然后被其他节点验证和接受。

POW计算的过程也称为挖矿。 许多人将其描述为解决数学问题或解决数独问题。 然而,如何实际计算出一个有效的新区块呢? 这些节点到底在做什么?

由于每个区块中的Block Header都会包含很多固定值,只有Nonce值是随机值,所以每个节点在进行POW计算时需要计算的就是通过不断替换Nonce值来出块。 Block Header Hash 值小于设定的难度目标值(Difficulty Target)。 至于为什么小于这个目标值,是因为这个难度值意味着理论上应该生成并完成每个块。

这里所说的难度值(Difficulty)是指节点平均需要多长时间才能计算出低于难度目标值的Hash值,即完成一个POW的平均时间。 比特币区块链目前设置为大约每 10 分钟就有节点成功计算出新的区块,但这 10 分钟只是基于理论值。 每个新区块的实际生成时间可能只需要17秒(第407062个区块的实际生成时间),也可能需要20多分钟(第407068个区块的实际生成时间)。

难度可以动态调整。 目前难度每2016个区块调整一次,每10分钟产生一次区块预估,难度大约每两周调整一次。 由于 POW 的难度,无法预测哪个计算节点能够最快计算出新区块,从而保证交易验证的公平性。

关键技术2

每笔交易均采用椭圆曲线数字签名算法加密

比特币区块链使用的是椭圆曲线数字签名算法(ECDSA),和另一种RSA算法,都属于公钥密码学(Public Key Cryptography),发明于1970年代,又称双密钥密码安全系统,每个用户都会有两把钥匙,一把公钥(Public Key)和一把私钥(Private Key),公钥可以被别人知道,而私钥则只有自己知道。 当A要向B发送消息或交易时,需要用B的公钥对交易进行加密,而这个加密后的消息或交易只能用B的私钥才能解密。

在比特币区块链中,比特币区块链采用椭圆曲线数字签名算法。 比特币区块链中的每个节点用户都将同时拥有这两个密钥和一次性密钥。 比特币地址(Address),公钥可以在区块链网络中被其他人知道,而私钥必须自己保管,可以用来接收货币、进行电子签名或发送货币,而Address就像E-邮件也可以用作访问比特币的地址。 用户可重复获取新地址,可离线生成。 但是,每个地址只能使用一次。

在比特币区块链中,每一种电子货币都被视为一系列数字签名。 当用户想要进行比特币交易时,必须将之前的交易和收款人的公钥通过Hash生成数字签名。 印章,加在电子货币数字签名串的后面。

RSA加密算法是一种非对称加密算法,它使用两个素数作为加密和解密的两个密钥。 密钥的长度约为 40 位到 1024 位。 但是,比特币使用的 ECDSA 可以计算出更短的密钥长度,即可以使用相对较少的资源来达到与 RSA 相同的安全性。 在ECDSA算法中,从私钥推算出公钥很容易,但是从公钥反推私钥就非常困难了。

关键技术3

Hashcash算法和多种Hash函数保证数据不被篡改

莱特币是比特币?_比特币是什么技术_比特币与数字货币技术

如前所述,比特币区块链使用 Hashcash 算法进行工作量证明。 Hashcash可以通过Hash函数将任意长度的数据转换成一组固定长度的编码。 其原理是基于一种密码学的单向哈希函数(One Way Hash Function),该函数易于验证,但难以破解,并返回原始值。 此前,Hashcash 算法也被用作阻止垃圾邮件的机制。

常用的单向哈希函数包括 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512。 MD5 哈希值的长度为 128 位。 虽然使用广泛,但由于长度不够,更容易开裂。 SHA-1 的哈希值长度为 160 位。 虽然它比 MD5 更好,但仍然不够安全。 因此,美国国家安全局(NSA)提出了多种更复杂的SHA-2算法,包括224、256、384和512位长度的哈希值算法。

Hashcash 最早由 Adam Back 于 1997 年提出,2002 年正式发表了一篇描述哈希现金系统的论文。比特币区块链利用 Hashcash 建立了一个几乎不可篡改的电子现金系统。 每个区块的区块头会被哈希成一串代码,这些代码很难推回并放入下一个区块中。 保证块的正确性。

关键技术4

通过Merkle Tree将大量信息缩短为一个Hash值

在比特币区块链中,每笔交易产生后,都会被哈希成一段代码,然后广播给每个节点,但这还不够,因为每个节点的区块可能包含数百到数千笔交易。 因此,为了节省存储空间,减少资源消耗,比特币区块链的设计原理采用了Merkle Tree机制,让这几百到几千笔交易的Hash值可以通过两对组成一个新的Hash值方法不断重复,直到生成最终的一组Hash值,即Merkle Tree Root。 这个最终的哈希值将被记录在块头中,块头只有 32 字节大小。 Merkle Tree机制可以大大减少数据传输量和计算资源消耗。 验证时,只需要验证Merkle Tree的Root值即可。

关键技术5

使用时间戳服务器确保块顺序

比特币使用时间戳服务器机制(Timestamp Server),为每个区块哈希加上时间戳(Timestamp)并发布。 该时间戳用于证明特定时间数据的有效性。 每个时间戳 章节会与上一个时间戳进行哈希运算,哈希值将与下一个时间戳进行哈希运算,从而形成一条用于保证区块顺序的链。

从一笔交易看区块链运行流程

在比特币区块链中,当一个节点或钱包产生一笔交易时,需要将这笔交易发送给其他节点进行验证。 其方法是对交易数据进行数字签名加密,通过哈希函数获得代表交易的唯一哈希值,然后将该哈希值广播给比特币区块链网络中的其他参与节点进行验证。

1)生成一个新的交易

当一个新的交易产生时,它会被广播到区块链网络中的其他参与节点

2)每个节点将若干笔新交易放入区块

每个节点会收集若干个未经验证的交易哈希值成块,每个区块可以包含数百或数千笔交易。

3)决定谁来验证这些交易

每个节点计算工作量证明来决定谁可以验证交易,最快计算出结果的节点将验证交易。 这是达成共识的方式。

4) 获得验证权的节点将区块广播给所有节点

最快完成 POW 的节点会将自己的区块广播给其他节点。

5)各节点验证并连接新区块

其他节点将确认该区块包含的交易是否有效,并在确认未被双花且具有有效数字签名后接受该区块。 此时区块正式接入区块链,数据不可篡改。

6)交易验证完成

一旦所有节点都接受了这个区块,之前没有完成POW工作的区块将失效,每个节点都会重新创建一个区块来继续接下来的POW计算工作。

莱特币是比特币?_比特币与数字货币技术_比特币是什么技术

4.相关开源项目

目前,我们单说区块链,指的是区块链技术,是一种实现数据公开、透明、可追溯的产品架构设计方法,广义上也算作区块链。 在具体产品中谈到区块链时,可以指代类似于比特币的数据存储方式,可能是数据库设计,也可能是文件形式的设计,狭义上算是区块链。 从广义上讲,区块链技术必须包括四个方面:点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用。 其他的可能涉及分布式存储、机器学习、VR、物联网、大数据等。狭义的区块链只涉及数据存储技术、数据库或文件操作等。本文所说的区块链是指广义的区块链。

架构图

从架构设计的角度来看,区块链可以简单分为三层,协议层、扩展层和应用层。 其中,协议层又可分为存储层和网络层,两者相互独立又密不可分。 如图所示:

【来龙去脉系列】什么是区块链?_时间戳_06

(一)C/C++

这两种语言是不可逾越的。 任何发展遇到瓶颈,基本上都会找到。 自然是先介绍一下。 同时,作为区块链技术的鼻祖,比特币(协议层)是用C++语言开发的,迄今为止,没有比比特币更成功的区块链产品。 所以,不管你用什么语言开发,在正式进入这个行业的时候,都应该先研究一下比特币。 比特币官方客户端钱包使用的Qt,第三方钱包都是用Python语言开发的,尤其是第三方编译的开发库(Api包)大多是Nodejs设计的。 比特币的架构与上述架构设计基本相同。 此外,由于共识算法采用工作量证明机制(PoW:Proof of work),因此存在一些特殊的挖矿过程。 其他山寨币都是直接从比特币衍生出来的分支,所以编程语言是一样的,具体的技术选型和技术实现可能会有所改进。 例如,莱特币使用其他加密算法。

官方网站:

源代码仓库:

(2) 节点/Javascript

Nodejs平台强大的网络编程能力,以及js脚本语言的简洁和快速,在区块链领域自然少不了。 Yishu就是这样一款区块链产品,Yishucoin是它的协议层,使用著名的express开发框架,基于http协议开发。 同时采用授权权益证明机制(DPoS),算法的改进使其在处理交易时更加轻量化,处理能力大幅提升。 提供强大的协作机制,有利于数字出版和版权保护; 它扩展了侧链功能,任何去中心化应用都可以基于它开发,从而为专业作者、博主和开发者提供了很多便利。 《Development of Cryptocurrency with Nodejs》一书完整分享了其源码。 从区块链的基本概念到代码实现,从基本原理到开发设计思路,都进行了详细的探讨。 到目前为止,从协议层面深入到代码中,讲解区块链技术实现的书籍很少,这也算一本。

官方网站:

源代码库:

(3) 蟒蛇

如果你是Python语言爱好者,我推荐研究一下以太坊(Ethereum)的Python实现。 虽然因为The Dao事件闹得沸沸扬扬,但从技术实现的角度来说还是值得借鉴的。 以太坊官方定位为开发和管理分布式应用程序的平台。 主要攻击方向是“智能合约”,并为其定制了一种编程语言Solidity。 以太坊的核心是以太坊虚拟机 (EVM),它允许用户按照自己的意愿创建操作。 以太坊提供了 Go、Java 和 Python 等多语言实现。 基于python的实现主要包括三个部分:Pyethapp是客户端部分; pyethereum为核心库,实现区块链、以太坊模拟器、挖矿等功能; pydevp2p是一个点对点的网络库,实现了节点发现、合约代码传输、加密签名等功能,这三者结合起来就是一个完整的区块链实现,后两个核心库共同构成了协议层。 另外,go-ethereum是go语言的完整实现; Ethereum(J) 是一个纯 Java 实现,它作为一个库提供,可以嵌入到任何 Java/Scala 项目中。 在客户端,有Rust、Ruby、Javascript等语言的实现。

官方网站:

源代码仓库:

(4) 去

多核时代,Go语言大行其道。 它可以让你轻松地以同步的方式实现高并发,尤其是在分布式系统和网络编程领域。 它被广泛使用。 因此,在区块链开发领域,使用Go语言的项目也不在少数。 其中,由Linux基金会牵头的HyperLeger,仓库名称为Fabric,就是其中之一。 该项目旨在为新一代交易应用程序创建一个开放的分布式账本标准,支持许可区块链(一种可能无法复制比特币强大网络效应的方法)。 Fabric的开发环境建立在VirtualBox虚拟机之上。 部署环境可以是自建网络,也可以直接部署在BlueMix上。 部署方式可docker化,支持使用Go和JavaScript开发智能合约。 它使用PBFT分布式算法,在网络编程中使用gRPC进行P2P通信,使用Protocol Buffer序列化需要传输的数据结构。 在架构设计上,Fabric 可能与比特币等区块链产品有所不同,但上述基础组件仍然不可或缺。

官方网站:

源代码仓库:

(5) C#

这么多语言,怎么能少了微软的C#呢? C#是企业级应用的首选。 凭借其最好的代码编辑器和持续的版本升级优化,它已成为开发效率最高的编程语言。 新技术无压力。

源代码库: