【汇新云】为大家定期更新文章,【汇新云】IT软硬件项目商务平台
开发钱包之前,我们需要有以下的预备知识。
第一,什么是钱包,以及相关的分类。
本文站在开发者的角度,给读者讲解下怎么样和钱包进行交互,以及如何开发一个钱包。
我们怎么样理解钱包呢?简单讲它是连接区块链的一个入口。目前比较成熟的公链,如比特币、以太坊都有很多钱包可以选择。一般钱包需要完全访问你的用户资产,也就是会要求你输入私钥。钱包的作恶成本极低,这也是笔者建议选择开源钱包的原因之一。
题图来自: © admin / Delphi White Paper Interpretation / 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。
假设我们把预备知识都了解了,接下来我们需要阅读比特币和以太坊的 RPC 接口。
我们以比特币为例,根据 Original Bitcoin client/API calls list 文档我们可以得到 RPC 接口提供的函数列表。
以 sendrawtransaction 为例,这个函数列表提供了四列(Command、Parameters、Description、Requires unlocked wallet? ),分别表示函数名、传入参数、描述、是否需要解锁钱包。
我们把这个函数列表掌握之后,可以选择某一种语言,然后进行区块链钱包相关的开发。
当然,你还需要知道怎么样去部署一个比特币的完全节点和测试网络,这样就可以利用 RPC 进行接口调用,来和区块链网络进行交互。
这里列出主流项目相关的 RPC 接口以及开源钱包项目,以供读者参考。
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.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.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,官方出品
本文讲解了开发钱包的预备知识,包括第一是什么是钱包,以及相关的分类,第二是 RPC、JSON-RPC 以及 JSON,第三是了解区块链相关的基础知识,第四是掌握一门开发语言。接着浅谈了怎么样开发,最后列出了主流项目相关的 RPC 接口以及开源钱包项目。如果读者对钱包开发感兴趣,希望本文能够给读者一个指引。
[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.
学好区块链,单笔项目百万+不是梦:
区块链产品经理(点击入驻),能力不够也来混个脸熟。