最近持续读比特币白皮书,正在准备一系列比特币的视频,希望大家关注。 中本聪在《比特币白皮书:一种点对点的电子现金系统》第八章提到 SPV ( Simple Payment Verification ),即?简单支付验证:
什么是 SPV ? SPV,翻译为简单支付验证,是一种不用运行全节点、只需保存所有的区块头,就可以验证支付的技术手段。是一个在轻客户端环境下,就能验证支付有效性的过程。 SPV 是支付验证,不是交易验证。 SPV 只负责判断用于支付的那笔交易,是否已经被验证过,有多少个确认数。而不是全节点操作的复杂的交易验证。 全节点,即完整区块链节点,是同步保存所有区块链数据的节点。比特币发展早期,所有节点都是全节点。全节点进行的交易验证,需要完整的UTXO记录,涉及:合法性检查、双重花费检查、脚本检查等等,需要全节点矿工完成。 轻节点,又称SPV节点,是指通过 SPV 方式,可以在不必存储完整区块链数据的情况下,进行工作的节点。通常运行在储存空间有限和性能较低的设备,比如手机。 为什么要提出 SPV ? SPV 主要就是解决在轻客户端条件下的支付确认问题。 因为我们普通用户,只关心与自己相关的那些交易。比如小明进行场外交易,卖家发微信声称已经将比特币打入小明的地址。这个时候,小明只想知道这笔交易是否合法、确认数是否已经大于等于6?(因为比特币网络确认一笔交易需要至少需要 6次确认)。小明并不希望自己运行全节点,下载几百个 G 的比特币区块链数据,做完整的交易验证。 小明只希望运行一个轻客户端手机钱包,就能进行验证。中本聪设计的 SPV ,可以帮助小明判断卖家的的支付交易,是否已经存在于区块链中,是否已经被验证过,以及有多少确认数等信息。 小明如果使用 SPV 钱包,只需要下载所有区块的区块头(Block Header),进行简单的定位和计算工作就可以给出验证结论。 验证交易支付时,如果需要将整个区块链数据保存在本地,为了验证一笔交易的真实性而保存整个网络信息,会占据大量的存储空间,耗费巨大的网络带宽资源,这是极其不合理的。 SPV 只需为每个区块存储80个字节的区块头信息,而不是全节点所需的每个区块1MB字节,节省了 99.992% 的存储空间。这使得轻客户端进行支付验证,资源配置较低的设备(比如手机)运行支付验证,变得可行。 SPV 如何实现? 这里要先谈谈比特币区块的构成,主要包括两个部分: 区块头( Block Headers ) 区块体( Block Body ) 其中,区块头包含本区块的一些信息,包括版本号、随机数、挖矿难度、前一个区块的哈希、默克尔根(Merkle root)等信息。 值得注意的是,区块头中并没有保存默克尔树,只保存默克尔根。而一个默克尔根,对应一棵默克尔树。 默克尔树 ( Merkle Tree) 默克尔树,又称为“可信树”,是一种哈希二叉树,是一种可以快速归纳和校验大规模数据完整性的数据结构。默克尔树的树形结构,已经被广泛应用到了信息安全的各个领域。 中本聪设计比特币时,就使用了默克尔树的数据结构。具体实现方法是:将所有交易成对分组,并对其进行哈希处理,然后对所得的哈希继续进行哈希处理,继续此过程,直到只剩下一个哈希,称为默克尔根(merkle root)。 所以,默克尔树底部的树叶,就是交易数据。每一个父节点,都是两个子节点哈希值之和的哈希值。通过层层往上计算,最终算得根节点。这棵“信息树”就构成了整个网络的交易数据。节点都是哈希值,十分易于存储和验证。 (图片来源网络,侵权删) SPV 支付验证过程 从区块链网络上,获取并保存最长链上的所有区块头至本地。 计算待验证支付交易的哈希值 tx_hash(为了简化模型,此处假设用tx_hash来定位区块)。 定位到包含该 tx_hash 所在的区块,并验证区块头是否包含在已知的最长链中,如果在最长链,则进行下一步验证。 从区块中获取待验证支付交易构建默克尔树所需的哈希值。 根据这个哈希值,计算出默克尔根哈希值。 如果计算结果,与区块头中的默克尔根的哈希值相等,则交易是真实存在的。 根据区块头所处的位置,确定该交易的确认数(比特币网络确认一笔交易需要至少6次确认)。 简单来说,比特币全节点在打包一个区块时,会对区块里的所有交易进行验证,一次交易会得到6~7次确认,来确保交易完成。而使用 SPV 支付验证时,只需做两件事:找到要验证的这笔交易在哪个区块,以及确定这个交易的确认次数至少有6次。 SPV 的使用场景: 轻钱包中的支付校验 侧链协议的 SPV 证明(SPV Proof):侧链的双向挂钩中,主链和侧链需要对对方的特定交易做 SPV 验证,用以确保该笔交易确实发生过支付,从而使得一方锁定资产,另一方转移资产。 总结 SPV 极大的节省了存储空间。无论未来比特币的交易量变得有多大,区块头的大小始终是固定的80个字节,每小时出块6个,每年出块52560个。则每年新增的存储量,仅仅4M 字节,100年后累计的存储量,也仅仅增加400M,4G 网络的带宽都能轻松驾驭,将数据保存在手机上也没有问题。 参考文章: WTF is an SPV and Why Satoshi put it in the Bitcoin Whitepaper 《SPV:区块链中的简单支付验证》 《多数人只知中本聪创造了比特币,他的这些帖子却鲜为人知》 《比特币白皮书:一种点对点的电子现金系统(吴忌寒翻译版)》 PV、SPV节点和SPV钱包 区块链轻节点和SPV 「注意」 我是金马,别人离开币圈的时候,正是我深耕的时候。你的熊市,让我陪你度过可好?币圈金马奖,和你一起走币圈这条光明大道。 —- 编译者/作者:币圈金马奖 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
为什么中本聪会在比特币白皮书中提出SPV?什么是SPV(简单支付验证)?
2020-01-13 币圈金马奖 来源:区块链网络
LOADING...
相关阅读:
- Gate.io芝麻开门区块链新闻一分钟202008042020-08-04
- ETC遭受的廉价51%攻击迷局2020-08-04
- 《进展周报 | 夸克链信周报2020.7.27-2020.8.2》2020-08-04
- Electric Capital 公布 1.1 亿美元基金,关注一层协议、DeFi 与区块链社区等2020-08-04
- Forsage智能合约邀请投资者加入以太坊区块链矩阵项目2020-08-04