文章目录


一、数据准备

1.1 下载tron官方快照数据

官方网址:https://cn.developers.tron.network/docs/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BF%AB%E7%85%A7%E5%A4%87%E4%BB%BD

cd /opt/tools
wget -b http://47.74.159.117/backup20210303/FullNode_output-directory.tgz

  • 建议下载LevelDB数据,不包含内部交易节点中的数据
  • wget -b 含义为在后台下载,因数据量较大,下载时间较长,建议在后台进行下载,数据下载时间根据服务器带宽决定
  • 下载时,会在当前目录生成wget-log文件,可通过此文件查看数据下载进度

1.2 查看数据文件MD5值


  • 官方快照数据会在每个下载目录下放置一份该文件的MD5值信息,需要利用此值与我们下载后的文件进行对比,是否一致
  • 如果MD5值不一致,则该快照数据不可用,因为有可能下载后的数据文件已损坏,后续将无法同步tron主网数据
  • 上述文件MD5值链接:http://47.74.159.117/backup20210304/FullNode_output-directory.tgz.md5sum
  • 查看已下载的文件MD5值

# md5sum FullNode_output-directory.tgz 
a9ff87f9e7eb88f1cc7b0e5bf15ed208 FullNode_output-directory.tgz

注:MD5值一致才可以继续下面步骤

1.3 解压tron快照数据

tar zxvf /opt/tools/FullNode_output-directory.tgz -C /opt/docker/tron

二、jdk基础镜像准备

2.1 Dockerfile编写

# cd /opt/docker/images/tron/
# vim Dockerfile
FROM anapsix/alpine-java:8u172b11_jdk
RUN apk add screen \
&& apk add net-tools \
&& apk add busybox-extras
WORKDIR /data
CMD /data/start.sh

2.2 build脚本编写

# vim build.sh
#!/bin/bash
docker build . -t jdk8:tron

2.3 生成jdk基础镜像

  • 生成jdk基础镜像
# sh build.sh 
......
Successfully built bc89abb42ec7
Successfully tagged jdk8:tron
  • 查看镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk8 tron bc89abb42ec7 47 seconds ago 178MB

三、tron容器生成

3.1 获取tron的jar包

tron服务jar包共有两种方式获取:


  • a:编译源代码
  • b:通过release直接获取最新版本jar包:https://github.com/tronprotocol/java-tron/releases

此文档选择直接获取最新版本jar包

cd /opt/docker/tron
wget https://github.com/tronprotocol/java-tron/releases/download/GreatVoyage-v4.1.2/FullNode.jar

3.2 tron主网配置文件获取

下载链接:https://github.com/tronprotocol/tron-deployment/blob/master/main_net_config.conf

cd /opt/docker/tron
wget https://github.com/tronprotocol/tron-deployment/blob/master/main_net_config.conf

3.3 启动脚本编写

# cd /opt/docker/tron
# vim start.sh
#!/bin/sh
APP_HOME="/data"
APP_PID=$APP_HOME/pid

FILE_LIST=`ls ${APP_HOME}`
JAR_FILE=""
LOG_FILE=""

for FILE in $FILE_LIST
do
if [ "${FILE##*.}" = "jar" ]; then
JAR_FILE="${APP_HOME}/${FILE}"
LOG_FILE="${FILE%.*}.log"
fi
done

if [ -z $JAR_FILE ]; then
echo "Error : no jar file in $APP_HOME"
exit
fi

if [ -f "$APP_PID" ]; then
PID=`cat $APP_PID`
rm -rf $APP_PID
kill -9 $PID
fi

screen -S tron java -jar -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=40 -XX:G1HeapRegionSize=4 -XX:MaxTenuringThreshold=13 -XX:+UseStringDeduplication -XX:ConcGCThreads=4 -XX:AutoBoxCacheMax=20000 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+PrintPromotionFailure -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/java.hprof -Xloggc:./gc.log -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1024000k -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails /data/FullNode.jar -c /data/main_net_config.conf

PID=$!
echo $PID > ${APP_PID}
if [ ! -f $APP_HOME/${LOG_FILE} ]; then
echo "begin....." >>$APP_HOME/${LOG_FILE}
fi
tail -f $APP_HOME/${LOG_FILE}

注:此文件中tron服务启动参数为:

screen -S tron java -jar -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=40 -XX:G1HeapRegionSize=4 -XX:MaxTenuringThreshold=13 -XX:+UseStringDeduplication -XX:ConcGCThreads=4 -XX:AutoBoxCacheMax=20000 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+PrintPromotionFailure -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/java.hprof -Xloggc:./gc.log -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1024000k -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails /data/FullNode.jar  -c /data/main_net_config.conf

  • 由于启动时需要进行交互,请不要使用nohup命令,建议使用会话保持工具:screen
  • 因官方部署文档中,未对jvm参数进行优化,建议进行优化,垃圾回收器建议使用 G1
  • 命令行参数说明:

-c: 指定配置文件路径: -c config.conf
--log-config: 指定日志配置文件路径,

以下参数为启动超级节点使用
--witness: 启动witness功能,启动超级节点使用。
--witness-address:SR账户地址
-p: 指定witness的私钥, 如果不希望使用明文的方式进行私钥指定,可以使用keystore + 密码的方式

3.4 检查文件是否已经无误

FullNode.jar   (tron全节点启动jar包)
main_net_config.conf (tron全节点配置文件)
output-directory (tron全节点数据目录)
start.sh (服务启动脚本)

3.5 启动tron容器

docker run -itd --name tron -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone -v /opt/docker/tron:/data --network=host jdk8:tron

四、查看tron主网节点是否启动成功

  • 1.查看docker容器是否启动成功
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e7f96cb2bf5 jdk8:tron "/bin/sh -c /data/st…" 1 hours ago Up 1 hours tron
  • 2.查看启动日志
tail -f /opt/docker/tron/logs/tron.log
# 服务启动
18:57:51.841 INFO [main] [app](FullNode.java:48) Full node running.
18:57:52.367 WARN [main] [app](LocalWitnesses.java:104) privateKey is null
18:57:52.593 INFO [main] [app](Args.java:935) Bind address wasn't set, Punching to identify it...
......
# 数据检查
18:58:31.542 INFO [main] [DB](Manager.java:534) begin to init txs cache.
18:58:31.543 INFO [main] [DB](Manager.java:541) current headNum is: 28105497 # 获取到当前数据最新区块号
# 连接到对等节点
19:04:50.713 INFO [pool-35-thread-1] [net](PeerClient.java:70) connect peer 47.241.67.170 18888 60003323154b107b4ece6517c7d9a576cf4de84d4f34e264af74ffac4e063669945e544ec3c5a9a115e71be2ffee5ec7f66b55f48063356c80f57a5b6cb77f8c
19:04:50.719 INFO [pool-35-thread-1] [net](PeerClient.java:70) connect peer 161.117.224.116 18888 961c20852039c218bc47155012ba5c144eed8d4e1b8b40910d272ab9de4a6127a183d104b818ccdfe4fed02421a5e2c18fd714d258aac4c9b4fbd539a32eb513
19:04:50.720 INFO [pool-35-thread-1] [net](PeerClient.java:70) connect peer 161.117.230.163 18888 b2267a469f8f712fdd6872238d1b467335c9d4ceedec39c4c09bf5a523e52e77ed3defae895222204796930a4f3efc621b40426f19437df3ea23219b7fb16973
# 区块数据同步中
19:04:52.036 INFO [TronJClientWorker-2] [net](MessageQueue.java:121) Receive from /161.117.230.163:18888, type: BLOCK
Num:28105946,ID:0000000001acdcdaffccb60fd7b397f6de822b4630cefc4f915e4d1809faa642, trx size: 49

19:04:52.036 INFO [TronJClientWorker-2] [net](MessageQueue.java:121) Receive from /161.117.230.163:18888, type: BLOCK
Num:28105947,ID:0000000001acdcdb604f8e9575ceba54fd090dea2f690008b2eae5842bcfbace, trx size: 56

19:04:52.037 INFO [TronJClientWorker-2] [net](MessageQueue.java:121) Receive from /161.117.230.163:18888, type: BLOCK
Num:28105948,ID:0000000001acdcdc8b654daeae035d6976223c9b3169ea4e8b1a0b30bd2c6206, trx size: 51

五、查看tron主网节点是否同步完成

  • 1.查看节点最新区块号

查看节点当前同步的最新区块号,与tron官方区块链浏览器进行对比,查看是否一致,是否已与公网节点的区块一致

tron官方浏览器:https://tronscan.org/#/

curl -X GET  http://127.0.0.1:8091/walletsolidity/getnowblock
  • 查询链上最新的块内的交易信息列表

查询链上最新的块内的交易信息列表,确认是否可获取,如果可获取,说明已同步区块信息

curl -X POST  http://127.0.0.1:8091/walletsolidity/gettransactioninfobyblocknum -d '{"num":28178505}