Qtum开发者教程系列——Qtum开发环境设置

量子链Qtum2018-09-07 16:13:03  阅读 -评论 0

Qtum开发者教程系列——Qtum开发环境设置点击上方蓝字关注QTUM公众号,一同探索行业最前沿

Qtum开发者教程系列——Qtum开发环境设置

介绍

这篇文章介绍如何使用 Docker 在电脑(例如笔记本电脑)上为 Qtum 区块链快速设置私有 3节点 regtest 环境。对想在 Qtum 区块链上进行实验(例如 staking)的人非常有用。

选择 Docker 是因为(等下)会简化不同系统(如 Windows, macOS/OSX, Linux等)上开发工具的安装,比如 solc 和 ethabi。

下文专为 Qtum 区块链软件开发者,要求已安装好环境。

本教程做以下假设:


你是一位软件开发者(至少知道怎么编辑文件,运行命令行,会用git等等)

你知道我说的“CTRL-D”指的是同时按下“Ctrl”键和字母“D”键

我的命令行和输出基于 macOS/OSX 环境,但你可以把它们翻译到你对应的操作系统上(如 Windows, Linux等)

你有大约 200MB 空闲磁盘空间来装 3 个节点的数据

使用 $ 字符作为命令开头。不同操作系统可能有不同开头(例如>)。要在shell /终端(例如 Windows 中的“命令提示符”等)中输入这些命令.

安装 Docker

我在 macOS Sierra 10.12.6 的笔记本电脑上安装 Docker(CE)版

Qtum开发者教程系列——Qtum开发环境设置

运行 Docker 命令:

$ docker version

则有以下:

Client:


Version: 17.09.0-ce

API version: 1.32

Go version: go1.8.3

Git commit: afdb6d4

Built: Tue Sep 26 22:40:09 2017

OS/Arch: darwin/amd64

Server:

Version: 17.09.0-ce

API version: 1.32 (minimum version 1.12)

Go version: go1.8.3

Git commit: afdb6d4 Built: Tue Sep 26 22:45:38 2017

OS/Arch: linux/amd64

Experimental: true

要确保已安装 Docker 并正常运行,运行命令:

$ docker run hello-world

输出如下:

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

5b0f327be733: Pull complete

Digest: sha256:b2ba691d8aac9e5ac3644c0788e3d3823f9e97f757f01d2ddc6eb5458df9d801

Status: Downloaded newer image for hello-world:latest

Hello from Docker!

This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

1. The Docker client contacted the Docker daemon.

2. The Docker daemon pulled the "hello-world" image from the Docker Hub.

3. The Docker daemon created a new container from that image which runs the

executable that produces the output you are currently reading.

4. The Docker daemon streamed that output to the Docker client, which sent it

to your terminal.

To try something more ambitious, you can run an Ubuntu container with:

$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:

https://cloud.docker.com/

For more examples and ideas, visit:

https://docs.docker.com/engine/userguide/

*以上发生错误的话请及时向社区寻求帮助

Qtum开发者教程系列——Qtum开发环境设置


2. 创建 Qtum Docker 桥接网络(Qtum Docker Bridge Network)


为了允许 qtumd 节点(在单独的 Docker 容器中运行)相互通信,我们将为它们创建一个 Docker 桥接网络:

$ docker network create --driver bridge  qtum_network 

查看是否 Docker 网络已正确创建:

$ docker network ls

输出类似于这样:

NETWORK ID NAME DRIVER SCOPE

6ed968118fba bridge bridge local

07f2b230641a host host local

4275590e2165 none null local

056c85d3e4a3 qtum_network bridge local

下面进一步使用的命令中,我们引用 qtum_network 网络。

Qtum开发者教程系列——Qtum开发环境设置

3. 拉取 Qtum Docker 镜像(Qtum Docker Image)

 Qtum Docker:https://hub.docker.com/r/cryptominder/qtum/

将镜像拉取到本地:

$ docker pull cryptominder/qtum

几分钟后,应该看到它已将镜像及其依赖下载好了。可以运行:

$ docker images

验证镜像(即 cryptominder/qtum)确实在本地可用。Qtum Daemon 数据文件夹(Datadir)作为 Docker 卷(Docker Volume)

cryptominder/qtum Docker 镜像在 /data 处有一个卷(volume)。我们在本地目录下(每个节点一个)创建 Qtum 数据文件夹(例如,存储区块链数据,钱包文件,调试日志等)。

 这样停止再重启 Docker 容器也不会丢失任何数据。


我们也把一个本地的 qtumd 配置文件映射到 /home/qtum/qtum.conf (只读)

使用 docker run 命令加上2个命令行参数:

-v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro

-v ${PWD}/node1_data:/data

${PWD} 环境变量是 Linux 和 macOS/OSX 下的当前目录 - 将其替换为你实际目录路径。在Windows上,这通常相当于 %cd%。

Qtum开发者教程系列——Qtum开发环境设置

4. 获取 Qtum Daemon 配置文件

开始搭建 Qtum regtest 环境之前,先弄一些 qtumd 配置文件 - 用于 3 个节点。

我已经在 https://github.com/crypt0m1nd3r/docker-qtum-config 上提供了3个配置文件。可以从 Git 手动下载 3 个文件,也可以简单地克隆仓库:

$ git clone https://github.com/crypt0m1nd3r/docker-qtum-config.git

现在你已经下好 3 个文件:

node1_qtumd.conf

node2_qtumd.conf

node3_qtumd.conf

这些文件几乎完全相同,除了它们如何让一个节点连接到另一个节点(即 node1 连接 到 node2,node2 连接到 node3,node3 连接到 node1)。

Qtum开发者教程系列——Qtum开发环境设置

5. 开始


现在我们准备启动 3 个节点创建 Qtum 区块链 regtest 网络。

启动节点#1(1行搞定):

$ docker run -d --rm --name qtumd_node1 --network=qtum_network -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtumd

-v 的路径是绝对路径。 同样,在Windows上,可以用%cd%替换${PWD}。

检查节点#1是否正在运行:

$ docker ps

输出(可以向左滚动):

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e1dd22bdf9c9 cryptominder/qtum:latest "/entrypoint.sh qtumd" 2 seconds ago Up 1 second 3888-3889/tcp, 13888-13889/tcp, 23888/tcp qtumd_node1

可以看到(在上面的最后一列,在最右边) qtumd 节点#1 的 Docker 容器命名:qtumd_node1。

qtumd_node1使用配置文件node1_qtumd.conf(确保该文件在提供的路径中),它用当前目录中的 node1_data 作为 datadir。

检查 ${PWD}/node1_data 目录是否包含名为 regtest 的子目录 - 并且在regtest子目录下面找到 wallet.dat,debug.log 等。运行:

$ ls -1FA node1_data/regtest

输出:

.cookie

.lock

banlist.dat

blocks/

chainstate/

database/

db.log

debug.log

peers.dat

qtumd.pid

stateQtum/

vm.log

wallet.dat

对节点#2和#3执行与上述相同的步骤(包括检查),即:

启动节点#2(1行搞定):

$ docker run -d --rm --name qtumd_node2 --network=qtum_network -v ${PWD}/node2_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node2_data:/data cryptominder/qtum:latest qtumd

启动节点#3(1行搞定):

$ docker run -d --rm --name qtumd_node3 --network=qtum_network -v ${PWD}/node3_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node3_data:/data cryptominder/qtum:latest qtumd

再次运行:

$ docker ps

有(注意:下面的输出可以向左滚动)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

6a9cf2ea8a6c cryptominder/qtum:latest "/entrypoint.sh qtumd" 1 second ago Up 1 second 3888-3889/tcp, 13888-13889/tcp, 23888/tcp qtumd_node3

7bc649de7649 cryptominder/qtum:latest "/entrypoint.sh qtumd" 10 seconds ago Up 9 seconds 3888-3889/tcp, 13888-13889/tcp, 23888/tcp qtumd_node2

e1dd22bdf9c9 cryptominder/qtum:latest "/entrypoint.sh qtumd" 3 minutes ago Up 3 minutes 3888-3889/tcp, 13888-13889/tcp, 23888/tcp qtumd_node1

恭喜! - 你刚刚创建了一个 3 节点 regtest Qtum 区块链环境。

随便写一个 shell/batch 脚本来自动执行这个过程

Qtum开发者教程系列——Qtum开发环境设置

6. 验证

要进一步验证 regtest 网络是否已设置正确,使用 qtum-cli 命令在一个或多个节点上调用 qtumd 的 RPC 接口。

要使用 qtum-cli 在 qtum_node1 上调用RPC接口,运行:

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli getinfo

输出类似于这样:

"errors": ""
{

"version": 140301,

"protocolversion": 70016,

"walletversion": 130000,

"balance": 0.00000000,

"stake": 0.00000000,

"blocks": 0,

"timeoffset": 0,

"connections": 0,

"proxy": "",

"difficulty": {

"proof-of-work": 4.656542373906925e-10,

"proof-of-stake": 4.656542373906925e-10

},

"testnet": false,

"moneysupply": 0,

"keypoololdest": 1507353938,

"keypoolsize": 100,

"paytxfee": 0.00000000,

"relayfee": 0.00400000,
}

帮助 help

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli help

以上将显示所有可用的RPC命令

getconnectioncount

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli getconnectioncount

上面应该输出2(假设节点已经启动了几分钟,所以它们有机会相互连接)。

getaccountaddress

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli -stdin getaccountaddress

运行上面的命令后,按 Enter 键(获得节点钱包的默认/空""帐户地址),然后按CTRL-D。 这是使用 -stdin 选项指定更高级命令行参数的示例(每行一个,直到按下 CTRL-D)。

当然还有许多其他命令(运行帮助 help时可以看到它们,见上文)

上面的命令用的是 qtumd_node1。可以更改命令行上的相关参数项(即将 1 变为 2 等等)在其他节点上运行这些参数项。可以检查每个节点是否就区块高度给出相同的结果 (即来自getinfo命令的"blocks": 0”。

再次建议,随便写个 shell/批处理脚本(或别名)来简化这些命令的调用。

Qtum开发者教程系列——Qtum开发环境设置

7.进入到权益证明 (POS, Proof-of-Stake) 区块阶段

可能你已经注意到上一步中的 getinfo 命令输出:“blocks”:0。这意味着我们的 Qtum regtest 区块链上尚未创建任何区块。

在 regtest 区块链中,你需要手动生成区块。 可以用 generate RPC 命令。运行 help generate以查看其工作原理:

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli help generate

提示:也可以 help <command> 用于其他 RPC 命令。现在,生成1个区块:

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli generate 1

再次运行 getinfo 命令:

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli getinfo

输出

"blocks": 1,

在 Qtum 中,前 5000 个区块是工作证明(POW)区块。建议将区块高度提高到(至少)5000,这样就可以进入权益证明(POS, Proof-of-Stake)区块。如果上面生成了 1 个块,则现在需要生成 4999 个块:

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli generate 4999

运行上述命令需要2或3分钟才能完成。完成后,可以看到一个很长的输出(即一个 JSON 格式的输出,包含 4999 个生成区块的哈希,每一个一行)

Qtum 的首席开发者 Jordan Earls 告诉我:“实际上并非如此。PoS 和 PoW 区块在区块 5000 之下是混合出现的,并且在区块 5000 之后禁止 PoW。但是,在 regtest 模式下,没有 PoW 或 PoS 限制。


因此,只要生成至少 500 个区块(因为代币不能用于 staking 直到 500 区块后成熟),就可以生成几乎任何数量的区块。我通常选择 600。此外,由于与时间戳执行相关的一些技术问题,5000这么大的区块数会导致花费几个小时才会进入到PoS阶段”

再次运行 getinfo 命令:

$ docker run -i --network container:qtumd_node1 -v ${PWD}/node1_qtumd.conf:/home/qtum/qtum.conf:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli getinfo

会得到:

"blocks": 5000,

我们现在处于 Proof-of-Stake(POS)阶段。

重要说明:在 Qtum regtest 环境中,POS 区块自动生成。生成第 5001 个块需要一点时间(例如大约10分钟) - 但之后区块生成很快。有需要的话仍然可以手动生成 POS 区块。

生成块之后,可以看到钱包余额增加(使用 getbalance 查看)

Qtum开发者教程系列——Qtum开发环境设置

8. 停止和重置

要停止节点,只需运行:

$ docker stop qtumd_node1

(显然,更改 qtumd_node1 来停止对应节点)

如果希望完全重置区块链,则可以在停止节点后删除全部 3 个数据目录(例如node1_data/regtest 等)。如果想“登录”正在运行的容器,以下命令很有用:

$ docker exec -it <CONTAINER ID> /bin/sh

<CONTAINER ID>部分可以是容器ID(如docker ps所示)或我们给容器的名称(例如qtumd_node1)

做完后需要退出,只需输入:

# exit

退出容器(它仍将继续运行)。

希望本教程对你有所帮助。如果你需要帮助,请在下面评论,或者在 Qtum subreddit 上找我。我也积极参与 Qtum 的 Slack(尽管随着 Qtum 团队准备转移到另一个协作/消息传递平台,Slack 邀请已经关闭)。

如果你觉得本教程很有用,我的 Qtum tip 钱包地址(在我的Raspberry Pi 3上运行)是:QUa3yA8ALfQyM5eEb9sDPRWkX6sSurMs6D。 

感谢你的支持!

推荐阅读

外媒Investopedia:亚马逊开始部署区块链?
Qtum联合创始人Jordan Earls 出席Distributed 2018探讨技术扩容方案
Qtum量子链帅初出席2018 APEC未来之声亚太青年创新峰会
Qtum量子链周报(8月20日-8月24日)

Qtum开发者教程系列——Qtum开发环境设置Qtum开发者教程系列——Qtum开发环境设置

Qtum开发者教程系列——Qtum开发环境设置

Qtum开发者教程系列——Qtum开发环境设置

Qtum开发者教程系列——Qtum开发环境设置

Qtum开发者教程系列——Qtum开发环境设置

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们kefu@lianshijie.com

参与讨论 (0 人参与讨论)

相关推荐

Cashbox研发工程师讲解SPV钱包开发重难点(一)

在公众号上一期的介绍中提到,Cashbox下一步将添加一个bitcoin完全去中心化的SPV钱包。下面我将从技术背景和实现方式两方面介绍bitcoin的SPV钱包。SPV的全称是简单支付认证。我们把这种运行SPV节点的应用,称为轻钱包。

BSN测试网服务发布,免费提供区块链开发测试环境

10月31日,区块链服务网络BSN进行了常规的季度版本更新,持续优化现有功能的同时发布全新产品服务。其中,本次推出的BSN"测试网服务"将免费提供给广大开发者,旨在供开发者进行区块链应用的开发测试,试用BSN最新推出的产品服务,以及为区块链技术研究与创新提供试错环境。开发者可至BSN官网的"联盟链服务"-"测试网服务"内免费体验产品服务。BSN测试网服务开发者可以在测试网发布不限定数量的应用服务,

接入去中心化预言机Chainlink喂价开发DeFi看涨期权交易平台实例

DeFi这个大类下包含许多智能合约应用场景,如区块链投票、去中心化彩票、流动性挖矿以及去中心化交易平台。本文将教大家如何使用Chainlink喂价预言机在以太坊主网上用Solidity开发简单的看涨期权DeFi交易平台。当然,你也可以将这个实例稍作修改,开发一个看跌期权交易平台。这个平台拥有一个强大的功能,那就是所有价值转移都通过智能合约进行,交易双方可以绕过中间方直接展开交易。因此,这个过程不包

智能合约开发的最佳实践

软件开发的历史已有数十年之久。我们受益于半个世纪以来积累的最佳实践,设计模式和智慧。 相反,智能合约开发才刚刚开始。2015 推出的以太坊和 Solidity 仅有几年的时间。 加密空间是一个不断发展的未知领域。没有确定的工具堆栈来构建去中心化应用。对于智能合约,没有诸如设计模式[3]或代码整洁之道[4]之类的开发人员手册。有关工具和最佳实践的信息遍布各处。 你正在阅读我这份希望它已经存在的指南。

年末十家手机银行数字化升级大盘点:谁家开发更全面?谁家建设更到位?

年末十家手机银行数字化升级大盘点:谁家开发更全面?谁家建设更到位?

2020年接近尾声,今年的疫情给实体经济发展带来了不小的冲击,但客观上却促进了数字经济的蓬勃发展。中国电子银行网联合易观持续发布的"中国手机银行综合运营报告"显示:第三季度,各商业银行手机银行持续深化线上经营能力,在活动运营上呈现多元化多场景态势。本年度从7月以来,有工商银行、建设银行、邮储银行、兴业银行、广发银行、浦发银行、北京银行、江苏银行、苏州银行、上海农商银行等多家银行机构升级了手机银行。

Web3j-OpenAPI使用教程

Web3 Labs的目标之一是使以太坊上的开发尽可能简单。在过去的三年中,我们看到许多团队(包括我们自己)在Web3j之上一次又一次地编写RESTful服务,以便为他们的服务器应用程序提供与以太坊的直接集成。 今年早些时候,我们决定对此做一些事情,并高兴地宣布Web3j Open API项目。这个最新的项目使您可以轻松签订智能合约并生成符合OpenAPI的服务器应用程序(通过Swagger提供完整

开发者们正在如何建设BCH?

提高未确认交易上限在2020年10月4日的BCH网络讨论直播中,BCHN开发者Calin Culianu宣布,他打算在短期内将BCH的未确认交易上限从50提高到500笔,未来甚至会更高。开发人员声称这将解决99%的BCH双重支出问题。

比特币有什么缺点?

1.交易平台的脆弱性。比特币网络很健壮,但比特币交易平台很脆弱。交易平台通常是一个网站,而网站会遭到黑客攻击,或者遭到主管部门的关闭。2.交易确认时间长。比特币钱包初次安装时,会消耗大量时间下载历史交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。3.价格波动极大。由于大量炒家介入,导致比特币兑换现金的价格如过山车一般起伏。使得比

麦妖榜
更新日期 2019-09-03
排名用户贡献值
1牛市来了30910
2BitettFan24187
3等待的宿命23810
4区块大康20369
5六叶树20310
6linjm122719429
7天下无双16192
8lizhen00215280
9让时间淡忘14586
10yelanyi050511349
返回顶部 ↑