如何将量子链引入业务系统,使用JSON-RPC与钱包通信(内附区块链学习论,个人理解,欢迎交流)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maxiao124/article/details/82914954

提示

Tip1.本文适合想要深入了解区块链技术的人员阅读
Tip2.本文适合需要在业务系统中引入比特币/量子链的技术人员阅读

引言

入门区块链技术之前,如果对于去中心化有一定了解,这无疑将帮助你更好的理解区块链的底层技术;区块链的底层技术由密码学共识算法点对点网络组成;在学习每个部分之前,如果你能够对于为什么需要这样的技术有一个大概的认识,必可让你事半功倍。

在这儿给大家推荐两本书:《精通比特币》《比特币白皮书:一种点对点的电子现金系统》

缘何量子链

相比量子链,对于身处币圈外的人们,更为熟知的是比特币以太坊;这是当然,作为区块链1.0,2.0的代表,比特币和以太坊无疑受到了人们更多的关注。
量子链基于UTXO,相比比特币,将量子链好好挖掘一番的成本自然要比去同步9年数据的比特币的成本要低的多。

钱包的安装与使用

安装篇

因为我们的钱包需要用于开发,所以下载安装轻钱包是无济于事的,下面是全节点钱包下载地址:
https://github.com/qtumproject/qtum/releases
大家可以根据自己的系统自行选择下载二进制文件进行安装;当时我在搭建本地环境的时候(Windows),32位,64位的4个版本全部进行了试安装,全部无法同步区块数据,后来换了老版本,这才可以;当时的版本号不记得了…

在测试网络运行钱包节点

在安装好之后,建议大家启动测试网络来运行钱包,毕竟正式网络的交易,是需要实实在在的QTUM的;

启动方式一:通过图形化界面启动,testnet即为测试网络

testnet即为测试网络

启动方式二:通过命令行启动

通过命令行进入daemon目录,执行如下命令:

// --daemon参数代表进程在后台驻留
qtumd --daemon --testnet

启动注意事项

第一次启动之后,会提示你定义新的datadir还是使用默认datadir,此处建议大家使用自定义datadir来存储数据,因为随着区块的生成,datadir会越来越大

图形化界面操作

关于图形化界面的一些基本操作本文略过,可以查看:
https://forum.qtum.org/topic/542/qtum量子链钱包使用指南
需要注意的是,设置passphrase来保护你的钱包,这一点尤为重要

获取测试网络QTUM

启动成功之后开始同步区块数据,同步完成之后,大家就可以测试钱包功能了,可以通过朋友给你转一些QTUM,或者自行获取QTUM,获取地址如下:
http://testnet-faucet.qtum.info/#!/

通过qtum-cli访问钱包

接下来,我们通过qtum-cli访问钱包,注意,通过该项命令访问钱包有两点需要注意:
1.使用该项命令需要指定datadir,除非是默认datadir
2.后续因为我们要通过JSON-RPC访问钱包,此处可以提前配置好qtum.conf

qtum.conf配置文件

文件模板如下:
https://github.com/qtumproject/qtum/blob/1a926b980f03e97322c7dd787835bec1730f35d2/contrib/debian/examples/qtum.conf
将该文件放置到datadir,并在文件中定义rpcuserrpcpasswordrpcport,设置完成后重启节点,配置即可生效

qtum-cli命令示例

qtum-cli getinfo -->该命令在0.16版本之后会被移除,取而代之的是getblockchaininfo, getnetworkinfo, getwalletinfo
qtum-cli getblockchaininfo -->查看区块信息
qtum-cli getnetworkinfo -->查看网络信息
qtum-cli getwalletinfo -->查看钱包信息,会显示balance、txcount等信息
qtum-cli getnewaddress -->获得一个新地址
qtum-cli validateaddress -->校验该地址是否属于该网络
qtum-cli getaccountaddress -->查看指定账户地址,如果帐户不存在,则会返回一个新的地址
qtum-cli getaddressesbyaccount -->查看指定账户所有地址
qtum-cli getaccount -->查看指定地址所属账户
qtum-cli sendfrom -->转账
qtum-cli getbalance -->查看钱包余额:1.如果后面不带任何参数,返回的是钱包余额;2.如果后面携带账户参数,返回的是账户余额
qtum-cli listunspent -->查看钱包UTXO,可选参数也可查看指定地址UTXO
qtum-cli listaccounts -->查看所有账户余额
qtum-cli listtransactions -->查看钱包所有交易
qtum-cli gettransaction -->根据txid查询交易
qtum-cli getrawtransaction -->The serialized, hex-encoded data for ‘txid’
qtum-cli decoderawtransaction -->查看某个交易的详细信息
qtum-cli walletpassphrase -->解锁钱包,可选参数可以指定解锁时间
qtum-cli getstakinginfo -->查看Staking状态
qtum-cli stop -->停止运行服务端

另外:qtum-cli help 可以展示所有命令,由于目前官方并没有提供API文档,所以更多情况下,我们需要使用help命令来查看每个命令如何使用,譬如功能,入参,出参的描述

qtum-cli help $commad$

注意:上面所有的命令在使用的时候,你都需要指定datadir,除非是默认目录,譬如你要使用help命令,正确的姿势是:

qtum-cli.exe --datadir=E:\qtum help

当然,你也可以去查阅比特币的API calls list,量子链的API与比特币的API基本上是一致的,地址如下:
https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

JSON-RPC访问钱包-Postman

你可以通过Postman来检验你的配置是否生效,你需要在请求中定义Basic Auth,也就是你的rpcuser,rpcpassword
Postman使用JSON-RPC访问钱包

恭喜你,测试通过!!!

JSON-RPC访问钱包-代码

这个时候,就该考虑我们的项目中如何去访问钱包API了,目前主流语言都拥有一些成熟的JSON-RPC库,如java语言的jsonrpc4j,使用方法在官方的README当中也有详细的介绍:
https://github.com/briandilley/jsonrpc4j
注意:需要对rpcuser和rpcpassword进行base64编码,添加到请求的Basic Auth中,可以使用jsonrpc4j库提供的net.iharder.Base64进行如下处理:

String encodeBytes = Base64.encodeBytes((username + ":" + password).getBytes());
headers.put("Authorization", "Basic " + encodeBytes);

最终的目标

当然,这些准备工作完成之后,根据业务系统需求,就要涉及数据库表结构设计,考虑如何完成整个业务链的问题了。

备注:区块链方面资料,相对而言,并不如其他技术体系完善,多数情况下自行摸索需要耗费不少时间,当然,这是不可避免的;同时社区的力量不可小视,他们往往能在你焦头烂额之时,直击问题的核心,可谓是柳暗花明又一村。

猜你喜欢

转载自blog.csdn.net/maxiao124/article/details/82914954