SPV

中本聪在比特币白皮书中描述了 “简单支付验证”(SPV)的高级设计原理。通过使用 SPV,比特币的区块大小可以安全地移除上限限制,用以支撑十亿数量级的用户便捷地使用比特币进行交易而不用担心网络拥堵。

在一个 SPV 钱包,如果我们知道了交易路径,并且知道交易的存在,结果要么就是交易未被花费, 或者商家可能发现一个双重花费。

根据定义,“点对点” 是指个人或其他各方之间的直接交换。这样,希望从商家 Bob 那购买商品的消费者 Alice 将直接向 Bob 发送交易。Bob 可以对其进行验证,并将其发送到区块链进行清算和结算。这个过程是点对点的。网络中的矿工或节点充当分布式中介。没有人需要直接信任中间人,这与任何当前系统都大不相同。

系统中的用户仅需要维护一个区块头的副本即可与交易进行比较。目前,区块头的大小小于 50 MB。大家平时拍照的相片文件就会超过这个大小级别。而从现在开始的十年之后,区块头大小的增长将只是线性的。因此,我们拥有一个系统,该系统可以按摩尔定律按指数比例扩容,但占用的资源却是线性的。

网络节点或矿工将为用户提供最长的工作量证明链。用户可以实施贝叶斯系统以确保他们拥有最长的链。他们不会只查询一个矿工,而是查询多个随机节点。这样,可以非常简单地在无需太多带宽的情况下确保它们具有最长的路径。

只要诚实节点控制网络,这种验证在系统中是可靠的。要注意,重要的是比特币网络中的矿工在法律范围内行事。挖矿是一项投资。今天,即使是小型矿工也在这个系统上投资数亿美元。更重要的是,矿工受地理位置限制,不能轻易移动,因此他们受法律规定的约束,如果有不诚实的矿工作恶他们可能会遭受损失。比特币从未被设计为在现实世界之外起作用的系统。实际上,在白皮书中提到 “诚实” 一词 15 次的原因是,它直接与诸如 英国的 2006 年《欺诈法》之类的行为有关

结果是,一旦比特币达到一定的规模,它就会受到法律的管辖。从理论上讲,矿工的包容性和作为攻击者的游戏因矿工面临的损失而被最小化。中本聪在白皮书的早期草稿中写道,51 攻击只能逆转一笔交易进行双花。之所以如此,是因为比特币并非旨在成为一个在法律控制范围之外发挥作用的系统。它是一个支持诚实交易并允许捕获和隔离可能显示为与犯罪活动有关的交易的系统。在小世界网络中,现有的矿工将能够在几秒钟内确定交易是否 “双花”。具有大量算力的攻击者只能与其它网络节点一起工作,他们很快就会注意到这一点。

客户 SPV 钱包

SPV 用户应维护他们收到的交易的副本。交易规模很小,并且不会占用太多空间。当向用户付款时,他们应该维护已发送给他们的交易的副本,以便他们既可以针对特定区块的 Merkle 树进行验证,又可以简化向下一个对等方的付款。

如果我们假设已经使用输入交易在下图中与 Tx3 关联的足够久的区块中向 Alice 付款,那么她现在可以将此类信息保存在区块路径中,以简化花钱时的验证。

场景扩展,我们可以看到 Alice 可以节省她希望在自己的计算机上花费的所有输入交易。通过签名或满足输出脚本的其他条件,Alice 现在可以将她的币转移到新的输出中,以便向 Bob 付款。

Alice 向 Bob 发送了 Tx1 和 Tx2 的副本,这是她在以下交易中花费的对 Tx3 的输入,以便向 Bob 付款。通过一并发送的 Merkle 路径,Bob 可以非常快速地验证每个交易的哈希值,并确保它遵循块头并进行验证。如果输入交易存在于区块链中,Bob 可以信任它们。当然,他可以选择自己再次验证输入交易。他刚刚从 Alice 那里收到了 Tx1 和 Tx2 的副本。

为了验证交易并确保它存在于 Merkle 路径中并验证到块标题,Bob 只需要将每个交易的哈希作为 Alice 给他的付款交易的输入即可。为此,Bob 计算两个交易的哈希值:

哈希(Tx1); 和 哈希(Tx2)。

有了这两个值,再加上 Alice 刚刚提供的 Merkle 路径,Bob 可以轻松快捷地计算出完整的区块头值,并确保区块头中的路径正确。如果他保存的标头中的哈希和 Merkle 树匹配,则 Bob 可以肯定地知道 Alice 给了他有效的交易。他知道区块链中交易的存在已经由比特币矿工进行了验证,并且现在有工作量证明来定义链中交易的存在。

SPV 系统如下图所示:

  • 客户 SPV 钱包 *

请注意,Alice 不仅在系统中维护她的私钥。她将保存 Merkle 路径和她要使用的输入交易。Alice 不需要维护对区块链的访问就可以花钱。正如 Alice 知道她是唯一可以花费她的硬币的一方一样,她甚至可以采取行动进行有效的交易,尽管她仍然没有以任何方式连接到区块链。Alice 不必担心任何变更交易或输出的有效性,因为 Bob 无法更改它们。如果 Bob 试图更改交易以使更改不被合并,则整个交易将无效。结果是 Bob 要么将他从 Alice 那里收到的付款提交给区块链进行结算,然后将零钱支付给 Alice,要么他没有收到付款,

请注意客户的 SPV 钱包的以下功能:

  1. TX –预加载的完整交易数据,其中包含 Alice 可用的未使用交易输出(UTXO)。完整的交易数据以及 Merkle 路径构成了 Merkle 证明 Alice 正在花费的交易有效。散列完整的交易将给出 TXID,这是新交易输入数据的一部分。请注意,仅提供 TXID 是不够的,因为 Bob 必须能够验证 TXID 确实是该交易的哈希值。Bob 只有在 Alice 向他提供完整的交易数据时才能这样做;因此,她必须将其存储。如果 Alice 不存储此类信息,则 Bob 将需要在区块链上对其进行检查,这将增加流程的延迟。当然,Bob 可以为非 SPV 交易收取费用,因为他必须去矿工并下载完整的交易,而矿工可以对需要快速响应所选查询的商户进行同样的操作。

  2. 私钥/公钥 –进行交易时,钱包必须有权访问一组私钥以签名 TX 输出,并指定公钥以指定更改地址。

  3. Merkle 路径 –包含 TX 的每个交易的 Merkle 路径。商家的销售点钱包将使用 Merkle 路径来验证 TX 是否有效。请注意,钱包提供的 Merkle 证明不能防止 “重复消费”,但可以作为防垃圾邮件攻击的快速失败机制。

  4. 最少的处理 – SPV 钱包需要签署未使用的交易才能花费。这样做要求脱机钱包能够实现 ECDSA 签名,或者换句话说,具有执行椭圆曲线点乘法和计算哈希函数所需的足够处理能力。

  5. 块标题(可选)–客户钱包可能希望包含块标题,以验证是否已处理了向销售点 SPV 钱包的付款。这样做还需要在与销售点钱包交互之后存储 TXID 和 Merkle 路径。

维护隐私;确保可伸缩性

作为商人,Bob 将交易发送到区块链,而不是 Alice。与她自己发送邮件相比,她拥有更多的隐私权。Bob 和 Alice 已经在交换,因此 Bob 知道 Alice(他可能需要寄送她的货物)。当 Bob 发送交易时,由于他可能是进行许多交易的商人,因此他的 IP 地址是公开的,而不是 Alice 的。Alice 无需使用 Tor 即可吸引注意力;她可以在知道只有 Bob 看到她的交换的情况下进行交换(在这里,Bob 和 Alice 可以使用加密的频道)。因此,Alice 的露面要少得多,并且可以在全世界范围内维护她的隐私。

链上分析和记录 IP 地址不会透露 Alice 的交易。Bob 拥有唱片,但不是公开的。

在接下来的文章中,我将开始详细介绍如何实现这种解决方案以及如何帮助扩展比特币。实际上,没有 SPV 的实施,比特币既不能点对点也不能扩展。

Bob 可以快速检查 Alice 用来支付他的币的有效性。他可以检查它是否在 UTXO 中设置为未使用的交易,并且可以在 Alice 递给他的路径后迅速验证区块链中的输入位置。币所在的区块越深,更改路径所需的工作量就越多,因此 Bob 接受它的安全性就越高。如果 Alice 仅花了她的薪水并在经过一个小时左右的验证后就收到币,那还是很安全的。Bob 不需要下载整个区块链。即使他运行自己的节点,也不会给他带来任何好处。只有矿工才能更改区块链。当 Bob 收到 Alice 的 UTXO 时,他可以检查它是否有效,以及她是否已正确地将输出硬币配给了 Bob,这是他验证付款本身所需的全部。下一个,

SPV 是高效交换比特币上的交易的方式,并允许同行在没有第三方的情况下采取行动。没有它,通过实现所有系统都必须作为一个完整的网络节点运行的要求,将失去系统的简单性,并且系统将无法扩展。通过运行 SPV,用户可以快速而简单地验证自己的交易,并且可以通过存储最少的信息来进行验证。


results matching ""

    No results matching ""