区块链钱包开发

原文:https://blog.csdn.net/qq_39353009/article/details/79187567

开发钱包之前,我们需要有以下的预备知识。

第一,什么是钱包,以及相关的分类。

本文站在开发者的角度,给读者讲解下怎么样和钱包进行交互,以及如何开发一个钱包。

我们怎么样理解钱包呢?简单讲它是连接区块链的一个入口。目前比较成熟的公链,如比特币、以太坊都有很多钱包可以选择。一般钱包需要完全访问你的用户资产,也就是会要求你输入私钥。钱包的作恶成本极低,这也是笔者建议选择开源钱包的原因之一。


题图来自: © admin / Delphi White Paper Interpretation / 8855104.com

第二,需要了解下什么是 RPCJSON-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 参考



猜你喜欢

转载自blog.csdn.net/metal1/article/details/80890581