当前位置:首页 > 财经

Nonce 身价百亿的中本聪是如何打造出“创世区块”的?

随着比特币逐渐被主流认可和接受,其基本安全模式以“挖掘”的形象出现在聚光灯下,需要越来越多的审视。

人们越来越担心比特币挖掘对环境的影响,底层模型的分散安全性,甚至量子计算对比特币等加密货币可能产生的影响。

很多情况下,工作量证明被称为“加密难题”,但这个难题是什么呢?

要真正理解这些问题(以及很多可能的答案),你需要了解一些比特币挖掘及其演化的基础知识。

本文将介绍工作负载证明的所有技术组件和工作原理,以及它们是如何一起工作来创建当今比特币的分散平台的。

▌为什么挖掘可行:单向加密散列

比特币区块链通常被描述为一个加密的、安全的、不可修改的数据库。实现这种不变性和安全性的底层技术称为加密哈希。

加密散列函数是一个数学函数。简单来说,它接受任何输入,并将其映射为固定长度的字符串。

然而,这些功能有四个特点,这使得它们对比特币网络极其有用。这些特征是:

决定性——加密 hash 函数对于任何给定的输入永远都会给出相同的输出。高速——对于任何输入,计算 hash 函数相对很快(不需要大量繁重的计算)。唯一——函数的每个输入都会导致唯一而且完全随机的输出(换句话说,没有两个输入会产生同样的输出)。不可逆——给出 hash 函数的输出,无法推断出原始输入。

这些特点为比特币挖掘提供了安全的技术保障。

具体来说,比特币的创始人中本聪采用SHA-256哈希函数作为比特币挖掘的基础。这种加密的散列函数在数学上具有上述四个特点。它的输出始终是一个256位的数字(bit是最基本的计算单位),为了方便人类阅读,通常表示为64个字符的十六进制数。

SHA-256函数的输出通常称为其输入的散列。

散列函数的输入产生唯一的输出

下面是SHA-256函数的输入输出示例(这里(http://www.xorbin.com/tools/sha256-hash-calculator)可以自己试试):

输入到SHA-256:

& lt比特币交易& gt

输出到SHA-256:

77077 B1 F4 C3 ad 44 c 83 DC 0 BDB 8d 937 e 9 b 71 c 0 ef 07 a 35 c 2664 bb 7 da 85 be 738 eacf

有趣的是,在比特币协议中,只要使用哈希,就使用双哈希。也就是说,SHA-256函数的原始输出将被放回SHA-256函数以获得另一个输出。流程如下:

对SHA -256的投入(第一轮):

& lt比特币交易& gt

产出(第一轮):

77077 B1 F4 C3 ad 44 c 83 DC 0 BDB 8d 937 e 9 b 71 c 0 ef 07 a 35 c 2664 bb 7 da 85 be 738 eacf

对SHA -256的投入(第二轮):

77077 B1 F4 C3 ad 44 c 83 DC 0 BDB 8d 937 e 9 b 71 c 0 ef 07 a 35 c 2664 bb 7 da 85 be 738 eacf

输出(第二轮和最终结果):

3c 6 c 55 b 0 E4 b 607 b 672 b 50 f 04 e 028 a 6951 aed 6 DC 97 b 91 e 103 FB 0 f 348 C3 f1 DFA 00

双哈希可以用来防止生日攻击。生日攻击是指攻击者使用完全不同的输入生成相同的哈希(称为冲突)。这就打破了上面提到的第三个特点:独特性。如果没有唯一性,两个完全不同的比特币块可能会表示为相同的哈希,这样攻击者就可以替换这些块。

有了SHA-256函数,这种攻击几乎不可能被执行。否则,可以认为SHA-256被攻破了。

然而,其他散列函数以前也曾被攻破过。为了防止以后SHA-256被攻破(所以比特币的安全模式也被攻破),最好是把散列再散列一次。这样可以将碰撞的概率降低一半,使协议更加安全。

简单来说,比特币挖掘就是把所有的比特币交易发送给比特币矿工的过程。矿工选择一兆字节的事务,打包作为SHA-256函数的输入,然后尝试找到一个网络可以接受的输出。第一个找到合格输出的矿工将在网络上发布该区块,并以交易费或新比特币的形式获得一点奖励。

让我们仔细看看比特币区块链的原理,看看矿工们是如何保证网络安全的。

▌比特币挖掘:技术介绍

为了解决双花问题,引入了采矿法。如果我有一个比特币并发送给Bob,然后我尝试将同一个比特币发送给Alice,那么比特币网络可以保证只有一个交易成功。这是通过众所周知的采矿过程实现的。

在讨论技术细节之前,理解为什么网络需要更安全是很重要的。还有法定货币(即银行发行的货币)。因为比特币是建立在坚实的分权和共识算法基础上的,所以网络中没有中央权威机构来验证每种货币以及与该货币相关的所有交易。

中本聪指出,目前解决这一核查问题的唯一途径是通过协商一致制度。这种算法在比特币白皮书中被称为“工作量证明”,可以让愿意验证的人通过真实的计算能力和时间来判断交易的真实性,同时也引入了促进市场竞争的激励措施。这种竞争机制将分权与生态系统有机结合。

块的内部结构

比特币块主要由两部分组成:

1.事务以merkle树的形式保存

采矿计算机收集足够的事务来填充一个块,然后将这些块打包到merkle树中。

merkle树的概念很简单:事务位于树的底部,作为叶子,哈希由SHA-256函数生成。两个叶节点的事务一起通过SHA-256函数形成一个父节点。父节点继续与其他父节点组合,直到生成单个根节点。根节点的散列可以唯一地表示下面的所有事务。

想象一下merkle树是如何创建的——底部的叶子节点是事务

merkle树的根节点是所有事务的散列的组合。

回想一下,散列函数为任何输入提供了完全唯一的输出。因此,当网络上的大多数节点接收到一个挖好的块时,这个块的merkle树的根节点散列就成为这个块中所有事务的不可改变的汇总。

如果恶意用户想要改变某个块中的事务内容,事务哈希就会改变。此更改将向上传递到事务的merkle树,这将导致根节点的哈希发生更改。这样,任何一个节点只需要比较变化块的merkle树根节点,就可以快速发现这种恶意行为。

2.块标题

块标题是块内容本身的摘要。它由以下六个部分组成:

比特币客户端软件的版本区块的时间戳它包含的所有交易的merkle树的根节点上一个区块的hash一个nonce值target

请记住,merkle树的根节点是块中所有事务的汇总,因此不需要检查每个事务的内容。

前一个块的散列允许网络按时间顺序对块进行排序。这就是“区块链”这个词的来源——每个区块都与前一个区块相连。

随机数和目标是挖掘的关键。他们是矿工们需要解决SHA-256难题。

块头中的所有这些数据都以小端字节的方式压缩到80字节,使得节点之间的块传输更加高效。为了便于解释,我们将忽略这种压缩,并假设所有数据都以其原始形式出现。

▌详细解释了采矿问题

存储在块标题中的目标是以比特存储的数字。在十进制记数法中,目标值介于0和大约2224(一个67位数)之间,这取决于有多少矿工同时竞争同一个问题。

回想一下,SHA-256的产出只是一个数字。挖掘器的目的是计算当前块头和随机数(称为随机数)的散列。哈希值必须小于目标值。

这都是为了采矿。但实际上要复杂得多。

回想一下SHA-256的第一个特点:同样的投入将永远产生同样的产出。因此,矿工计算块头的哈希值,然后发现哈希值大于目标,所以他可以以某种方式改变输入,以找到另一个小于目标的哈希值。

那是使用随机数的地方。

矿工将向块头添加一个从零开始的数字,称为随机数,然后计算其哈希值。如果哈希值不小于目标值,挖掘器会在nonce上加一,放在块头,然后计算改变后的哈希值。重复此过程,直到找到小于目标的哈希值。

采矿实例

以下示例简单模拟了第一个块头的生成过程。

创世区块中的交易的 merkle 树:

MerkleRoot:

4a 5e 1 E4 baab 89 F3 a 32518 a 88 c 31 BC 87 f 618 f 76673 e2cc 77 ab 2127 b 7 afdeda 33 b

第一个已知的比特币版本:0.1.0区块创建时间:2009-01-03 18:15:05target(这也是最大的 target):

目标:

0x 00000000 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

没有前一个区块的 hash,因为这是第一个区块。

最后的块标题如下:

创世块的数据(该数据包含随机数,但我们假设它不包含随机数),来源:BitCointalk(https://bitcointalk.org/index.php?topic=52706)

让我们计算这个块头的双重散列:

SHA -256ofheader:

7d 80 BD 12 dfdcbdde 2 c 41 c 9 f 406 edfc 05 AFB 3320 F5 aff C4 f 510 b 05 a 3394 E1 c 91

SHA-256先前结果(最终结果):

C5 aa 3150 f 61 b 752 c8 FB 39525 f 911981 e 2 f 9982 c8 B9 BC 907 c 73914585 ad 2 ef 12b

当转换为十进制时,目标和输出哈希都是非常大的数字(超过67位)。因此,我们不再演示如何比较光线的大小,而是直接交给下面的Python函数来判断:

定义块哈希无目标(块哈希,目标):

returnint(blockHash,16)& lt;int(目标,16)

如果hash小于target,则该函数返回true,否则返回false。

以下是比较结果:

然后我们在原始十六进制块头的值上加一。结果如下:

请注意,最后一位数字增加1,这是由随机数加1引起的

运行相同的哈希算法并比较数据。如果仍大于目标值,重复该过程。

一旦找到一个合格的散列,最后使用的随机数将保存在块中。

创世块的随机数值为2,083,236,893。

这意味着中本聪在找到合适的散列值之前,重复了这个过程超过20亿次。

我写了一个Python程序来实现创建块的挖掘过程,并在GitHub:http://github.com/subhan-nadeem/bitcoin-mining-python上分享了它

警告:意外

块头中的随机数存储为32位整数。也就是说,随机数的最大值是232(约40亿)。重复40亿次后,随机数用完了,矿工们别无选择,只能寻找解决办法。

解决方法是在coinbase中添加一个名为extraNonce的字段(即block的事务内容,存储为merkle树)。该字段的大小仅受块本身大小的限制,因此它可以存储与协议限制的块大小一样大的任何数字。

如果随机数的所有40亿个可能值都用完了,extraNonce将被添加并放入硬币库。因此,将生成merkle树的新根节点,从而生成新的块头,然后再次计算随机数。重复此过程,直到找到合适的哈希。

在extraNonce用完之前避免使用extraNonce,因为每次更改extra nonce都会更改merkle树,这将导致计算merkle树中的所有节点来生成新的merkle树根节点。

矿工的报酬

尽快成功发布区块的矿工将获得一枚新的比特币,由空创建。现在的奖励是12.5BTC,那么这些比特币是怎么产生的呢?

每个矿工只需要在区块上增加一笔新的交易,给自己12.5个比特币就可以采矿了。当收到有效的数据块时,网络将接受这一特殊事务。这个事务被称为生成事务。

挖掘者负责在挖掘前将此事务添加到块中。偏偏之前矿工忘了加这个奖金,让12.5BTC化为乌有!

工作量证明的▌验证

让我们假设矿工找到一个比目标小的散列。矿工要做的就是把这个块发给所有联网的节点。

接收块的节点将首先验证事务,以确保所有事务都是合法的(例如,所有事务都必须有正确的签名,并且里面的货币不是由空加倍或创建的)。

然后,节点将对块头进行双重散列,并确保该值小于块中包含的目标值。一旦块被验证为合法,新节点将继续将块传播到网络,直到所有节点都有最新的账簿。

可以看出,新发布的块很容易被任何节点验证。然而,向网络发布一个块需要难以想象的计算能力(即功率和时间)。这种不对称使得网络更加安全,让任何想参与经济活动的人都能轻松参与。

区块时间和目标的▌调整

当第一个矿工开始挖掘时,每个人都会监控封锁时间。每个比特币区块的区块时间为10分钟。也就是说,对于网络上特定的计算能力(网络散列率),每10分钟就会产生一个新的块。

可以合理地认为网络中每10分钟就会产生一个新的块,因为给定网络的散列率,找到一个块的概率是已知的。

比如考虑比特币中最容易的目标:创造块。任何散列小于目标的概率是1/232。大约是四十亿分之一。因此,我们可以认为找到一个合适的散列需要大约232次重复。网络上的所有节点每10分钟将执行40亿次计算。

如果该块在多个块中出现不到10分钟,则意味着网络计算40亿次的时间不到10分钟。在这种情况下,每个节点都应该调整其目标值,并根据网络计算能力增加(或减少)该值,以确保生成10分钟的块。

实际上,网络中的节点将监控2016个块的时间,这是在整整两周内生成的块的数量。每两次,总阻塞时间将与预期阻塞时间进行比较(预期值为20160分钟)。

要计算新目标,只需将现有目标乘以过去两周的实际阻止时间和预期阻止时间之比。这样就可以根据网络计算能力的变化来调整目标。

计算新目标值的公式,每个比特币节点将每20160分钟运行一次

阻塞时间和相对容易的概率计算使得节点可以容易地监控和确定网络的整体计算能力并调整网络。无论增加多少网络计算能力,或者增加多少块,平均来说,块时间总是10分钟。

当前网络的总哈希速率为每秒28.27艾哈希。也就是说,全网所有计算机每秒可以运行28.27 x 1018次哈希计算。

综上

我们详细介绍了以下内容:

为什么加密的单向 hash 对工作量证明很重要;比特币区块的结构;实际的挖矿过程;节点怎样容易地验证其他区块;网络怎样通过监视区块时间并调整target来管理算法和竞争

现在,您应该能够理解和解释工作量证明是如何工作的,以及为什么它是一个安全的算法来确保分散和一致。

原文:https://medium . freecodecamp . org/how-bitcoin-mining-true-works-38563 EC 38 c 87

译者:月亮月亮,编辑:涂敏

要求文件!

1.《Nonce 身价百亿的中本聪是如何打造出“创世区块”的?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《Nonce 身价百亿的中本聪是如何打造出“创世区块”的?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1012092.html

上一篇

婴儿泳池溺水获救家长索赔150万 这意味着什么?

下一篇

云浮地图 在广东人眼里的广东地图是什么,云浮人一定不知道!

百度预测世界杯 百度区块链“度宇宙”APP发布:推世界杯竞猜功能

  • 百度预测世界杯 百度区块链“度宇宙”APP发布:推世界杯竞猜功能
  • 百度预测世界杯 百度区块链“度宇宙”APP发布:推世界杯竞猜功能
  • 百度预测世界杯 百度区块链“度宇宙”APP发布:推世界杯竞猜功能

函数概念 1.1函数的概念(视频)

蔡高亭,天津大学数学系教授。他是《蔡高亭高等数学》的作者。他在学生中享有很高的声望。在视频教学中,蔡细致的讲解和认真负责的态度打动了学生。蔡高亭高等数学的视频和教学软件可以在线下载。 平台人多,问题太多。我一个人应付不了。我非常抱歉...

小颖 师说|许小颖:透过微信群接龙了解区块链

小颖 师说|许小颖:透过微信群接龙了解区块链

老师,传教士,老师,也。 老师说,浓缩了老师10分钟智慧课程的精髓。 2018年,华南理工大学MBA推出第一季“老师的话”系列微课,老师们简单、简洁、凝练的讲解,让短而不简单的课程处处闪耀着智慧的光芒。 半年后,《世说》第二季开播。汇聚工商管理学院众多名师,涵盖管理知识核心模块,10分钟讲解...

大连体育老师设计核酸检测函数表 竟如此厉害

大连体育老师设计核酸检测函数表 竟如此厉害

近日,辽宁省大连市红旗中心小学的一位体育老师和学校其他老师一起设计了一个核酸检测功能表,不仅可以在输入身份证号码后自动计算出考生的年龄和性别,还可以实现手机、电脑等多人同时录入。早在7月22日,辽宁省大连市就出现了新冠肺炎肺炎确诊病例。然后,大连开始了全市的核酸检测工作,学校操场成为检测场所之一。大连市体育教...

张瑞东 浙大张瑞东:支持区块链创新并不代表会从国家层面推出数字货币

据财经报道,浙江大学互联网金融研究所区块链研究室主任张瑞东近日在接受采访时表示,通过全面观察支持区块链创新的国家,可以发现它们都在一定程度上缺乏自然资源,区块链可能成为科技浪潮的前沿力量,这自然成为它们关注的焦点。然而,这并不意味着他们将从国家层面引入数字现金。从过去的经验来看,政府最大限度...

lookup和vlookup的区别 lookup函数是神一样的存在,2招轻松完胜vlookup!

  • lookup和vlookup的区别 lookup函数是神一样的存在,2招轻松完胜vlookup!
  • lookup和vlookup的区别 lookup函数是神一样的存在,2招轻松完胜vlookup!
  • lookup和vlookup的区别 lookup函数是神一样的存在,2招轻松完胜vlookup!
lookup与vlookup区别 lookup函数是神一样的存在,2招轻松完胜vlookup!

lookup与vlookup区别 lookup函数是神一样的存在,2招轻松完胜vlookup!

很多和EXCEL打交道的人都知道vlookup函数的威力,却不知道它类似的查找函数。 其实LOOKUP函数运算速度很快,很受EXCEL函数爱好者的喜欢,LOOKUP在日常实际工作中应用广泛,尤其是在数组公式和内存数组中。 今天用肖薪学习查找功能,给你的数据搜索工具再加一个得力助手! 首先,介...

于佳宁 于佳宁跨年演讲 | 吃货大陆洪七公:区块链让你吃得更好一点

  • 于佳宁 于佳宁跨年演讲 | 吃货大陆洪七公:区块链让你吃得更好一点
  • 于佳宁 于佳宁跨年演讲 | 吃货大陆洪七公:区块链让你吃得更好一点
  • 于佳宁 于佳宁跨年演讲 | 吃货大陆洪七公:区块链让你吃得更好一点