保存少量数据的轻量客户端
并非所有的节点都有能力储存完整的区块链。许多比特币客户端被设计成运行在空间和功率受限的设备上,如智能手机、平板电脑、嵌入式系统等。对于这样的设备,通过简化的支付验证(SPV)的方式可以使它们在不必存储完整区块链的情况下进行工作。这种类型的客户端被称为SPV客户端或轻量客户端。随着比特币的使用热潮,轻量客户端逐渐变成比特币节点(尤其是比特币钱包)所采用的最常见的形式。
轻量客户端仅仅需要下载区块头信息,而不用下载包含在每个区块中的交易信息。由此产生的不含交易信息的区块链,大小会远远小于完整的区块链,这样便适合在受限环境上执行。鉴于轻量客户端并不知道网络上所有交易的完整信息,其验证交易时所使用的方法略有不同,这个方法需依赖对等的全节点“按需”提供区块链中相关部分的局部视图。
举例子来说,每个全节点就像是一个带着非常详尽、涵盖街道地区的完整地图的游客,因此它可以随时通过翻阅地图,了解到它所想知道的信息。而轻量客户端就像是带着手机的游客,它只知道它的目的地名字,它需要通过手机从另外拥有完整地图的陌生游客那里获取它的行进路线。
虽然两种游客都可以通过实地考察的方式来验证一条街是否存在,但没有完整地图的游客不知道每个小巷中有哪些街道,也不知道附近还有什么其他街道。对他来说,最好的方式就是向足够多的人问路,并且希望其中一部分人不是要试图抢劫他。
轻量客户端中配备的SPV功能可以用来验证其询问的完整区块链节点是否在欺骗它。根据轻量客户端的询问请求内容,一个拥有完整区块链的节点会构造一条验证链,这条链是由沿着区块链按时间倒序一直追溯到创世区块的所有与请求有关的区块及交易组成的,而轻量客户端可以验证由完整节点返回的这条验证链,以确定其没有试图欺骗。
SPV功能的核心是由默克尔树(Merkle Tree)支持的,这个会在后续章节具体实现中通过实例代码讲解其工作原理。
因此我们可以认为,在绝大多数的实际情况中,具有良好连接的轻量客户端是足够安全的,它在资源需求、实用性和安全性之间维持恰当的平衡。
当然,如果要保证万无一失的安全性,最可靠的方法还是运行完整的区块链节点。
区块链系统概述章节目录:
1、用密码学保护区块(包括:哈希计算、数字签名、对交易签名。)
2、把区块连成链状(用哈希标记区块、单向链表的区块链)
3、用分布式网络把区块共享出去
4、保存少量数据的轻量客户端
5、用智能合约对数据上锁【请见下期~】
6、重要基础概念(软分叉、硬分叉、拜占庭将军问题、授权区块链)