時間:2023-08-18|瀏覽:274
第一,什么是錢包,以及相關的分類。
本文站在開發者的角度,給讀者講解下怎么樣和錢包進行交互,以及如何開發一個錢包。
我們怎么樣理解錢包呢?簡單講它是連接區塊鏈的一個入口。目前比較成熟的公鏈,如比特幣、以太坊都有很多錢包可以選擇。一般錢包需要完全訪問你的用戶資產,也就是會要求你輸入私鑰。錢包的作惡成本極低,這也是筆者建議選擇開源錢包的原因之一。
題圖來自:?admin/DelphiWhitePaperInterpretation/8855104.com
第二,需要了解下什么是?RPC、JSON-RPC?以及?JSON。
遠程過程調用(RPC)是一個計算機通信協議。該協議允許運行于一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。如果涉及的軟件采用面向對象編程,那么遠程過程調用亦可稱作遠程調用或遠程方法調用,例:JavaRMI。
RPC的主要功能目標是讓構建分布式計算(應用)更容易,在提供強大的遠程調用能力時不損失本地調用的語義簡潔性。
RPC調用分為以下兩種:
同步調用,客戶方等待調用執行完成并返回結果。
異步調用,客戶方調用后不用等待執行結果返回,但依然可以通過回調通知等方式獲取返回結果。若客戶方不關心調用返回結果,則變成單向異步調用,單向調用不用返回結果。
異步和同步的區分在于是否等待服務端執行完成并返回結果。
遠程過程調用是一個分布式計算的客戶端-服務器(Client/Server)的例子,它簡單而又廣受歡迎。遠程過程調用總是由客戶端對服務器發出一個執行若干過程請求,并用客戶端提供的參數。執行結果將返回給客戶端。由于存在各式各樣的變體和細節差異,對應地派生了各式遠程過程調用協議,而且它們并不互相兼容。其中我們廣為使用的是一個叫做?JSON-RPC?的協議。
JSON-RPC,是一個無狀態且輕量級的遠程過程調用(RPC)傳送協議,其傳遞內容通過JSON為主。相較于一般的REST通過網址(如GET/user)調用遠程服務器,JSON-RPC直接在內容中定義了欲調用的函數名稱(如{“method”:“getUser”}),這也令開發者不會陷于該使用PUT或者PATCH的問題之中。本規范主要定義了一些數據結構及其相關的處理規則。它允許運行在基于Socket、HTTP等諸多不同消息傳輸環境的同一進程中。其使用JSON(RFC4627)那JSON是什么呢?
JSON(JavaScriptObjectNotation)是一種輕量級的數據交換語言。?使用JSON做數據交換的好處在于,一是兼容性高,二是可閱讀性高,三是支持較多的數據格式(比如number,string,booleans,nulls,array,associativearray),四是支持的語言較多。
第三,了解區塊鏈相關的基礎知識。
了解區塊鏈,書籍資料不用,一本?精通比特幣?足矣。這里就不贅述了。
第四,掌握一門開發語言。
如果你是一門經驗豐富的程序員,此條預備知識可以忽略。如果你是一名非計算機科班出身的區塊鏈技術愛好者,建議從Python入手。同時,多了解下JavaScript。
0x01怎么樣開發
假設我們把預備知識都了解了,接下來我們需要閱讀比特幣和以太坊的RPC接口。
我們以比特幣為例,根據OriginalBitcoinclient/APIcallslist文檔我們可以得到RPC接口提供的函數列表。
以sendrawtransaction為例,這個函數列表提供了四列(Command、Parameters、Description、Requiresunlockedwallet?),分別表示函數名、傳入參數、描述、是否需要解鎖錢包。
我們把這個函數列表掌握之后,可以選擇某一種語言,然后進行區塊鏈錢包相關的開發。
當然,你還需要知道怎么樣去部署一個比特幣的完全節點和測試網絡,這樣就可以利用RPC進行接口調用,來和區塊鏈網絡進行交互。
0x02相關文檔以及源碼
這里列出主流項目相關的RPC接口以及開源錢包項目,以供讀者參考。
2.1Bitcoin
2.1.1RPC
OriginalBitcoinclient/APIcallslist
APIreference(JSON-RPC)
JSONRPCAPI
2.1.2Wallet
BitcoinCore,官方出品
bitcoinj,比特幣協議Java版
bither,簡單安全的比特幣錢包
Electrum,全平臺輕錢包
bread,iOS錢包
Mycelium,Android錢包
Copay,同時支持Bitcoin和BitcoinCash
bitcoin-wallet,又一款Android錢包
DotNetWallet,.NET