比特币交易系统源码_比特币开源代码是什么

比特币交易系统源码_比特币开源代码是什么探索比特币源码3-熟悉RPC接口比特币核心客户端实现了JSON-RPC接口,这个接口可以通过命令行帮助程序bitcoin-cli访问,也可以通过编程的形式在程序中访问。本文主要探索3点:*什么是JSON-RPC接口*使用bitcoin-cli进行JSON-RPC接口调用实验*区块链相关RPC接口快速一览在下一文中我们重点研究如何通过编程的形式调用Bitcoi…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

探索比特币源码3-熟悉RPC接口

比特币核心客户端实现了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对象符号。

当你想调用服务器端的JSON-RPC接口,你需要发送一个JSON格式的请求。

同样,当你成功发起一个RPC调用后(除非是通知类型的请求),服务端也会进行响应,响应返回一个JSON对象。

一个请求对象包含下列成员:
* jsonrpc
* method
* params
* id

一个响应对象包含下列成员:
* jsonrpc
* result
* error
* id

其中,jsonrpc是协议版本

method是请求调用的方法名称,params是其对应的参数

result是响应的调用结果

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提供了对Bitcoin Core客户端JSON-RPC接口的访问。

我们来进行一些调用的交互实验,首先使用help命令查看所有可用的RPC接口:

$ bitcoin-cli help
== Blockchain ==
getbestblockhash
getblock "blockhash" ( verbosity )
getblockchaininfo
getblockcount
...

== Control ==
getmemoryinfo ("mode")
help ( "command" )
logging ( <include> <exclude> )
stop
uptime

== Generating ==
generate nblocks ( maxtries )
generatetoaddress nblocks address (maxtries)

== Mining ==
getblocktemplate ( TemplateRequest )
getmininginfo
getnetworkhashps ( nblocks height )
prioritisetransaction <txid> <dummy value> <fee delta>
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接口快速一览

我是一边使用help命令,一边对照区块链浏览器来对比特币RPC接口进行学习的

这个过程中,会很枯燥并且会遇到很多理解上的障碍,但可以对比特币客户端具有的功能和区块链中的一些术语概念加深理解,不妨试试。

下面是我总结的区块链相关功能所有RPC命令的简单解释,可以用于快速的查找和熟悉接口。

其余模块的相关RPC接口我打算用到时再学习,这样能提升下学习比特币源码的进度。

getblock “blockhash” ( verbosity )

获取指定hash值对应区块的区块信息

getblockchaininfo

获取区块链运行的各种状态信息,例如当前区块高度,是否处于初始化区块同步阶段,区块链数据占用磁盘大小的估计值等等。

getblockcount

获取最长链中的区块数量

getblockhash height

获取最长链中指定高度区块的hash值

getblockheader “hash” ( verbose )

获取指定hash值对应区块的区块头

getchaintips

获取区块树所有已知的提示信息,包括主链和孤立分支

getchaintxstats ( nblocks blockhash )

获取有关区块链中交易总数和比率的统计数据

getdifficulty

获取工作量证明的难度(作为最小难度的倍数返回)

getmempoolancestors txid (verbose)

获取mempool中指定交易的所有父交易

getmempooldescendants txid (verbose)

获取mempool中指定交易的所有子交易

getmempoolentry txid

获取指定交易的内存池数据

getmempoolinfo

获取交易内存池状态的详细信息

getrawmempool ( verbose )

获取内存池中所有的交易信息

gettxout “txid” n ( include_mempool )

获取一个未花费交易输出(utxo)的详细信息

gettxoutproof [“txid”,…] ( blockhash )

获取某一个交易”txid”被包含于某一个区块中的证明

gettxoutsetinfo

获取utxo集合的统计信息

preciousblock “blockhash”

将一个区块视为在同样工作量下比其他区块更早地被接收

pruneblockchain

将区块链裁剪到指定的高度或时间戳

savemempool

将内存池中数据存储到磁盘

verifychain ( checklevel nblocks )

验证区块链数据库,可以设置验证的数量,彻底程度等

verifytxoutproof “proof”

验证一个交易的凭证,返回凭证对应的交易

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184132.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux系统定时任务「建议收藏」

    Linux系统定时任务定时任务CrondCrond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6linux操作系统之后,默认便会启动Crond任务调度服务。Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定…

    2022年4月16日
    46
  • Django(10)ORM模型介绍[通俗易懂]

    Django(10)ORM模型介绍[通俗易懂]前言随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了:1.SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的SQL语句。2.

    2022年7月28日
    8
  • navcat 15激活码(JetBrains全家桶)

    (navcat 15激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    88
  • Conda命令 + 安装tensorflow

    Conda命令 + 安装tensorflow什么是conda?conda是开源包(packages)和虚拟环境(environment)的管理系统。**packages管理:**可以使用conda来安装、更新、卸载工具包,并且它更关注于数据科学相关的工具包。在安装anaconda时就预先集成了像Numpy、Scipy、pandas、Scikit-learn这些在数据分析中常用的包。另外值得一提的是,cond…

    2022年4月19日
    154
  • MSYS以及MinGW安装

    MSYS以及MinGW安装MSYS以及MinGW安装文章目录MSYS以及MinGW安装下载并安装MSYS安装基础运行库(glibc,cmake,make等)下载并安装MSYS下载传送门点击下载Windows64bit,双击安装选择安装目录安装完成!!!安装基础运行库(glibc,cmake,make等)$pacman-Syu$pacman-Su$pacman-S–neededbase-develmingw-w64-x86_64-toolchain基础运行库安装完成,现在可以编译Co

    2022年6月16日
    35
  • IntelliJ IDEA创建maven web项目(IDEA新手适用)

    IntelliJ IDEA创建maven web项目(IDEA新手适用)PS:从eclipse刚转到IDEA,对于这个陌生的工具我表示无言,但听说很好用,也就试试,结果我几乎花了一晚上的时间才搭起来mavenweb项目,觉得在此给各位一个搭建mavenweb项目的教程,指出我踩过的各种坑!步骤一:首先先创建一个project,在这里就是创建一个maven的工作空间步骤二:按照下面的步骤操作就可以了,最后next首先,选择左边的maven然后在右…

    2022年6月26日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号