Full Code of tronprotocol/tron-deployment for AI

master 6e57175bcd3f cached
4 files
67.5 KB
20.1k tokens
1 requests
Download .txt
Repository: tronprotocol/tron-deployment
Branch: master
Commit: 6e57175bcd3f
Files: 4
Total size: 67.5 KB

Directory structure:
gitextract_avwg0i13/

├── README.md
├── main_net_config.conf
├── private_net_config.conf
└── test_net_config.conf

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
## 📌 Scope of Use

This repository provides the **latest `java-tron` configuration templates** for different network environments. These configurations can be used as references or starting points when deploying or maintaining TRON nodes.

### 🌐 Supported Networks

#### Main Network (Mainnet)
- **Local file:** `main_net_config.conf`
- **Official source:**  
  https://github.com/tronprotocol/java-tron/blob/develop/framework/src/main/resources/config.conf

#### 🧪 Nile Test Network (Testnet)
- **Local file:** `test_net_config.conf`
- **Official source:**  
  https://github.com/tron-nile-testnet/nile-testnet/blob/master/framework/src/main/resources/config-nile.conf

#### 🏠 Private Network
- **Local file:** `private_net_config.conf`
- Intended for local development, testing, or custom private deployments.

---

> ⚠️ Note  
> Configuration files in this repository are periodically synchronized with official sources. Always verify compatibility with your target `java-tron` version before deployment.


================================================
FILE: main_net_config.conf
================================================
net {
  # Type can be 'mainnet' or 'testnet', refers to address type.
  # Hex address of 'mainnet' begin with 0x41, and 'testnet' begin with 0xa0.
  # Note: 'testnet' is not related to TRON network Nile, Shasta or private net
  type = mainnet
}

storage {
  # Directory for storing persistent data
  db.engine = "LEVELDB",  // deprecated for arm, because arm only support  "ROCKSDB".
  db.sync = false,
  db.directory = "database",

  # Whether to write transaction result in transactionRetStore
  transHistory.switch = "on",

  # setting can improve leveldb performance .... start, deprecated for arm
  # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs
  # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail
  # if you find block sync has lower performance, you can try this settings
  # default = {
  #  maxOpenFiles = 100
  # }
  # defaultM = {
  #  maxOpenFiles = 500
  # }
  # defaultL = {
  #  maxOpenFiles = 1000
  # }
  # setting can improve leveldb performance .... end, deprecated for arm

  # You can customize the configuration for each database. Otherwise, the database settings will use
  # their defaults, and data will be stored in the "output-directory" or in the directory specified
  # by the "-d" or "--output-directory" option. Attention: name is a required field that must be set!
  # In this configuration, the name and path properties take effect for both LevelDB and RocksDB storage engines,
  # while the additional properties (such as createIfMissing, paranoidChecks, compressionType, etc.) only take effect when using LevelDB.
  properties = [
    #    {
    #      name = "account",
    #      path = "storage_directory_test",
    #      createIfMissing = true, // deprecated for arm start
    #      paranoidChecks = true,
    #      verifyChecksums = true,
    #      compressionType = 1,        // compressed with snappy
    #      blockSize = 4096,           // 4  KB =         4 * 1024 B
    #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B
    #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B
    #      maxOpenFiles = 100 // deprecated for arm end
    #    },
    #    {
    #      name = "account-index",
    #      path = "storage_directory_test",
    #      createIfMissing = true,
    #      paranoidChecks = true,
    #      verifyChecksums = true,
    #      compressionType = 1,        // compressed with snappy
    #      blockSize = 4096,           // 4  KB =         4 * 1024 B
    #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B
    #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B
    #      maxOpenFiles = 100
    #    },
  ]

  needToUpdateAsset = true

  # dbsettings is needed when using rocksdb as the storage implement (db.engine="ROCKSDB").
  # we'd strongly recommend that do not modify it unless you know every item's meaning clearly.
  dbSettings = {
    levelNumber = 7
    # compactThreads = 32
    blocksize = 64  // n * KB
    maxBytesForLevelBase = 256  // n * MB
    maxBytesForLevelMultiplier = 10
    level0FileNumCompactionTrigger = 4
    targetFileSizeBase = 256  // n * MB
    targetFileSizeMultiplier = 1
    maxOpenFiles = 5000
  }

  balance.history.lookup = false

  # checkpoint.version = 2
  # checkpoint.sync = true

  # the estimated number of block transactions (default 1000, min 100, max 10000).
  # so the total number of cached transactions is 65536 * txCache.estimatedTransactions
  # txCache.estimatedTransactions = 1000

  # if true, transaction cache initialization will be faster. Default: false
  txCache.initOptimization = true

  # The number of blocks flushed to db in each batch during node syncing. Default: 1
  # snapshot.maxFlushCount = 1

  # data root setting, for check data, currently, only reward-vi is used.
  # merkleRoot = {
  # reward-vi = 9debcb9924055500aaae98cdee10501c5c39d4daa75800a996f4bdda73dbccd8 // main-net, Sha256Hash, hexString
  # }

}

node.discovery = {
  enable = true
  persist = true
}

# custom stop condition
#node.shutdown = {
#  BlockTime  = "54 59 08 * * ?" # if block header time in persistent db matched.
#  BlockHeight = 33350800 # if block header height in persistent db matched.
#  BlockCount = 12 # block sync count after node start.
#}

node.backup {
  # udp listen port, each member should have the same configuration
  port = 10001

  # my priority, each member should use different priority
  priority = 8

  # time interval to send keepAlive message, each member should have the same configuration
  keepAliveInterval = 3000

  # peer's ip list, can't contain mine
  members = [
    # "ip",
    # "ip"
  ]
}

# Specify the algorithm for generating a public key from private key. To avoid forks, please do not modify it
crypto {
  engine = "eckey"
}

node.metrics = {
  # prometheus metrics
  prometheus {
    enable = false
    port = 9527
  }

  # influxdb metrics
  storageEnable = false # Whether write metrics data into InfluxDb. Default: false.
  influxdb {
    ip = ""
    port = 8086
    database = ""
    metricsReportInterval = 10
  }
}

node {
  # trust node for solidity node
  # trustNode = "ip:port"
  trustNode = "127.0.0.1:50051"

  # expose extension api to public or not
  walletExtensionApi = true

  listen.port = 18888

  connection.timeout = 2

  fetchBlock.timeout = 200
  
  # syncFetchBatchNum = 2000

  # Number of validate sign thread, default availableProcessors
  # validateSignThreadNum = 16

  maxConnections = 30

  minConnections = 8

  minActiveConnections = 3

  maxConnectionsWithSameIp = 2

  maxHttpConnectNumber = 50

  minParticipationRate = 15

  # allowShieldedTransactionApi = true

  # openPrintLog = true

  # If set to true, SR packs transactions into a block in descending order of fee; otherwise, it packs
  # them based on their receive timestamp. Default: false
  # openTransactionSort = false

  # The threshold for the number of broadcast transactions received from each peer every second,
  # transactions exceeding this threshold will be discarded
  # maxTps = 1000

  isOpenFullTcpDisconnect = false
  inactiveThreshold = 600 //seconds

  p2p {
    version = 11111 # Mainnet:11111; Nile:201910292; Shasta:1
  }

  active = [
    # Active establish connection in any case
    # Sample entries:
    # "ip:port",
    # "ip:port"
  ]

  passive = [
    # Passive accept connection in any case
    # Sample entries:
    # "ip:port",
    # "ip:port"
  ]

  fastForward = [
    "100.27.171.62:18888",
    "15.188.6.125:18888"
  ]

  http {
    fullNodeEnable = true
    fullNodePort = 8090
    solidityEnable = true
    solidityPort = 8091
    PBFTEnable = true
    PBFTPort = 8092
  }

  rpc {
    enable = true
    port = 50051
    solidityEnable = true
    solidityPort = 50061
    PBFTEnable = true
    PBFTPort = 50071

    # Number of gRPC thread, default availableProcessors / 2
    # thread = 16

    # The maximum number of concurrent calls permitted for each incoming connection
    # maxConcurrentCallsPerConnection =

    # The HTTP/2 flow control window, default 1MB
    # flowControlWindow =

    # Connection being idle for longer than which will be gracefully terminated
    maxConnectionIdleInMillis = 60000

    # Connection lasting longer than which will be gracefully terminated
    # maxConnectionAgeInMillis =

    # The maximum message size allowed to be received on the server, default 4MB
    # maxMessageSize =

    # The maximum size of header list allowed to be received, default 8192
    # maxHeaderListSize =

    # The number of RST_STREAM frames allowed to be sent per connection per period for grpc, by default there is no limit.
    # maxRstStream =

    # The number of seconds per period for grpc
    # secondsPerWindow =

    # Transactions can only be broadcast if the number of effective connections is reached.
    minEffectiveConnection = 1

    # The switch of the reflection service, effective for all gRPC services, used for grpcurl tool. Default: false
    reflectionService = false
  }

  # number of solidity thread in the FullNode.
  # If accessing solidity rpc and http interface timeout, could increase the number of threads,
  # The default value is the number of cpu cores of the machine.
  # solidity.threads = 8

  # Limits the maximum percentage (default 75%) of producing block interval
  # to provide sufficient time to perform other operations e.g. broadcast block
  # blockProducedTimeOut = 75

  # Limits the maximum number (default 700) of transaction from network layer
  # netMaxTrxPerSecond = 700

  # Whether to enable the node detection function. Default: false
  # nodeDetectEnable = false

  # use your ipv6 address for node discovery and tcp connection. Default: false
  # enableIpv6 = false

  # if your node's highest block num is below than all your pees', try to acquire new connection. Default: false
  # effectiveCheckEnable = false

  # Dynamic loading configuration function, disabled by default
  dynamicConfig = {
    # enable = false
    # checkInterval = 600 // Check interval of Configuration file's change, default is 600 seconds
  }

  # Whether to continue broadcast transactions after at least maxUnsolidifiedBlocks are not solidified. Default: false
  # unsolidifiedBlockCheck = false
  # maxUnsolidifiedBlocks = 54

  dns {
    # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty
    treeUrls = [
      #"tree://AKMQMNAJJBL73LXWPXDI4I5ZWWIZ4AWO34DWQ636QOBBXNFXH3LQS@main.trondisco.net",
    ]

    # enable or disable dns publish. Default: false
    # publish = false

    # dns domain to publish nodes, required if publish is true
    # dnsDomain = "nodes1.example.org"

    # dns private key used to publish, required if publish is true, hex string of length 64
    # dnsPrivate = "b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"

    # known dns urls to publish if publish is true, url format tree://{pubkey}@{domain}, default empty
    # knownUrls = [
    #"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes2.example.org",
    # ]

    # staticNodes = [
    # static nodes to published on dns
    # Sample entries:
    # "ip:port",
    # "ip:port"
    # ]

    # merge several nodes into a leaf of tree, should be 1~5
    # maxMergeSize = 5

    # only nodes change percent is bigger then the threshold, we update data on dns
    # changeThreshold = 0.1

    # dns server to publish, required if publish is true, only aws or aliyun is support
    # serverType = "aws"

    # access key id of aws or aliyun api, required if publish is true, string
    # accessKeyId = "your-key-id"

    # access key secret of aws or aliyun api, required if publish is true, string
    # accessKeySecret = "your-key-secret"

    # if publish is true and serverType is aliyun, it's endpoint of aws dns server, string
    # aliyunDnsEndpoint = "alidns.aliyuncs.com"

    # if publish is true and serverType is aws, it's region of aws api, such as "eu-south-1", string
    # awsRegion = "us-east-1"

    # if publish is true and server-type is aws, it's host zone id of aws's domain, string
    # awsHostZoneId = "your-host-zone-id"
  }

  # open the history query APIs(http&GRPC) when node is a lite FullNode,
  # like {getBlockByNum, getBlockByID, getTransactionByID...}. Default: false.
  # note: above APIs may return null even if blocks and transactions actually are on the blockchain
  # when opening on a lite FullNode. only open it if the consequences being clearly known
  # openHistoryQueryWhenLiteFN = false

  jsonrpc {
    # Note: Before release_4.8.1, if you turn on jsonrpc and run it for a while and then turn it off,
    # you will not be able to get the data from eth_getLogs for that period of time. Default: false
    # httpFullNodeEnable = false
    # httpFullNodePort = 8545
    # httpSolidityEnable = false
    # httpSolidityPort = 8555
    # httpPBFTEnable = false
    # httpPBFTPort = 8565

    # The maximum blocks range to retrieve logs for eth_getLogs, default value is 5000,
    # should be > 0, otherwise means no limit.
    maxBlockRange = 5000

    # The maximum number of allowed topics within a topic criteria, default value is 1000,
    # should be > 0, otherwise means no limit.
    maxSubTopics = 1000
    # Allowed maximum number for blockFilter
    maxBlockFilterNum = 50000
  }

  # Disabled api list, it will work for http, rpc and pbft, both FullNode and SolidityNode,
  # but not jsonrpc. The setting is case insensitive, GetNowBlock2 is equal to getnowblock2
  disabledApi = [
    #  "getaccount",
    #  "getnowblock2"
  ]
}

## rate limiter config
rate.limiter = {
  # Every api could only set a specific rate limit strategy. Three blocking strategy are supported:
  # GlobalPreemptibleAdapter: The number of preemptible resource or maximum concurrent requests globally.
  # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer.
  # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer.
  # If not set, QpsRateLimiterAdapter with qps=1000 is the default strategy.
  #
  # Sample entries:
  #
  http = [
    #  {
    #    component = "GetNowBlockServlet",
    #    strategy = "GlobalPreemptibleAdapter",
    #    paramString = "permit=1"
    #  },

    #  {
    #    component = "GetAccountServlet",
    #    strategy = "IPQPSRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },

    #  {
    #    component = "ListWitnessesServlet",
    #    strategy = "QpsRateLimiterAdapter",
    #    paramString = "qps=1"
    #  }
  ],

  rpc = [
    #  {
    #    component = "protocol.Wallet/GetBlockByLatestNum2",
    #    strategy = "GlobalPreemptibleAdapter",
    #    paramString = "permit=1"
    #  },

    #  {
    #    component = "protocol.Wallet/GetAccount",
    #    strategy = "IPQPSRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },

    #  {
    #    component = "protocol.Wallet/ListWitnesses",
    #    strategy = "QpsRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },
  ]

  p2p = {
    # syncBlockChain = 3.0
    # fetchInvData = 3.0
    # disconnect = 1.0
  }

  # global qps, default 50000
  global.qps = 50000
  # IP-based global qps, default 10000
  global.ip.qps = 10000
}



seed.node = {
  # List of the seed nodes
  # Seed nodes are stable full nodes
  # example:
  # ip.list = [
  #   "ip:port",
  #   "ip:port"
  # ]
  ip.list = [
    "3.225.171.164:18888",
    "52.8.46.215:18888",
    "3.79.71.167:18888",
    "108.128.110.16:18888",
    "18.133.82.227:18888",
    "35.180.81.133:18888",
    "13.210.151.5:18888",
    "18.231.27.82:18888",
    "3.12.212.122:18888",
    "52.24.128.7:18888",
    "15.207.144.3:18888",
    "3.39.38.55:18888",
    "54.151.226.240:18888",
    "35.174.93.198:18888",
    "18.210.241.149:18888",
    "54.177.115.127:18888",
    "54.254.131.82:18888",
    "18.167.171.167:18888",
    "54.167.11.177:18888",
    "35.74.7.196:18888",
    "52.196.244.176:18888",
    "54.248.129.19:18888",
    "43.198.142.160:18888",
    "3.0.214.7:18888",
    "54.153.59.116:18888",
    "54.153.94.160:18888",
    "54.82.161.39:18888",
    "54.179.207.68:18888",
    "18.142.82.44:18888",
    "18.163.230.203:18888",
    # "[2a05:d014:1f2f:2600:1b15:921:d60b:4c60]:18888", // use this if support ipv6
    # "[2600:1f18:7260:f400:8947:ebf3:78a0:282b]:18888", // use this if support ipv6
  ]
}

genesis.block = {
  # Reserve balance
  assets = [
    {
      accountName = "Zion"
      accountType = "AssetIssue"
      address = "TLLM21wteSPs4hKjbxgmH1L6poyMjeTbHm"
      balance = "99000000000000000"
    },
    {
      accountName = "Sun"
      accountType = "AssetIssue"
      address = "TXmVpin5vq5gdZsciyyjdZgKRUju4st1wM"
      balance = "0"
    },
    {
      accountName = "Blackhole"
      accountType = "AssetIssue"
      address = "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy"
      balance = "-9223372036854775808"
    }
  ]

  witnesses = [
    {
      address: THKJYuUmMKKARNf7s2VT51g5uPY6KEqnat,
      url = "http://GR1.com",
      voteCount = 100000026
    },
    {
      address: TVDmPWGYxgi5DNeW8hXrzrhY8Y6zgxPNg4,
      url = "http://GR2.com",
      voteCount = 100000025
    },
    {
      address: TWKZN1JJPFydd5rMgMCV5aZTSiwmoksSZv,
      url = "http://GR3.com",
      voteCount = 100000024
    },
    {
      address: TDarXEG2rAD57oa7JTK785Yb2Et32UzY32,
      url = "http://GR4.com",
      voteCount = 100000023
    },
    {
      address: TAmFfS4Tmm8yKeoqZN8x51ASwdQBdnVizt,
      url = "http://GR5.com",
      voteCount = 100000022
    },
    {
      address: TK6V5Pw2UWQWpySnZyCDZaAvu1y48oRgXN,
      url = "http://GR6.com",
      voteCount = 100000021
    },
    {
      address: TGqFJPFiEqdZx52ZR4QcKHz4Zr3QXA24VL,
      url = "http://GR7.com",
      voteCount = 100000020
    },
    {
      address: TC1ZCj9Ne3j5v3TLx5ZCDLD55MU9g3XqQW,
      url = "http://GR8.com",
      voteCount = 100000019
    },
    {
      address: TWm3id3mrQ42guf7c4oVpYExyTYnEGy3JL,
      url = "http://GR9.com",
      voteCount = 100000018
    },
    {
      address: TCvwc3FV3ssq2rD82rMmjhT4PVXYTsFcKV,
      url = "http://GR10.com",
      voteCount = 100000017
    },
    {
      address: TFuC2Qge4GxA2U9abKxk1pw3YZvGM5XRir,
      url = "http://GR11.com",
      voteCount = 100000016
    },
    {
      address: TNGoca1VHC6Y5Jd2B1VFpFEhizVk92Rz85,
      url = "http://GR12.com",
      voteCount = 100000015
    },
    {
      address: TLCjmH6SqGK8twZ9XrBDWpBbfyvEXihhNS,
      url = "http://GR13.com",
      voteCount = 100000014
    },
    {
      address: TEEzguTtCihbRPfjf1CvW8Euxz1kKuvtR9,
      url = "http://GR14.com",
      voteCount = 100000013
    },
    {
      address: TZHvwiw9cehbMxrtTbmAexm9oPo4eFFvLS,
      url = "http://GR15.com",
      voteCount = 100000012
    },
    {
      address: TGK6iAKgBmHeQyp5hn3imB71EDnFPkXiPR,
      url = "http://GR16.com",
      voteCount = 100000011
    },
    {
      address: TLaqfGrxZ3dykAFps7M2B4gETTX1yixPgN,
      url = "http://GR17.com",
      voteCount = 100000010
    },
    {
      address: TX3ZceVew6yLC5hWTXnjrUFtiFfUDGKGty,
      url = "http://GR18.com",
      voteCount = 100000009
    },
    {
      address: TYednHaV9zXpnPchSywVpnseQxY9Pxw4do,
      url = "http://GR19.com",
      voteCount = 100000008
    },
    {
      address: TCf5cqLffPccEY7hcsabiFnMfdipfyryvr,
      url = "http://GR20.com",
      voteCount = 100000007
    },
    {
      address: TAa14iLEKPAetX49mzaxZmH6saRxcX7dT5,
      url = "http://GR21.com",
      voteCount = 100000006
    },
    {
      address: TBYsHxDmFaRmfCF3jZNmgeJE8sDnTNKHbz,
      url = "http://GR22.com",
      voteCount = 100000005
    },
    {
      address: TEVAq8dmSQyTYK7uP1ZnZpa6MBVR83GsV6,
      url = "http://GR23.com",
      voteCount = 100000004
    },
    {
      address: TRKJzrZxN34YyB8aBqqPDt7g4fv6sieemz,
      url = "http://GR24.com",
      voteCount = 100000003
    },
    {
      address: TRMP6SKeFUt5NtMLzJv8kdpYuHRnEGjGfe,
      url = "http://GR25.com",
      voteCount = 100000002
    },
    {
      address: TDbNE1VajxjpgM5p7FyGNDASt3UVoFbiD3,
      url = "http://GR26.com",
      voteCount = 100000001
    },
    {
      address: TLTDZBcPoJ8tZ6TTEeEqEvwYFk2wgotSfD,
      url = "http://GR27.com",
      voteCount = 100000000
    }
  ]

  timestamp = "0" # Genesis block timestamp, milli seconds

  parentHash = "0xe58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f"
}

# Optional. The default is empty. It is used when the witness account has set the witnessPermission.
# When it is not empty, the localWitnessAccountAddress represents the address of the witness account,
# and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.
# When it is empty,the localwitness is configured with the private key of the witness account.
# localWitnessAccountAddress =

localwitness = [
]

# localwitnesskeystore = [
#  "localwitnesskeystore.json"
# ]

block = {
  needSyncCheck = true
  maintenanceTimeInterval = 21600000 // 6 hours: 21600000(ms)
  proposalExpireTime = 259200000 // default value: 3 days: 259200000(ms), Note: this value is controlled by committee proposal
  # checkFrozenTime = 1 // for test only
}

# Transaction reference block, default is "solid", configure to "head" may cause TaPos error
trx.reference.block = "solid" // "head" or "solid"

# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is  60000.
# trx.expiration.timeInMilliseconds = 60000

vm = {
  supportConstant = false
  maxEnergyLimitForConstant = 100000000
  minTimeRatio = 0.0
  maxTimeRatio = 5.0
  saveInternalTx = false
  # lruCacheSize = 500
  # vmTrace = false

  # Indicates whether the node stores featured internal transactions, such as freeze, vote and so on. Default: false.
  # saveFeaturedInternalTx = false

  # Indicates whether the node stores the details of the internal transactions generated by the CANCELALLUNFREEZEV2 opcode,
  # such as bandwidth/energy/tronpower cancel amount. Default: false.
  # saveCancelAllUnfreezeV2Details = false

  # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged
  # longRunningTime = 10

  # Indicates whether the node support estimate energy API. Default: false.
  # estimateEnergy = false

  # Indicates the max retry time for executing transaction in estimating energy. Default 3.
  # estimateEnergyMaxRetry = 3
}

# These parameters are designed for private chain testing only and cannot be freely switched on or off in production systems.
committee = {
  allowCreationOfContracts = 0  //mainnet:0 (reset by committee),test:1
  allowAdaptiveEnergy = 0  //mainnet:0 (reset by committee),test:1
  # allowCreationOfContracts = 0
  # allowMultiSign = 0
  # allowAdaptiveEnergy = 0
  # allowDelegateResource = 0
  # allowSameTokenName = 0
  # allowTvmTransferTrc10 = 0
  # allowTvmConstantinople = 0
  # allowTvmSolidity059 = 0
  # forbidTransferToContract = 0
  # allowShieldedTRC20Transaction = 0
  # allowTvmIstanbul = 0
  # allowMarketTransaction = 0
  # allowProtoFilterNum = 0
  # allowAccountStateRoot = 0
  # changedDelegation = 0
  # allowPBFT = 0
  # pBFTExpireNum = 0
  # allowTransactionFeePool = 0
  # allowBlackHoleOptimization = 0
  # allowNewResourceModel = 0
  # allowReceiptsMerkleRoot = 0
  # allowTvmFreeze = 0
  # allowTvmVote = 0
  # unfreezeDelayDays = 0
  # allowTvmLondon = 0
  # allowTvmCompatibleEvm = 0
  # allowNewRewardAlgorithm = 0
  # allowAccountAssetOptimization = 0
  # allowAssetOptimization = 0
  # allowNewReward = 0
  # memoFee = 0
  # allowDelegateOptimization = 0
  # allowDynamicEnergy = 0
  # dynamicEnergyThreshold = 0
  # dynamicEnergyMaxFactor = 0
  # allowTvmShangHai = 0
  # allowOldRewardOpt = 0
  # allowEnergyAdjustment = 0
  # allowStrictMath = 0
  # allowTvmCancun = 0
  # allowTvmBlob = 0
  # consensusLogicOptimization = 0
  # allowOptimizedReturnValueOfChainId = 0
}

event.subscribe = {
  native = {
    useNativeQueue = true // if true, use native message queue, else use event plugin.
    bindport = 5555 // bind port
    sendqueuelength = 1000 //max length of send queue
  }
  version = 0
  # Specify the starting block number to sync historical events. This is only applicable when version = 1.
  # After performing a full event sync, set this value to 0 or a negative number.
  # startSyncBlockNum = 1

  path = "" // absolute path of plugin
  server = "" // target server address to receive event triggers
  # dbname|username|password, if you want to create indexes for collections when the collections
  # are not exist, you can add version and set it to 2, as dbname|username|password|version
  # if you use version 2 and one collection not exists, it will create index automaticaly;
  # if you use version 2 and one collection exists, it will not create index, you must create index manually;
  dbconfig = ""
  contractParse = true
  topics = [
    {
      triggerName = "block" // block trigger, the value can't be modified
      enable = false
      topic = "block" // plugin topic, the value could be modified
      solidified = false // if set true, just need solidified block. Default: false
    },
    {
      triggerName = "transaction"
      enable = false
      topic = "transaction"
      solidified = false
      ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice. Default: false
    },
    {
      triggerName = "contractevent" // contractevent represents contractlog data decoded by the ABI.
      enable = false
      topic = "contractevent"
    },
    {
      triggerName = "contractlog"
      enable = false
      topic = "contractlog"
      redundancy = false // if set true, contractevent will also be regarded as contractlog
    },
    {
      triggerName = "solidity" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified
      enable = true            // Default: true
      topic = "solidity"
    },
    {
      triggerName = "solidityevent"
      enable = false
      topic = "solidityevent"
    },
    {
      triggerName = "soliditylog"
      enable = false
      topic = "soliditylog"
      redundancy = false // if set true, solidityevent will also be regarded as soliditylog
    }
  ]

  filter = {
    fromblock = "" // the value could be "", "earliest" or a specified block number as the beginning of the queried range
    toblock = "" // the value could be "", "latest" or a specified block number as end of the queried range
    contractAddress = [
      "" // contract address you want to subscribe, if it's set to "", you will receive contract logs/events with any contract address.
    ]

    contractTopic = [
      "" // contract topic you want to subscribe, if it's set to "", you will receive contract logs/events with any contract topic.
    ]
  }
}

================================================
FILE: private_net_config.conf
================================================
net {
  type = mainnet
  # type = testnet
}

storage {
  # Directory for storing persistent data
  db.engine = "LEVELDB",
  db.sync = false,
  db.directory = "database",
  index.directory = "index",
  transHistory.switch = "on",
  # You can custom these 14 databases' configs:

  # account, account-index, asset-issue, block, block-index,
  # block_KDB, peers, properties, recent-block, trans,
  # utxo, votes, witness, witness_schedule.

  # Otherwise, db configs will remain default and data will be stored in
  # the path of "output-directory" or which is set by "-d" ("--output-directory").

  # setting can impove leveldb performance .... start
  # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs
  # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail
  # if you find block sync has lower performance,you can try  this  settings
  #default = {
  #  maxOpenFiles = 100
  #}
  #defaultM = {
  #  maxOpenFiles = 500
  #}
  #defaultL = {
  #  maxOpenFiles = 1000
  #}
  # setting can impove leveldb performance .... end

  # Attention: name is a required field that must be set !!!
  properties = [
    //    {
    //      name = "account",
    //      path = "storage_directory_test",
    //      createIfMissing = true,
    //      paranoidChecks = true,
    //      verifyChecksums = true,
    //      compressionType = 1,        // compressed with snappy
    //      blockSize = 4096,           // 4  KB =         4 * 1024 B
    //      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B
    //      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B
    //      maxOpenFiles = 100
    //    },
    //    {
    //      name = "account-index",
    //      path = "storage_directory_test",
    //      createIfMissing = true,
    //      paranoidChecks = true,
    //      verifyChecksums = true,
    //      compressionType = 1,        // compressed with snappy
    //      blockSize = 4096,           // 4  KB =         4 * 1024 B
    //      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B
    //      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B
    //      maxOpenFiles = 100
    //    },
  ]

  needToUpdateAsset = true

  //dbsettings is needed when using rocksdb as the storage implement (db.engine="ROCKSDB").
  //we'd strongly recommend that do not modify it unless you know every item's meaning clearly.
  dbSettings = {
    levelNumber = 7
    //compactThreads = 32
    blocksize = 64  // n * KB
    maxBytesForLevelBase = 256  // n * MB
    maxBytesForLevelMultiplier = 10
    level0FileNumCompactionTrigger = 4
    targetFileSizeBase = 256  // n * MB
    targetFileSizeMultiplier = 1
  }

  //backup settings when using rocks db as the storage implement (db.engine="ROCKSDB").
  //if you want to use the backup plugin, please confirm set the db.engine="ROCKSDB" above.
  backup = {
    enable = false  // indicate whether enable the backup plugin
    propPath = "prop.properties" // record which bak directory is valid
    bak1path = "bak1/database" // you must set two backup directories to prevent application halt unexpected(e.g. kill -9).
    bak2path = "bak2/database"
    frequency = 10000   // indicate backup db once every 10000 blocks processed.
  }

  balance.history.lookup = false

  # checkpoint.version = 2
  # checkpoint.sync = true

  # the estimated number of block transactions (default 1000, min 100, max 10000).
  # so the total number of cached transactions is 65536 * txCache.estimatedTransactions
  # txCache.estimatedTransactions = 1000
  # if true, transaction cache initialization will be faster. default false
  # txCache.initOptimization = true

  # data root setting, for check data, currently, only reward-vi is used.

  # merkleRoot = {
  # reward-vi = 9debcb9924055500aaae98cdee10501c5c39d4daa75800a996f4bdda73dbccd8 // main-net, Sha256Hash, hexString
  # }

}

node.discovery = {
  enable = false  # you should set this entry value with true if you want your node can be discovered by other node.
  persist = true  # this entry is used to determined to whether storing the peers in the database or not.
  external.ip = 127.0.0.1
}

# custom stop condition
#node.shutdown = {
#  BlockTime  = "54 59 08 * * ?" # if block header time in persistent db matched.
#  BlockHeight = 33350800 # if block header height in persistent db matched.
#  BlockCount = 12 # block sync count after node start.
#}

node.backup {
  # udp listen port, each member should have the same configuration
  port = 10001

  # my priority, each member should use different priority
  priority = 8

  # time interval to send keepAlive message, each member should have the same configuration
  keepAliveInterval = 3000

  # peer's ip list, can't contain mine
  members = [
    # "ip",
    # "ip"
  ]
}

crypto {
  engine = "eckey"
}
# prometheus metrics start
# node.metrics = {
#  prometheus{
#    enable=true
#    port="9527"
#  }
# }

# prometheus metrics end

node {
  # trust node for solidity node
  # trustNode = "ip:port"
  trustNode = "127.0.0.1:50051"

  # expose extension api to public or not
  walletExtensionApi = true

  listen.port = 16666

  connection.timeout = 2

  fetchBlock.timeout = 200

  tcpNettyWorkThreadNum = 0

  udpNettyWorkThreadNum = 1

  # Number of validate sign thread, default availableProcessors
  # validateSignThreadNum = 16

  maxConnections = 30

  minConnections = 8

  minActiveConnections = 3

  maxConnectionsWithSameIp = 2

  maxHttpConnectNumber = 50

  minParticipationRate = 15

  isOpenFullTcpDisconnect = false
  inactiveThreshold = 600 //seconds

  p2p {
    version = 1 # 11111: mainnet; 20180622: testnet; you can set other number when you deploy one private net, but the node must have the same number in some private net.
  }

  active = [
    # Active establish connection in any case
    # Sample entries:
    # "ip:port",
    # "ip:port"
  ]

  passive = [
    # Passive accept connection in any case
    # Sample entries:
    # "ip:port",
    # "ip:port"
  ]

  fastForward = [

  ]

  http {
    fullNodeEnable = true
    fullNodePort = 16667
    solidityEnable = true
    solidityPort = 16668
  }

  rpc {
    enable = true
    port = 50051
    solidityEnable = true
    solidityPort = 50061

    # Number of gRPC thread, default availableProcessors / 2
    # thread = 16

    # The maximum number of concurrent calls permitted for each incoming connection
    # maxConcurrentCallsPerConnection =

    # The HTTP/2 flow control window, default 1MB
    # flowControlWindow =

    # Connection being idle for longer than which will be gracefully terminated
    maxConnectionIdleInMillis = 60000

    # Connection lasting longer than which will be gracefully terminated
    # maxConnectionAgeInMillis =

    # The maximum message size allowed to be received on the server, default 4MB
    # maxMessageSize =

    # The maximum size of header list allowed to be received, default 8192
    # maxHeaderListSize =

    # Transactions can only be broadcast if the number of effective connections is reached.
    minEffectiveConnection = 1

    # The switch of the reflection service, effective for all gRPC services
    # reflectionService = true
  }

  # number of solidity thread in the FullNode.
  # If accessing solidity rpc and http interface timeout, could increase the number of threads,
  # The default value is the number of cpu cores of the machine.
  #solidity.threads = 8

  # Limits the maximum percentage (default 75%) of producing block interval
  # to provide sufficient time to perform other operations e.g. broadcast block
  # blockProducedTimeOut = 75

  # Limits the maximum number (default 700) of transaction from network layer
  # netMaxTrxPerSecond = 700

  # Whether to enable the node detection function, default false
  # nodeDetectEnable = false

  # use your ipv6 address for node discovery and tcp connection, default false
  # enableIpv6 = false

  # if your node's highest block num is below than all your pees', try to acquire new connection. default false
  # effectiveCheckEnable = false

  # Dynamic loading configuration function, disabled by default
  # dynamicConfig = {
  # enable = false
  # Configuration file change check interval, default is 600 seconds
  # checkInterval = 600
  # }

  dns {
    # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty
    treeUrls = [
      #"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes1.example.org",
    ]

    # enable or disable dns publish, default false
    # publish = false

    # dns domain to publish nodes, required if publish is true
    # dnsDomain = "nodes1.example.org"

    # dns private key used to publish, required if publish is true, hex string of length 64
    # dnsPrivate = "b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"

    # known dns urls to publish if publish is true, url format tree://{pubkey}@{domain}, default empty
    # knownUrls = [
    #"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes2.example.org",
    # ]

    # staticNodes = [
    # static nodes to published on dns
    # Sample entries:
    # "ip:port",
    # "ip:port"
    # ]

    # merge several nodes into a leaf of tree, should be 1~5
    # maxMergeSize = 5

    # only nodes change percent is bigger then the threshold, we update data on dns
    # changeThreshold = 0.1

    # dns server to publish, required if publish is true, only aws or aliyun is support
    # serverType = "aws"

    # access key id of aws or aliyun api, required if publish is true, string
    # accessKeyId = "your-key-id"

    # access key secret of aws or aliyun api, required if publish is true, string
    # accessKeySecret = "your-key-secret"

    # if publish is true and serverType is aliyun, it's endpoint of aws dns server, string
    # aliyunDnsEndpoint = "alidns.aliyuncs.com"

    # if publish is true and serverType is aws, it's region of aws api, such as "eu-south-1", string
    # awsRegion = "us-east-1"

    # if publish is true and server-type is aws, it's host zone id of aws's domain, string
    # awsHostZoneId = "your-host-zone-id"
  }

  # open the history query APIs(http&GRPC) when node is a lite fullNode,
  # like {getBlockByNum, getBlockByID, getTransactionByID...}.
  # default: false.
  # note: above APIs may return null even if blocks and transactions actually are on the blockchain
  # when opening on a lite fullnode. only open it if the consequences being clearly known
  # openHistoryQueryWhenLiteFN = false

  jsonrpc {
    # Note: If you turn on jsonrpc and run it for a while and then turn it off, you will not
    # be able to get the data from eth_getLogs for that period of time.

    httpFullNodeEnable = true
    httpFullNodePort = 8545
    httpSolidityEnable = true
    httpSolidityPort = 8555

    # The maximum blocks range to retrieve logs for eth_getLogs, default value is 5000,
    # should be > 0, otherwise means no limit.
    maxBlockRange = 5000

    # The maximum number of allowed topics within a topic criteria, default value is 1000,
    # should be > 0, otherwise means no limit.
    maxSubTopics = 1000
  }

  # Disabled api list, it will work for http and rpc, both fullnode and soliditynode,
  # but not jsonrpc.
  # Sample: The setting is case insensitive, GetNowBlock2 is equal to getnowblock2
  #
  # disabledApi = [
  #   "getaccount",
  #   "getnowblock2"
  # ]

}

## rate limiter config
rate.limiter = {
  # Every api could be set a specific rate limit strategy. Three strategy are supported:GlobalPreemptibleAdapter、IPQPSRateLimiterAdapte、QpsRateLimiterAdapter
  # GlobalPreemptibleAdapter: permit is the number of preemptible resource, every client must apply one resourse
  #       before do the request and release the resource after got the reponse automaticlly. permit should be a Integer.
  # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer.
  # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer.
  # If do not set, the "default strategy" is set.The "default startegy" is based on QpsRateLimiterAdapter, the qps is set as 10000.
  #
  # Sample entries:
  #
  http = [
    #  {
    #    component = "GetNowBlockServlet",
    #    strategy = "GlobalPreemptibleAdapter",
    #    paramString = "permit=1"
    #  },

    #  {
    #    component = "GetAccountServlet",
    #    strategy = "IPQPSRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },

    #  {
    #    component = "ListWitnessesServlet",
    #    strategy = "QpsRateLimiterAdapter",
    #    paramString = "qps=1"
    #  }
  ],

  rpc = [
    #  {
    #    component = "protocol.Wallet/GetBlockByLatestNum2",
    #    strategy = "GlobalPreemptibleAdapter",
    #    paramString = "permit=1"
    #  },

    #  {
    #    component = "protocol.Wallet/GetAccount",
    #    strategy = "IPQPSRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },

    #  {
    #    component = "protocol.Wallet/ListWitnesses",
    #    strategy = "QpsRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },
  ]

  # global qps, default 50000
  # global.qps = 50000
  # IP-based global qps, default 10000
  # global.ip.qps = 10000
}



seed.node = {
  # List of the seed nodes. This is used to enable the node can connect when join one net at first.
  # If you deploy one private net, you must add some "ip:port" here for other node connecting.
  # Seed nodes are stable full nodes, and the first SuperNode must be inclued in.
  # example:
  # ip.list = [
  #   "ip:port",
  #   "ip:port"
  # ]
  ip.list = [
  ]
}

genesis.block = {
  # Reserve balance
  assets = [
    {
      accountName = "Zion"
      accountType = "AssetIssue"
      address = "TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY"
      balance = "95000000000000000"
    },
    {
      accountName = "Sun"
      accountType = "AssetIssue"
      address = "TWsm8HtU2A5eEzoT8ev8yaoFjHsXLLrckb"
      balance = "5000000000000000"
    },
    {
      accountName = "Blackhole"
      accountType = "AssetIssue"
      address = "TSJD5rdu6wZXP7F2m3a3tn8Co3JcMjtBip"
      balance = "-9223372036854775808"
    },
    {
      accountName = "TestA"
      accountType = "AssetIssue"
      address = "TVdyt1s88BdiCjKt6K2YuoSmpWScZYK1QF"
      balance = "1000000000000000"
    },
    {
      accountName = "TestB"
      accountType = "AssetIssue"
      address = "TCNVmGtkfknHpKSZXepZDXRowHF7kosxcv"
      balance = "1000000000000000"
    },
    {
      accountName = "TestC"
      accountType = "AssetIssue"
      address = "TAbzgkG8p3yF5aywKVgq9AaAu6hvF2JrVC"
      balance = "1000000000000000"
    },
    {
      accountName = "TestD"
      accountType = "AssetIssue"
      address = "TMmmvwvkBPBv3Gkw9cGKbZ8PLznYkTu3ep"
      balance = "1000000000000000"
    },
    {
      accountName = "TestE"
      accountType = "AssetIssue"
      address = "TBJHZu4Sm86aWHtt6VF6KQSzot8vKTuTKx"
      balance = "1000000000000000"
    }
  ]

  witnesses = [
    {
      address: TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY,
      url = "http://tronstudio.com",
      voteCount = 10000
    }
  ]

  timestamp = "0" #2017-8-26 12:00:00

  parentHash = "957dc2d350daecc7bb6a38f3938ebde0a0c1cedafe15f0edae4256a2907449f6"
}

// Optional.The default is empty.
// It is used when the witness account has set the witnessPermission.
// When it is not empty, the localWitnessAccountAddress represents the address of the witness account,
// and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.
// When it is empty,the localwitness is configured with the private key of the witness account.

//localWitnessAccountAddress =

localwitness = [
  da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0  # you must enable this value and the witness address TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY are matched.
]

#localwitnesskeystore = [
#  "src/main/resources/localwitnesskeystore.json"  # if you do not set the localwitness above, you must set this value.Otherwise,your SuperNode can not produce the block.
#]

block = {
  needSyncCheck = false # first node : false, other : true
  maintenanceTimeInterval = 21600000 // 1 day: 86400000(ms), 6 hours: 21600000(ms)
  proposalExpireTime = 259200000 // 3 day: 259200000(ms)
}

# Transaction reference block, default is "solid", configure to "head" may cause TaPos error
# trx.reference.block = "solid" // head;solid;

# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is  60000.
# trx.expiration.timeInMilliseconds = 60000

vm = {
  supportConstant = false
  maxEnergyLimitForConstant = 100000000
  minTimeRatio = 0.0
  maxTimeRatio = 5.0
  saveInternalTx = false

  # Indicates whether the node stores featured internal transactions, such as freeze, vote and so on
  # saveFeaturedInternalTx = false

  # Indicates whether the node stores the details of the internal transactions generated by the
  # CANCELALLUNFREEZEV2 opcode, such as bandwidth/energy/tronpower cancel amount.
  # saveCancelAllUnfreezeV2Details = false

  # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged
  # longRunningTime = 10

  # Indicates whether the node support estimate energy API.
  # estimateEnergy = false

  # Indicates the max retry time for executing transaction in estimating energy.
  # estimateEnergyMaxRetry = 3
}

committee = {
  allowCreationOfContracts = 1  //mainnet:0 (reset by committee),test:1
}

event.subscribe = {
  native = {
    useNativeQueue = true // if true, use native message queue, else use event plugin.
    bindport = 5555 // bind port
    sendqueuelength = 1000 //max length of send queue
  }
  # version = 0
  # Specify the starting block number to sync historical events. This is only applicable when version = 1.
  # After performing a full event sync, set this value to 0 or a negative number.
  # startSyncBlockNum = 1

  path = "" // absolute path of plugin
  server = "" // target server address to receive event triggers
  // dbname|username|password, if you want to create indexes for collections when the collections
  // are not exist, you can add version and set it to 2, as dbname|username|password|version
  // if you use version 2 and one collection not exists, it will create index automaticaly;
  // if you use version 2 and one collection exists, it will not create index, you must create index manually;
  dbconfig = ""
  contractParse = true
  topics = [
    {
      triggerName = "block" // block trigger, the value can't be modified
      enable = false
      topic = "block" // plugin topic, the value could be modified
      solidified = false // if set true, just need solidified block, default is false
    },
    {
      triggerName = "transaction"
      enable = false
      topic = "transaction"
      solidified = false
      ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice, default is false
    },
    {
      triggerName = "contractevent"
      enable = false
      topic = "contractevent"
    },
    {
      triggerName = "contractlog"
      enable = false
      topic = "contractlog"
      redundancy = false // if set true, contractevent will also be regarded as contractlog
    },
    {
      triggerName = "solidity" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified
      enable = true            // the default value is true
      topic = "solidity"
    },
    {
      triggerName = "solidityevent"
      enable = false
      topic = "solidityevent"
    },
    {
      triggerName = "soliditylog"
      enable = false
      topic = "soliditylog"
      redundancy = false // if set true, solidityevent will also be regarded as soliditylog
    }
  ]

  filter = {
    fromblock = "" // the value could be "", "earliest" or a specified block number as the beginning of the queried range
    toblock = "" // the value could be "", "latest" or a specified block number as end of the queried range
    contractAddress = [
      "" // contract address you want to subscribe, if it's set to "", you will receive contract logs/events with any contract address.
    ]

    contractTopic = [
      "" // contract topic you want to subscribe, if it's set to "", you will receive contract logs/events with any contract topic.
    ]
  }
}



================================================
FILE: test_net_config.conf
================================================
net {
  # Type can be 'mainnet' or 'testnet', refers to address type.
  # Hex address of 'mainnet' begin with 0x41, and 'testnet' begin with 0xa0.
  # Note: 'testnet' is not related to TRON network Nile, Shasta or private net
  type = mainnet
}

storage {
  # Directory for storing persistent data
   db.engine = "LEVELDB",  // deprecated for arm, because arm only support  "ROCKSDB".
   db.sync = false,
   db.directory = "database",

   # Whether to write transaction result in transactionRetStore
   transHistory.switch = "on",

   # setting can improve leveldb performance .... start, deprecated for arm
   # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs
   # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail
   # if you find block sync has lower performance, you can try this settings
   # default = {
   #  maxOpenFiles = 100
   # }
   # defaultM = {
   #  maxOpenFiles = 500
   # }
   # defaultL = {
   #  maxOpenFiles = 1000
   # }
   # setting can improve leveldb performance .... end, deprecated for arm

   # You can customize the configuration for each database. Otherwise, the database settings will use
   # their defaults, and data will be stored in the "output-directory" or in the directory specified
   # by the "-d" or "--output-directory" option. Attention: name is a required field that must be set!
   # In this configuration, the name and path properties take effect for both LevelDB and RocksDB storage engines,
   # while the additional properties (such as createIfMissing, paranoidChecks, compressionType, etc.) only take effect when using LevelDB.
   properties = [
     #    {
     #      name = "account",
     #      path = "storage_directory_test",
     #      createIfMissing = true, // deprecated for arm start
     #      paranoidChecks = true,
     #      verifyChecksums = true,
     #      compressionType = 1,        // compressed with snappy
     #      blockSize = 4096,           // 4  KB =         4 * 1024 B
     #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B
     #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B
     #      maxOpenFiles = 100 // deprecated for arm end
     #    },
     #    {
     #      name = "account-index",
     #      path = "storage_directory_test",
     #      createIfMissing = true,
     #      paranoidChecks = true,
     #      verifyChecksums = true,
     #      compressionType = 1,        // compressed with snappy
     #      blockSize = 4096,           // 4  KB =         4 * 1024 B
     #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B
     #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B
     #      maxOpenFiles = 100
     #    },
   ]

   needToUpdateAsset = true

   # dbsettings is needed when using rocksdb as the storage implement (db.engine="ROCKSDB").
   # we'd strongly recommend that do not modify it unless you know every item's meaning clearly.
   dbSettings = {
     levelNumber = 7
     # compactThreads = 32
     blocksize = 64  // n * KB
     maxBytesForLevelBase = 256  // n * MB
     maxBytesForLevelMultiplier = 10
     level0FileNumCompactionTrigger = 4
     targetFileSizeBase = 256  // n * MB
     targetFileSizeMultiplier = 1
     maxOpenFiles = 5000
   }

   balance.history.lookup = false

   # checkpoint.version = 2
   # checkpoint.sync = true

   # the estimated number of block transactions (default 1000, min 100, max 10000).
   # so the total number of cached transactions is 65536 * txCache.estimatedTransactions
   # txCache.estimatedTransactions = 1000

   # if true, transaction cache initialization will be faster. Default: false
   txCache.initOptimization = true

   # The number of blocks flushed to db in each batch during node syncing. Default: 1
   # snapshot.maxFlushCount = 1

  # data root setting, for check data, currently, only reward-vi is used.
  merkleRoot = {
    reward-vi = b474b61f93824cd70106f8f5283fa740d61b83a7d57a3c12401d627f1fae0a77 // nile-net, Sha256Hash, hexString
  }
}

node.discovery = {
  enable = true
  persist = true
}

# custom stop condition
#node.shutdown = {
#  BlockTime  = "54 59 08 * * ?" # if block header time in persistent db matched.
#  BlockHeight = 33350800 # if block header height in persistent db matched.
#  BlockCount = 12 # block sync count after node start.
#}

node.backup {
  # udp listen port, each member should have the same configuration
  port = 10001

  # my priority, each member should use different priority
  priority = 8

  # time interval to send keepAlive message, each member should have the same configuration
  keepAliveInterval = 3000

  # peer's ip list, can't contain mine
  members = [
    # "ip",
    # "ip"
  ]
}

# Specify the algorithm for generating a public key from private key. To avoid forks, please do not modify it
crypto {
  engine = "eckey"
}

node.metrics = {
  # prometheus metrics
  prometheus {
    enable = false
    port = 9527
  }

  # influxdb metrics
  storageEnable = false # Whether write metrics data into InfluxDb. Default: false.
  influxdb {
    ip = ""
    port = 8086
    database = ""
    metricsReportInterval = 10
  }
}

node {
  # trust node for solidity node
  # trustNode = "ip:port"
  trustNode = "127.0.0.1:50051"

  # expose extension api to public or not
  walletExtensionApi = true

  listen.port = 18888

  connection.timeout = 2

  fetchBlock.timeout = 200
  # syncFetchBatchNum = 2000

  # Number of validate sign thread, default availableProcessors
  # validateSignThreadNum = 16

  maxConnections = 30

  minConnections = 8

  minActiveConnections = 3

  maxConnectionsWithSameIp = 2

  maxHttpConnectNumber = 50

  minParticipationRate = 15

  zenTokenId = 1000016

  # allowShieldedTransactionApi = true

  # openPrintLog = true

  # If set to true, SR packs transactions into a block in descending order of fee; otherwise, it packs
  # them based on their receive timestamp. Default: false
  # openTransactionSort = false

  # The threshold for the number of broadcast transactions received from each peer every second,
  # transactions exceeding this threshold will be discarded
  # maxTps = 1000

  isOpenFullTcpDisconnect = false
  inactiveThreshold = 600 //seconds

  p2p {
    version = 201910292 # Mainnet:11111; Nile:201910292; Shasta:1
  }

  active = [
    # Active establish connection in any case
    # Sample entries:
    # "ip:port",
    # "ip:port"
  ]

  passive = [
    # Passive accept connection in any case
    # Sample entries:
    # "ip:port",
    # "ip:port"
  ]

  # read node.active and node.passive periodically, default false
  # checkInterval unit: second
  dynamicConfig {
    # enable = false
    # checkInterval = 600
  }

  fastForward = [
  ]

  http {
    fullNodeEnable = true
    fullNodePort = 8090
    solidityEnable = true
    solidityPort = 8091
    PBFTEnable = true
    PBFTPort = 8092
  }


  rpc {
    enable = true
    port = 50051
    solidityEnable = true
    solidityPort = 50061
    PBFTEnable = true
    PBFTPort = 50071

    # Number of gRPC thread, default availableProcessors / 2
    # thread = 16

    # The maximum number of concurrent calls permitted for each incoming connection
    # maxConcurrentCallsPerConnection =

    # The HTTP/2 flow control window, default 1MB
    # flowControlWindow =

    # Connection being idle for longer than which will be gracefully terminated
    maxConnectionIdleInMillis = 60000

    # Connection lasting longer than which will be gracefully terminated
    # maxConnectionAgeInMillis =

    # The maximum message size allowed to be received on the server, default 4MB
    # maxMessageSize =

    # The maximum size of header list allowed to be received, default 8192
    # maxHeaderListSize =

    # The number of RST_STREAM frames allowed to be sent per connection per period for grpc, by default there is no limit.
    # maxRstStream =

    # The number of seconds per period for grpc
    # secondsPerWindow =

    # Transactions can only be broadcast if the number of effective connections is reached.
    minEffectiveConnection = 1

    # The switch of the reflection service, effective for all gRPC services, used for grpcurl tool. Default: false
    reflectionService = false
  }

  # number of solidity thread in the FullNode.
  # If accessing solidity rpc and http interface timeout, could increase the number of threads,
  # The default value is the number of cpu cores of the machine.
  # solidity.threads = 8

  # Limits the maximum percentage (default 75%) of producing block interval
  # to provide sufficient time to perform other operations e.g. broadcast block
  # blockProducedTimeOut = 75

  # Limits the maximum number (default 700) of transaction from network layer
  # netMaxTrxPerSecond = 700

  # Whether to enable the node detection function. Default: false
  # nodeDetectEnable = false

  # use your ipv6 address for node discovery and tcp connection. Default: false
  # enableIpv6 = false

  # if your node's highest block num is below than all your pees', try to acquire new connection. Default: false
  # effectiveCheckEnable = false

  # Dynamic loading configuration function, disabled by default
  dynamicConfig = {
    # enable = false
    # checkInterval = 600 // Check interval of Configuration file's change, default is 600 seconds
  }

  # Whether to continue broadcast transactions after at least maxUnsolidifiedBlocks are not solidified. Default: false
  # unsolidifiedBlockCheck = false
  # maxUnsolidifiedBlocks = 54

  dns {
    # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty
    treeUrls = [
      #"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes1.example.org",
    ]
  }

  jsonrpc {
    # Note: If you turn on jsonrpc and run it for a while and then turn it off, you will not
    # be able to get the data from eth_getLogs for that period of time.

    # httpFullNodeEnable = true
    # httpFullNodePort = 8545
    # httpSolidityEnable = true
    # httpSolidityPort = 8555
    # httpPBFTEnable = true
    # httpPBFTPort = 8565

    # The maximum blocks range to retrieve logs for eth_getLogs, default value is 5000,
    # should be > 0, otherwise means no limit.
    maxBlockRange = 5000

    # The maximum number of allowed topics within a topic criteria, default value is 1000,
    # should be > 0, otherwise means no limit.
    maxSubTopics = 1000
    # Allowed maximum number for blockFilter
    maxBlockFilterNum = 30000
  }

  # Disabled api list, it will work for http, rpc and pbft, both FullNode and SolidityNode,
  # but not jsonrpc. The setting is case insensitive, GetNowBlock2 is equal to getnowblock2
  disabledApi = [
    #  "getaccount",
    #  "getnowblock2"
  ]

}

## rate limiter config
rate.limiter = {
  # Every api could only set a specific rate limit strategy. Three blocking strategy are supported:
  # GlobalPreemptibleAdapter: The number of preemptible resource or maximum concurrent requests globally.
  # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer.
  # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer.
  # If not set, QpsRateLimiterAdapter with qps=1000 is the default strategy.
  #
  # Sample entries:
  #
  http = [
    #  {
    #    component = "GetNowBlockServlet",
    #    strategy = "GlobalPreemptibleAdapter",
    #    paramString = "permit=1"
    #  },

    #  {
    #    component = "GetAccountServlet",
    #    strategy = "IPQPSRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },

    #  {
    #    component = "ListWitnessesServlet",
    #    strategy = "QpsRateLimiterAdapter",
    #    paramString = "qps=1"
    #  }
  ],

  rpc = [
    #  {
    #    component = "protocol.Wallet/GetBlockByLatestNum2",
    #    strategy = "GlobalPreemptibleAdapter",
    #    paramString = "permit=1"
    #  },

    #  {
    #    component = "protocol.Wallet/GetAccount",
    #    strategy = "IPQPSRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },

    #  {
    #    component = "protocol.Wallet/ListWitnesses",
    #    strategy = "QpsRateLimiterAdapter",
    #    paramString = "qps=1"
    #  },
  ]

  p2p = {
    # syncBlockChain = 3.0
    # fetchInvData = 3.0
    # disconnect = 1.0
  }

  # global qps, default 50000
  global.qps = 50000
  # IP-based global qps, default 10000
  global.ip.qps = 10000
}


seed.node = {
  # List of the seed nodes
  # Seed nodes are stable full nodes
  # example:
  # ip.list = [
  #   "ip:port",
  #   "ip:port"
  # ]
  ip.list = [
    "44.236.192.97:18888",
    "44.236.125.107:18888",
    "44.232.119.174:18888",
    "52.39.105.180:18888",
    "54.70.52.47:18888"
  ]
}

genesis.block = {
  # Reserve balance
  assets = [
    {
      accountName = "Zion"
      accountType = "AssetIssue"
      address = "TMWXhuxiT1KczhBxCseCDDsrhmpYGUcoA9"
      balance = "99000000000000000"
    },
    {
      accountName = "Sun"
      accountType = "AssetIssue"
      address = "TN21Wx2yoNYiZ7znuQonmZMJnH5Vdfxu78"
      balance = "99000000000000000"
    },
    {
      accountName = "Blackhole"
      accountType = "AssetIssue"
      address = "TDPJULRzVtzVjnBmZvfaTcTNQ2tsVi6XxQ"
      balance = "-9223372036854775808"
    }
  ]

  witnesses = [
    {
      address: TD23EqH3ixYMYh8CMXKdHyQWjePi3KQvxV,
      url = "http://GR1.com",
      voteCount = 100000026
    },
    {
      address: TCm4Lz1uP3tQm3jzpwFTG6o5UvSTA2XEHc,
      url = "http://GR2.com",
      voteCount = 100000025
    },
    {
      address: TTgDUgREiPBeY3iudD5e2eEibE4v4CE8C9,
      url = "http://GR3.com",
      voteCount = 100000024
    },
    {
      address: TFVDe7kMEmb8EuUxxp42kocQY1fFY727WS,
      url = "http://GR4.com",
      voteCount = 100000023
    },
    {
      address: TY4NSjctzTchHkhaCskVc5zQtnX9s1uxAX,
      url = "http://GR5.com",
      voteCount = 100000022
    },
    {
      address: TWSMPrm6aizvsJmPnjMB7x3UExJfRhyQhd,
      url = "http://GR6.com",
      voteCount = 100000021
    },
    {
      address: TKwLkSaCvqqpAB44qaHGTohCTCFoYw7ecy,
      url = "http://GR7.com",
      voteCount = 100000020
    },
    {
      address: TDsYmm1St9r4UZebDGWBcTMtfYTw9YX5h4,
      url = "http://GR8.com",
      voteCount = 100000019
    },
    {
      address: TFEQbWAPxhbUr1P14y9UJBUZo3LgtdqTS7,
      url = "http://GR9.com",
      voteCount = 100000018
    },
    {
      address: TCynAi8tb7UWP7uhLv6fe971KLm2KT8tcs,
      url = "http://GR10.com",
      voteCount = 100000017
    },
    {
      address: TC2YsLp4rzrt3AbeN3EryoSywrBjEUVCq3,
      url = "http://GR11.com",
      voteCount = 100000016
    },
    {
      address: THxMKH1uaL5FpURujkQR7u2sNZ2n5PSsiH,
      url = "http://GR12.com",
      voteCount = 100000015
    },
    {
      address: TWbzgoHimDcXWy19ts1An8bxA4JKjcYHeG,
      url = "http://GR13.com",
      voteCount = 100000014
    },
    {
      address: TW2LmXnVCEaxuVtQN8gZR1ixT5PNm4QLft,
      url = "http://GR14.com",
      voteCount = 100000013
    },
    {
      address: TVuqk4rYYVHVA6j6sSEnaLexhhoQhN8nyZ,
      url = "http://GR15.com",
      voteCount = 100000012
    },
    {
      address: TVMZu5ptZPhhkZ3Kaagkq35FmyuKNvUKJV,
      url = "http://GR16.com",
      voteCount = 100000011
    },
    {
      address: TFDHT8PqUrL2Bd8DeysSiHHBAEMidZgkhx,
      url = "http://GR17.com",
      voteCount = 100000010
    },
    {
      address: TVqz5Bj3M1uEenaSsw2NnXvTWChPj6K3hb,
      url = "http://GR18.com",
      voteCount = 100000009
    },
    {
      address: TSt8YNpARJkhdMdEV4C7ajH1tFHpZWzF1T,
      url = "http://GR19.com",
      voteCount = 100000008
    },
    {
      address: TTxWDjEb3Be1Ax8BCvK48cnaorZofLq2C9,
      url = "http://GR20.com",
      voteCount = 100000007
    },
    {
      address: TU5T838YtyZtEQKpnXEdRz3d8hJn6WHhjw,
      url = "http://GR21.com",
      voteCount = 100000006
    },
    {
      address: TRuSs1MpL3o2hzhU8r6HLC7WtDyVE9hsF6,
      url = "http://GR22.com",
      voteCount = 100000005
    },
    {
      address: TYMCoCZyAjWkWdUfEHg1oZQYbLKev282ou,
      url = "http://GR23.com",
      voteCount = 100000004
    },
    {
      address: TQvAyGATpLZymHbpeaRozJCKqSeRWVNhCJ,
      url = "http://GR24.com",
      voteCount = 100000003
    },
    {
      address: TYDd9nskbhJmLLNoe4yV2Z1SYtGjNa8wyg,
      url = "http://GR25.com",
      voteCount = 100000002
    },
    {
      address: TS5991Geh2qeHtw46rskpJyn6hFNbuZGGc,
      url = "http://GR26.com",
      voteCount = 100000001
    },
    {
      address: TKnn5MBnmXXeKdu9dxKVfKk4n1YdCeSRGr,
      url = "http://GR27.com",
      voteCount = 100000000
    }
  ]

  timestamp = "0" # Genesis block timestamp, milli seconds

  parentHash = "0xe58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f"
}

# Optional. The default is empty. It is used when the witness account has set the witnessPermission.
# When it is not empty, the localWitnessAccountAddress represents the address of the witness account,
# and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.
# When it is empty,the localwitness is configured with the private key of the witness account.
# localWitnessAccountAddress =

localwitness = [
]

# localwitnesskeystore = [
#  "localwitnesskeystore.json"
# ]

block = {
  needSyncCheck = false
  maintenanceTimeInterval = 600000
  proposalExpireTime = 600000 //
  # checkFrozenTime = 1 // for test only
}

# Transaction reference block, default is "head", configure to "solid" can avoid TaPos error
# trx.reference.block = "head" // head;solid;

# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is  60000.
# trx.expiration.timeInMilliseconds = 60000

vm = {
  supportConstant = true
  minTimeRatio = 0.0
  maxTimeRatio = 5.0
  saveInternalTx = true
  saveFeaturedInternalTx = true
  saveCancelAllUnfreezeV2Details = true

  # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged
  # longRunningTime = 10

  # Indicates whether the node support estimate energy API. Default: false.
  # estimateEnergy = false

  # Indicates the max retry time for executing transaction in estimating energy. Default 3.
  # estimateEnergyMaxRetry = 3
}

committee = {
  allowCreationOfContracts = 0  //mainnet:0 (reset by committee),test:1
  allowAdaptiveEnergy = 0  //mainnet:0 (reset by committee),test:1
}

event.subscribe = {
  native = {
    useNativeQueue = true // if true, use native message queue, else use event plugin.
    bindport = 5555 // bind port
    sendqueuelength = 1000 //max length of send queue
  }
  version = 0
  # Specify the starting block number to sync historical events. This is only applicable when version = 1.
  # After performing a full event sync, set this value to 0 or a negative number.
  # startSyncBlockNum = 1

  path = "" // absolute path of plugin
  server = "" // target server address to receive event triggers
  # dbname|username|password, if you want to create indexes for collections when the collections
  # are not exist, you can add version and set it to 2, as dbname|username|password|version
  # if you use version 2 and one collection not exists, it will create index automaticaly;
  # if you use version 2 and one collection exists, it will not create index, you must create index manually;
  dbconfig = ""
  contractParse = true
  topics = [
    {
      triggerName = "block" // block trigger, the value can't be modified
      enable = false
      topic = "block" // plugin topic, the value could be modified
      solidified = false // if set true, just need solidified block. Default: false
    },
    {
      triggerName = "transaction"
      enable = false
      topic = "transaction"
      solidified = false
      ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice. Default: false
    },
    {
      triggerName = "contractevent" // contractevent represents contractlog data decoded by the ABI.
      enable = false
      topic = "contractevent"
    },
    {
      triggerName = "contractlog"
      enable = false
      topic = "contractlog"
      redundancy = false // if set true, contractevent will also be regarded as contractlog
    },
    {
      triggerName = "solidity" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified
      enable = true            // Default: true
      topic = "solidity"
    },
    {
      triggerName = "solidityevent"
      enable = false
      topic = "solidityevent"
    },
    {
      triggerName = "soliditylog"
      enable = false
      topic = "soliditylog"
      redundancy = false // if set true, solidityevent will also be regarded as soliditylog
    }
  ]

  filter = {
    fromblock = "" // the value could be "", "earliest" or a specified block number as the beginning of the queried range
    toblock = "" // the value could be "", "latest" or a specified block number as end of the queried range
    contractAddress = [
      "" // contract address you want to subscribe, if it's set to "", you will receive contract logs/events with any contract address.
    ]

    contractTopic = [
      "" // contract topic you want to subscribe, if it's set to "", you will receive contract logs/events with any contract topic.
    ]
  }
}
Download .txt
gitextract_avwg0i13/

├── README.md
├── main_net_config.conf
├── private_net_config.conf
└── test_net_config.conf
Condensed preview — 4 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (72K chars).
[
  {
    "path": "README.md",
    "chars": 1008,
    "preview": "## 📌 Scope of Use\n\nThis repository provides the **latest `java-tron` configuration templates** for different network env"
  },
  {
    "path": "main_net_config.conf",
    "chars": 26036,
    "preview": "net {\n  # Type can be 'mainnet' or 'testnet', refers to address type.\n  # Hex address of 'mainnet' begin with 0x41, and "
  },
  {
    "path": "private_net_config.conf",
    "chars": 20572,
    "preview": "net {\n  type = mainnet\n  # type = testnet\n}\n\nstorage {\n  # Directory for storing persistent data\n  db.engine = \"LEVELDB\""
  },
  {
    "path": "test_net_config.conf",
    "chars": 21473,
    "preview": "net {\n  # Type can be 'mainnet' or 'testnet', refers to address type.\n  # Hex address of 'mainnet' begin with 0x41, and "
  }
]

About this extraction

This page contains the full source code of the tronprotocol/tron-deployment GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4 files (67.5 KB), approximately 20.1k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!