區塊鏈錢包開發
本文由幣乎社群(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
- 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/JSON-RPC.
原文釋出時間為:2018-01-21
本文作者:區塊鏈技術指北
本文來源:騰訊雲 雲+社群,如需轉載請聯絡原作者。
相關文章
- 區塊鏈技術開發 區塊鏈錢包交易所開發區塊鏈
- 區塊鏈錢包開發(Android篇)區塊鏈Android
- 區塊鏈錢包開發與型別區塊鏈型別
- 什麼是區塊鏈錢包開發區塊鏈
- 區塊鏈錢包支付系統:區塊鏈支付平臺開發區塊鏈
- 區塊鏈錢包系統開發:區塊鏈支付平臺系統開發區塊鏈
- 區塊鏈錢包開發,數字貨幣錢包開發的型別區塊鏈型別
- Kcash區塊鏈錢包系統app開發區塊鏈APP
- 區塊鏈多幣種錢包開發區塊鏈交易平臺搭建區塊鏈
- 鏈遊開發:區塊鏈錢包開發的4大難題區塊鏈
- 區塊鏈多鏈錢包開發詳情版丨區塊鏈多鏈錢包系統開發實現技術方案及邏輯區塊鏈
- 區塊鏈錢包之ETH錢包生成區塊鏈
- 區塊鏈錢包開發方案詳細介紹區塊鏈
- 區塊鏈數字錢包系統開發方案區塊鏈
- 區塊鏈去中化錢包開發方案,交易所錢包社交軟體開發區塊鏈
- 從區塊鏈公司角度,分析區塊鏈錢包區塊鏈
- 區塊鏈DAPP錢包開發,波場DAPP開發錢包區塊鏈APP
- 區塊鏈錢包之BTC錢包地址生成區塊鏈
- 區塊鏈錢包系統去中心化錢包模式開發案例詳情區塊鏈中心化模式
- 區塊鏈數字錢包開發詳細介紹區塊鏈
- 區塊鏈錢包系統開發,數字貨幣高頻搬磚錢包app開發區塊鏈APP
- 多幣種數字錢包開發及區塊鏈數字錢包系統區塊鏈
- 區塊鏈挖礦錢包系統開發技術搭建區塊鏈
- 去中心化區塊鏈錢包支付系統開發模式中心化區塊鏈模式
- 淺談區塊鏈錢包開發的功能及優勢區塊鏈
- 區塊鏈錢包科普知識區塊鏈
- 什麼是區塊鏈錢包區塊鏈
- 區塊鏈錢包的技能原理區塊鏈
- 區塊鏈錢包-android篇區塊鏈Android
- 區塊鏈錢包開發,交易所開發方案,社交軟體搭建區塊鏈
- 區塊鏈數字錢包系統開發方案,去中化多幣種錢包搭建區塊鏈
- 區塊鏈技術數字貨幣錢包開發哪家好區塊鏈
- 區塊鏈錢包APP應用開發到底需要些什麼區塊鏈APP
- 區塊鏈技術交易系統開發Token多幣種錢包開發區塊鏈
- 長沙讀懂區塊鏈錢包!區塊鏈
- 區塊鏈錢包開發解決方案六個重點介紹區塊鏈
- 數字資產錢包交易所開發區塊鏈資產交易搭建區塊鏈
- 區塊鏈錢包分析第15期-Kcash區塊鏈