主页 > imtoken钱包app > 身价百亿的中本聪是如何创造“创世块”的?

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

imtoken钱包app 2023-11-19 05:11:37

点击上方“CSDN”,选择“知顶公众号”

关键时刻,第一时间发货!

随着比特币越来越被主流认可和接受比特币创世地址查询,其底层安全模型也作为“挖矿”进入聚光灯下,并受到越来越多的审查。

人们越来越担心比特币挖矿对环境的影响、底层模型的去中心化安全性,甚至量子计算可能对比特币和其他加密货币产生的影响。

在许多情况下,工作量证明被称为“密码谜题”,但这个谜题到底是什么?

为了真正理解这些问题(以及许多可能的答案),您需要了解有关比特币挖矿及其演变过程的一些基础知识。

本文将介绍工作量证明的所有技术组成部分和工作原理,以及它们如何协同工作以创建当今比特币的去中心化平台。

以太坊地址比特币地址_比特币创世地址查询_比特币转错到比特币现金地址了

▌为什么挖矿可行:单向加密哈希

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

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

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

确定性 - 加密哈希函数将始终为任何给定输入提供相同的输出。

高速 - 对于任何输入,计算哈希函数都比较快(不需要大量繁重的计算)。

唯一 - 函数的每个输入都会产生唯一且完全随机的输出(换句话说,没有两个输入会产生相同的输出)。

不可逆——给定哈希函数的输出,无法推导出原始输入。

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

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

SHA-256 函数的输出通常称为其输入的哈希值。

比特币转错到比特币现金地址了_以太坊地址比特币地址_比特币创世地址查询

比特币转错到比特币现金地址了_以太坊地址比特币地址_比特币创世地址查询

哈希函数的输入产生唯一的输出

下面是一个 SHA-256 函数的输入和输出示例(这里()自己试试):

Input to SHA-256:

Output to SHA-256:
77077b1f4c3ad44c83dc0bdb8d937e9b71c0ef07a35c2664bb7da85be738eacf

有趣的是,在比特币协议中,凡是使用hash的地方,都使用了double hash。 即,将SHA-256函数的原始输出放回到SHA-256函数中,得到另一个输出。 过程如下:

Input to SHA-256(first round):

Output (first round):
77077b1f4c3ad44c83dc0bdb8d937e9b71c0ef07a35c2664bb7da85be738eacf
Input to SHA-256 (second round):
77077b1f4c3ad44c83dc0bdb8d937e9b71c0ef07a35c2664bb7da85be738eacf
Output (second round and final result):
3c6c55b0e4b607b672b50f04e028a6951aed6dc97b91e103fb0f348c3f1dfa00

双哈希可以用来防止生日攻击。 生日攻击是指攻击者使用完全不同的输入生成相同的哈希值(称为碰撞)。 这会破坏上面的第三个属性:唯一性。 如果没有唯一性,两个完全不同的比特币区块可能由完全相同的哈希值表示,因此攻击者可能会替换该区块。

使用 SHA-256 函数,几乎不可能发生这种攻击。 否则,可以认为 SHA-256 已损坏。

但是,其他哈希函数之前已被破坏。 为了防止以后SHA-256被攻破(以至于比特币的安全模型也被攻破)比特币创世地址查询,最好重新哈希一下hash。 这样可以将冲突的概率降低一半,使协议更加安全。

简单地说,比特币挖矿就是将所有比特币交易发送给比特币矿工的过程。 矿工选择一兆字节的交易,将它们打包为 SHA-256 函数的输入,并尝试找到网络可以接受的输出。 第一个找到合格输出的矿工会将区块发布到网络,并以交易费或新比特币的形式获得小额奖励。

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

▌比特币挖矿:技术介绍

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

在深入了解技术细节之前,重要的是要了解为什么 Web 需要变得更加安全。 现在也存在法定货币(即银行发行的货币)。 由于比特币基于稳固的去中心化和共识算法,因此网络中没有中央机构来验证每种货币以及与该货币相关的所有交易。

中本聪提出,目前解决这个验证问题的唯一途径就是通过共识系统。 在比特币白皮书中称为“工作量证明”,这种算法让愿意验证的人通过真实的算力和时间来判断交易的真实性,同时也引入了激励机制来促进市场竞争。 这种竞争机制使得去中心化特性与生态系统有机结合。

▌区块内部结构

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

1.交易以merkle树的形式保存

比特币创世地址查询_以太坊地址比特币地址_比特币转错到比特币现金地址了

挖矿计算机收集足够的交易来填充一个块,然后将其打包成默克尔树。

默克尔树的概念很简单:交易位于树的底部,作为叶子,使用 SHA-256 函数进行哈希处理。 两个叶节点的交易一起通过SHA-256函数,形成一个父节点。 父节点继续与其他父节点组合,直到生成单个根节点。 根节点的哈希可以唯一代表后面所有的交易。

比特币创世地址查询_以太坊地址比特币地址_比特币转错到比特币现金地址了

默克尔树创建方式的可视化表示——最底部的叶节点是交易

默克尔树的根节点是所有交易的哈希值的组合。

回想一下,哈希函数为任何输入提供完全唯一的输出。 因此,当网络上的大多数节点都收到了一个被挖出的区块时,这个区块的默克尔树的根节点的哈希值就成为了这个区块中所有交易的一个不可变的总结。

如果恶意用户想要更改区块中的交易内容,交易哈希就会发生变化。 此更改将向上传播交易的 merkle 树,从而导致根节点的哈希发生更改。 这样,任何节点只需要比对变更区块的默克尔树的根节点,就可以快速发现这种恶意行为。

2.区块头

区块头是区块内容本身的总结。 它包含以下六个部分:

别忘了,默克尔树的根节点是区块中所有交易的汇总,所以没必要去查看每笔交易的内容。

前一个块的哈希允许网络按时间顺序对块进行排序。 这就是区块链这个词的来源——每个区块都连接到前一个区块。

Nonce和target是挖矿的关键。 它们是矿工解决 SHA-256 难题所需要的。

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

▌详细解释挖矿问题

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

回想一下,SHA-256 的输出只不过是一个数字。 矿工的目的是计算当前区块头的哈希值和一个随机数(称为随机数)。 hash 的数值必须小于目标值。

这就是采矿的意义所在。 但它实际上比这更复杂。

回想一下 SHA-256 的第一个属性:相同的输入将始终产生相同的输出。 于是,矿工计算出区块头的哈希值,发现哈希值大于目标,他就可以通过某种方式改变输入,找到另一个小于目标的哈希值。

比特币转错到比特币现金地址了_以太坊地址比特币地址_比特币创世地址查询

这需要随机数。

矿工在区块头中添加一个从零开始的数字,称为随机数,然后计算它的哈希值。 如果哈希值不小于目标值,矿工会将随机数加一,放入区块头,然后计算改变后的哈希值。 重复这个过程,直到找到一个小于目标的哈希值。

挖矿实例

下面的例子简单模拟了第一个区块头的生成过程。

Merkle Root:
4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

Target:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

最终的区块头如下:

比特币创世地址查询_比特币转错到比特币现金地址了_以太坊地址比特币地址

创世块数据(此数据包含随机数,但我们假设它不包含随机数),来源:bitcointalk()

让我们计算这个区块头的双哈希值:

SHA-256 of header:
7d80bd12dfdccbdde2c41c9f406edfc05afb3320f5affc4f510b05a3394e1c91

SHA-256 of the previous result (final result):
c5aa3150f61b752c8fb39525f911981e2f9982c8b9bc907c73914585ad2ef12b

如果转换为十进制,目标和输出哈希是非常大的数字(超过 67 位)。 所以这里不再演示如何比较亮度的大小,而是直接交给下面的Python函数进行判断:

def isBlockHashLessThanTarget(blockHash, target):
    return int(blockHash, 16) < int(target, 16)

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

下面是比较结果:

比特币转错到比特币现金地址了_比特币创世地址查询_以太坊地址比特币地址

然后我们将原始的十六进制块头值加一。 这是结果:

比特币转错到比特币现金地址了_比特币创世地址查询_以太坊地址比特币地址

比特币转错到比特币现金地址了_以太坊地址比特币地址_比特币创世地址查询

注意最后一位增加了1,这是nonce加1造成的

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

一旦找到匹配的哈希,最后使用的 nonce 值将保存到块中。

创世块的 nonce 值为 2,083,236,893。

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

自己写了一个Python程序来实现创世块的挖矿过程,分享到GitHub上:

警告:extraNonce

块头中的随机数存储为 32 位整数。 也就是说nonce的最大值为232(约40亿)。 40亿次重复后,nonce用完了,如果还没有找到解决方案,矿工就无事可做了。

解决方案是在coinbase中添加一个名为extraNonce的字段(即区块的交易内容,存储为merkle树)。 该字段的大小仅受块本身大小的限制,因此它可以存储任意大的数字,最大为协议限制的块大小。

如果nonce的40亿个可能值都用完了,extraNonce自增,放入coinbase。 于是新生成一个merkle树的根节点,生成新的区块头,然后重新计算一遍nonce。 重复这个过程,直到找到合适的散列。

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

矿工奖励

最快成功发布区块的矿工将获得凭空创造的新比特币。 当前奖励为 12.5BTC。 那么这些比特币是如何产生的呢?

每个矿工只需在区块中添加一个新交易,在开始挖矿之前给自己 12.5 个比特币。 当收到一个有效的块时,网络接受这个特定的交易。 此交易称为生成交易。

矿工有责任在挖掘之前将此交易添加到区块中。 之前有发生过矿工忘记添加这个奖励,导致12.5 BTC消失!

▌工作证明的验证

我们假设矿工找到了一个小于目标的哈希值。 矿工所要做的就是将这个块发送到所有连接的节点。

比特币转错到比特币现金地址了_以太坊地址比特币地址_比特币创世地址查询

收到区块的节点首先会验证交易,确保所有交易都是合法的(例如,所有交易必须有正确的签名,里面的货币没有被双花或凭空创造)。

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

可以看出,新发布的区块可以很容易地被任何节点验证。 然而,向网络发布一个区块需要难以想象的大量计算能力(即电力和时间)。 这种不对称性使网络更加安全,同时允许任何希望参与经济的人轻松参与。

▌出块时间和目标调整

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

假设网络每 10 分钟产生一个新块是合理的,因为在给定网络哈希率的情况下,找到一个块的概率是已知的。

例如,考虑比特币中最简单的目标:创世块。 任何哈希小于目标的概率是 1/232。 大约是 40 亿分之一。 因此,我们可以认为大约需要重复 232 次才能找到合适的哈希值。 网络上的所有节点每 10 分钟执行 40 亿次计算。

如果在多个区块中,区块出现的速度小于 10 分钟,则意味着网络进行 40 亿次计算的时间小于 10 分钟。 在这种情况下,每个节点都必须调整自己的目标值,根据网络计算能力增加(或减少)该值,以确保其持续生成区块 10 分钟。

实际上,网络中的节点监控 2016 个区块的时间,这是恰好两周内产生的区块数。 每两次上涨,将总出块时间与预期出块时间(预期值为 20160 分钟)进行比较。

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

比特币创世地址查询_以太坊地址比特币地址_比特币转错到比特币现金地址了

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

出块时间和相对容易的概率计算方式让节点可以很容易地监控和判断网络的整体计算能力,并对网络做出调整。 无论网络算力增加多少,增加多少块,平均而言,出块时间永远是10分钟。

当前网络的整体哈希率为每秒 28.27 exahash。 也就是说,全网所有计算机每秒可以进行28.27×1018次哈希计算。

以太坊地址比特币地址_比特币转错到比特币现金地址了_比特币创世地址查询

▌总结

我们详细说明如下:

您现在应该能够理解和解释工作量证明是如何工作的,以及为什么它是一种用于去中心化和共识的安全算法!

原版的: