私链搭建

Tron 私链搭建全流程

测试环境:

操作系统:macOs Mojave 10.14.2 8G 256G SSD
JDK 1.8 (请使用Oracle jdk版本)

前期准备:

1.JDK 1.8 (请使用Oracle jdk版本)
2.创建至少两对tron网络格式的私钥与地址(可以使用tronweb或者wallet-cli)

  • address_A ,private_A;

  • address_B,private_B;

  • address_C,private_C;

    3.部署至少一个SuperNode用于出块;
    4.部署任意数量的FullNode节点用于同步区块、广播交易;

注:本示例中只搭建了一个SR节点和一个FullNode节点。

部署指南

1.通过编译源代码的方式或直接下载release的方式获取FullNode.jar。

a.通过下载源码编译
1). 创建代码目录

mkdir -p  /project/tron/

2). 下载java tron源码

cd   /project/tron/
git clone -b master https://github.com/tronprotocol/java-tron.git

3). 编译java-tron项目

cd ./java-tron 
./gradlew build -x test

b.通过release直接获取最新版本jar包
https://github.com/tronprotocol/java-tron/releases

  1. 配置文件

a.获取超级节点配置文件

1). 下载private_net_config.conf 文件
https://github.com/tronprotocol/tron-deployment/blob/master/private_net_config.conf
2). 修改配置文件中localwitness。
3). 修改配置文件中genesis.block.witnesses为localwitness中私钥对应的地址
4). 修改p2p.version为除了11111之外的任意正整数
5). 第1个SR设置needSyncCheck配置项为false,其他可以设置为true
6). 修改node.discovery.enable为true。
7). 根据需要将生成的账户地址写入genesis.block.assets中
7). 命名配置文件为supernode.conf
8). 请确保SR机器的TCP 和UDP在listen.port是打开状态 (如果使用AWS或者阿里云请重点关注这一项)

b.获取全节点配置文件
1). 下载private_net_config.conf 文件, https://github.com/tronprotocol/tron-deployment/blob/master/private_net_config.conf
2). 修改配置文件中seed.node ip.list为SR的ip地址和端口。(本示例中 127.0.0.1:16666)
3). 设置p2p.version与超级节点的p2p.version一致。
4). 设置genesis.block 与超级节点中的genesis.block配置一致。
5). 设置needSyncCheck为true
6). 设置node.discovery.enable 为true
7). 命名配置文件为fullnode.conf

3.部署节点

a.部署超级节点

nohup java -Xmx6g -XX:+HeapDumpOnOutOfMemoryError -jar FullNode.jar  --witness  -c supernode.conf

b.部署全节点

nohup java -Xmx6g -XX:+HeapDumpOnOutOfMemoryError -jar FullNode.jar  -c fullnode.conf

节点启动后,java-tron.jar的同级目录上将生成 logs 和 output-directory 两个文件夹
logs : 节点日志文件
output-directory : 节点数据存储目录
命令行参数说明:
--witness: 启动witness功能,i.e.: --witness。
--log-config: 指定日志配置文件路径,i.e.: --log-config logback.xml。
-c: 指定配置文件路径,i.e.: -c config.conf。

日志文件使用:
可以修改模块的level等级来控制日志的输出,默认每个模块的level级别为INFO,比如,只打印网络模块warn以上级别的信息,可以如下修改

注:
1).如果SR跟fullnode同一host,建议给SR和fullnode建立单独文件夹,方便根据日志排查问题。
2).无法排除非本人以外的超级节点加入,具体可根据自己需求,进行网络隔离等相关操作。
3).当在同一台机器上部署多个节点时,注意端口冲突的问题。

4.提议proposal
为了跟主网环境一致,需要保持私链中的提议与主网提议一致。需要注意的是,部分提议有先后顺序,建议根据主网的proposal_id进行一次提议
a. 使用wallet/proposalcreate接口创建提案,签名并广播
b. 使用wallet/proposalapprove接口批准提案,签名并广播
具体接口使用请参考文档:HTTP文档

注:提议生效默认时间是72小时。
如需快速通过提议,需要修改如下
1.修改提议生效时间参数, proposalExpireTime = 259200000 // 3 day: 259200000(ms) (在配置文件中修改block.proposalExpireTime)
2.修改超级代表调整时间间隔,目前默认的是6小时,可通过提案进行修改。

{
    "key": 0,
    "value": 300000  // 5分钟,单位ms
}

目前主网所有提议以及提议相关信息:
https://api.trongrid.io/wallet/getchainparameters
https://api.trongrid.io/wallet/listproposals
https://tronprotocol.github.io/documentation-zh/mechanism&algorithm/sr/

主网通过的proposals整理如下:

1."proposal_id": 1
 {
   "key": 9,
   "value": 1
 }
2."proposal_id": 3
 {
   "key": 10,
   "value": 1
 }

3."proposal_id": 4
 {
   "key": 11,
   "value": 20
 }

4."proposal_id": 7
 {
   "key": 17,
   "value": 250000000000
 }

5."proposal_id": 9
 {
   "key": 11,
   "value": 10
 }

6."proposal_id": 13
 {
   "key": 19,
   "value": 100000000000
 }

7."proposal_id": 14 
{
   "key": 15,
   "value": 1
 }

8."proposal_id": 15 
{
   "key": 18,
   "value": 1
 }

9."proposal_id": 16
{
   "key": 16,
   "value": 1
 }

10."proposal_id": 17
{
   "key": 20,
   "value": 1
 }

11."proposal_id": 18
{
   "key": 26,
   "value": 1
 }

12."proposal_id": 22
{
   "key": 30,
   "value": 1
 }

13."proposal_id": 27
{
   "key": 5,
   "value": 16000000
 },
{
   "key": 31,
   "value": 160000000
 }

14."proposal_id": 29
{
   "key": 32,
   "value": 1
 }