安装
就位
cd /usr/local/
安装依赖
yum install -y wget yum install -y autoconf yum install -y automake yum install -y libtool yum install -y gcc gcc-c++ gcc-g77 yum install -y openssl-devel yum install -y boost-devel yum install -y libevent-devel
数据库和钱包版本是有一定的搭配的,我这里用的是0.17.1配4.8.30,如果你要用其他版本,有可能需要折腾一下。
下载解压 berkeley-db安装包(这是我存储的云端文件)
wget http://file.fengyumeng.com/db-4.8.30.tar.gz tar -zxvf db-4.8.30.tar.gz
如果你需要其他版本的话可以到这里去找:
https://www.oracle.com/database/technologies/related/berkeleydb-release-history.html
切目录
cd db-4.8.30/build_unix/
配置
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=/usr/local
安装
make install
回到local目录
cd ../../
下载bitcoin
wget http://file.fengyumeng.com/bitcoin-0.17.1.tar.gz
如果你身体好,能翻墙,就去github下载你想要的版本:https://github.com/bitcoin/bitcoin/releases
解压
tar -zxvf bitcoin-0.17.1.tar.gz
切入目录
cd ./bitcoin-0.17.1/
生成配置文件
./autogen.sh
进行配置
./configure
编译
make
安装
make install
查找是否安装成功
which bitcoind which bitcoin-cli
启动
创建一个目录存放区块数据
mkdir /bitcoin
跳过去
cd /bitcoin/
创建配置文件
vim bitcoin.conf
如下配置内容,自己看着改
#测试网络(不配置就默认是主网) testnet=1 # 启动rpc服务 server=1 # rpc账号密码 rpcuser=abc rpcpassword=123456 #rpc白名单 rpcallowip=0.0.0.0/0 # 接受rest请求 rest=1 # 所有交易进行索引 否则只保留钱包地址交易索引记录 txindex=1 # 交易确认区块数 默认是6 txconfirmtarget=3 # 数据存储位置 默认是家目录下的.bitcoin目录 datadir=/bitcoin # 块数据存储位置 默认家目录下的.bitcoin/blocks 必须先创建该目录 blocksdir=/bitcoin/blocks
更多配置,可以去这里找
https://jlopp.github.io/bitcoin-core-config-generator
启动命令
bitcoind -conf=/bitcoin/bitcoin.conf -rpcport=9999 -daemon
-rpcport是rpc端口(默认的rpc端口是18443,如果你在配置文件里配端口的话 只有主网才会生效)
-daemon是守护进程
调用rpc接口看看通不通
curl --user abc:123456 --data-binary '{"jsonrpc":"1.0","id":"curltest","method":"getwalletinfo","params":[]}' -H 'content-type:text/plain' http://127.0.0.1:9999
看到如下信息证明是OK的 你已经可以找到balance等字样了
停止命令 (带上你启动时的参数一起)
bitcoin-cli -conf=/bitcoin/bitcoin.conf -rpcport=9999 stop
如果再次启动的时候出现异常,就手动删除.lock文件
rm -rf /bitcoin/testnet3/.lock
使用
区块信息
查看区块信息
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 getblockchaininfo
获取区块高度
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 getblockcount
查看挖矿信息
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 getmininginfo
账户地址
列出所有钱包
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 listwallets
默认会有一个空钱包的
生成钱包
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 createwallet wallt1
你可以生成很多钱包
生成地址
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 getnewaddress a_label_1
getnewaddress 后面跟的是 标签名 以官方的话说是个label 相当于分类名
这是在wallt1钱包下面生成一个地址,一个客户端可以有很多个钱包,每个钱包可以有很多个地址,多个地址可以设置成同一个label,相当于一个房间里可以有多个衣柜,每个衣柜有很多个格子,我把很多双袜子放同一个格子方便管理。
打印在控制台的就是生成的地址
显示地址的私钥
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 dumpprivkey 2N33hCn1fSwZATgmAD55cetomi9MWB4V5xM
查看钱包下所有的label
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 listlabels
查看label下所有的地址
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 getaddressesbylabel a_label_1
钱包余额
获取测试比特币
地址:https://coinfaucet.eu/en/btc-testnet/
获取了之后,可以去测试网络浏览器查:https://live.blockcypher.com
也可以直接打开这个链接(把后面的地址换成你要查询的地址):https://live.blockcypher.com/btc-testnet/address/2N33hCn1fSwZATgmAD55cetomi9MWB4V5xM/
当然,你要等区块确认之后钱才会变成可用的。
有一点需要注意一下,测试网络目前的区块高度是160多万,查一下你本地的区块高度同步了多少,如果区块没同步足够,在本地是查不到交易的。
查询钱包信息
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 getwalletinfo
balance:钱包中以 BTC 为单位已确认的总余额
unconfirmed_balance:钱包中以 BTC 为单位未确认的总余额
immature_balance:钱包中以 BTC 为单位未成熟的总余额
查询钱包余额
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 getbalance
查询地址余额
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 getreceivedbyaddress -rpcwallet=wallt1 2N33hCn1fSwZATgmAD55cetomi9MWB4V5xM 3
指定地址至少N个确认交易的金额,不填数字则默认1个
根据标签查余额
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 getreceivedbylabel a_label_1
后面同样可以跟个数字 默认为1个确认的余额
遍历地址余额信息
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 listreceivedbyaddress 1 true
交易
查询钱包接收到的交易
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 listtransactions
根据hash查交易(钱包内交易)
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 gettransaction 3c1dcdccd6373134a183cd4df93e59a40b1b395fde55b7c0f9ca0eed04f4965f
根据hash查交易(交易池交易)
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 getrawtransaction 3c1dcdccd6373134a183cd4df93e59a40b1b395fde55b7c0f9ca0eed04f4965f true
转账
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=wallt1 sendtoaddress 2N8W4G3H1aTxJvkS8rdbj4e4yzeMeDCVB5y 0.01
比特币每一次转账转出的都是整个钱包的所有可用余额,其中指定的金额去往目标地址,剩余的金额回到自己钱包,这是找零的概念,建议不了解的同学啃一下UXTO模型。
加密解锁
钱包加密
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=a1 encryptwallet abcdefg
encryptwallet后面跟的就是你的保险箱密码,一旦加密, 每次进行转账时都需要先进行钱包解锁。
(加密成功后bitcoin进程会关闭,需要重新启动,建议区块同步完了再进行钱包加密,否则加密后重启钱包,可能会发现原来的钱包数据丢失了)
钱包解锁
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=a1 walletpassphrase abcdefg 10
解锁时间以秒为单位,到点之后钱包自动上锁,如果在解锁时间未到之前想要上锁就需要手动调用下面的锁定钱包接口
锁定钱包
bitcoin-cli -rpcuser=abc -rpcpassword=123456 -rpcport=9999 -rpcwallet=a1 walletlock
API调用
RPC接口一览表:https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list
比特币PHP的SDK:https://github.com/blockchain/api-v1-client-php
比特币JAVA的SDK:https://github.com/blockchain/api-v1-client-java
比特币Python的SDK:https://github.com/blockchain/api-v1-client-python
比特币NodeJs的SDK:https://github.com/blockchain/api-v1-client-node
第三方API:https://www.blockcypher.com/dev/bitcoin/
最新评论