時間:2023-07-09|瀏覽:275
介紹項目的技術背景和主要特點之后,介紹一下項目中的難點或者開發特點。
首先需要介紹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開發中還有很多其他難點,也對應著很多有趣的地方。歡迎其他開發者和我們一起探索,共建區塊鏈生態。