文/robin

本文由

幣乎

社群(

http://

bihu。com

)內容支援計劃獎勵。

這是「區塊鏈技術指北」的第 21 篇文章。

如果對我感興趣,想和我交流,我的微訊號:

Wentasy

,加我時簡單介紹下自己,並註明來自「

區塊鏈技術指北

」。同時我會把你拉入微信群「區塊鏈技術指北」。BTW,李笑來老師也加入了我的

知識星球

,文末有加入方式。

0x00 預備知識

開發錢包之前,我們需要有以下的預備知識。

第一,什麼是錢包,以及相關的分類。

筆者之前寫了數篇關於 錢包 的文章,但都是做了個簡單的介紹。本文站在開發者的角度,給讀者講解下怎麼樣和錢包進行互動,以及如何開發一個錢包。

我們怎麼樣理解錢包呢?

簡單講它是連線區塊鏈的一個入口

。目前比較成熟的公鏈,如比特幣、以太坊都有很多錢包可以選擇。一般錢包需要完全訪問你的使用者資產,也就是會要求你輸入私鑰。錢包的作惡成本極低,這也是筆者建議選擇開源錢包的原因之一。

區塊鏈錢包開發

題圖來自: © admin / Delphi White Paper Interpretation /

http://

8855104。com

第二,需要了解下什麼是

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/J

SON-RPC

「區塊鏈技術指北」同名

知識星球

,二維碼如下,歡迎加入。BTW,

李笑來老師也加入了

區塊鏈錢包開發

「區塊鏈技術指北」相關資訊渠道:

「區塊鏈技術指北」同名知識星球,

https://

t。xiaomiquan。com/ZRbmaU

3

官方社群,https://bcage。one

Telegram Channel,

https://

t。me/BlockchainAge

Telegram Group,

https://

t。me/bcage

Twitter,

https://

twitter。com/bcageone

新浪微博,

https://

weibo。com/BlockchainAge

同時,本系列文章會在以下渠道同步更新,歡迎關注:

「區塊鏈技術指北」同名微信公眾號(微訊號:BlockchainAge)

個人部落格,https://dbarobin。com

知乎,

https://

zhuanlan。zhihu。com/robi

nwen

Steemit,[

https://

steemit。com/

@robinwen](

https://

steemit。com/

@robinwen)

Medium,[

https://

medium。com/

@robinwan](

https://

medium。com/

@robinwan)

原創不易,讀者可以透過如下途徑打賞,虛擬貨幣、美元、法幣均支援。

BTC: 3QboL2k5HfKjKDrEYtQAKubWCjx9CX7i8f

ERC20 Token: 0x8907B2ed72A1E2D283c04613536Fac4270C9F0b3

PayPal:

https://www。

paypal。me/robinwen

微信打賞二維碼

區塊鏈錢包開發

–EOF–

版權宣告:自由轉載-非商用-非衍生-保持署名(創意共享4。0許可證)