主页 > 最新imtoken官方下载 > 比特币开发指南-区块链

比特币开发指南-区块链

最新imtoken官方下载 2023-07-18 05:15:52

区块链

提供比特币的公共账本,由所有时间序列组成。 该系统用于防止和修改之前的交易记录,通过全球P2P网络验证确保全球一致性。

区块链概述

区块链和比特币的关系_比特币区块和比特币的区别_比特币区块难度zhi

上图显示了一个简化版本。 包含一个或多个交易的交易数据部分被收集到一个块中。 每笔交易的副本都经过哈希处理,并且在继续之前将哈希值配对。 哈希,然后配对,再哈希,直到只剩下一个哈希值,剩下的哈希值最好。

都存储在。每个还存储前一个标头的哈希值以将所有链接在一起。 这确保了交易记录不会在不修改当前和所有后续块的情况下被修改。

交易记录也链接在一起。 比特币软件只记录比特币的发送和接收,但它们确实在交易之间移动。 每笔消费都是从上一笔交易中转出的货币,所以一笔交易就是上一笔交易。

区块链和比特币的关系_比特币区块和比特币的区别_比特币区块难度zhi

单个比特币交易可以发送到不同的地址,就像您一次将比特币发送到不同的地址一样,但输出只能在区块链中使用一次。 所有后续参考资料都禁止双重支出——一种使用比特币的两次尝试。

比特币。 可以在多笔交易中使用同一个,但只能使用一次。and binding,txid是已签名交易的哈希值

由于每笔交易只能花费一次,因此其中的所有输出都可以归类为或已花费。 为了使付款有效,必须将其花费为。

一笔交易产生后,比特币不能留在里面,否则余额将永久丢失,所以输入和输出的差额就是交易手续费,这是对将交易打包进区块的矿工的奖励。例如,在上图中,每笔交易收到的金额比发出的金额少1000聪,这10000聪就是交易手续费

ProofOfWork 工作证明

通过协作维护,比特币网络在创建区块时需要一定的工作量证明,以确保想要更改历史区块的不诚实节点必须比那些只想向链中添加新区块的节点支付更多费用。 诚实节点拥有更多资源。

如果不修改后面所有的区块,就无法修改已经打包到区块中的交易,这也是将区块链接在一起的用途。 因此,修改区块的成本会随着新区块的加入而增加,工作量证明的作用也会相应增加。

比特币网络中的工作证明利用了加密哈希算法的伪随机性。 一个好的加密哈希将任意数据变成一个看似随机的数字。 如果改变了这个原始数据的任何部分,然后重新计算散列,就会产生一个完全不同的新散列结果。 所以不可能通过修改数据来预测哈希的结果。

为了证明你做了一些工作来创建一个块,你需要计算一个不大于某个值的块头的哈希值。 例如:如果这个最大哈希值是2256 − 1,你只需要证明你可以通过做两个组合来使哈希值小于2256 − 1。

在上面的示例中,您很有可能会在第一次尝试时生成成功的哈希。 您甚至可以估计达到特定阈值所需的尝试次数。 比特币本身无法控制这种可能性,只是简单地假设阈值越小,需要尝试的次数越多,平均值就是一个平均值(这是一个概率平均值)。

只有当哈希值至少达到 P2P 网络的预期难度值时,新区块才会被添加到区块链中。 比特币网络使用存储在 2016 年区块头中的时间戳的差异来计算下一轮的难度。 此差异的理想间隔是 1,209,600 秒(两周)。

• 如果2016个区块的生成时间少于两周,则预期难度将按比例增加(约300%),以便下一个区块可以恰好在两周内生成,前提是当前HASH在相同的算力下.

• 如果生产 2016 年的区块需要两周以上,那么难度也有望降低(约 75%)。

(注:比特币核心实现的一个一次性错误导致难度在2016年每个区块更新一次,因为使用了第2015个区块的时间戳,这导致了轻微的偏差。

由于每个块头的哈希值必须小于某个阈值,因此每个块也必须链接到它之前的块。 在原始块生成时间和现在之间传输修改后的块需要(一般来说)与整个比特币网络消耗的哈希功率一样多。 只有拥有全网绝大部分算力,才能有效地对交易历史实施51%攻击。

区块头提供了一些易于更改的字段,例如dedicatednoncefield,因此获取新区块的哈希不需要等待新交易的到来。 另外,只有 80 字节的区块头被计算到 POW 哈希中,因此添加更多交易信息不会因额外的 I/O 而减慢哈希计算速度。

BlockHeightAndForking 区块高度和分叉

任何成功计算出小于阈值的哈希值的矿工都可以将整个区块添加到区块链中(假设该区块有效)。 这些块标有当前块的高度——当前块与第一个块(创世块)的差值。 例如,2016 区块是第一个调整难度的区块。

区块链和比特币的关系_比特币区块和比特币的区别_比特币区块难度zhi

多个区块可以具有相同的区块高度,这在两个或多个矿工几乎同时创建一个区块时很常见。 如上图所示,区块链中存在明显的分叉。

当矿工同时在区块链末端生产区块时比特币区块难度zhi,每个节点独立选择相信哪个区块。 (在没有其他考虑的情况下,节点通常选择信任他们收到的第一个块)。

最终,矿工创建了一个新区块,该区块附加到其中一个竞争的并行区块。 这将使该分支比其他分支更长。 假设一个分支只包含有效块,普通节点将选择最长的分支(最难创建的链)并丢弃较短的分支。

如果这些矿工有其他意图比特币区块难度zhi,则可能会出现长期分叉,例如一些矿工在分叉后努力在某个分支上进行计算,试图通过 51% 攻击来修改交易历史。

由于分叉时很多区块的高度是一样的,所以高度不能作为唯一的区分。 通常,块由其 SHA256 哈希值表示。

交易数据

每个区块必须包含一个或多个交易记录。 第一条交易记录必须是一条coinbase记录,其中包含区块奖励和本区块的所有交易手续费。

挖出的币有一个特殊的使用条件,即只能用于接下来的100个区块。 这可以部分地阻止一些矿工花费未来可能被放弃的区块奖励(分叉后,矿工的链被放弃)。

区块不必包含所有非 coinbase 交易,但矿工通常将它们包含在交易费用中。

所有的交易记录,包括coinbase记录,都会先行编译交易队列,并以rawtransaction格式编码为二进制进行存储。

rawtransaction 格式是从 txids 散列的。 这些 txid 形成了 Merkle 树。 Merkle 树是分层哈希树。 如果一个叶子节点有两个叶子,则该节点的值就是这两个值的哈希值。 如果叶子节点只有一个节点,则该节点的值为叶子节点的哈希值。

如果有并列节点,则将它们与并列节点一起哈希; 所有没有side-by-side节点的节点都会自己计算hash,这样Merkle根节点的hash是逐层计算的。

比如这些节点只是组合(不计算hash),五层交易记录Merkle树如下图所示

ABCDEEEE.......Merkleroot

/\

ABCDEEEE

/\/

ABCDEE.......Eispairedwithitself

/\/\/

ABCDE.........交易

在简单支付验证(SPV)部分,这棵 Merkle 树允许客户通过从 Merkle 根节点遍历来验证他们在区块中的交易记录。 不必信任所有节点:伪造区块头是一件代价高昂的事情,不能伪造中间哈希结果,否则身份验证将失败。

例如,要证明交易D被添加到区块中,SPV客户端只需要将C、AB、EEEE哈希复制到Merkle根节点即可; 客户不需要了解其他交易的任何信息。 如果这 5 笔交易都达到了最大大小,下载整个区块将需要 500,0000 字节,但下载 3 个哈希值加上区块头只需要 140 字节。