主页 > imtoken钱包地址 > 大额比特币怎么交易 汇流研究院| 树状图上的轻节点设计(一)

大额比特币怎么交易 汇流研究院| 树状图上的轻节点设计(一)

imtoken钱包地址 2023-04-26 07:54:39

火币网如何交易比特币_大额比特币怎么交易_sitehzd.com 比特币交易网币币交易

在上一期研究院中,我们介绍了在延迟执行策略时为了节省计算资源,我们只能在转发区块合法(包括工作量证明)时检查区块的格式和引用,并尽可能少地检查块。 状态根存储在 . 但是,不强制检查state root会带来一些安全隐患。 比如有些矿工可能比较懒惰,只打包交易而不管交易的实际执行情况,也不验证接收到的块中状态根的正确性——这样就节省了执行交易、维护和更新状态的开销.

当然,对于自己执行所有交易的全节点来说,即使一小部分矿工偷懒,也不影响他们对当前共识状态的判断。 只要懒矿工仍然完全执行共识层协议,检查区块之间的引用关系并根据协议要求选择引用区块,他们的算力仍然有助于确保账本中的交易顺序不可篡改和。

但是对于轻节点来说,区块中错误的状态根是一个非常严重的问题。 这是因为轻节点本身没有能力维护当前共识系统中所有账户的状态——否则它不是“轻节点”——它只能选择信任全节点提供的状态(用默克尔树证明) 。 如果多个全节点提供的状态不一致,轻节点将难以判断当前的真实状态。

火币网如何交易比特币_sitehzd.com 比特币交易网币币交易_大额比特币怎么交易

以比特币的轻节点为例,它只需要保存每个区块的区块头(Block Header),就可以通过SPV(Simplified Payment Verification)的方式验证一笔交易是否已经确认。

比特币的 SPV 验证步骤如下: 1)通过存储在区块头中的 Merkle Root 和全节点提供的 Merkle Proof,可以非常容易地验证包含特定的交易; 2)如果包含交易的区块后面有足够多的区块(比如6个),则可以认为交易已经确认——实际上,这里的区块是确认的,但是因为最长的比特币链上的所有交易都会被执行,所以区块的确认等同于交易的确认。

sitehzd.com 比特币交易网币币交易_火币网如何交易比特币_大额比特币怎么交易

理论上,只要能够生成足够多的比特币区块,结合对网络连接的日食攻击,就可以让轻节点误认为一笔不在真实比特币网络最长链上的交易已经被确认,从而实现双花攻击。 现在比特币的UTXO已经达到几GB的规模,很多时候交易只能由SPV通过轻节点来确认,理论上会受到上述攻击的威胁。

sitehzd.com 比特币交易网币币交易_大额比特币怎么交易_火币网如何交易比特币

但实际上,因为SPV验证大额比特币怎么交易,很少听说过这种双花攻击。 为什么是这样?

sitehzd.com 比特币交易网币币交易_火币网如何交易比特币_大额比特币怎么交易

主要原因是成本。 以6个区块确认为例,欺骗轻节点实现双花攻击需要攻击者至少挖出7个比特币区块,并且这些区块不在比特币的最长链上——否则成为真正的交易确认。

如果挖掘这些区块的难度与真正的比特币网络相当,则意味着攻击者必须放弃 7 次获得比特币区块奖励的机会。 按照目前每个区块12.5个比特币的比特币奖励,除非一次双花攻击的交易价值超过75个比特币,否则这样的攻击就是亏损,自然不会有人实施。 如果加上实施日食攻击的成本,上述攻击将变得更加无利可图。

大额比特币怎么交易_sitehzd.com 比特币交易网币币交易_火币网如何交易比特币

因此,在比特币网络中,轻节点只需要大致知道正确的挖矿难度值,而不必担心在小额交易中使用SPV确认规则被骗。 通过 SPV 确认交易是相当安全的,至少在比特币的区块奖励减半几次之前是这样。 当然,如果真的是大额比特币交易,就需要增加等待区块的数量,或者用全节点验证。

以太坊的轻节点也可以通过类似的方式验证交易执行的结果或查询账户状态,只是全节点需要根据交易收据和账户状态对应的默克尔树根提供相应的证明节点。

火币网如何交易比特币_sitehzd.com 比特币交易网币币交易_大额比特币怎么交易

不同于比特币这样的“单筋”区块链系统,Conflux 采用树图结构和更快的区块生成速度(平均每秒 4 个区块)以获得更高的系统性能,并在不需要时减少对状态根的验证。 这些变化不会影响全节点的共识判断,但可能会给轻节点验证当前状态带来困难。

火币网如何交易比特币_sitehzd.com 比特币交易网币币交易_大额比特币怎么交易

为此,Conflux 引入了 Blaming 机制,帮助轻节点快速确认当前账户状态和每笔交易执行的结果。

简单来说,每个区块自己的区块头的Blaming字段指出了自己识别的最后一个“正确的主链区块”,这里的“正确”是指该区块的状态根和Blaming字段都是正确的。 例如,如果一个块认为它的父块是完全正确的,则在 Blaming 字段中填写 0; 如果它认为父块不正确但祖父母块正确,则填1; 如果不正确,则必须填入一个大于1的整数来表示最后一个正确块的位置,即所有落在中间的块都称为“状态不正确的块”。

状态根的判断比较容易理解:打包新区块的矿工节点需要沿着主链在每个Epoch中执行交易。 “应该有什么样的状态根,这样才能判断主链上实际的区块是否正确填写了这一项。又因为按照主链指定的顺序执行所有交易是每个全节点应该做的,以上检查不会带来额外的负担。

经过检查大额比特币怎么交易,已经可以确定哪些主链块具有正确的状态根。 但是,由于主链上的区块很多,显然不可能每次都列出哪些区块是正确的,哪些是错误的。 这使用了 Blaming 机制的第二部分——在前一个块的 Blaming 域上的 Blame。

sitehzd.com 比特币交易网币币交易_大额比特币怎么交易_火币网如何交易比特币

每个区块 A 都会在 Blaming 字段中指出它认为主链上最后一个正确的区块 B。 B 块的 Blaming 字段是正确的。 这意味着区块A也识别出区块B所指的B之前最后一个正确的主链区块C,从而进一步识别出区块C所指的C之前最后一个正确的区块D,…… ……直到创世区块位置。

由于创世块永远是正确的,所以上述Blaming过程是有限制的,每个块的Blaming字段中填充的数字不会超过块的高度。

这样,每个区块的 Blaming 字段中存储的一个数字可以扩展为一组状态根被当前区块识别的主链区块。 下图的例子说明了如何通过Blaming机制来扩展“正确块”的判断。

火币网如何交易比特币_大额比特币怎么交易_sitehzd.com 比特币交易网币币交易