鏈客,專爲開發者而生,有問必答!程序員
此文章來自區塊鏈技術社區,未經容許拒絕轉載。web
0x00 預備知識
開發錢包以前,咱們須要有如下的預備知識。編程
第一,什麼是錢包,以及相關的分類。json
筆者以前寫了數篇關於 錢包 的文章,但都是作了個簡單的介紹。本文站在開發者的角度,給讀者講解下怎麼樣和錢包進行交互,以及如何開發一個錢包。瀏覽器
咱們怎麼樣理解錢包呢?簡單講它是鏈接區塊鏈的一個入口。目前比較成熟的公鏈,如比特幣、以太坊都有不少錢包能夠選擇。通常錢包須要徹底訪問你的用戶資產,也就是會要求你輸入私鑰。錢包的做惡成本極低,這也是筆者建議選擇開源錢包的緣由之一。安全
第二,須要瞭解下什麼是 RPC、JSON-RPC 以及 JSON。服務器
遠程過程調用(英語:Remote Procedure Call,縮寫爲 RPC)是一個計算機通訊協議。該協議容許運行於一臺計算機的程序調用另外一臺計算機的子程序,而程序員無需額外地爲這個交互做用編程。若是涉及的軟件採用面向對象編程,那麼遠程過程調用亦可稱做遠程調用或遠程方法調用,例:Java RMI。[1]網絡
RPC 的主要功能目標是讓構建分佈式計算(應用)更容易,在提供強大的遠程調用能力時不損失本地調用的語義簡潔性。數據結構
RPC 調用分爲如下兩種:異步
同步調用,客戶方等待調用執行完成並返回結果。
異步調用,客戶方調用後不用等待執行結果返回,但依然能夠經過回調通知等方式獲取返回結果。若客戶方不關心調用返回結果,則變成單向異步調用,單向調用不用返回結果。
異步和同步的區分在因而否等待服務端執行完成並返回結果。
遠程過程調用是一個分佈式計算的客戶端 - 服務器(Client/Server)的例子,它簡單而又廣受歡迎。遠程過程調用老是由客戶端對服務器發出一個執行若干過程請求,並用客戶端提供的參數。執行結果將返回給客戶端。因爲存在各式各樣的變體和細節差別,對應地派生了各式遠程過程調用協議,並且它們並不互相兼容。其中咱們廣爲使用的是一個叫作 JSON-RPC 的協議。
JSON-RPC,是一個無狀態且輕量級的遠程過程調用(RPC)傳送協議,其傳遞內容經過 JSON 爲主。相較於通常的 REST 經過網址(如 GET /user)調用遠程服務器,JSON-RPC 直接在內容中定義了欲調用的函數名稱(如 {"method": "getUser"}),這也令開發者不會陷於該使用 PUT 或者 PATCH 的問題之中。 本規範主要定義了一些數據結構及其相關的處理規則。它容許運行在基於 Socket、HTTP 等諸多不一樣消息傳輸環境的同一進程中。其使用 JSON(RFC 4627)做爲數據格式。[2]
JSON-RPC 使用了 JSON 格式,那 JSON 是什麼呢?
JSON(JavaScript Object Notation)是一種輕量級的數據交換語言。 使用 JSON 作數據交換的好處在於,一是兼容性高,二是可閱讀性高,三是支持較多的數據格式(好比 number, string, booleans, nulls, array, associative array),四是支持的語言較多。
第三,瞭解區塊鏈相關的基礎知識。
瞭解區塊鏈,書籍資料不用,一本 精通比特幣 足矣。這裏就不贅述了。
第四,掌握一門開發語言。
若是你是一門經驗豐富的程序員,此條預備知識能夠忽略。若是你是一名非計算機科班出身的區塊鏈技術愛好者,建議從 Python 入手。同時,多瞭解下 JavaScript。
0x01 怎麼樣開發
假設咱們把預備知識都瞭解了,接下來咱們須要閱讀比特幣和以太坊的 RPC 接口。
咱們以比特幣爲例,根據 Original Bitcoin client/API calls list 文檔咱們能夠獲得 RPC 接口提供的函數列表。
以 sendrawtransaction 爲例,這個函數列表提供了四列(Command、Parameters、Description、Requires unlocked wallet? ),分別表示函數名、傳入參數、描述、是否須要解鎖錢包。
咱們把這個函數列表掌握以後,能夠選擇某一種語言,而後進行區塊鏈錢包相關的開發。
固然,你還須要知道怎麼樣去部署一個比特幣的徹底節點和測試網絡,這樣就能夠利用 RPC 進行接口調用,來和區塊鏈網絡進行交互。
0x02 相關文檔以及源碼
這裏列出主流項目相關的 RPC 接口以及開源錢包項目,以供讀者參考。
2.1 Bitcoin
2.1.1 RPC
Original Bitcoin client/API calls list
API reference (JSON-RPC)
JSON RPC API
2.1.2 Wallet
Bitcoin Core,官方出品
bitcoinj,比特幣協議 Java 版
bither,簡單安全的比特幣錢包
Electrum,全平臺輕錢包
bread,iOS 錢包
Mycelium,Android 錢包
Copay,同時支持 Bitcoin 和 Bitcoin Cash
bitcoin-wallet,又一款 Android 錢包
DotNetWallet,.NET 實現的錢包
Coinpunk,基於瀏覽器的錢包
btcwallet,Go 實現的錢包
2.2 Ethereum/ERC20
2.2.1 RPC
JSON RPC
JSON RPC API
Management APIs
ethjsonrpc
web3.py
2.2.2 Wallet
go-ethereum,以太坊協議 Go 版
Mist,官方出品
Parity,支持 Windows、Mac、PC 的錢包
MetaMask
MyEtherWallet,基於瀏覽器的錢包
eth-lightwallet,輕量級 JavasSript 版本錢包
ethaddress.org,紙質版錢包生成器
Иeureal Wallet,支持 Windows、Mac、PC 的錢包
2.3 其餘
2.3.1 Zcash
Zcash,官方出品
2.3.2 BitShares
BitShares,官方出品
2.3.3 Sia
Sia,官方出品
2.3.4 Nem
NanoWallet,官方出品
2.3.5 Dash
Dash,官方出品
2.3.6 Qtum
Qtum Core Wallet,官方出品
2.3.7 Litecoin
Litecoin,官方出品
2.3.8 IOTA
IOTA Wallet,官方出品
2.3.9 Monero
Monero,官方出品
2.3.10 GXS
GXS Wallet for mobile,官方出品
2.3.11 Ethereum Classic
Ethereum Classic Wallet,官方出品
0x03 小結
本文講解了開發錢包的預備知識,包括第一是什麼是錢包,以及相關的分類,第二是 RPC、JSON-RPC 以及 JSON,第三是瞭解區塊鏈相關的基礎知識,第四是掌握一門開發語言。接着淺談了怎麼樣開發,最後列出了主流項目相關的 RPC 接口以及開源錢包項目。若是讀者對錢包開發感興趣,但願本文可以給讀者一個指引。
0x04 參考
[1] 維基百科 (2006-07-21). 遠程過程調用. Retrieved from https://zh.wikipedia.org/wiki...
[2] 維基百科 (2017-04-19). JSON-RPC. Retrieved from https://zh.wikipedia.org/wiki...