1、比特币客户端介绍
Bitcoin 比特币官方客户端有两个版本:一个是图形界面的版本,通常被称为 Bitcoin(首字母大写),以及一个简洁命令行的版本(称为 bitcoind)。它们相互间是兼容的,有着同样的命令行参数,读取相同的配置文件,也读写相同的数据文件。您可以在一台电脑中运行 Bitcoin 客户端或是 bitcoind 客户端的其中一个(如果您不小心尝试同时运行另外一个客户端,它会提示您已经有一个客户端在运行并且自动退出)。
我们在本文中介绍的比特币核心,也就是执行完安装步骤,两个客户端都已经具备
2、环境准备
1)系统环境:
操作系统:Ubuntu操作系统,版本为 18.04 64位
内存:最少2G
硬盘空间:500GB以上
说明:本文档重新修改发布,原来是在ubuntu 16.04 64位安装的。是克隆github编译安装。第二次修改时,采用下载安装的方式,操作系统更换为ubuntu18.04了,其中部分截图还是之前的,提醒一下。
2)第三方库
sudo apt-get update //准备系统更新
这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。update后,可能需要upgrade一下。
sudo apt-get upgrade //升级已经比较的更新
这个命令,会把本地已安装的软件,与刚下载的软件列表里对应软件进行对比,如果发现已安装的软件版本太低,就会提示你更新。如果你的软件都是最新版本,会提示:
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 //安装依赖库
sudo apt-get install libminiupnpc-dev //libminiupnpc-dev软件包,the MiniUPnP client library,MiniUPnP协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。
sudo apt-get install libzmq3-dev
sudo apt-get install libboost-all-dev //安装boost标准库(c++)
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools qtbase5-dev //安装qt5,图形用户界面应用程序开发框架
sudo apt-get install libqrencode-dev //安装c语言生成二维码的库
sudo apt-get install libevent-dev //安装libevent
3、下载比特币核心源码,并进行安装
cd ~ //打开当前用户主目录
一般如果没有装过,系统中是不能直接使用git命令的,需要先安装git
sudo apt-get install git
git clone https://github.com/bitcoin/bitcoin.git
mkdir bitcoin/db4/
cd bitcoin/db4/
wget ‘http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz’
tar -xzvf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix/
…/dist/configure --enable-cxx --disable-shared --with-pic --prefix=~/bitcoin/db4/
make install(如果不是root用户,需要前加sudo)
4、构建BitcoinCore可执行文件
cd ~/bitcoin/
./autogen.sh
./configure LDFLAGS="-L ~/bitcoin/db4/lib/" CPPFLAGS="-I ~/bitcoin/db4/include/"
make (非root用户需要sudo)
make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。-s就是静默模式,在执行之前不输出相应的命令行信息。
make install
浪潮云有时候链接github非常慢,这也是国内部分云服务厂商鸡贼的地方。换一种方法再安装。
$ cd /data/ ###文件全部存放在数据盘
$ mkdir bitcoin ###注意用户,最好是以后执行命令的账户,否则要注意更改权限
$ cd bitcoin
$ wget ‘https://bitcoin.org/bin/bitcoin-core-0.19.0.1/bitcoin-0.19.0.1-x86_64-linux-gnu.tar.gz’ ###将tgz文件下载到本地数据盘
$ tar zxvf bitcoin-0.19.0.1-x86_64-linux-gnu.tar.gz ##解压
$ sudo install -m 0755 -o root -g root -t /usr/local/bin /data/bitcoin/bitcoin-0.19.0.1/bin/* ###安装,链接执行程序路径
5、测试安装结果
$ which bitcoind //查找比特币核心进程位置
/usr/local/bin/bitcoind
如果显示命令找不到,则可能是该命令没有在bin下面,路径不对。用下面命令进行关联。
Sudo make install DESTDIR=/usr/local/bin
$ which bitcoin-cli //查找比特币命令行客户端位置
6、运行配置BitcoinCore
在运行bitcoind之前,首先要在当前账户主目录下创建.bitcoin目录,并在该目录下创建一个文件:bitcoin.conf
然后再这个文件中填写配置文件各个选项。
下面的供参考:
# 配置我们刚刚创建的数据存储目录
datadir=/data/bitcoin/bitcoin-0.19.0.1/
# 设置数据库缓存大小
dbcache=5024000
# 交易索引 txindex=1就代表全节点
txindex=1
# rpc访问的user
rpcuser=ubuntu
# rpc访问的password
rpcpassword=自己填写
# 后台启动
daemon=1
#开启JSON-RPC接口
server=1
rest=1
#进入监听模式
listen=1
#rpc接口的监听地址,默认绑定到所有IP
rpcbind=0.0.0.0
#rpcallowip是哪个IP调用钱包节点就填什么IP(类似允许谁访问的意思)
#rpcallowip=0.0.0.0
#rpcport是访问该节点的端口
rpcport=8332
开启客户端程序
$ bitcoind -datadir=/data/bitcoin/bitcoin-0.19.0.1/ -conf=/data/bitcoin.conf //安装完毕,现在就要运行比特币进程了,注意指定区块数据存放位置和conf文件
$ ./src/qt/bitcoin-qt //打开图形化客户端
$bitcoin-cli -getinfo //显示关于比特币网络节点、钱包、区块链数据库状态的基础信息。
$bitcoin-cli getblockchaininfo //也可以使用下面的命令,看到的内容更清晰。
$bitcoin-cli createwallet “yuntianming” #引号中是钱包标签
$bitcoin-cli encryptwallet “Passphrase” #引号中是钱包密码
$bitcoin-cli dumpprivkey “address” #导出私钥
$bitcoin-cli importprivkey “privkey” ( “label” ) ( rescan ) #导入私钥,配合上面的导出使用。最后的rescan值为true或false,是否重新扫描交易。
$ bitcoin-cli walletlock #锁定钱包
$ bitcoin-cli walletpassphrase “my pass phrase” 60 #60是timeout的秒数,必须。最大值为1073741824秒。
$ bitcoin-cli getnewaddress ( “label” “address_type” ) #label是钱包的标签(必选),后面是地址类型比如bech32或者隔离见证地址p2sh-segwit
$ bitcoin-cli getbalance “Account”,“Confirmations”,“WatchOnlyIncl” #Account是账户名称,Confirmations指定最少确认数。WatchOnlyIncl指的是是否包含那些仅用于跟踪的地址,默认是。
使用backupwallet命令备份,提供文件名作为命令参数:
$bitcoin-cli backupwallet wallet.backup
恢复备份文件,使用importwallet命令。(如果你的钱包处于锁定状态,你将需要先将钱包解锁以导入备份文件):
$ bitcoin-cli importwallet wallet.backup
我们可以询问bitcoind客户端此地址已经接收到的比特币数额,以及指定该数额要被加到余额中所需要的确认数。下面,我们指定只需要0个确认。
$ bitcoin-cli getreceivedbyaddress 1hvzSofGwT8cjb8JU7nBsCSfEVQX5u9CL 0
如果我们忽略这个命令后面的0,我们将只能在至少 minconf 个确认之后才能看到数额,minconf是想要某笔交易出现在 余额中所设置的最少确认数。 minconf 设置在bitcoind配置文件指定。
$ bitcoin-cli getbalance ## getbalance 命令将显示所有经过至少 minconf 个确认的交易加和后的余额:
getwalletinfo出错信息处理
$ bitcoin-cli getwalletinfo
如果有多个钱包,这条命令会出错:
方法是卸载多余的钱包:
$ bitcoin-cli listwallets #先查看下有哪些钱包。
$ bitcoin-cli unloadwallet “指定的钱包” #然后卸载指定的钱包,之后就可以正常使用getwalletinfo了。但是原来的钱包只是卸载,并没有删除。
关于交易的命令
$ bitcoin-cli listtransactions #整个钱包接收到的交易可以通过使用 listtransactions 命令展示出来。
我们可以用 createrawtransaction 命令去建立一笔交易。
说明:
bitcoin-cli createrawtransaction ‘[{ “txid” :"<之前交易id>", “vout”: <之前输出的索引> }]’ ‘{“本次输出的地址”: 金额}’
createrawtransaction 命令产生了一个原始十六进制字符串,其中编码了这笔交易的诸多细节。我们可以通 过 decoderawtransaction 命令来解码这个字符串,以确认所有的细节。
使用 gettransaction 命令显示的交易格式为简化格式。
交易ID在交易确认之前并不权威。区块链中找不到交易哈希值并不意味着此笔交易没有进行。这被称作“交易延展性”,因为交易哈希值在区块确认之前是可以更改的。在确认之后txid是不变且权威的。
若要得到整个交易代码并且将之解码,我们将使用两个命令: getrawtransaction 和 decoderawtransaction 。
getrawtransaction 把交易哈希值(txid)当做一个参数,并且把整个交易以一个“原始”的十六进制字符串的形式返回,而这也正是交易在比特币网络上存在的形式。
要解码这个十六进制字符串,我们使用 decoderawtransaction 命令。复制粘贴这个十六进制字符串作为 decoderawtransaction 的第一个参数以将整个内容解读为JSON数据格式。
交易解码展示这笔交易的所有成分,包括交易的输入及输出。
特别提示,gettransaction加上txid可以显示该交易的详细信息。
使用getblock命令,并把区块哈希值作为参数来查询对应的区块的详细信息。
既然我们知道我们的交易在哪个区块中,我们可以使用getblock命令,并把区块哈希值作为参数来查询对应的区块:
$ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 { "hash": "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4", "confirmations": 37371, "size": 218629, "height": 277316, "version": 2, "merkleroot": "c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e", "tx": [ "d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f", "b268b45c59b39d759614757718b9918caf0ba9d97c56f3b91956ff877c503fbe", "04905ff987ddd4cfe603b03cfb7ca50ee81d89d1f8f5f265c38f763eea4a21fd", "32467aab5d04f51940075055c2f20bbd1195727c961431bf0aff8443f9710f81", "561c5216944e21fa29dd12aaa1a45e3397f9c0d888359cb05e1f79fe73da37bd", [... hundreds of transactions ...] "78b300b2a1d2d9449b58db7bc71c3884d6e0579617e0da4991b9734cef7ab23a", "6c87130ec283ab4c2c493b190c20de4b28ff3caf72d16ffa1ce3e96f2069aca9", "6f423dbc3636ef193fd8898dfdf7621dcade1bbe509e963ffbff91f696d81a62", "802ba8b2adabc5796a9471f25b02ae6aeee2439c679a5c33c4bbcee97e081196", "eaaf6a048588d9ad4d1c092539bd571dd8af30635c152a3b0e8b611e67d1a1af", "e67abc6bd5e2cac169821afc51b207127f42b92a841e976f9b752157879ba8bd", "d38985a6a1bfd35037cb7776b2dc86797abbb7a06630f5d03df2785d50d5a2ac", "45ea0a3f6016d2bb90ab92c34a7aac9767671a8a84b9bcce6c019e60197c134b", "c098445d748ced5f178ef2ff96f2758cbec9eb32cb0fc65db313bcac1d3bc98f" ], "time": 1388185914, "mediantime": 1388183675, "nonce": 924591752, "bits": "1903a30c", "difficulty": 1180923195.258026, "chainwork": "000000000000000000000000000000000000000000000934695e92aaf53afa1a", "previousblockhash": "0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569", "nextblockhash": "000000000000000010236c269dd6ed714dd5db39d36b33959079d78dfd431ba7" }
该块包含419笔交易,列出的第64笔交易(0627052b …)是Alice的咖啡付款。 高度条目告诉我们这是区块链中的第277316块。
使用 listunspent 命令去查看我们钱包中所有剩余的从之前交易中已确认的支出:
$ bitcoin-cli listunspent
可以使用 gettxout 命令来得到未花费的输出的详细细节。交易输出通常可以参 考txid和vout两个指标。以下就是我们通过 gettxout 命令得到的结果:
###参考内容:
https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md