Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用Docker容器开发区块链应用

用Docker容器开发区块链应用

作者头像
Henry Zhang
发布于 2019-04-12 09:01:20
发布于 2019-04-12 09:01:20
3.1K1
举报
文章被收录于专栏:亨利笔记亨利笔记

题图摄于温哥华:Burrard Bridge

编者注:掌握容器技术已经成为开发者必不可少的技能,以三大开源区块链项目(比特币、以太坊和超级账本)为例子,它们都可用容器技术来开发和运行。本文以比特币为例,谈谈如何用容器技术来开发区块链应用。 作者陈晖,区块链PPk开源项目发起人和主要开发者、巴比特网站专栏作家与区块链技术版版主。对网络和通信技术有深入实践和研究,十多年的软件研发和管理经验。《区块链技术指南》作者之一。

很多刚接触区块链的开发者面临的问题,是如何上手实践基础的区块链应用开发技术,如何了解它的关键技术实践点。本文介绍如何采用Docker容器技术,快速构建私有节点的比特币测试网络(bitcoin-testnet),并结合Node.js程序语言例子,说明如何调用比特币钱包节点提供的RPC接口服务,实现涉及比特币区块链的具体应用功能。

安装基础环境

本文采用Ubuntu14.04 Desktop 操作系统作为基础环境。对于常用的Microsoft Windows7 64bit桌面操作系统,可以安装Oracle VM VirtualBox虚拟机软件来进一步安装Ubuntu14.04 Desktop版操作系统。系统安装成功后,缺省带有Node.js软件,如果要查询是否已安装Node.js及相应版本的命令参考如下:

$ apt-cache policy nodejs

$ node -v

$ npm -v

如果尚未安装Node.js,可以参考下述命令进行安装:

$sudo add-apt-repository 'deb https://deb.nodesource.com/node trusty main'

$sudo apt-get update

$sudo apt-get install nodejs

确认已安装Node.js后,可以安装对应的RPC支持库。常用的Node.js的RPC支持库有多个,我们这里选用开源项目kapitalize。

Ubuntu终端命令行界面输入以下命令进行安装:

$npm install kapitalize

关于kapitalize开源项目的更多说明可以参考下述网址:

https://github.com/shamoons/Kapitalize

安装Docker环境

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。

在Ubuntu14.04操作系统上快速安装Docker运行环境的方法如下:

1)在命令行下,输入下述命令安装Docker容器支持软件。

$sudo apt-get install docker.io

2)创建软连接。

$sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

3)查看Docker版本。

$docker --version

如看到提示信息类似“Docker version 1.6.2, build 7c8fca2”则说明你已经安装Docker成功了。

安装和运行比特币测试网络

1)下载比特币测试网络(bitcoin-testnet)的Docker镜像。

$sudo docker pull freewil/bitcoin-testnet-box

2)运行Docker镜像。

$sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box

注意:上述命令中的19001和19011是配置给两个节点提供RPC服务的端口。

3)进入Docker运行环境后,输入下面的命令来启动比特币测试网络:

$ make start

启动成功后,将在本机模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。

输入下面的命令可以查看测试网络节点状态信息,从中可以了解到比特币测试网络的配置和运行状态,比如协议版本、区块链长度和挖矿计算难度等内容,具体可以通过网络或技术书籍进一步查询了解:

$ make getinfo

4)初始化和测试区块链数据。

在Docker运行窗口里依次输入下面的命令来初始化创建基本的区块链数据,供进一步的程序示例来使用。

make generate //模拟新产生1个区块记录

make generate BLOCKS=200 //模拟新产生200个区块记录

5)查看最新的钱包状态包括 balance 余额信息,这时可以留意看到第一个钱包节点的账户余额发生了变动,新的余额即通过模拟区块挖矿产生的测试比特币。

make getinfo

6)给作为示例的测试钱包地址转账10个BTC。

make sendfrom1 ADDRESS=mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ AMOUNT=10

注意:这里的示例地址mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ是比特币测试网络下的钱包地址(以字符m起始),与比特币正式网络下的钱包地址(一般以数字1或3起始)是有区别的。

7)模拟新产生10个区块记录,让上面的转账交易得到足够有效的确认。

make generate BLOCKS=10

8)查看最新的钱包状态包括余额信息, 这时可以留意看到第一个钱包节点的balance 账户余额发生了改变 ,差额部分即已经交易转账支出的10个BTC加上少许的矿工费用。

make getinfo

开发运行第一个示例程序

下文以Node.js开发语言为例,演示如何调用RPC接口来执行一些最基本的操作,比如导入比特币私钥,和发送一个最简单的转账交易。开发者通过该示例可以了解到最基本的区块链开发方法。

示例源码(含注释)可以从下述网址下载:

http://ppkpub.org/sample/RpcTestnet.js

然后在命令行下输入以下命令即可运行并看到运行结果:

node RpcTestnet.js

注意:每运行一次测试代码后,都需要到Docker运行环境的命令行下输入"make generate BLOCKS=10",模拟产生新的区块记录,让测试代码产生的交易记录得到有效的确认。

在理解此简单示例程序的基础上,经过对Bitcoin协议的进一步了解,我们可以调用RPC接口进一步开发出更复杂功能,如自行构建特定交易数据包(比如备注信息、多重签名输出等)来满足特定业务需求。欲进一步深入学习研究区块链应用开发的朋友,可以从网上搜索相关学习资料,也可以参看文末推荐的《区块链技术指南》一书。

关于PPk开放小组

PPk开放小组(The PPk Public Group)是一个开放的网络技术极客小组,集合了一群对比特币等加密货币感兴趣的P2P技术爱好者,小组成员多具有10多年以上通信和互联网行业技术研发从业背景,对于互联网业态的发展趋势有着独立判断和独特理念,关注其以区块链为代表的底层技术的潜在价值,并尝试融合区块链、IPFS等创新P2P技术来定义个实现一些中性、开放、开源的基础协议和工具集。

电子邮箱: ppkpub@gmail.com

互联网站: ppkpub.or

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问运行“node RpcTestnet.js”报错:{ [Error: socket hang up] code: 'ECONNRESET' }是什么原因
请问运行“node RpcTestnet.js”报错:{ [Error: socket hang up] code: 'ECONNRESET' }是什么原因
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Docker搭建比特币测试网络
1.2 安装RPC支持库kapitalize kapitalize的源码:https://github.com/shamoons/Kapitalize
foochane
2019/05/23
1.9K0
比特币源码分析之一:总览
本文主要讲解比特币源码,下一篇文章会介绍比特币交易是如何通过非对称加密机制来完成安全交易的,欢迎大家互动留下问题和希望讲解的题目。
qudamahcui
2018/05/23
3.8K6
区块链系统探索之路:比特币核心的编译和探索
前几节我们研究了椭圆曲线,有限域等比特币和区块链所依赖的底层算法。问题在于这些算法不是独立存在,而是作为模块嵌入到整个区块链的体系之中。因此不了解区块链的体系组成或应用场景,那么我们就很难理解这些算法衍生出来的概念或者基于他们的作用,所以本节我们把区块链最原始的模态,也就是比特币核心编译和运行起来,先获得初步感性体验,然后在后面的章节中,我们能更好的明白椭圆曲线,有限域,如何组成钱包地址,为何数据在区块链系统中传输还需要各种奇奇怪怪的数据压缩等问题。
望月从良
2023/09/02
6090
区块链系统探索之路:比特币核心的编译和探索
Monero区块链对接PHP开发包
MoneroTool是用于对接Monero区块链的PHP开发包,可以快速为PHP应用添加门罗币/XMR的支持能力。官方下载地址:http://sc.hubwiz.com/codebag/monero-php-lib/
用户1408045
2019/08/23
1.7K0
在区块链上表白——使用C#将一句话放入比特币的区块链上
最近在看区块链和比特币的知识,顺便简单研究了一下BitCoin的脚本语言,发现OP_RETURN这个命令可以在后面放入自己想说的内容,很多侧链啊,公证之类就是利用了这个特性,可以把一句话,或者一个哈希值放在这个命令后面,于是我也想试一试,看看能不能成功。
深蓝studyzy
2022/06/16
8810
在区块链上表白——使用C#将一句话放入比特币的区块链上
区块链钱包的开发流程
区块链钱包的开发流程涉及多个关键步骤,从概念设计到最终发布都需要仔细规划和执行。以下是一个较为全面的区块链钱包开发流程概述。
数字孪生开发者
2025/01/02
3600
区块链钱包的开发流程
基于区块链的...
DeFi(Decentralized Finance),即去中心化金融,是2019年区块链应用发展 最迅猛的一个领域。在以太坊区块链上那些最成功的DApp,例如MakerDAO/DAI、Compound、0x 以及下面我们要介绍的那些,其目标都是颠覆传统的金融服务系统,促进一个全新的数字 经济时代的到来,让每个人都可以获得极大的经济自由度。本文将介绍DeFi的作用、 优势、演化历史、dApp架构等有关DeFi的重要概念,可以帮助你快速了解2019年区块链 的热门概念:DeFi。
用户1408045
2019/05/22
1.6K0
EOS智能合约开发和测试框架EOSFactory
自2017年秋季以来,Tokenika一直致力于创建基于Python的EOS智能合约开发平台,以便轻松创建,测试和部署智能合约。随着EOS的不断发展,我们已经习惯了其基础代码的突然变化,并且随着我们的进展而逐渐减少诅咒;)今天,这一天终于来了,我们非常高兴能够将我们的工作交给EOS社区。我们的新生婴儿将以EOS Factory的名义出现,旨在成为一个完整的,完全记录的跨平台IDE,使用简单的命令行界面,你将能够:
笔阁
2018/12/10
1.1K0
区块链原理说明及其应用场景
区块链技术难点:TPS、延迟时间、容量和带宽、安全等方面。 区块链技术的集成应用在新技术革新和产业变革中起到的重要作用,广泛用于加密货币,食品链安全,知识产权,资产管理等领域,加快推动区块链技术和产业创新发展;
全栈工程师修炼指南
2022/09/28
8250
bitcoin-01-区块链初识
投身加密货币研究有一段时间了,其间了解到了比特币的原理和应用,想把了解到的知识整理成一个简单直白的系列科普文章,希望可以帮助大家轻松简单学习并使用加密货币。 本篇作为开篇,仅提一些简单概念,以免概念太多,让人望而却步。
潇洒
2023/10/23
3730
bitcoin-01-区块链初识
用 Go 构建一个区块链 -- Part 7: 网络
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了。如果想直接运行代码,也可以 clone GitHub 上的教程仓库,进入 src 目录执行 make 即可。
用户1558438
2018/08/23
5700
区块链开发如何选择底层平台和开发语言?
大多数人并不需要自己重新创建一套区块链,而是基于现有的区块链底层平台去开发自己的应用,对于类似加密算法、 P2P技术、共识算法等只需要有个基本了解就可以了,暂时不需要深入研究。在文本中,将介绍三种主流的区块链底层平台:比特币、以太坊和超级账本Fabric,以及这些平台上的应用开发语言。 比特币区块链开发 最早的区块链开发便是基于比特币的区块链网络进行开发了,由于比特币是全球最广泛使用和真正意义的去中心化应用,因此,围绕比特币的各种区块链技术非常多,这里不一一描述,只针对入门开发进行介绍。 基于比特币的区块链
用户1408045
2018/05/17
2.6K0
最近大热的区块链究竟是如何运作的?
摘要总结:本文介绍了区块链技术的运作原理和基础概念,包括加密技术、分布式网络、去中心化、共识机制等。文章还解释了比特币的运作方式,以及区块链如何实现去中心化的交易和确保安全性。
企鹅号小编
2018/01/09
9080
最近大热的区块链究竟是如何运作的?
Hello Lightning Network -0
有许多比特币社区的先行者们面对小白的提问时,总是真诚的说:“去看看比特币的白皮书吧,把它真正弄明白吧,你就会理解一切的。” —–如今,我想对许多质疑闪电网络的比特币先驱们说:“去看看闪电网络的白皮书吧,把它真正弄明白吧,你就会理解一切的。”
happy123.me
2019/12/30
8760
区块链技术学习指引
本文原文发表于深入浅出区块链, 原文区块链技术学习指引会保存更新,大家最好前往原文阅读。
Tiny熊
2019/04/12
2K0
区块链技术学习指引
目前对区块链最通俗易懂的解释…
这应该是目前对区块链最通俗易懂的解释了... 区块链如何运作的? 下面这篇文翻译自”How Does the Blockchain Work?”全文。作者Michele D'Aliessi用通俗易懂的
企鹅号小编
2018/02/11
1.7K0
目前对区块链最通俗易懂的解释…
区块链技术详解和Python实现案例
区块链可以说是互联网成立以来最重要和最具颠覆性的技术之一。它是比特币和其他加密货币背后的核心技术,在过去几年引起大家广泛的关注。 区块链的核心是一个分布式数据库,允许双方直接交易,而无需中央机构,也就是通常大家所说的"去中心化"。"去中心化"这个简单而重要的概念对银行、政府和市场等机构具有重大意义,可以说,任何依赖中央数据库作为核心竞争优势的企业或组织都可能受到区块链技术的挑战甚至颠覆。 本文的目标是给你一个区块链技术的实用介绍,而不是炒作比特币和其他加密货币概念。第1节和第2节介绍了区块链一些核心概念
小莹莹
2018/04/18
2.7K0
区块链技术详解和Python实现案例
从比特币披萨到区块链卫星,程序员真会玩儿!
2008年10月31日,中本聪发表《Bitcoin: A Peer-to-Peer Electronic Cash System》比特币白皮书,用短短十三页的内容详细描述了比特币及背后的技术原理。2个月后,2009年1月3日,中本聪在芬兰赫尔辛基的一个小型服务器上挖出了50个比特币,第一批比特币正式诞生。
区块链大本营
2019/01/02
5700
学习以太坊Dapp开发
比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。在完全去中心化的区块链上运行的比特币,采用的是PoW(Proof of Work,工作量证明),该机制完美的解决了拜占庭将军问题(存在异常的情况下仍能达成一致)。因为基础网络架构为分布式,对单独一个节点是无法控制或破坏整个网络,掌握网内51%的运算能力(非节点数)才有可能操作交易,而这个代价大概要超过270亿美元。
笔阁
2018/09/04
8160
学习以太坊Dapp开发
USDT PHP开发包OmniTool简介
OmniTool开发包适用于为PHP应用快速增加对Omni Layer/USDT数字资产的支持能力,即支持使用自有Omni Layer节点的应用场景,也支持基于第三方API服务和离线裸交易的轻量级部署场景。下载地址:omni/usdt php开发包 。
用户1408045
2019/06/11
2.4K0
USDT PHP开发包OmniTool简介
相关推荐
Docker搭建比特币测试网络
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档