区块链学习三

目前,作为客户端验证区块链的主要方法有两种:全节点和 SPV 客户端。

全节点

第一个也是最安全的模型是比通过下载和验证从创世块一直到最近发现的块的块来确保块链的有效性。

要欺骗客户端,攻击者需要提供一个完整的替代区块链历史,该历史比当前的“真实”链难度更大,并且计算成本很高,因为大部分好的节点会去计算真实的链。根据定义,大多数累积性工作证明是“真实”链。 由于在链末端生成新块所需的计算难度,在 6 次确认后欺骗全节点的能力变得非常昂贵。 这种形式的验证对女巫攻击具有很强的抵抗力——只需要一个诚实的 节点即可接收和验证“真实”区块链的完整状态。

在这里插入图片描述

简化支付验证 (SPV)

详述的另一种方法 原始比特币论文里提到的, 客户端仅在初始同步过程中下载块的标头,然后根据需要从完整节点请求交易。 这与区块链的高度呈线性关系,每个区块头仅 80 字节,或每年大约 4.2MB,与总区块大小无关。

如白皮书所述,区块头中的默克尔根以及默克尔分支可以向 SPV 客户端证明相关交易嵌入在区块链中的一个区块中。 这不能保证嵌入的交易的有效性。 相反,它展示了执行双花攻击所需的工作量。

区块链中区块的深度对应于在该特定区块之上构建分支的累积难度。 SPV 客户端知道 merkle 根和相关的交易信息,并从全节点请求相应的 merkle 分支。 一旦检索到 merkle 分支,证明区块中存在交易,SPV 客户端就可以将区块 深度 作为交易有效性和安全性的证明指标。 插入无效交易的恶意节点对用户的攻击成本随着区块的深度增加而增加,因为只有恶意节点将挖掘这条伪造的链。

潜在的 SPV 弱点

首先,虽然 SPV 客户端不能轻易被欺骗得认为交易在区块中,但反之则不然。 一个完整的节点可以简单地通过遗漏而撒谎,导致 SPV 客户相信交易没有发生。 这可以被认为是拒绝服务的一种形式。 一种缓解策略是连接到多个完整节点,并将请求发送到每个节点。 然而,这可以通过网络分区或 Sybil 攻击来解决,因为身份本质上是免费的,并且可能是带宽密集型的。 必须注意确保客户端不会与诚实节点断开连接。

其次,SPV 客户端仅向与其拥有的密钥对应的完整节点请求交易。 如果 SPV 客户端下载所有块,然后丢弃不需要的块,这可能会占用大量带宽。 如果他们只是向全节点询问具有特定交易的区块,这允许全节点完整查看与用户对应的公共地址。 这是一个很大的隐私泄露

为了缓解后一个问题,采用布隆过滤器已被去混淆和压缩数据请求。

布隆过滤器

布隆过滤器是一种节省空间的概率数据结构,用于测试元素在不在集合内。 该数据结构以规定的误报率为代价实现了出色的数据压缩。

布隆过滤器从一个 n 位的数组开始,全部设置为 0。选择一组 k 个随机散列函数,每个散列函数输出一个介于 1 和 n 之间的整数。

当向布隆过滤器添加一个元素时,该元素分别被散列 k 次,并且对于每 k 个输出,该索引处对应的布隆过滤器位设置为 1。

Bloom 过滤器的查询是通过使用与以前相同的散列函数来完成的。 如果布隆过滤器中访问的所有 k 位都设置为 1,则这表明元素位于集合中的概率很高。 显然,可以通过添加域中其他元素的组合将 k 个索引设置为 1,但参数允许用户选择可接受的误报率。

元素的删除只能通过布隆过滤器

布隆过滤器的应用

误报率是一个可调整的参数,该参数权衡隐私级和带宽。 SPV 客户端创建其布隆过滤器并使用消息将其发送到完整节点 filterload,它设置需要哪些事务的过滤器。 全节点将发送修改后默克尔块。 merkle 块是只带有与设置的 Bloom 过滤器相关联的 merkle 分支的块头。

SPV 客户端不仅可以将交易作为元素添加到过滤器,还可以添加公钥、来自签名脚本和公钥脚本的数据等等。 这使得 验证P2SH 交易成为可能。

如果用户更注重隐私,他可以将 Bloom 过滤器设置为包含更多误报,但会牺牲用于验证交易的额外带宽。 如果用户的带宽预算紧张,他可以将误报率设置为低,因为他知道这将允许全节点清楚地了解哪些交易与他的客户相关联。

  • BitcoinJ ,基于 SPV 安全模型和 Bloom 过滤器的比特币 Java 实现。

  • BIP37

挖矿

挖矿将新区块添加到区块链中,使得交易历史难以修改。

今天的采矿有两种形式:

  • 单人挖矿,矿工尝试自己生成新区块,区块奖励和交易费用的收益完全归他自己所有,这使他能够以更高的差异收到大笔付款(两次收益之间的时间更长)

  • 池化挖矿,矿工与其他矿工汇集资源以更频繁地寻找区块,收益在池矿工之间共享,与他们各自贡献的哈希算力大致相关,允许矿工以较低的差异收到小额付款(两次收益之间的时间更短)。

在这里插入图片描述

在池化挖矿中,矿池将目标阈值设置为比 实际 网络 难度低几个数量级。 这会导致采矿硬件返回许多块头,这些没用的块头作为矿工工作的凭证.
当挖到有用的块头时,矿主以矿工提交的无用块头数量作为依据分红.
例如,如果矿池的目标阈值比 网络 目标阈值低 100 倍,则平均需要生成 100 个份额才能创建一个成功的块,因此矿池可以为收到的每一份额支付其支付的 1/100 . 不同的矿池基于这个基本份额系统使用不同的奖励分配系统。

猜你喜欢

转载自blog.csdn.net/qq_45256489/article/details/122708075