本文由币乎社群(bihu.com)内容支援計劃獎勵。
這是「區塊鍊技術指北」的第 21 篇文章。
如果對我感興趣,想和我交流,我的微信号:Wentasy,加我時簡單介紹下自己,并注明來自「區塊鍊技術指北」。同時我會把你拉入微信群「區塊鍊技術指北」。BTW,李笑來老師也加入了我的知識星球,文末有加入方式。
0x00 預備知識
開發錢包之前,我們需要有以下的預備知識。
第一,什麼是錢包,以及相關的分類。
筆者之前寫了數篇關于 錢包 的文章,但都是做了個簡單的介紹。本文站在開發者的角度,給讀者講解下怎麼樣和錢包進行互動,以及如何開發一個錢包。
我們怎麼樣了解錢包呢?簡單講它是連接配接區塊鍊的一個入口。目前比較成熟的公鍊,如比特币、以太坊都有很多錢包可以選擇。一般錢包需要完全通路你的使用者資産,也就是會要求你輸入私鑰。錢包的作惡成本極低,這也是筆者建議選擇開源錢包的原因之一。
第二,需要了解下什麼是 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
- 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/JSON-RPC.
原文釋出時間為:2018-01-21
本文作者:區塊鍊技術指北
本文來源:
騰訊雲 雲+社群,如需轉載請聯系原作者。