主页 > imtoken官方下载2.9.8 > 区块链100讲:10分钟带你走完区块链搭建全过程

区块链100讲:10分钟带你走完区块链搭建全过程

imtoken官方下载2.9.8 2023-01-28 07:50:16

2008 年,一个叫中本聪的人(或团体)定义了第一个区块链。

2009 年 1 月,中本聪推出了区块链作为比特币的核心组成部分,比特币是网络上所有交易的公共分类账。

由于使用了区块链技术,比特币成为第一个解决双重支付问题的数字货币,不再需要第三方信任机构,并成为许多其他应用创新的技术基础。

我相信一百年后,区块链会像今天的电一样普及。 它将成为经济的一个基本部分,为每个人服务。 它也将像水一样普遍,以至于我们往往会忽视它的存在。

可以预见,未来几十年,区块链的应用和组织将会爆发式增长,就像几十年前的互联网或上世纪初的电气化一样。

如果以上都是真的,那我们就有必要对区块链有一个基本的了解,尤其是它的重要性和工作原理。

1 为什么区块链很重要

“有一句名言,很多名人都发表过演讲,虽然不太正确:我们应该养成思考行动的习惯。但文明的进步是由越来越多的不经过思考的重要操作推动的。”

——阿尔弗雷德·诺斯·怀特海(Alfred North Whitehead,现代著名数学家、哲学家和教育理论家)

以区块链中的交易为例,一方将比特币发送给另一方,比特币的来源、目的地和日期/时间戳等详细信息将添加到区块中。

由于密码学的使用,区块链大大提高了社会发展的可扩展性(social scalability),个体之间日益增加的合作正在成为文明的必要特征。

在过去的历史中,人类通常只是作为一个部落与小范围内有血缘关系的人进行交易,因为那时候人类无法信任部落之外的个体。

在过去的几千年里,各种技术创新使人类能够在更大的群体中进行合作,社会可扩展性进一步提高。

现代法律体系减少了暴力、盗窃和欺诈的可能性,允许没有预先存在关系的团体或个人进行互动。

互联网通过评级系统促进了个人之间很少或没有预先存在的社会关系的交易。

区块链有可能将社会可扩展性提高到以前技术无法达到的水平。 这是我们第一次有办法在不依赖受信任的第三方的情况下将数字资产从一个互联网用户安全地转移到另一个互联网用户。 如此伟大的交易壮举是如何成为可能的,怎么强调都不为过。

此外,汽车、房屋、股票、债券、数字货币等实物资产的数字合约、数字钥匙、数字所有权等也值得深思。

2 什么是区块链技术**

我们先来定义区块链技术:

区块链是一种分类帐,它使用密码学和激励措施以防篡改的方式记录交易。 这使得匿名方之间的信任最小化交易成为可能,而无需受信任的中介。

现在,让我们把这些知识整理一下,让你在文末对区块链技术有一个完整的认识。

原始

在我们深入研究区块链之前,需要建立一些原语。 基元类似于建筑材料。 如果你想盖房子,你需要木材、螺丝、钻头和锯子。 最好在开始构建之前充分了解每个工具。 区块链是相似的。

区块链的基本构建块是加密原语。

另一方面,密码学是研究在第三方(即敌人)存在的情况下进行安全通信的技术。

从历史上看,军方在密码学方面进行了大量研究,以确保他们能够在不允许敌人阅读他们的电报或无线电信息的情况下安全通信。

现代密码学用于网址、信用卡芯片和计算机密码。 它用于防止第三方(黑客、小偷等)窃取信用卡信息等敏感数据。

第一个基本构建块是哈希函数。

哈希函数

哈希函数是一种允许您加密数据的数学函数。

哈希函数具有三个属性:

它的输入可以是任何大小。

例如,我可以使用短语“I like ice cream”作为输入,或者我可以使用 War and Peace 的整个文本。

哈希函数的特定哈希算法决定了其固定大小的输出,而与输入大小无关。 为了使算法过于简单,我们将使用 256 位输出(这是比特币使用的)。

无论我使用短语“我喜欢冰淇淋”还是《战争与和平》的全文作为输入,都会产生相同大小的输出。

使用 SHA 256 算法,短语“I like ice cream”(不带引号)创建输出:

138F4504A873C01D0864343FAD3027F03CA9BEA2F0109005FA4FC8C7DCC12634

从古腾堡项目复制的整本书《战争与和平》(完整的 587,287 个单词)创建输出:

57027F5B3877ABBE43ACB101D59E963BC2CC0E86A6EBCCC34DFD035BBF83B096

即使输入文本长度相差 146,821 倍,您也可以获得相同大小的输出。 这很酷而且很有用。

函数的计算效率很高,对于任何给定的输入字符串,您都可以在合理的时间内获得输出。

即使我使用《战争与和平》的整篇文本作为输入,它仍然可以在相对较短的时间内将其转换为输出。

以上是一般散列函数的性质。 通用哈希函数可以让您将大量数据映射到一个小空间中,这有助于存储和处理不同类型的数据。

但是,我们应该关注加密哈希函数,因为它是区块链中使用的函数。

加密哈希函数具有三个附加属性:

加密散列函数

耐碰撞性

这里的碰撞意味着两个不同的输入产生相同的输出。 虽然输出大小相同,但输出本身不会与其他输出相同。 “I like ice cream”产生的输出与《战争与和平》的整个文本大小相同,但字符不同。

如果它们产生完全相同的输出,您将不知道我是想告诉您“我喜欢冰淇淋”,​​还是在解密我发送给您的加密文本后您是否应该阅读《战争与和平》。

值得注意的是,两个“相邻”的输入不会产生相邻的输出。 战争与和平的哈希与战争与和平的哈希完全不同,只是改变了一个字符。

使用 SHA 256,对整本《战争与和平》进行哈希处理:

57027F5B3877ABBE43ACB101D59E963BC2CC0E86A6EBCCC34DFD035BBF83B096

如果我删除最后一个句点,但保留其他所有内容,则会生成哈希:

E2E2E4FFD582E20474F0310C2132EAE5F2D766C6A253C1BC4AF57861095B30FA

这与混沌系统中两个“相邻”的起点如何很快导致两个完全不同的未来轨迹非常相似。 散列函数的这种“混乱不规则性”产生了抗碰撞性。 它的输出几乎是随机的(理论上不是随机的),因此不太可能发生碰撞。 我们还可以压缩数据,因为它可以将“无限”映射到有限空间。

此功能在汇款时尤为重要。 钱包的公钥是使用加密哈希函数从私钥生成的。 您不希望其他人能够对您的公钥进行逆向工程来计算您的私钥(因为您的钱可能会被盗)。

如果没有人能发现碰撞,则可以说哈希函数是抗碰撞的。 从理论上讲,我们知道冲突的存在是因为输入的数量是无限的,但输出的数量是有限的——排列 64 个字符的方式只有有限种。

但在实践中区块链与比特币之前的关系是,加密哈希函数 SHA 256 是抗碰撞的,因为没有人发现过碰撞,而且发生碰撞的几率是天文数字。 如果人类制造的每台计算机自宇宙诞生以来就一直试图发现碰撞,那么碰撞发生的可能性低于地球在接下来的两秒内被一颗巨大的流星毁灭的可能性。

因此,碰撞是可能的,但我们还有许多其他更重要的问题需要首先解决。

确定匿名

哈希值看起来是随机的,但实际上是确定性的。 因此,它们的输出是可重现的,只要使用相同的输入,就可以始终如一地得到相同的输出。 这意味着知道输入的两方可以通过向第三方显示他们的散列来验证另一方是否知道输入。

加密散列函数的第二个属性是隐蔽性。 晦涩意味着即使给定输出,也没有可行的方法来计算输入。

即第三方观察者无从知晓

138F4504A873C01D0864343FAD3027F03CA9BEA2F0109005FA4FC8C7DCC12634

意思是“我喜欢冰淇淋”。

但是,如果我知道输入是“我喜欢冰淇淋”,​​那么通过检查你的散列,我可以很容易地验证你是否知道输入。

但是,如果其他人看到了哈希,他们将无法使用它来计算输入。 这允许知道输入的人使用散列输出在公共渠道中安全地进行通信,而不必担心第三方观察者获得对信息的访问权限。

解谜友好度

第三个属性是密码哈希函数的解谜友好性。 这意味着,如果有人想生成一个与“我喜欢冰淇淋”具有相同输出的散列,则很难找到与此输出完全匹配的另一个值。

生成散列的算法是尝试每个可能的字符串,按长度排序,然后按字母顺序排列,直到你得到一个散列为相同值的字符串。 这无异于大海捞针,所以我们得到的概率表明,小行星消灭地球上所有生命是一个更为紧迫的问题。

另一个方面是加密哈希函数难以逆转。 与数据结构或压缩算法中使用的哈希相比,这是加密哈希的主要特征。

这也是区块链军备竞赛的一部分——黑客在逆向散列函数方面做得越来越好,因此密码学家总是必须想出更强大的散列函数。

除此之外,益智友好的特性使区块链难以篡改。 如果我想更换像“我喜欢冰淇淋”这样的物品,我不可能在其他参与者不知情的情况下做到这一点。

通过密码学哈希函数进行哈希处理后,输入的微小变化也会导致输出的显着差异,从而达到防篡改的目的。

密码哈希函数看起来是随机的(因此没有冲突)、不可逆和模糊的输入,但同时它们是完全确定的。 这就是他们工作的原因!

以上就是密码学哈希函数的基础知识,下面我们来谈谈如何使用这些哈希函数来构建区块链。

3 区块链中的传递哈希函数

上面关于散列函数的部分实际上只是详细介绍了如何散列单个信息,例如书中的单词或密码。

如果你想散列一组数据(比如一堆文档或一系列交易)怎么办?

让我们从“连续哈希的线性序列”开始。 首先从一些数据 A 开始,然后对其进行哈希处理以获得 A#。

现在你想“混入”数据 B。所以只需添加 B(A#+B) 并获得整个数据的哈希值。 现在你有了一个新的散列 (B#),其中包含一些关于 A(来自你使用的散列 A#)和 B 的信息。

您得到的是一个散列函数,它可以更改 A 或 B 中的任何内容以产生不同的最终散列值。 这是一个传递哈希函数。

当人们谈论区块链时,经常出现的词之一是“信任最小化”。

一般来说,散列,尤其是散列指针,是区块链信任最小化属性的核心组成部分。 哈希指针只是指向其他一些数据结构(例如前一个块)的哈希。

这是一个了不起的组件,因为它可以很容易地查看是否有人篡改了数据。

假设我们有一个包含 100 个区块的区块链,第十个区块包含整个《战争与和平》文本的哈希值,我更改文本中的一个字母,它将更改该区块以及该区块中所有后续的哈希指针。

哈希指针确保分类帐的完整性(即不被修改)。 区块链之所以被称为三式记账,是因为哈希指针的数据结构难以被篡改。

例如,如果两个人在一个项目上合作,一个人试图回去修理一些东西以便赚更多的钱,他们的合作伙伴会立即知道他们在作弊——他们最终会得到不同的结果。

默克尔树

现在,我们要散列的不仅仅是一个线性序列,而是一系列的集合,比如比特币在其区块序列中的交易集合。 然后需要构建的是迭代每组数据的规则,再次通过减少加密一系列连续事物(A#、B# 等)的问题。

Merkle树来了。 Merkle 树允许您对数据块进行分组并将它们散列在一起形成一个树结构。

与区块链一样,只要我们知道树“根”处的散列点,我们就可以判断树中的任何数据是否被篡改过。

如果交易中的单个位发生更改,它会更改每个后续哈希并显示篡改。

使用 Merkle 树比只使用记录所有交易的摘要更可取,因为它可以更快更容易地检查特定交易是否包含在所有交易的集合中。

区块链

上面,我们提到了哈希函数及其三个属性:抗碰撞性、确定性隐蔽性和解谜友好性。 接下来,我们将加密哈希函数连接在一起以创建传递加密哈希函数。

首先,当我们将 Merkle 树添加到传递加密哈希函数时,我们得到了一个区块链。 每个区块都包含一组“merkleized”交易,并且这些区块链接在一起。

区块链工作量证明

中本聪的伟大之处在于他制定了一个新规则:你必须先解决一个非常困难的数学问题,然后才能将一组新的交易(即一个区块)添加到现有链上。

这就是“矿工”的工作。 他们需要解决一个非常困难的数学问题,之后他们将获得相应的奖励。 这也称为“工作证明”,它是解决问题所花费的计算量的证明。

“区块链工作量证明”的发明是中本聪最伟大的创新。

由于使用工作量证明,像比特币这样的区块链变得更有价值,矿工赚更多的钱,并激励更多的矿工加入网络,这当然增加了数学问题的难度。

任何人都可以在他们的计算机上下载区块链,并不断验证每个块是否可以正确散列。

他们还可以通过读取每个区块的难度并验证矿工的解决方案来计算生成此数据所需的计算量。

具有最多累积工作量证明(即最困难和最昂贵)的区块链被认为是真正的区块链。

如果你有一个包含整个当前比特币区块链的磁盘,你可以快速估计用于构建此数据的巨大能量。

这样做的好处是,在没有达到相应算力的情况下,任何人都无法“伪造”比特币区块链

到 2018 年年中,从头开始构建比特币区块链将花费数十亿美元的计算机和电力。

数字签名(即私钥/公钥加密)

数字签名是架构区块链的最终原语。 可行的数字签名方案与手写签名非常相似,因为它们共享两个核心属性。

首先是可验证性。 如果我用我的私钥签署交易,其他人必须能够用我的公钥验证它。 同样,只有您可以签署自己的签名,但任何人都可以看到它是您签名的。

私钥和公钥匹配成一对密钥。 私钥不与他人共享,用于签署和证明交易。

公钥可以给每个人,他们不用自己签名就可以用它来验证你的签名。

您的公钥是您的私钥的哈希值。 而你的地址(比如接收比特币的地址)就是你的公钥的哈希值。

如下:

私钥==哈希==>公钥==哈希==地址

由于加密哈希函数的隐蔽性,您可以放心发布自己的地址。 别人可以给你发送比特币、以太坊等加密货币,但他们无法反向查出你的私钥。

第二个属性是不可伪造性。 您的签名与特定文档相关联。 当然,您不希望其他人能够从一个文档中“剪切”您的签名并将其粘贴到另一个文档的底部。

比特币使用椭圆曲线数字签名算法来实现这两个属性。 其他区块链和加密货币使用不同的数字签名方案,但都具有可验证性和不可伪造性的特性。

区块链就像一本书

我认为将区块链视为一本书可能是研究它的最简单方法。 一本书是一系列页面:

区块链是一系列区块:

即使你把书中的所有页都撕掉了,你仍然可以按页码重新排列它们。

同样,在区块链中,每个块都引用前一个块的哈希值,从而可以验证交易发生的顺序。

散列实际上比页码更强大,因为散列包含该页的所有数据。 并且有可能通过撕掉书中的某一页并抹掉其他相关页码来愚弄您。

然而,在区块链“书”中执行相同的操作非常困难,因为更改页面上的任何字母都会更改哈希值。

4 区块链技术的演进

现在,让我们结合这些原语,看看它们如何构建一个简单的区块链。

这些类型的区块链是比特币和以太坊等加密货币的基础。 了解它们的工作原理有助于理解所有其他区块链和加密货币。

高飞硬币

GoofyCoin 是我们能想象到的最简单的区块链。

高飞可以随时创造新的虚拟货币,这些新创造的虚拟货币都是他的。 每个硬币都有一个由高飞用私钥签名的唯一ID,这样每个人都可以使用高飞的公钥来确认该硬币是有效的GoofyCoin。

拥有 Goofycoin 的人可以通过密码操作将其转让给其他人。 如果高飞想转一个币给爱丽丝,他会创建一个交易说“把这个币(this coin)给爱丽丝”。

由于 Goofycoin 只能通过加密操作发送,“this”是指向相关虚拟货币的哈希指针。 高飞用​​他的私钥签署这笔交易,使其成为有效交易。 任何人都可以通过确认 Goofy 的签名来检查它是否是有效交易。

然而,事实上,GoofyCoin 存在安全问题,Alice 可以使用她刚刚获得的虚拟货币进行交易,比如付钱给 Bob 买一个三明治。

但是如果爱丽丝再次用它来买张策的奶昔呢?

Bob 和 Chuck 都会认为他们现在拥有了一个 GoofyCoin。 它们看起来都像是有效交易,因为查克和鲍勃可以看到爱丽丝的签名并在区块链上追踪它,并看到它是有效的钱。

这种情况被称为双花攻击。 我们当然不能容忍能够用相同的虚拟货币购买三明治和奶昔。

双花攻击是功能性加密货币需要防范的主要问题之一。

为了解决双重支出问题,我们需要创建一种新的虚拟货币,称为 ScroogeCoin。

财奴币

ScroogeCoin 类似于 GoofyCoin,但有一些不同的变化。

与 GoofyCoin 不同,Scrooge 发布了一个包含所有交易历史的区块链。

Scrooge 对区块链中每个区块的哈希指针进行签名。 然后任何人都可以通过检查块上的 Scrooge 签名来验证交易是否有效。

因为 Scrooge 会查看每一笔交易,所以他可以确保没有人重复支付。 如果 Alice 使用虚拟货币从 Bob 那里购买三明治,Scrooge 可以通过拒绝验证交易来阻止 Alice 使用虚拟货币从 Chuck 那里购买奶昔。

因为所有块都通过哈希指针链接到区块链中,Alice、Bob、Chuck 和任何其他使用 ScroogeCoin 的人都可以监控 Scrooge 是否已将数据改回。 由于 Scrooge 是区块链的控制者,他们无法阻止 Scrooge 更改数据,但他们至少被告知。

假设一年前Alice买了Bob的三明治并支付了1个ScroogeCoin,Scrooge将交易记录更改为Alice支付了10个ScroogeCoin,那么后续每个区块的哈希指针都会发生变化。 很容易知道 Scrooge 篡改了数据。 这就是我们前面提到的益智友好属性。

这样做可以促进对区块链中数据的信任。

ScroogeCoin 的工作原理是让每个人都知道哪些硬币是有效的。 只要 Scrooge 监控所有交易并拒绝双花,双花问题就不存在。 同时,区块链上的所有参与者也可以确认 Scrooge 的验证。

ScroogeCoin 的根本问题在于 Scrooge 本人。 如果 Scrooge 愿意,有几种方法可以让自己变得富有。 就像要求参与交易的每个人都为交易支付大笔小费,或者他可以自己创建一堆 ScroogeCoins,或者他可以因为无聊而停止验证交易。

简而言之,问题是中心化。 虽然 Scrooge 很高兴,但用户可能对系统不满意。 该系统与我们今天使用的中心化系统没有什么不同。

斯克罗吉:“别担心,我是诚实的。”

您可以用任意数量的其他银行名称替换“Scrooge”,Scrooge 的工作方式与现有银行系统没有什么不同。 在大多数情况下,我们相信银行或其他金融中介机构不会篡改交易,因为这些机构受国家监管并与同行竞争。 因为现有的银行系统运转良好,很多人,尤其是发达国家的人,看不到区块链的价值。

然而,现有的银行系统并非 100% 可靠。 当一个国家赚了太多钱时,就会发生恶性通货膨胀。 例子包括 1930 年代的魏玛共和国,2000 年代初期的阿根廷和津巴布韦,以及 2010 年的委内瑞拉。

以上情况相当于财奴为自己赚取了大量的财奴币。

5 区块链如何去中心化:公共区块链与私有区块链

区块链从集中式(如 ScroogeCoin)转向分散式主要有两种方式。

公共和私有区块链之间的区别在于对允许加入网络的身份的限制。

公共区块链网络是完全开放的,任何人都可以加入。 比特币和以太坊是典型的公链。

私有区块链网络需要邀请。 它限制允许参与网络或交易的身份。 MultiChain、R3 的 Corda、Hyperledger Fabric 和 Chain Core 是典型的私有区块链。

身份限制非常重要,因为它会影响去中心化的实现程度。 在 ScroogeCoin 的情况下,它遇到了同样的中心化问题,即单个受信任的第三方控制整个系统。

公共区块链由加密经济学和加密货币挖掘机制保证运行。 (即,使用经济激励、博弈论、密码学和计算机科学等技术来确保账本的一致性)。

私有区块链在其共识过程中由一组预先选定的参与者(例如,个人、公司和财团成员)控制。 例如,你可以有 15 个图书馆,每个图书馆都有写入账本的权限,每个图书馆都必须签署每个区块才能使该区块有效。

它比仅使用单一方验证所有交易的区块链更加分散。

6 按键概述

我们通过讨论为什么区块链如此重要来开始这篇文章:它允许在没有预先存在的社会关系的情况下在大量个人之间进行交易。

然后我们探索了区块链原语、加密哈希函数,它们具有三个重要属性:

然后我们介绍了如何将散列函数连接成传递散列函数。 当我们将 Merkle 树添加到传递加密哈希函数时,我们得到了一个区块链。 每个区块都包含一组“merkleized”交易,区块链接在一起。

然后我们解释了比特币使用一种称为工作量证明的技术来确保区块链的安全性。

下一步区块链与比特币之前的关系是,我们设计了Goofycoin和Scroogecoin,看看区块链技术如何进化,完美解决双重支付问题。

最后,我们谈到了私有链和公有链在去中心化机制方面的区别。

区块链仍然是一项非常年轻的技术,2009 年才问世,我们可以期待在未来几十年内出现大量区块链应用程序和网络。

已经有数以千计的不同项目致力于改进区块链技术并研究其在各个领域的应用。 相信看完本文后,您对区块链技术背后的基本要素以及区块链的工作原理也有了一个整体的了解。

最后,我认为下一代区块链技术最大的创新还未到来,但现在是学习和投资区块链技术的最佳时机。