安装

就位

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/