Cashbox研发工程师讲解SPV钱包开发重难点(一)_腾讯视频
大家好,我是底层组的Alvin。在公众号上一期的介绍中提到,Cashbox下一步将添加一个bitcoin完全去中心化的SPV钱包。我在项目主要负责的任务就是bitcoin去中心化钱包的开发。下面我将从技术背景和实现方式两方面介绍bitcoin的SPV钱包。
什么是SPV
首先先介绍SPV的概念。可能对于不熟悉区块的链的开发者来说,并不熟悉什么是SPV。SPV的全称是简单支付认证。想要完整的了解SPV的概念,需要先了解BTC的P2P结构。
比特币的网络结构,是一个P2P网络,也就是一个点对点对等网络。每个比特币服务,都称为一个比特币节点。完整的比特币节点包含路由,区块链数据库,挖矿,钱包服务四种功能的集合。完全拥有这四种功能的节点又称为全节点。比特币主要依靠这种全节点来维持运行。每个节点都参与全网络的路由功能,同时也可能包含其他功能。每个节点都参与 验证并传播交易及区块信息,发现并维持与对等节点的连接。
一些节点保有一份完整的、最新的区块链拷贝,这样的节点被称为“全节点”。全 节点能够独立自主地校验所有交易,而不需借由任何外部参照。和全节点相对的,就是SPV节点。SPV节点最大的特点就是不需要储存完整的区块链数据库,只需要存储区块链数据头。根据比特币区块头的设计,SPV存储的数据大小,只有完整区块链数据大小的1/1000。目前为止,一份比特币主网的区块数据大小已经超过300G,而才用SPV技术的节点,只需要使用几百m大小的数据即可。
由此可见,在存储大小受限的设备上SPV将是一个更好的选择。随着区块链的普及,会有大量的用户使用手机来运行区块链钱包,在手机上运行超过300g大小的全节点显然不是用户的最佳选择。而SPV技术的使用,使得在手机上使用完全去中心化的bitcoin钱包成为可能。我们把这种运行SPV节点的应用,称为轻钱包。
去中心化
介绍完SPV的概念之后,我们来讲讲完全去中心化。去中心化,一直是作为区块链的核心思想存在的。在实现Cashbox去中心话钱包的过程中,我们也研究过其他的开源技术钱包,发现一个最主要的特点:不够去中心化。现在区块链的用户账户数据模型主要分为两大类,一类是以太坊为代表的账户模型,还有一类是以比特币为代表的UTXO模型。账户模型大致相当于银行账户,UTXO模型则又称为Unspent Transaction Output,是未花费的输出,可以简单理解为还没有用掉的收款。由于UTXO模型的复杂性,导致我们拿到一个用户地址之后,想要验证用户的UTXO是一件非常困难的事情。所以大多数钱包有一个自己的后端。这个后端主要的功能就是要解决UTXO验证困难的问题。后端对应一份完整的区块链数据,这样后端可以对交易进行索引方便查询UTXO。另一方面,这个完整的后端对应的是一个比特币全节点,广播交易的功能也交给了后端。从这个意义上来看,传统钱包不够去中心化,也不符合SPV的概念。是把一个去中心化的比特币,做成了中心化的服务,这个模型中有太多功能需要依赖自建的后端。
我们使用的SPV去中心化钱包,钱包端存储的是2百兆左右的区块数据头。我们在去中心化钱包的内部,启动的是比特币的P2P网络,利用比特币网络协议直接接入比特币网路去获取需要的信息。不需要完整的后端支持。大多数传统钱包,都需要把交易有关的信息传递给后端,才可以实现筛分UTXO和广播交易的功能,而我们的钱包,因为SPV节点的存在,直接和和钱包继承,在用户的手机内部即可实现,不需要和我们进行数据交互。这个概念是是非常符合去中心化思想的。而且在使用钱包的过程中,因为不需要和我们的后端有什么链接,用户完全不担心泄露自己的隐私。用户最重要的私钥也存在自己的手机中,即便需要广播交易也只是直接接入比特币P2P网络。真正符合区块链完全去中心化思想。
本期主要讲解概念,咱们下期不见不散。
网友评论