作者:a013152
发布时间:2018年8月8日
网络来源:CSDN
比特币bitcoin-cli 常用命令学习记录
接触比特币客户端bitcoin-cli只有半个月,很多都是萌新阶段,欢迎纠错。
本文记录开发时常用到的bitcoin-cli 命令。
- 开发环境
ubuntu 16.04LTS ;
Bitcoin Core Daemon version v0.16.2.0;
(有很多API在不同版本的bitcoin core中已经失效,比如getinfo等,本文只在v0.16.2.0测试通过;)
搭建开发环境是参照教程https://blog.csdn.net/ffzhihua/article/details/80695886,本文不在赘述。 - 网络
启动前Bitcoin Core说明一下网络种类,根据查找到资料有3种,个人用白话理解为: 公共真实网络; 公共测试网络;单机测试网络。
启动时不设置参数默认连接公共真实网络,会同步真实区块数据(约200G)。
启动时设置参数 -testnet 连接测试网络,会同步测试网络的区块数据(约18G)
启动时设置参数 -regtestn 不连接外网,不需要同步数据,节约时间下文都是在单机上进行。
- 常用命令与描述
官方的API 参见:https://bitcoin.org/en/developer-reference#bitcoin-core-apis
也可以在bitcoin-cli中输入 help空格API名称 查看API的介绍和用法
例如查看获取getbalance的用法 bitcoin-cli help getbalance
- 注意:以下文中
粉色背景红色文字
的内容根据实际的情况替换。 - 1 启动/关闭bitcoin server服务
- 1.1 启动bitcoin服务
bitcoind -conf=”/home/chenlin/.bitcoin/bitcoin.conf
” -regtest -jsonrpc -server
返回
bitcoin server starting 启动服务 - 1.2 关闭Bitcoin server
bitcoin-cli -regtest stop
返回
Bitcoin server stopping - 3 账户操作
- 3.1 创建新账户
bitcoin-cli -regtest getnewaddress “123
” (使用 “123”账户名称创建新的地址)
返回
2MsXtCiaCwQaphX1sSVNZvxLiE84F8L162e (新的地址) - 3.2 用地址获取账户
bitcoin-cli -regtest getaccount2MsXtCiaCwQaphX1sSVNZvxLiE84F8L162e
(使用 “2MsXtCiaCwQaphX1sSVNZvxLiE84F8L162e”地址,获取账户名称)
返回
123 - 3.3 用账户名称获取所有地址,因地址唯一但账户名可重复,所以一个账户名称对应多个地址现象
bitcoin-cli -regtest getaddressesbyaccount “123
” (获取账户名为“123”的所有地址,这里有两个地址)
返回
[
“2MsXtCiaCwQaphX1sSVNZvxLiE84F8L162e”,
“2NChUuASLwbCJadWgwWrxwkanaJSwMjxRzY”
]3.4 列出所有账户,余额
bitcoin-cli -regtest listaccounts
返回
{
“”: 149.95000000,
“123”: 0.00000000
} - 4 生成1个区块(用于认证刚才的转账操作,测试网络中可用)
- bitcoin-cli -regtest generate
1
返回 (区块hex)
[
“4a59b4612fb0b6e2ac9944813b22ad604ff25fb72a09eb0d583fe3831c53b4f0”
] - 5 获取余额
- 例如 查询账号“123”的余额,0次确认
bitcoin-cli getbalance “123
” 0
返回
00.00000000 - 6 钱包操作
- 6.1 加密钱包 ,首次加密会重启bitcoind服务
bitcoin-cli -regtest encryptwallet “test
”6.2解锁钱包 (使用test 解锁,600秒后自动锁)
bitcoin-cli -testnet walletpassphrasetest
600
6.4 改变解锁钱包的密码短语(test 改 test1)
bitcoin-cli -testnet walletpassphrasechangetest
test1
6.5 删除内存中的加密密匙
bitcoin-cli -testnet walletlock - 7 转账
- 向123的地址2MsXtCiaCwQaphX1sSVNZvxLiE84F8L162e 转10.0 btc
bitcoin-cli -regtest sendtoaddress2MsXtCiaCwQaphX1sSVNZvxLiE84F8L162e
10.00
返回(交易号):
13ffd47d35308547eb24624b051f8686fb530aefe453e9aeb24b446cf6af828e - 8 查看本钱包 UTXO: unspend transaction output. 未花费的交易输出 (这个概念很重要,目前我还没理解透彻. )
- 8.1 bitcoin-cli -regtest listunspent
返回
[
“太多了,不贴,记住里面的txid,vout,amount 就行,方便下面创建交易”
] - 9 创建交易
- 格式 bitcoin-cli createrawtransaction ‘[{ “txid” : “<之前交易id>”, “vout” : <之前输出的索引> }]’ ‘{“本次输出的地址”: 金额}’
例如 ,下面的命令用txid:13ff..的0号的输出作为本次交易输入,转给地址2N39..,金额9.9999
bitcoin-cli -regtest createrawtransaction ‘[{ “txid” :
"13ffd47d35308547eb24624b051f8686fb530aefe453e9aeb24b446cf6af828e"
, “vout” :0
}]’ ‘{"2N39JKm2hGVyz5dse77yj59QbMGUvQcBokg"
:9.9999
}’
返回 原生交易id
02000000018e82aff66c444bb2aee953e4ef0a53fb86861f054b6224eb478530357dd4ff130000000000ffffffff01f0ca052a0100000017a9146c9261a3bce6c91f24d20cf79fbb3c388e9c3fd08700000000
RAW_TX=02000000018e82aff66c444bb2aee953e4ef0a53fb86861f054b6224eb478530357dd4ff130000000000ffffffff01f0ca052a0100000017a9146c9261a3bce6c91f24d20cf79fbb3c388e9c3fd08700000000
这里用变量RAW_TX 保存0200…。下文用RAW_TX 代替 - 10 解码原生交易id (可以查看交易:输出地址,输入金额等信息)
- bitcoin-cli -regtest decoderawtransaction
$RAW_TX
返回
[
“太多了,不贴,核对一下里面的输出地址,输入金额等信息 ”
] - 11 操作进行”签名”
- 给 : bitcoin-cli -regtest signrawtransaction
$RAW_TX
返回 签过名的hex2
{
"hex": "020000000001018e82aff66c444bb2aee953e4ef0a53fb86861f054b6224eb478530357dd4ff13000000001716001425b43a753230bd37a85a0138eb3ab3359ff423f6ffffffff01f0ca052a0100000017a9146c9261a3bce6c91f24d20cf79fbb3c388e9c3fd08702483045022100998cf5c7b6f0bd204765edff32386e46c88b0ccbaf7e3c11340d7aee760ff70c022061f0eb151dcc6a09f58f97f1b67dbf93a038496ff016798584f41545ad71256401210345b12b0d2524acc674d6dfe91b81b6688533b12f3e37e77c1683dcc8c6edaf9c00000000",
"complete": true
}
- 12 把这个被签名过的“交易”发到网络上(广播交易)
- 12.1 发送命令: bitcoin-cli -regtest sendrawtransaction
020000000001018e82aff66c444bb2aee953e4ef0a53fb86861f054b6224eb478530357dd4ff13000000001716001425b43a753230bd37a85a0138eb3ab3359ff423f6ffffffff01f0ca052a0100000017a9146c9261a3bce6c91f24d20cf79fbb3c388e9c3fd08702483045022100998cf5c7b6f0bd204765edff32386e46c88b0ccbaf7e3c11340d7aee760ff70c022061f0eb151dcc6a09f58f97f1b67dbf93a038496ff016798584f41545ad71256401210345b12b0d2524acc674d6dfe91b81b6688533b12f3e37e77c1683dcc8c6edaf9c00000000
返回 :如果成功返回另一个txid,如果失败则返回错误
交易发布完了,在测试网络中还需要手动生成一个区块,认证一下刚才广播的交易
bitcoin-cli -regtest generate1
然后再用
bitcoin-cli -regtest listaccounts
查看一下输出地址对应的账户是不是金额增加了,(我的测试环境里默认账户每次生成区块都会增加50btc,我理解为默认账号是矿工,50btc是对他的奖励)。
好了,在csdn上第一篇博客文章,写得有啥错误欢迎大家指出(有空才改)。谢谢!