时间:2023-07-09|浏览:180
介绍项目的技术背景和主要特点之后,介绍一下项目中的难点或者开发特点。
首先需要介绍rust,spv钱包使用纯rust开发。rust被吐槽最多的还是语言特性复杂,很难编译通过。不过在写spv钱包过程中,总体来说还是比较愉快的。rust主要有以下特点。
1. 数据安全。完全按照rust的规则来编写的代码,在编译通过之后不存在空指针,段错误的问题。总体程序是比较稳定的。rust也有着媲美c/cpp的性能表现,在手机这类性能受限制的设备上,这点尤其重要。
2. 开发效率,rust作为一门现代化语言,总体上来说语法比较简洁。rust和传统oo语言比起来,有一个很大的特点就是没有继承。所以在实现复杂的功能上,写代码会重点在组合上。而且数据和行为两项分的很清楚。在熟悉rust语法的基础上,写代码,阅读源码上,要比传统oo语言更加清晰。rust在设计上完美体现了组合大于继承的设计原则。
3. 跨平台编译。相信跨平台编译是很多c/cpp开发者的噩梦。但是跨平台编译过程中,我作为一个之前很少接触跨平台编译的开发者,在准备好需要编译目标平台依赖库,设置好指定的编译平台参数之后,就可以正常编译。是非常值得推崇的。
4. 依赖清晰。rust再带Cargo编译系统,所有的依赖由Cargo管理,配置在Cargo.toml中。配置简单清晰,无论是大型开发还是小型app开发,都是非常好的编译系统。
所以还是推荐广大开发者尝试rust。也许会带来不一样的开发体验。
开发中的另一个难点是比特币想要计算用户的utxo很复杂。之前提到过,比特币的模型是utxo的。所有的信息都填在链数据中。在spv同步区块头之后,有一个很大的问题。当我知道一个用户的公钥,或者地址,我如何知道该地址下面对应多少UTXO?
对于完整的比特币节点来说,这个问题并不复杂。因为完整的区块链数据库中包含了这些信息。但是对于只存储了区块头的SPV节点来说,这点是致命的,我们没有足够的数据来计算UTXO。所以目前的做法简单来说就是,根据用户的地址来计算布隆过滤器,然后发送给对应的全节点,全节点把数据进行筛选之后利用比特币网络回传,然后我们再做分析,从有限的数据中扫描出我们想要的UTXO。对应的代价就是获取UTXO数据会很慢,毕竟在海量的区块链数据中扫描出我们想要的数据不是一件容易的事情。
当然SPV开发中还有很多其他难点,也对应着很多有趣的地方。欢迎其他开发者和我们一起探索,共建区块链生态。