[区块链] 带你进入Bitcoin开发 - 环境搭建

简介:   学习完区块链枯燥乏味的、高深的、必备的基础知识后,终于可以走上开发之路了!真是迫不及待啦!之后博客更新主要放在区块链的开发上,相信这才是大多数同学更加感兴趣的地方!学习过程从最经典的区块链鼻祖-比特币学习,之后了解下区块链2.

  学习完区块链枯燥乏味的、高深的、必备的基础知识后,终于可以走上开发之路了!真是迫不及待啦!之后博客更新主要放在区块链的开发上,相信这才是大多数同学更加感兴趣的地方!学习过程从最经典的区块链鼻祖-比特币学习,之后了解下区块链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源代码并进入其目录   

1 git clone https://github.com/bitcoin/bitcoin.git         #(要等好长时间!)
2 cd bitcoin

  3. 编译源代码(正常流程)

1 #首先,生成编译源码所需要的库配置:
2 ./autogen.sh
3 #然后,生成makefile文件:(--with-incompatible-bdb为忽略libdb版本差异)
4 ./configure --with-incompatible-bdb --prefix=/data/install/bitcoin  
5 #用make进行编译: 
6 make 
7 #安装编译好的二进制文件
8 make install

  其他编译选项:

1 ./configure --disable-wallet   #不编译钱包 
2 ./configure --without-gui    #不编译GUI
3 ./configure

   因为我们研究的是核心代码部分,故编译命令如下:(禁用钱包、GUI)

1  ./autogen.sh
2  ./configure  --without-gui --with-incompatible-bdb --prefix=/data/install/bitcoin  
3  ./configure  --without-gui --disable-wallet 
4   make -j
5   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 2000000000

  参考: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
    1 cd /data/install/bitcoin/bin/
    2 ./bitcoind --daemon-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 

  

 


【  时间仓促,如有错误,欢迎指正! ||   欢迎留下您的评语!  大家一起探讨、学习区块链!】

【  转载请注明出处!http://www.cnblogs.com/X-knight/


 

 

 

 

 

相关文章
|
8月前
|
存储 开发框架 API
Codefi基于区块链的开发框架
Codefi基于区块链的开发框架
122 0
|
5月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
2月前
|
存储 开发框架 安全
揭秘区块链:以太坊智能合约开发的奥秘与挑战,你准备好迎接未来了吗?
【10月更文挑战第25天】本文介绍了区块链技术的基本概念及其核心特点,重点讲解了以太坊智能合约的开发流程和实际开发中的注意事项。通过安装 Truffle、Ganache 和 Remix 等工具,读者可以快速上手编写、编译、部署和测试智能合约。文章还对比了以太坊去中心化应用与传统集中式应用的优势和挑战,帮助读者全面了解以太坊智能合约开发。
49 0
|
8月前
|
供应链 安全 物联网
【专栏】区块链和智能合约的未来发展潜力巨大,期待更多创新应用
【4月更文挑战第27天】本文探讨了区块链技术与智能合约的边界及挑战。区块链,以其不可篡改和安全特性,广泛应用于金融、供应链和物联网等领域。智能合约作为区块链上的自动执行代码,实现无需第三方的可信交易。然而,技术上面临扩展性、性能和安全问题,法律与监管层面也需适应智能合约的自动执行特性及跨境法律协调。尽管挑战重重,区块链和智能合约的未来发展潜力巨大,期待更多创新应用。
174 1
|
4月前
|
供应链 物联网 区块链
|
5月前
|
供应链 物联网 分布式数据库
探索区块链技术与智能合约开发的边界
随着信息技术的发展,区块链作为一种分布式数据库技术正深刻影响社会。本文探讨区块链基本原理及其在金融、供应链等领域的应用,并聚焦智能合约——一种自动执行且不可篡改的代码,介绍其开发流程与丰富案例。同时,文章分析了技术与法律层面面临的挑战,展望未来发展趋势。
74 4
|
5月前
|
区块链 C# 存储
链动未来:WPF与区块链的创新融合——从智能合约到去中心化应用,全方位解析开发安全可靠DApp的最佳路径
【8月更文挑战第31天】本文以问答形式详细介绍了区块链技术的特点及其在Windows Presentation Foundation(WPF)中的集成方法。通过示例代码展示了如何选择合适的区块链平台、创建智能合约,并在WPF应用中与其交互,实现安全可靠的消息存储和检索功能。希望这能为WPF开发者提供区块链技术应用的参考与灵感。
74 0
|
6月前
|
存储 安全 Java
基于Java的区块链数字身份认证系统设计与开发
基于Java的区块链数字身份认证系统设计与开发
|
7月前
|
供应链 物联网 分布式数据库
区块链技术与智能合约开发的边界究竟在哪里?
【6月更文挑战第10天】本文探讨了区块链技术与智能合约的界限和挑战。区块链,本质是分布式数据库,以其不可篡改性和安全性在金融、供应链和物联网等领域广泛应用。智能合约,作为区块链上的自动执行代码,无需第三方介入,确保了执行的自动性和安全性。然而,技术上面临扩展性、性能和安全问题,法律与监管层则需解决合规监管和跨国法律协调的难题。尽管如此,随着技术进步和应用场景拓展,区块链与智能合约的潜力和未来前景依然广阔。
92 2
|
7月前
|
敏捷开发 安全 测试技术
区块链开发团队DappNetWork
区块链开发团队由跨学科专家组成,包括区块链专家、智能合约开发者、系统架构师和测试工程师。团队负责战略规划、技术开发、系统测试和运维优化,需要深入理解区块链技术、安全性和敏捷开发。通过敏捷管理和自动化工具,团队实现高效协作,为金融、供应链等领域提供安全可靠的区块链应用解决方案。如需开发加V:DappNetWork