主页 > imtoken钱包苹果版 > 比特币基础技术--区块链概述(02)

比特币基础技术--区块链概述(02)

imtoken钱包苹果版 2023-04-12 07:41:56

在上一节中,我们介绍了区块链的基本概念和实现。 在本节中,我们将关注两个问题:工作量证明和分叉。

工作量证明证明

区块链的维护由 P2P 网络上的匿名节点完成。 因此,比特币要求每个区块在创建之前都需要完成一定的工作量,基于此,网络中不可信的节点在打算修改已包含在区块链中的区块时将付出巨大的代价。 工作量成本。 与简单地将新区块添加到区块链中作为可信节点相比,不可信节点的行为成本过高,不符合经济人假设。

以“链”的方式连接区块,直接导致区块链中任何一个区块的修改,后续的所有区块都必须修改。 (因为每个区块都在区块头中保存了前一个区块的哈希值)因此,随着区块链长度的增长,修改区块的成本也会增加。 换句话说,区块链放大了工作量证明的难度。

比特币中使用的“工作量证明方法”利用了加密哈希的固有随机性。 设计良好的密码哈希函数可以将任意数据转换为“随机数”。 如果我们修改数据然后执行哈希函数,即使我们只修改了数据的一位,我们也会得到一个完全不同的“随机数”。 这确保了我们无法通过修改数据的内容来使散列结果可预测。

哈比特币区块链_比特币每个区块多少币_比特币区块高度怎么调

为了证明你已经做了足够的工作来创建一个块,你必须创建一个低于目标阈值的块头的哈希值。 例如,如果最大的哈希值是 2^256 -1,你可以证明你尝试了两种组合得到了一个低于 2^255 的哈希值。

在上面的示例中,平均而言,您的每次尝试都会生成一个新块。 我们可以估计生成低于目标阈值的哈希值的概率。 比特币假设这个概率随着目标阈值的升高或降低呈线性变化比特币区块高度怎么调,即目标阈值越低,我们生成区块的概率就越低。

只有满足难度要求(diffculty value)的哈希值才会满足一致性规则,只有这样的区块才会成功加入区块链。 在区块链中,每增加2016个区块,就会重新计算出块时间。 块生成时间,使用存储在块头中的时间戳计算。 生成 2016 个区块的理想时间是 1209600 秒(两周)。

(备注:由于计算错误,区块链每2016个区块重新计算一次难度要求,计算生成时间时只使用2015个区块)

哈比特币区块链_比特币区块高度怎么调_比特币每个区块多少币

因为在区块链中,每个区块都保存了前一个区块的哈希值,而生成的区块的哈希值必须满足难度要求。 这意味着,如果有人想修改一条已经生成的区块链,他必须拥有与生成该区块的算力相同的算力。 因此,只有当我们拥有整个比特币网络51%以上的算力时,我们才能修改生成的区块链。 这种情况称为 51% 攻击。 (当然,必须要说的是,即使算力低于50%,也有可能发起51%攻击)

块头中提供了易于修改的字段,例如专用随机数字段。 因此,生成新的哈希值不需要等待新交易的到来。 (区块的工作量证明哈希主要是Merkle Root Hash和区块头。Merkle Root的变化必须有新的交易。如果没有这个字段,在极端情况下,所有的哈希值都不一致有了计算难度要求,那么就只能等新的交易产生了,去改变Merkle Root。当然,在没有这个字段的情况下,你也可以通过改变时间戳来改变输入。但是这些方法显然可以做到不加这个字段更灵活。)同时,只有80字节的区块头会参与工作量证明算法,这意味着即使一个区块包含大量交易,这也不会导致由于 IO,散列速度变慢。

区块高度和分叉 区块高度和分叉

任何发现哈希值低于目标阈值的区块头的比特币矿工都可以将该区块添加到区块链中。 (假设该区块在其他方面有效)这些区块通常标有区块高度,即该区块与第一个比特币区块(区块 0,也称为创世区块)之间的距离。 堵塞)。 例如,2016区块是第一次进行难度要求调整的区块。

哈比特币区块链_比特币每个区块多少币_比特币区块高度怎么调

哈比特币区块链_比特币每个区块多少币_比特币区块高度怎么调

分叉图

多个区块可能具有相同的区块高度,这通常发生在多个矿工几乎同时向区块链添加区块时。 这种情况导致了区块链分叉,如上图所示。

当矿工将区块同步添加到区块链的末端时(参见 block1 的情况),其他节点独立选择接受哪些区块。 在不考虑其他条件的情况下比特币区块高度怎么调,节点通常会选择它收到的第一个块(由于网络的原因,收到的第一个块不一定是第一个创建的块)。

比特币每个区块多少币_比特币区块高度怎么调_哈比特币区块链

最终,矿工会在分叉中选择一个分叉,继续添加区块。 这导致分叉后链的持续增长,工作量证明比其他链更高。 假设分叉只包含合法区块,普通节点总是选择工作量证明最大的龙,并丢弃短链中包含的“陈旧块”(Stale Block stale block)。 称为孤立块。 但通常孤块是指无法找到其父块的块)

如果矿工持有不同的目标,长叉也是可能的。 例如,当一些矿工继续挖矿并增加区块链的长度,而其他矿工试图进行 51% 攻击时,在这种情况下,就会出现长期分叉。

因为在分叉的时候,多个区块的区块高度可能是一样的。 块高度不应用作全局唯一标识符。 区块的全局唯一标识,通常使用区块头的哈希值(通常是字节倒序,用十六进制表示)。

思考

哈比特币区块链_比特币区块高度怎么调_比特币每个区块多少币

在本节中,工作量证明是一个简单的设计。 但是区块高度设计的意义何在? 这个问题值得思考。 根据上一节,区块高度是在V2版本才加入的。 那么在V2版本中,是基于什么考虑加入的呢? 要回答这个问题,我们可以看看 BIP-30 和 BIP-34

在本节中,我还提到了一个概念,称为分叉。 我们还定性地讨论了如何在分叉后以较低的工作证明终止链。 那么在执行层面,比特币是如何处理的呢? 这个问题可能需要我们仔细阅读比特币的实现以及相关的BIP文档。

此外,我们还经常听到另一个词,硬分叉。 我们上面提到的分叉实际上是软分叉。 硬分叉的原理其实和软分叉类似。 通过修改比特币的相关实现或验证方式,导致分叉。 要成功分叉,必须保证被选中的分叉节点的总算力高于其他节点。 本质上,分叉的发生可能有很多条件,但分叉成功的唯一条件就是算力的竞争。

至此,我们从概念层面理解了区块链。 在下一节中,我将介绍事务。

有什么问题,欢迎讨论。