区块链钱包开发

文/温国兵

本文由币乎社区(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.

原文发布于微信公众号 - 区块链技术指北(BlockchainAge)

原文发表时间:2018-01-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客编程

使用truffle部署以太坊智能合约到区块链

truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一...

1293
来自专栏丑胖侠

以太坊Geth几种同步模式

同步模式分类 –fast Enable fast syncing through state downloads –light Enable light cli...

5059
来自专栏区块链领域

以太坊潜伏多年令全球黑客为之疯狂的“偷渡”漏洞引发偷币狂潮

世界上有一群人,互联网对于他们来说就是提款机。 是的,过去是,现在更是,因为电子货币的出现,他们提款的速度变得更疯狂。 在2017年,我们的蜜罐监测到一起针对以...

3609
来自专栏Netkiller

以太坊·Rinkeby 测试网络

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

6259
来自专栏极客编程

开发基于以太坊智能合约的DApp

最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原...

1802
来自专栏区块链领域

OneLedger最简可行产品(MVP)公告

本文中,我们会展示OneLedger MVP的演示视频。在视频中,我们展示了如何设置和初始化OneLedger本地测试网,注册身份并在我们的区块链上发布交易。

1133
来自专栏区块链入门

第七课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易

通过逐步的指导和截图举证,一步步带领一个技术小白完成一个数字货币(通证,代币,TOKEN)的发布演示和上线交易。

1272
来自专栏丑胖侠

以太坊客户端Ethereum Wallet与Geth区别简介

最近有不少朋友在搭建交易平台,在咨询和技术交流的过程中发现很多朋友不太清楚Ethereum Wallet和Geth区别。甚至有朋友使用Geth的API接口来调用...

5405
来自专栏申龙斌的程序人生

Bitcoin Core钱包常用的命令行参数

对于踏入币圈的朋友,我一直强烈建议要学习Bitcoin Core钱包软件,因为BitcoinCore这款全节点钱包是中本聪(比特币的发明人)最早实现的,虽然下载...

2002
来自专栏深入浅出区块链技术

分析比特币网络:一种去中心化、点对点的网络架构

14511

扫码关注云+社区

领取腾讯云代金券