主页 > 苹果手机安装imtoken > 比特币交易系统源码_什么是比特币开源代码
比特币交易系统源码_什么是比特币开源代码
大家好,又见面了,我是你们的朋友全丈君。 如需激活码,请点击查看最新教程,关注公众号“全栈程序员社区”获取激活教程,上一版教程可能已过期。 最新Idea2022.1教程亲测有效,一键激活。
全系列Jetbrains IDE稳定使用安全
探索比特币源码3-熟悉RPC接口
Bitcoin Core 客户端实现了 JSON-RPC 接口,可以通过命令行助手 bitcoin-cli 或以编程方式访问。
本文主要探讨3点:
* 什么是JSON-RPC接口
* 使用bitcoin-cli进行JSON-RPC接口调用实验
* 区块链相关 RPC 接口的快速概览
在下一篇文章中,我们将重点介绍如何以编程方式调用Bitcoin Core的JSON-RPC
什么是JSON-RPC接口
作为一个我没有接触过的概念,什么是JSON-RPC?以下是我的一些简单理解,如有错误请指正
首先,RPC应该翻译为远程过程调用(Remote Procedure Call)比特币程序,它是一种通信协议,规定了运行在一台计算机上的程序如何调用另一台计算机程序提供的接口或方法。
因此,我认为RPC可以理解为一种API,而JSON-RPC显然是RPC协议中的一种。 通信传输的数据格式为JSON,即JavaScript object notation。
当你想在服务器端调用JSON-RPC接口时,你需要发送一个JSON格式的请求。
同样,当你成功发起一个RPC调用时(除非是通知类型的请求),服务器也会响应,响应返回一个JSON对象。
请求对象包含以下成员:
* jsonrpc
* 方法
*参数
* ID
响应对象包含以下成员:
* jsonrpc
* 结果
* 错误
* ID
其中 jsonrpc 是协议版本
method是请求调用的方法名,params是其对应的参数
result为response的调用结果
error 用于描述调用中的错误和类型
id的作用应该是方便调用者将请求和响应一一对应
这是一组 JSON-RPC 调用和响应的示例
--> {
"jsonrpc": "2.0", "method": "subtract", "params": {
"subtrahend": 23, "minuend": 42}, "id": 3}
<-- {
"jsonrpc": "2.0", "result": 19, "id": 3}
本例模拟调用RPC接口,在服务端执行“subtract”方法。 该方法实现了一个减法函数,使用“params”来指定该方法的参数。 然后,服务器返回响应结果:42-23=19
更详细的解释和调用示例请参考wikiJSON-RPC
使用bitcoin-cli进行JSON-RPC接口调用实验
与之前文章中使用的 bitcoin-cli getblockchaininfo 一样,命令行助手 bitcoin-cli 提供对比特币核心客户端 JSON-RPC 接口的访问。
我们来做一些调用的交互实验,首先使用help命令查看所有可用的RPC接口:
$ bitcoin-cli help
== Blockchain ==
getbestblockhash
getblock "blockhash" ( verbosity )
getblockchaininfo
getblockcount
...
== Control ==
getmemoryinfo ("mode")
help ( "command" )
logging ( )
stop
uptime
== Generating ==
generate nblocks ( maxtries )
generatetoaddress nblocks address (maxtries)
== Mining ==
getblocktemplate ( TemplateRequest )
getmininginfo
getnetworkhashps ( nblocks height )
prioritisetransaction
submitblock "hexdata" ( "dummy" )
== Network ==
addnode "node" "add|remove|onetry"
clearbanned
disconnectnode "[address]" [nodeid]
getaddednodeinfo ( "node" )
...
== Rawtransactions ==
combinerawtransaction ["hexstring",...]
createrawtransaction [{
"txid":"id","vout":n},...] {
"address":amount,"data":"hex",...} ( locktime ) ( replaceable )
decoderawtransaction "hexstring" ( iswitness )
decodescript "hexstring"
...
== Util ==
createmultisig nrequired ["key",...]
estimatefee nblocks
estimatesmartfee conf_target ("estimate_mode")
signmessagewithprivkey "privkey" "message"
validateaddress "address"
verifymessage "address" "signature" "message"
== Wallet ==
abandontransaction "txid"
abortrescan
addmultisigaddress nrequired ["key",...] ( "account" "address_type" )
backupwallet "destination"
...
可以看到,所有的RPC接口都分为区块链、控制、生成、挖矿、网络、交易、应用、钱包等模块。
下面以Blockchain类下的命令为例进行探讨
找到RPC接口名称后,可以进一步使用help获取对应命令的更多帮助,包括详细的描述和参数信息
$ bitcoin-cli help getbestblockhash
getbestblockhash
Returns the hash of the best (tip) block in the longest blockchain.
Result:
"hex" (string) the block hash hex encoded
Examples:
> bitcoin-cli getbestblockhash
> curl --user myusername --data-binary '{
"jsonrpc": "1.0", "id":"curltest", "method": "getbestblockhash", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/
以上为使用help进一步获取getbestblockhash命令的帮助信息
快速浏览区块链相关的 RPC 接口
我在比较区块链浏览器学习比特币RPC接口时使用help命令
在这个过程中,会很枯燥,理解上会遇到很多障碍比特币程序,但是可以加深对比特币客户端的功能和区块链中的一些术语概念的理解,不妨一试。
以下是我总结的所有区块链相关功能的RPC命令的简单解释,可以用来快速查找和熟悉界面。
打算在使用的时候学习其他模块的相关RPC接口,以提高学习比特币源码的进度。
getblock“blockhash”(冗长)
获取指定哈希值对应的区块的区块信息
获取区块链信息
获取区块链运行的各种状态信息,比如当前区块高度、是否处于初始化区块同步阶段、区块链数据占用磁盘大小的预估值等。
获取块数
获取最长链中的块数
getblockhashheight
获取最长链中指定高度的区块的哈希值
getblockheader“哈希”(详细)
获取指定哈希值对应的区块的区块头
获取链条提示
获取区块树的所有已知提示,包括主链和孤儿分支
getchaintxstats(nblocks 区块哈希)
获取区块链中交易总数和比例的统计信息
遇到困难
获得工作证明的难度(以最小难度的倍数返回)
getmempoolancestors txid(详细)
获取内存池中指定交易的所有父交易
getmempooldescendants txid(详细)
获取内存池中指定交易的所有子交易
getmempoolentry-txid
获取指定交易的内存池数据
获取内存池信息
获取有关交易内存池状态的详细信息
getrawmempool(详细)
获取内存池中的所有交易信息
gettxout "txid" n (include_mempool)
获取未花费交易输出(utxo)的详细信息
gettxoutproof[“txid”,…](区块哈希)
获取某个交易“txid”包含在某个区块中的证明
获取输出信息
获取 utxo 集合的统计信息
珍贵的区块“blockhash”
将一个块视为比具有相同工作量的其他块更早收到
修剪区块链
将区块链裁剪到指定的高度或时间戳
保存内存池
将内存池中的数据存储到磁盘
验证链(检查级别 nblocks)
验证区块链数据库,可以设置验证次数、彻底性等。
verifytxoutproof“证明”
验证一笔交易的凭证,并返回凭证对应的交易