主页 > 如何下载imtoken > btc 算法(来自 eht 白皮书)

btc 算法(来自 eht 白皮书)

如何下载imtoken 2023-01-18 16:24:17

比特币系统的“状态”是所有已开采的未使用比特币的集合(技术上称为“未使用的交易输出,或 UTXO”)。每个 UTXO 都有一个面值和所有者(由一个 20 字节的地址定义,本质上是一个加密公钥 [1])

在比特币系统中,状态转移函数APPLY(S,TX)->S'可以大致定义如下:

交易的每个输入:

2.如果所有UTXO输入面额之和小于所有UTXO输出面额之和,则返回错误信息

btc怎么交易步骤

3.返回一个新的状态S',所有输入UTXO都被移除,所有输出UTXO都被添加。

第一步的第一部分阻止交易的发送者花费不存在的比特币,第二部分阻止交易的发送者花费别人的比特币。第二步确保价值守恒。比特币支付协议如下

为了确保每个人都同意交易的顺序,我们需要将状态转换系统与共识系统结合起来

btc怎么交易步骤

每个节点检查区块是否有效的算法如下:

检查块引用的前一个块是否存在且有效。检查区块的时间戳是否晚于前一个区块的时间戳并且早于未来的 2 小时 [2]。检查区块的工作量证明是否有效。将前一个块的最终状态分配给 S[0]。假设 TX 是区块的交易列表,包含 n 笔交易。对于所有属于 0...n-1 的 i,执行状态转换 S[i+1] = APPLY(S[i], TX[i])。如果任何事务 i 在状态转换中失败,则以错误退出程序。返回正确,状态 S[n] 是这个块的最终状态。

“工作量证明”的概念:对每个区块进行 SHA256 哈希处理,将得到的哈希视为一个长度为 256 位的值,该值必须小于不断动态调整的目标值。在撰写本书时,目标值约为 2^190。工作量证明的目的是让区块的创建变得困难,从而防止女巫攻击者恶意再生区块链。

btc怎么交易步骤

如果当前目标值为 2^192,则意味着平均需要 2^64 次尝试才能生成有效块。一般来说,比特币网络每2016个区块就会重置一次目标值,保证平均每十分钟产生一个区块。

为了奖励矿工的计算工作,每个成功生成区块的矿工都有权在区块中包含一笔交易,该交易凭空发送自己的 BTC。奖励矿工是比特币发行的唯一机制。

此外,如果交易的输入大于输出,则差额作为“交易费”支付给矿工。

btc怎么交易步骤

分叉

由于比特币的密码基础非常安全,攻击者会选择攻击一些不受密码学直接保护的东西:交易顺序。攻击者的策略很简单:

送100BTC给卖家购买物品(尤其是不需要邮寄的电子物品)。等到物品发货。创建另一个交易以将相同的 100BTC 发送到您自己的帐户。让比特币网络相信发送到自己账户的交易是最先发送的。

btc怎么交易步骤

一旦步骤(1)发生,矿工会在几分钟内把这个交易打包成一个区块,比如说270,000个区块。大约一个小时后,这个区块后面会有五个区块,每个区块间接指向到交易,从而确认交易。此时,卖家收到货款并发货给买家。由于我们假设这是一个数字物品,攻击者可以立即收到货物。现在,攻击者创建另一个交易将同样的 100BTC 发送到自己的账户,如果攻击者只是将这个消息广播到全网,这个交易不会被处理,矿工会运行状态转换函数 APPLY(S ,TX),发现这个交易会花费不再处于状态的UTXO。因此,攻击者将区块链分叉,并以第269999个块为父块重新生成第270000个块,这里将旧交易替换为块中的新交易。因为块da ta 不同,这需要新的工作量证明。另外,由于攻击者新生成的第 270,000 个区块的哈希值不同,原来的 270001 到 270005 的区块并没有指向它,所以原区块链和攻击者的新区块是完全分开的。当发生区块链分叉时,区块链的长分支被认为是诚实的btc怎么交易步骤,合法矿工将在原来的第 270005 个区块之后进行挖矿,只有攻击者在新的第 270000 个区块之后进行挖矿。攻击者为了让他的区块链最长,他需要拥有超过除他之外的整个网络的计算能力才能赶上(即51%攻击)。

Merkle 树是由一组叶节点、一组中间节点和一个根节点组成的二叉树。最底部的一组叶子节点包含基本数据,每个中间节点是它的两个孩子的哈希btc怎么交易步骤,根节点也是它的两个孩子的哈希,代表默克尔树的顶部。 Merkle 树的目的是允许块数据零碎传输:节点可以从一个源下载块头,从另一个源下载与它们相关的树的其余部分,并且仍然能够确认所有数据是正确的。这样做的原因是因为哈希向上传播:如果恶意用户试图在树的下层添加虚假交易,由此产生的变化将导致树的上层节点发生变化,以及上层节点的变化,并且最终到达根节点。更改并阻止哈希更改

脚本

即使没有扩展比特币协议,它也能在一定程度上实现“智能合约”。比特币的 UTXO 不仅可以由公钥拥有,还可以由用基于堆栈的编程语言编写的更复杂的脚本拥有。在这种模式下,要花费这样的 UTXO,必须提供满足脚本的数据。事实上,基本的公钥所有权机制也是通过脚本实现的:脚本以椭圆曲线签名为输入,验证交易和拥有这个UTXO的地址,验证成功返回1,否则返回0。更复杂的脚本用于其他不同的应用情况。例如,可以创建脚本(多重签名),需要收集三个私钥中的两个来进行交易确认,这对于公司账户、储蓄账户和一些商业代理非常有用。脚本还可用于向用户发送奖励以解决计算问题。甚至可以创建脚本,例如“如果您可以向我提供简化的付款确认,即您向我发送了一定数量的狗狗币,这个比特币 UTXO 就是您的”,本质上比特币系统允许不同的密码学习货币以进行去中心化交易。

但是,比特币系统的脚本语言有一些严重的局限性: