区块链钱包开发

简介:

本文由币乎社区(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
本文作者:区块链技术指北
本文来源:腾讯云 云+社区,如需转载请联系原作者。

目录
相关文章
|
7月前
|
安全 JavaScript 前端开发
区块链钱包系统开发解决方案/需求设计/功能逻辑/案例详细/源码步骤
The development of a blockchain wallet system involves multiple aspects, and the following is the detailed logic for developing a blockchain wallet system:
|
4月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
1月前
|
存储 开发框架 安全
揭秘区块链:以太坊智能合约开发的奥秘与挑战,你准备好迎接未来了吗?
【10月更文挑战第25天】本文介绍了区块链技术的基本概念及其核心特点,重点讲解了以太坊智能合约的开发流程和实际开发中的注意事项。通过安装 Truffle、Ganache 和 Remix 等工具,读者可以快速上手编写、编译、部署和测试智能合约。文章还对比了以太坊去中心化应用与传统集中式应用的优势和挑战,帮助读者全面了解以太坊智能合约开发。
32 0
|
7月前
|
供应链 安全 物联网
【专栏】区块链和智能合约的未来发展潜力巨大,期待更多创新应用
【4月更文挑战第27天】本文探讨了区块链技术与智能合约的边界及挑战。区块链,以其不可篡改和安全特性,广泛应用于金融、供应链和物联网等领域。智能合约作为区块链上的自动执行代码,实现无需第三方的可信交易。然而,技术上面临扩展性、性能和安全问题,法律与监管层面也需适应智能合约的自动执行特性及跨境法律协调。尽管挑战重重,区块链和智能合约的未来发展潜力巨大,期待更多创新应用。
158 1
|
3月前
|
供应链 物联网 区块链
|
4月前
|
供应链 物联网 分布式数据库
探索区块链技术与智能合约开发的边界
随着信息技术的发展,区块链作为一种分布式数据库技术正深刻影响社会。本文探讨区块链基本原理及其在金融、供应链等领域的应用,并聚焦智能合约——一种自动执行且不可篡改的代码,介绍其开发流程与丰富案例。同时,文章分析了技术与法律层面面临的挑战,展望未来发展趋势。
66 4
|
4月前
|
区块链 C# 存储
链动未来:WPF与区块链的创新融合——从智能合约到去中心化应用,全方位解析开发安全可靠DApp的最佳路径
【8月更文挑战第31天】本文以问答形式详细介绍了区块链技术的特点及其在Windows Presentation Foundation(WPF)中的集成方法。通过示例代码展示了如何选择合适的区块链平台、创建智能合约,并在WPF应用中与其交互,实现安全可靠的消息存储和检索功能。希望这能为WPF开发者提供区块链技术应用的参考与灵感。
66 0
|
5月前
|
存储 安全 Java
基于Java的区块链数字身份认证系统设计与开发
基于Java的区块链数字身份认证系统设计与开发
|
6月前
|
供应链 物联网 分布式数据库
区块链技术与智能合约开发的边界究竟在哪里?
【6月更文挑战第10天】本文探讨了区块链技术与智能合约的界限和挑战。区块链,本质是分布式数据库,以其不可篡改性和安全性在金融、供应链和物联网等领域广泛应用。智能合约,作为区块链上的自动执行代码,无需第三方介入,确保了执行的自动性和安全性。然而,技术上面临扩展性、性能和安全问题,法律与监管层则需解决合规监管和跨国法律协调的难题。尽管如此,随着技术进步和应用场景拓展,区块链与智能合约的潜力和未来前景依然广阔。
80 2
|
6月前
|
敏捷开发 安全 测试技术
区块链开发团队DappNetWork
区块链开发团队由跨学科专家组成,包括区块链专家、智能合约开发者、系统架构师和测试工程师。团队负责战略规划、技术开发、系统测试和运维优化,需要深入理解区块链技术、安全性和敏捷开发。通过敏捷管理和自动化工具,团队实现高效协作,为金融、供应链等领域提供安全可靠的区块链应用解决方案。如需开发加V:DappNetWork