# 如何启动测试网络

# 介绍

测试网络是GXChain的外部测试环境,参数与主链相同。 测试网络的程序安装包是专用的,跟主网不同, 不能用主网的程序跑测试网络。

在测试网络上,开发者可以:

  • 测试网络Token自动申领, 每次200个,每天1000个, 浏览器访问 https://testnet.gxchain.org/gxc/get_token?your_account_name 请将your_account_name 替换为你的测试网络钱包帐户名
  • 测试客户端
  • 体验最新功能
  • 参与GXChain开发
  • 项目开发,合约调试
测试网络 配置
接入点 (在测试网络钱包中已内置) wss://testnet.gxchain.org
RPC地址 https://testnet.gxchain.org
种子节点 (在节点启动时候指定) testnet.gxchain.org:6789
智能合约编译服务 (在IDE中配置) https://testnet.gxx.gxchain.org
区块浏览器 https://testnet.explorer.gxchain.org
在线钱包 https://testnet.wallet.gxchain.org

提示

社区开发者贡献节点可以加入测试网络,申请成为公信节点。

# 环境要求

  • 系统: Ubuntu 14.04 LTS 64-bit, 4.4.0-63-generic 内核 或者 macOS 系统
  • 内存: 2GB+ (越多越好)
  • 硬盘: 40GB+
  • 网络:10MB+带宽

依赖安装

  • 安装ntp
sudo apt-get install ntp
  • 安装libstdc++-7-dev
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install libstdc++-7-dev

# 1. 注册账户

访问测试网络在线钱包 (opens new window) 注册钱包帐户

# 2. 申领测试Token

  • 测试网络Token自动申领, 每次200个,每天1000个, 浏览器访问 https://testnet.gxchain.org/gxc/get_token?your_account_name 请将your_account_name 替换为你的测试网络钱包帐户名

# 3. 下载最新testnet专用的节点程序

最新程序 (opens new window)

测试网络的程序,跟主网不同,需要单独下载,执行如下命令:

# 执行这个shell脚本,会自动从github下载最新的测试网程序,并解压至当前目录下
curl 'https://raw.githubusercontent.com/gxchain/gxb-core/dev_master/script/gxchain_testnet_install.sh' | bash

# 4. 下载测试网络genesis.json

wget http://gxb-package.oss-cn-hangzhou.aliyuncs.com/gxb-core/genesis/testnet-genesis.json -O genesis.json

关于genisis.json

  • genisis.json即创世文件
  • 每一条链都有唯一的genesis.json
  • genesis.json中指定了创世区块所必须的配置信息和节点启动的初始化参数
  • 任意一个字符的改变,都会得到一个不同的chain_id
  • 不同的chain_id将导致无法和seed_node之间相互通讯
  • 因此:请勿改变genisis.json,除非你想跑一条私有链

# 5. 启动测试网络节点, 同步数据


export LC_ALL=C

nohup ./programs/witness_node/witness_node --data-dir=testnet_node --rpc-endpoint="0.0.0.0:28090" --p2p-endpoint="0.0.0.0:9999" --seed-nodes='["testnet.gxchain.org:6789"]' --genesis-json genesis.json 1>nohup.out 2>&1 &

参数介绍

  • --data-dir指定区块数据存储路径
  • --rpc-endpoin 开启rpc服务
  • --p2p-endpoint 开启p2p监听服务
  • --seed-nodes 指定节点启动时连接的种子节点

目前测试网络数据量不大,可以跑全节点。通过后台日志文件testnet_node/logs/witness.log可查看区块同步进度, 等待区块同步完成。 当区块编号以 10000 递增时,表示区块正在同步。当区块编号以 1 递增时,表示区块同步完成,GXChain整个测试链的数据约在1.5G左右,一个小时之内就可以同步完成。

2018-11-11T12:58:54        th_a:?unnamed?       reset_p2p_node ] Adding seed node 106.14.180.117:6789			application.cpp:152
2018-11-11T12:58:54        th_a:?unnamed?       reset_p2p_node ] Configured p2p node to listen on 0.0.0.0:8659			application.cpp:194
2018-11-11T12:58:54        th_a:?unnamed? reset_websocket_serv ] Configured websocket rpc to listen on 0.0.0.0:38067			application.cpp:269
2018-11-11T12:58:54        th_a:?unnamed?       plugin_startup ] data transaction plugin startup			data_transaction_plugin.cpp:63
2018-11-11T12:58:54        th_a:?unnamed?       plugin_startup ] witness plugin:  plugin_startup() begin			witness.cpp:121
2018-11-11T12:58:54        th_a:?unnamed?       plugin_startup ] No witnesses configured! Please add witness IDs and private keys to configuration.		witness.cpp:137
2018-11-11T12:58:54        th_a:?unnamed?       plugin_startup ] witness plugin:  plugin_startup() end			witness.cpp:138
2018-11-11T12:58:54        th_a:?unnamed?                 main ] Started witness node on a chain with 0 blocks.			main.cpp:216
2018-11-11T12:58:54        th_a:?unnamed?                 main ] Chain ID is c2af30ef9340ff81fd61654295e98a1ff04b23189748f86727d0b26b40bb0ff4			main.cpp:217

...

2018-11-11T13:02:14 th_a:invoke handle_block         handle_block ] Got block: #960000 time: 2018-01-17T18:44:30 latency: 25726664888 ms from: init3  irreversible: 959990 (-10)			application.cpp:496
2018-11-11T13:02:16 th_a:invoke handle_block         handle_block ] Got block: #970000 time: 2018-01-18T03:12:09 latency: 25696207587 ms from: init2  irreversible: 969992 (-8)			application.cpp:496
2018-11-11T13:02:18 th_a:invoke handle_block         handle_block ] Got block: #980000 time: 2018-01-18T11:39:39 latency: 25665759432 ms from: init10  irreversible: 979992 (-8)			application.cpp:496

...

2018-11-10T05:47:51 th_a:invoke handle_block         handle_block ] Got block: #8749837 time: 2018-11-10T05:47:51 latency: 33 ms from: init5  irreversible: 8749822 (-15)			application.cpp:496
2018-11-10T05:47:54 th_a:invoke handle_block         handle_block ] Got block: #8749838 time: 2018-11-10T05:47:54 latency: 36 ms from: init6  irreversible: 8749823 (-15)			application.cpp:496
2018-11-10T05:47:57 th_a:invoke handle_block         handle_block ] Got block: #8749839 time: 2018-11-10T05:47:57 latency: 30 ms from: miner8  irreversible: 8749824 (-15)			application.cpp:496

...

区块同步完成后,可以运行命令行钱包cli_wallet。

# 6. 在线查看测试网日志

如果我们没有在本地同步一个测试网节点,那么在开发过程中,我们可能无法获得相对详细的日志。为此,我们提供了测试网络日志的在线查看接口,该日志是实时更新的。

链接:https://testnet.gxchain.org/witness_log/ (opens new window)

2019-04-16T08:04:33 th_a:invoke handle_block         handle_block ] Got block: #13067780 time: 2019-04-16T08:04:33 transaction(s): 0 latency: 163 ms from: gxc-pacific  irreversible: 13067762 (-18)			application.cpp:508
2019-04-16T08:04:36 th_a:invoke handle_block         handle_block ] Got block: #13067781 time: 2019-04-16T08:04:36 transaction(s): 0 latency: 6 ms from: zhuliting  irreversible: 13067763 (-18)			application.cpp:508
2019-04-16T08:04:39 th_a:invoke handle_block         handle_block ] Got block: #13067782 time: 2019-04-16T08:04:39 transaction(s): 0 latency: 6 ms from: miner7  irreversible: 13067764 (-18)			application.cpp:508
2019-04-16T08:04:42 th_a:invoke handle_block         handle_block ] Got block: #13067783 time: 2019-04-16T08:04:42 transaction(s): 0 latency: 7 ms from: miner8  irreversible: 13067764 (-19)			application.cpp:508
2019-04-16T08:04:45 th_a:invoke handle_block         handle_block ] Got block: #13067784 time: 2019-04-16T08:04:45 transaction(s): 0 latency: 6 ms from: miner6  irreversible: 13067766 (-18)			application.cpp:508
2019-04-16T08:04:47                th_a:?             exec_one ] [(2668,hi)->2668] CONSOLE OUTPUT BEGIN =====================			apply_context.cpp:27
2019-04-16T08:04:47                th_a:?       console_append ] hi, hello,gxchain
			apply_context.hpp:577
2019-04-16T08:04:47                th_a:?       console_append ] hi, hello,gxchain
			apply_context.hpp:577
2019-04-16T08:04:47                th_a:?             exec_one ] [(2668,hi)->2668] CONSOLE OUTPUT END =====================			apply_context.cpp:52
2019-04-16T08:04:47                th_a:?             exec_one ] [(2668,hi)->2668] elapsed 165			apply_context.cpp:56
2019-04-16T08:04:48 th_a:invoke handle_block         handle_block ] Got block: #13067785 time: 2019-04-16T08:04:48 transaction(s): 0 latency: 5 ms from: bob  irreversible: 13067768 (-17)			application.cpp:508
2019-04-16T08:04:51 th_a:invoke handle_block         handle_block ] Got block: #13067786 time: 2019-04-16T08:04:51 transaction(s): 0 latency: 27 ms from: dharma-chaintest  irreversible: 13067768 (-18)			application.cpp:508
2019-04-16T08:04:54 th_a:invoke handle_block         handle_block ] Got block: #13067787 time: 2019-04-16T08:04:54 transaction(s): 0 latency: 65 ms from: biteweidu1  irreversible: 13067768 (-19)			application.cpp:508

# 7. 如何成为测试网的公信节点

# (1) 升级为终身会员

创建公信节点,首先需要升级为终身会员。

下载最新版本的PC钱包连接测试网接入点,或者访问测试网络网页钱包 (opens new window), 按下图操作,升级为终身会员。

提示

只有终身会员才可以创建公信节点候选人,升级终身会员需要燃烧 50GXC 矿工费,请确保帐户余额充足。

# (2) 创建公信节点

按下图操作,创建公信节点。

# (3) 查看公信节点id

按下图操作,查看公信节点id。

提示

创建公信节点完成后,查看自己的节点id, 在启动公信节点程序时,需要带上此参数

# (4) 重新启动公信节点程序

重新启动公信节点程序,需要先关闭原来的witness_node

执行如下命令,关闭witness_node程序:

kill -s SIGTERM $(pgrep witness_node)

重新启动命令:

# 通过PC钱包或者网页钱包,查看自己的公信节点id
# 需要将如下的1.6.10 替换为自己的公信节点id, 将--private-key的参数值替换为自己的公信节点帐户的公私钥, 用于签署区块

export LC_ALL=C

./programs/witness_node/witness_node --data-dir=testnet_node \
--rpc-endpoint="0.0.0.0:28090" --p2p-endpoint="0.0.0.0:9999" \
--seed-nodes='["testnet.gxchain.org:6789"]' --genesis-json genesis.json  -w '"1.6.10"' \
--private-key '["GXC73xxxxxxv9mhMU", "5Jainouxxxxxg8yaZh9Ks"]' &

其中

--data-dir指定区块数据存储路径

-w 指定的是自己的公信节点id, 注意是'"1.6.x"',双引号外面带单引号
--private-key指定的是自己帐户的公钥和私钥,注意最外面带单引号
以上2个参数必须正确,否则将影响区块生产

&表示程序后台运行

建议

程序启动命令行确定后,建议放入shell脚本,方便以后启动和停止。 脚本可参考这里 (opens new window)

#!/bin/bash
set -x

kill -s SIGINT $(pgrep witness_node)
echo $?

while true
do
	pid=$(pgrep witness_node)
	if [ $pid ] ; then
		echo "stop witness_node ..."
		sleep 1
	else
		break
	fi
done
echo "start witness_node ..."

./programs/witness_node/witness_node --data-dir=testnet_node \
--rpc-endpoint="0.0.0.0:28090" --p2p-endpoint="0.0.0.0:9999" \
--seed-nodes='["testnet.gxchain.org:6789"]' --genesis-json genesis.json  -w '"1.6.10"' \
--private-key '["GXC73Zyj56MHxxxxxxxU5QEv9mhMU", "5Jainounrsxxxxxxh9Ks"]' \
--fast-replay  &