[区块链] 带你进入Bitcoin开发 - 环境搭建
学习完区块链枯燥乏味的、高深的、必备的基础知识后,终于可以走上开发之路了!真是迫不及待啦!之后博客更新主要放在区块链的开发上,相信这才是大多数同学更加感兴趣的地方!学习过程从最经典的区块链鼻祖-比特币学习,之后了解下区块链2.0代表:以太坊,最后主要精力放在区块链3.0的代表超级账本!(我一边学习,一边更新,欢迎捧场!)
修近一周主要给大家介绍比特币的开发,通过分析源码,了解其底层技术的设计及实现!
本片博客首先介绍比特币开发环境的搭建!
Linux、Mac、Windows等平台均支持运行比特币代码,作为开发人员,可以重点研究其中的bitcoind代码部分,因为这是比特币协议及区块链的核心,至于面向终端用户的图形界面(GUI)部分,完全可以忽略,对后续研究毫无影响。
在此,只介绍Linux环境下,开发环境的搭建。(作者操作系统版本为:Ubuntu16.04Desktop 64bit)
因为该开源项目是C/C++语言开发的,当然现在github上有很多其他语言实现的,语言无所谓重要的是思想,所以还是以官方代码分析为例子。以C++语言为例子,说明如何调用比特币钱包节点提供的RPC接口服务,实现一些涉及比特币区块链的具体应用功能。除了C++外还有很多种语言都可以调用Bitcoin的RPC,例如:Node.js,python等。读者可以参考本章内容选择适合自己的语言具体试验。
RPC(Remote Procedure Call)即远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
一. 环境准备
1. 通过以下命令可安装并编译bitcoind所需要的依赖库:
用命令apt-get install安装,如果没有找到该命令则安装apt-get(自行搜索,安装后sudo apt-get update更新包),如果显示权限不够则加用sudo apt-get install命令
- 安装编译环境
sudo apt-get -y install build-essential libtool autotools-dev automake autoconf pkg-config
- 安装必备依赖库
sudo apt-get -y install libssl-dev libboost-all-dev libevent-dev
- 安装钱包依赖库
sudo apt-get -y install libdb-dev libdb++-dev
- 安装其他依赖库(可选)
sudo apt-get -y install libminiupnpc-dev libzmq3-dev
- 安装GUI依赖库(可选)
sudo apt-get -y install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler libqrencode-dev
- 如果没有安装git则先安装(命令:sudo apt-get install git-core)
如果git clone太慢,可以直接上该网址将源码download下来,然后创建文件夹bitcoin,解压到其中。
- 干脆,我们直接一条命令执行!(只重点研究bitcoind代码部分,其他依赖包可不安装)
sudo apt-get -y install build-essential libtool autotools-dev automake autoconf libssl-dev libboost-all-dev libdb-dev libdb++-dev pkg-config libevent-dev git-core
2. 下载bitcoin源代码并进入其目录
git clone https://github.com/bitcoin/bitcoin.git #(要等好长时间!)
cd bitcoin
3. 编译源代码(正常流程)
#首先,生成编译源码所需要的库配置:
./autogen.sh
#然后,生成makefile文件:(--with-incompatible-bdb为忽略libdb版本差异)
./configure --with-incompatible-bdb --prefix=/data/install/bitcoin
#用make进行编译:
make
#安装编译好的二进制文件
make install
其他编译选项:
1 ./configure --disable-wallet #不编译钱包
2 ./configure --without-gui #不编译GUI
3 ./configure
因为我们研究的是核心代码部分,故编译命令如下:(禁用钱包、GUI)
./autogen.sh
./configure --without-gui --with-incompatible-bdb --prefix=/data/install/bitcoin
./configure --without-gui --disable-wallet
make -j
make install
附官方文档:https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md
bitcoin-cli、bitcoind、bitcoin-qt区别:
bitcoin-qt,带GUI的完整节点;
bitcoind,无GUI的完整节点;
bitcoin-cli,使用bitcoin-cli访问JSON-RPC接口。
二. 问题解决:
1.下载失败:
尝试了两次,每次都好长时间,最终都以失败告终。
报错:RPC failed;curl 56 GnuTLS recv error (-54): Error in the pull function.
解决方法:
原因是推送的文件太大,所以增大git的临时缓冲区:
git config --global http.postBuffer
参考:https://stackoverflow.com/questions/38378914/git-error-rpc-failed-curl-56-gnutls
报错:fatal:The remote end hung up unexpectedly.
fatal:index-pack failed.
算了,这次又失败了,我查了查“fatal:index-pack failed”,是权限或连接超时问题,懒得去解决这个问题了,干脆直接去github下载,速度贼快!推荐这种方法:下载如图所示:
直接上该网址https://github.com/bitcoin/bitcoin.git将源码download下来,然后创建文件夹bitcoin,解压到其中。
将文件提取(解压)到bitcoin文件夹下。
继续运行上面操作即可!
2. 排除warning
执行完.configure之后需要看看是否有相应的错误信息或者WARNING。一般warning是可以允许的,不影响主要功能使用。但是我们最好逐一排除警告。(若只分析bitcoind代码,可以忽略此部分。)
原因:warning: zmq找不到大于4的版本 。
sudo apt-get install libzmq-dev
原因:warning:缺少qt所需的依赖
sudo apt-get install libqt4-dev
注:版本问题,可忽略不计,因为前边命令忽略了版本(--with-incompatible-bdb为忽略libdb版本差异)。强迫症可以自己升级!
这些导致了:(当然学习源码的话,已经足够了!)
排除警告后:
三、启动bitcoind并加入比特币测试网络
- 启动bitcoind
cd /data/install/bitcoin/bin/
./bitcoind --daemon-testnet (网友提醒,新版本命令为:./bitcoind -testnet,请读者自测!) - 停止bitcoind
./bitcoin-cli -testnet stop
bitcoin-cli访问JSON-RPC接口
- 获取节点统计信息
./bitcoin-cli -testnet getinfo (该命令已在version 0.16.0去除!所以新版本,没有此命令!)
- 获取区块链信息
./bitcoin-cli -testnet getblockchaininfo
- 获取网络信息
./bitcoin-cli -testnet getnetworkinfo
- 获取钱包信息
./bitcoin-cli -testnet getwalletinfo
- 获取某个区块信息
./bitcoin-cli -testnet getblock 000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
JSON-RPC接口使用方法见官方文档:https://bitcoin.org/en/developer-reference#bitcoin-core-apis
【 时间仓促,如有错误,欢迎指正! || 欢迎留下您的评语! 大家一起探讨、学习区块链!】
【 转载请注明出处!http://www.cnblogs.com/X-knight/】
[区块链] 带你进入Bitcoin开发 - 环境搭建的更多相关文章
- 区块链 Hyperledger Fabric v1.0.0 环境搭建
前言:最近项目涉及到超级账本,在有些理论知识的基础上,需要整一套环境来. 这是一个特别要注意的事情,笔者之前按照网络上推荐,大部分都是推荐ubuntu系统的,于是下载Ubuntu系统(16.04.5和 ...
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- 区块链Hyperledger Fabric 学习记录(一)开发环境搭建(ubuntu16.04/ubuntu18.04)
目录 Fabric开发环境搭建 更新说明 教程环境及软件版本 Docker 安装Docker 配置用户组 配置Aliyun Docker加速器 安装docker-compose Go 下载源码 安装源 ...
- 智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...
- TI Davinci DM6446开发攻略——开发环境搭建
TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间 ...
- EOS开发环境搭建
EOS开发环境搭建 在上一篇文章<扒一扒EOS的前世今生>中,我们已经了解了EOS以及他的创始人Daniel Larimer的故事,本次为大家带来的是关于EOS开发环境搭建的内容.首先 ...
- 以太仿DApp开发环境搭建
在网上找了些以太仿的资料,是node.js写的,之前也了解过node.js,正好也可以用上.本篇主要学习以太仿DApp开发环境搭建. 一.安装 DApp 开发环境 1.1安装 Node.js 首先下载 ...
- Scala进阶之路-为什么要学习Scala以及开发环境搭建
Scala进阶之路-为什么要学习Scala以及开发环境搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近人工智能和大数据那是相当的火呀,人工智能带动了Python的流行,区块 ...
- [转] 智能合约开发环境搭建及Hello World合约
[From] http://www.cnblogs.com/tinyxiong/p/7898599.html 如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. ...
随机推荐
- Centos7下安装PHP5.5,5.6,7.0----(转载记录一下)
由于centOS7 默认的php版本是5.4的,偏低,所以收录了一下怎样安装5.5/5.6/7.0版本 默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的 ...
- Java中的Unsafe类111
1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...
- 关于Kafka监控方案的讨论
之前在知乎上尝试过回答这个问题,后来问的人挺多,干脆在博客里面保存一下. 目前Kafka监控方案看似很多,然而并没有一个"大而全"的通用解决方案.各家框架也是各有千秋,以下是我了解 ...
- 第一篇:tz师兄【附面试题总结】
本篇文章包含三部分: 师兄故事 面试经历 面试资源分享 师兄故事 tz师兄是一位及其低调的小伙,也是在班级中我比较欣赏的少年. 2017年大学毕业,原资源勘察工程专业. 大学期间自学java,之后进入 ...
- 这么用Mac才叫爽!
用了近一年的 Macbook Pro,已经离不开它了.真是生活工作学习必备之良品啊. 如果你将要买苹果电脑或者刚买,那么不妨看看此文.推荐一些个人觉得好用的软件,而Mac本身的使用技巧----触控板. ...
- aes 128、192、256位,cbc、cfb、ecb、ofb、pcbc加密解密
AES加解密总共有以下这些 算法/模式/填充 字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 16 不支持 AES/CBC/PKCS5Padding 32 16 AES ...
- i春秋------Misc更新
今天早上起来很开森!因为今天要打比赛了(2018年3月安恒杯线上赛),等到比赛开始得时候,发现自己登陆不上去 想了很久发现自己只是预约了比赛,并没有报名(QAQ ),心疼一下傻傻的自己.现在开始工作: ...
- 如何使用命令行编译和运行java文件
相信大家现在一般都在使用IDE环境来开发运行java文件,但我觉得可以在命令行里面简单运行java文件,技多不压身. 接下来我来说一下编译和运行java文件: 第一步,首先下一个入门程序(注意:一定要 ...
- css中常见margin塌陷问题之解决办法
塌陷问题 当两个盒子在垂直方向上设置margin值时,会出现一个有趣的塌陷现象. ①垂直并列 首先设置两个DIV,并为其制定宽高 1 /*HTML部分*/ 2 <body> 3 <d ...
- python之算法排序模块
这是一个能够随时学习重要算法的Python模块,记录在案,方便查看 特点 易于使用 容易理解的文档 快速获取算法的源代码 随时获取时间复杂度 安装 仅需在终端中执行以下命令: pip3 install ...