bitcoin学习rpc部分
涉及到的主要的文件
httprpc.h |
字节序列为大端表示
举例:
> bitcoin-cli getblock |
RPC 服务用来支持管理,钱包,查询(网路,区块数据)
如果使用 bitcoin-qt 默认 RPC 服务是关闭的。可以在配置文件 bitcoin.conf 中设置 server=1
或者启动时添加参数 -server
如果使用 bitcoind 默认 RPC 服务是开启的。
使用 RPC 服务需要认证,通过 rpcuser,rpcpassword 提供。bitcoin-cli 是客户端命令行工具用来访问 RPC 服务
RPC 服务监听端口mainnet 8332, testnet,regtest mode 18332,只支持 POST 操作
可以使用 rpcport 设置,默认监听本地端口,外部不能访问
使用 HTTP basic authentication 认证。 Content-Type=text/plain, Content-Length 设置为请求体长度
遵循 JSON-RPC 规范,
下面是目前了解到的所有命令。总共 101 个命令
新增命令
searchrawtransactions
新增命令,通过地址获取所有的 UTXOs
tyler@ubuntu16:~/Documents/primecoin-core-desktop-src$ ./src/primecoin-cli -rpcuser=user -rpcpassword=password searchrawtransactions AVAiurQjh4CsxsHoqfPzQxAF3tCU7jFNL7 |
curl --user user:password --data-binary '{"jsonrpc":"1.0", "id":"curltest", "method":"searchrawtransactions","params":["ATyjPcDsQgHgCjX5mi1U3xgrKp36QRiWVj"]}' -H 'content-type: text/plain;' http://103.84.87.82:9912/ |
getaddressbalance
Requires Config: addressindex=1
从已确认交易中查询一个或多个地址的余额,返回单位是 satoshis
下面是 PrimeCoin 地址
AUwoythQxMwt9qW32fcBvoAC716kg4mtGm
ANqptFgMreMPaWkDtduUtL4pCb4TD44rdD
AHmMUftyK8d6TNcExDmj9JPFxNNobGCgZZ
AUwoythQxMwt9qW32fcBvoAC716kg4mtGm 的 txid
2ba413e793f565715a0fc29a96d46c2ebc61788644b6b17e1f7ac835c96c2c41
AajqvJzE7yAiNucm1Rvrcju8rKNG3s8XQu 的 txid
2ba413e793f565715a0fc29a96d46c2ebc61788644b6b17e1f7ac835c96c2c41
ATyjPcDsQgHgCjX5mi1U3xgrKp36QRiWVj 的 txid
62d0db870af1a15aa4109ccb92737ea8735a5fa9eac6e46a5ba2b75dd356264a
bitcoin-cli getaddressbalance '{"addresses": ["12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX"]}' |
说明:received 是接收到的资产,包括从同一个地址收到的找零
使用 http 访问
curl --user user:password --data-binary '{"jsonrpc":"1.0", "id":"curltest", "method":"getaddressbalance","params":["{\"addresses\":[\"AaigSgLkYT638VT7DswGGzLszUXdDexo4b\",\"AaigSgLkYT638VT7DswGGzLszUXdDexo4b\"]}"]}' -H 'content-type: text/plain;' http://127.0.0.1:9912/ |
调试指令
r -printtoconsole -rpcuser=user -rpcpassword=password -txindex=1 -addrindex=1 |
getaddresstxids
Requires Config: addressindex=1
搜索涉及到一个或多个地址的 txids,按照块排序,最近的块在最下面。只包括确认的交易,可以指定块的高度范围。
root@szftest:/home/user# ./src/primecoin-cli -rpcuser=user -rpcpassword=password getaddresstxids '{"addresses": ["12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX"], "start": 220151, "end": 320261}' |
getaddressutxos
Requires Config: addressindex=1
返回一个或多个地址的未消费输出,只包括已确认交易,按照区块高度排序
~$ bitcoin-cli getaddressutxos '{"addresses": ["12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S"]}' |
Block Chain RPCs 20 个
GetBestBlockHash
主链的最近一个区块的 header hash
GetBlock
通过 header hash 获取区块 0.13.0 更新
GetBlockChainInfo
当前区块链的信息
GetBlockCount
主链的区块数量
GetBlockHash
返回主链指定高度的 header hash
GetBlockHeader
通过指定的 header hash 获取区块头 0.12.0 新增
GetChainTips
返回每个本地区块链的最高区块信息
GetDifficulty
返回 POW 的难度值,是最小难度的倍数
GetMemPoolAncestors
返回 mempool 中的一个交易的所有在 mempool 的祖先 0.13.0 新增
GetMemPoolDescendants
返回 mempool 中的一个交易的所有在 mempool 的后代 0.13.0 新增
GetMemPoolEntry
返回指定交易的 mempool data 0.13.0 新增
GetMemPoolInfo
返回节点当前交易 memory pool 的信息 0.12.0 更新
GetRawMemPool
返回所有 memory pool 中的交易标识 TXIDs 0.13.0 更新
GetTxOut
返回一笔交易输出的详细信息,只有 UTXOs 是保证存在的。
GetTxOutProof
返回一个区块中的一个或多个指定交易的 16 进制格式的证明信息
GetTxOutSetInfo
返回已确认的 UTXO 集合的统计数据
PreciousBlock
标识在同一网络中,比其他先接收的区块 0.14.0 新增
PruneBlockChain
按照指定的高度或时间戳来修建区块链 0.14.0 新增
VerifyChain
校验每个本地链的入口
VerifyTxOutProof
验证指向的区块中的一笔或多笔交易的工作证明,成功返回交易信息,如果不在主链返回 RPC 错误 0.11.0 新增
Control RPCs 3 个 过期 1 个
GetInfo 过期
打印节点和网络的相关信息
Help
列出所有的 RPC 命令,或者指定 RPC 命令的相关帮助信息
Stop
安全停止服务
Generating RPCs 2 个
Generate
立即生成一个区块 0.11.0 新增, 0.13.0 更新
GenerateToAddress
立即挖一个区块到指定地址 0.13.0 新增
Mining RPCs 5 个
GetBlockTemplate
获取一个区块模板给挖矿软件使用
GetMiningInfo
返回挖矿相关的信息 0.14.0 更新
GetNetworkHashPS
根据最后的区块信息估算当前或历史的每秒产生区块数
PrioritiseTransaction
向一笔交易增加虚拟的优先级或手续费,使交易以较低的优先级或手续费进入刚挖出的区块
SubmitBlock
接收一个区块,验证有效,并转发
Network RPCs 12 个
AddNode
从 addnode 列表中增加或删除一个节点,或者尝试连接一个节点一次。 0.14.0 更新
ClearBanned
清除禁止节点列表 0.12.0 新增
bitcoin-cli -rpcuser=user -rpcpassword=password clearbanned |
DisconnectNode
立即从指定节点断开 0.12.0 新增
GetAddedNodeInfo
返回添加节点或所有添加节点的信息 0.14.0 更新
只有手动使用 RPC 命令 addnode 添加的节点,才会有相关信息
GetConnectionCount
返回连接其他节点的数量
GetNetTotals
返回网络流量的相关信息,包括输入字节,输出字节和时间 0.12.0 更新
GetNetworkInfo
返回节点连接网络的相关信息 0.13.0 更新
GetPeerInfo
返回每个连接的网络节点的信息 0.13.0 更新
ListBanned
列出所有禁止的 IPs/Subnets 0.12.0 新增
Ping
发送一个 P2P ping 消息给所有节点,测试延迟,结果由 getpeerinfo RPC 命令的 pingtime 和 pingwait 提供
单位是 10 进制的秒。
ping 命令和其他命令一样进入队列处理,所以反应的是处理延迟,不是网络 ping
SetBan
从禁止列表中添加或删除 IP/Subnet 0.12.0
SetNetworkActive
禁止,启用所有的 P2P 网络 0.14.0 新增
Raw Transaction RPCs 7 个
CreateRawTransaction
创建一个未签名的序列化交易
FundRawTransaction
增加输入到交易中直到满足输出数量
DecodeRawTransaction
解码 16 进制数据到 json 格式
DecodeScript
解码一个 16 进制的 P2SH 赎回脚本
GetRawTransaction
获取一个 16 进制的序列化交易或者 json 对象格式的交易
SendRawTransaction
验证交易并广播到网络
SignRawTransaction
使用钱包中的私钥对序列化交易做签名
Utility RPCs 6 个
CreateMultiSig
创建一个 P2SH 的多重签名地址
EstimateFee
按KiB估算交易的手续费
EstimatePriority
估算免费的高优先级交易 过期
GetMemoryInfo
获取使用的内存信息
ValidateAddress
返回指定的地址信息
VerifyMessage
验证一个签名信息
Wallet RPCs 46 个,7个过期的
AbandonTransaction
作废交易
AddWitnessAddress
为脚本添加一个证人地址
AddMultiSigAddress
添加一个多重签名地址
BackupWallet
备份 wallet.dat 到指定路径
BumpFee
使用一笔新的更高手续费的交易替换已签名 RBF 的未确认钱包交易
DumpPrivKey
返回对应地址的 wallet-import-format (WIP) 私钥
DumpWallet
使用用户可读的格式创建或重写钱包的秘钥
EncryptWallet
使用密码加密钱包
GetAccountAddress
返回账户对应的 bitcoin 地址
GetAccount
返回指定地址的账户名称
GetAddressesByAccount 过期
返回指定账户的地址列表
GetBalance
使用十进制表示的所有账户或者指定账户的余额
GetNewAddress
返回一个新的地址
GetRawChangeAddress
返回一个新的地址用来接收找零
GetReceivedByAccount 过期
返回交易中指定确认数的指定账户的地址接收的总额,不包括 coinbase 交易
GetReceivedByAddress
返回交易中指定确认数的指定地址接收的总额,不包括 coinbase 交易
GetTransaction
获取钱包内交易的详细信息 0.12.0 更新
GetUnconfirmedBalance
返回钱包的全部余额
GetWalletInfo
提供钱包相关的信息
ImportAddress
添加地址或公钥脚本到钱包,不关联私钥,可以用来查看相关交易
ImportMulti
导入多个地址或脚本
ImportPrunedFunds
对于修剪后的钱包,不需要重新扫描就可以导入资金
ImportPrivKey
添加私钥到钱包
ImportWallet
从钱包 dump 文件格式中导入私钥
KeyPoolRefill
填充未使用的预生成的秘钥的缓冲区
ListAccounts 过期
列出账户和余额
ListAddressGroupings
列出一组在相同交易中做为公开输入的有共同所有权的地址,或者从前一个作为找零用途的账户
ListLockUnspent
返回一组暂时无法消费的 outputs 列表
ListReceivedByAccount 过期
列出每个账户收到的总额
ListReceivedByAddress
列出每一个地址收到的总额
ListSinceBlock
返回从指定块,加上指定深度区块的 header hash 之后涉及到钱包的所有交易
ListTransactions 0.12.1 更新
列出涉及钱包的最近的交易
ListUnspent
列出属于钱包的 UTXO 数组 0.13.0 更新
LockUnspent
临时锁定或解锁指定的 outputs,被锁定的 outputs 在交易时不会被自动收集。
Move 过期
使用 off-block-chain 交易,在钱包内的账户间移动指定金额
RemovePrunedFunds 0.13.0 新加
从钱包删除指定的交易
SendFrom 过期
从本地账户消费到指定地址
SendMany
创建和广播一笔发送 outputs 到多个账户的交易
SendToAddress
消费到指定地址
SetAccount 过期
把指定地址放到给出的账户中
SetTxFee
设置本钱包创建的交易的手续费单位 /kb
SignMessage
使用一个地址的私钥对消息签名
SignMessageWithPrivKey 0.13.0 新增
使用输入的私钥对消息签名
WalletLock
从内存移除钱包的加密密钥,锁定钱包。
执行完该命令后,在调用任何需要解锁钱包的功能之前,需要再次调用 walletpassphrase
WalletPassphrase
按照输入的时间(秒),保存钱包的解锁密钥到内存中,重复发送该命令,可以设置新的时间
WalletPassphraseChange
设置新的钱包密码
Removed RPCs
- GetGenerate: was removed in Bitcoin Core 0.13.0.
- GetHashesPerSec: was removed in Bitcoin Core 0.11.0.
- GetWork: was removed in Bitcoin Core 0.10.0.
- SetGenerate: was removed in Bitcoin Core 0.13.0.