[
  {
    "path": "README.md",
    "content": "## 📌 Scope of Use\n\nThis 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.\n\n### 🌐 Supported Networks\n\n#### Main Network (Mainnet)\n- **Local file:** `main_net_config.conf`\n- **Official source:**  \n  https://github.com/tronprotocol/java-tron/blob/develop/framework/src/main/resources/config.conf\n\n#### 🧪 Nile Test Network (Testnet)\n- **Local file:** `test_net_config.conf`\n- **Official source:**  \n  https://github.com/tron-nile-testnet/nile-testnet/blob/master/framework/src/main/resources/config-nile.conf\n\n#### 🏠 Private Network\n- **Local file:** `private_net_config.conf`\n- Intended for local development, testing, or custom private deployments.\n\n---\n\n> ⚠️ Note  \n> Configuration files in this repository are periodically synchronized with official sources. Always verify compatibility with your target `java-tron` version before deployment.\n"
  },
  {
    "path": "main_net_config.conf",
    "content": "net {\n  # Type can be 'mainnet' or 'testnet', refers to address type.\n  # Hex address of 'mainnet' begin with 0x41, and 'testnet' begin with 0xa0.\n  # Note: 'testnet' is not related to TRON network Nile, Shasta or private net\n  type = mainnet\n}\n\nstorage {\n  # Directory for storing persistent data\n  db.engine = \"LEVELDB\",  // deprecated for arm, because arm only support  \"ROCKSDB\".\n  db.sync = false,\n  db.directory = \"database\",\n\n  # Whether to write transaction result in transactionRetStore\n  transHistory.switch = \"on\",\n\n  # setting can improve leveldb performance .... start, deprecated for arm\n  # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs\n  # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail\n  # if you find block sync has lower performance, you can try this settings\n  # default = {\n  #  maxOpenFiles = 100\n  # }\n  # defaultM = {\n  #  maxOpenFiles = 500\n  # }\n  # defaultL = {\n  #  maxOpenFiles = 1000\n  # }\n  # setting can improve leveldb performance .... end, deprecated for arm\n\n  # You can customize the configuration for each database. Otherwise, the database settings will use\n  # their defaults, and data will be stored in the \"output-directory\" or in the directory specified\n  # by the \"-d\" or \"--output-directory\" option. Attention: name is a required field that must be set!\n  # In this configuration, the name and path properties take effect for both LevelDB and RocksDB storage engines,\n  # while the additional properties (such as createIfMissing, paranoidChecks, compressionType, etc.) only take effect when using LevelDB.\n  properties = [\n    #    {\n    #      name = \"account\",\n    #      path = \"storage_directory_test\",\n    #      createIfMissing = true, // deprecated for arm start\n    #      paranoidChecks = true,\n    #      verifyChecksums = true,\n    #      compressionType = 1,        // compressed with snappy\n    #      blockSize = 4096,           // 4  KB =         4 * 1024 B\n    #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B\n    #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B\n    #      maxOpenFiles = 100 // deprecated for arm end\n    #    },\n    #    {\n    #      name = \"account-index\",\n    #      path = \"storage_directory_test\",\n    #      createIfMissing = true,\n    #      paranoidChecks = true,\n    #      verifyChecksums = true,\n    #      compressionType = 1,        // compressed with snappy\n    #      blockSize = 4096,           // 4  KB =         4 * 1024 B\n    #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B\n    #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B\n    #      maxOpenFiles = 100\n    #    },\n  ]\n\n  needToUpdateAsset = true\n\n  # dbsettings is needed when using rocksdb as the storage implement (db.engine=\"ROCKSDB\").\n  # we'd strongly recommend that do not modify it unless you know every item's meaning clearly.\n  dbSettings = {\n    levelNumber = 7\n    # compactThreads = 32\n    blocksize = 64  // n * KB\n    maxBytesForLevelBase = 256  // n * MB\n    maxBytesForLevelMultiplier = 10\n    level0FileNumCompactionTrigger = 4\n    targetFileSizeBase = 256  // n * MB\n    targetFileSizeMultiplier = 1\n    maxOpenFiles = 5000\n  }\n\n  balance.history.lookup = false\n\n  # checkpoint.version = 2\n  # checkpoint.sync = true\n\n  # the estimated number of block transactions (default 1000, min 100, max 10000).\n  # so the total number of cached transactions is 65536 * txCache.estimatedTransactions\n  # txCache.estimatedTransactions = 1000\n\n  # if true, transaction cache initialization will be faster. Default: false\n  txCache.initOptimization = true\n\n  # The number of blocks flushed to db in each batch during node syncing. Default: 1\n  # snapshot.maxFlushCount = 1\n\n  # data root setting, for check data, currently, only reward-vi is used.\n  # merkleRoot = {\n  # reward-vi = 9debcb9924055500aaae98cdee10501c5c39d4daa75800a996f4bdda73dbccd8 // main-net, Sha256Hash, hexString\n  # }\n\n}\n\nnode.discovery = {\n  enable = true\n  persist = true\n}\n\n# custom stop condition\n#node.shutdown = {\n#  BlockTime  = \"54 59 08 * * ?\" # if block header time in persistent db matched.\n#  BlockHeight = 33350800 # if block header height in persistent db matched.\n#  BlockCount = 12 # block sync count after node start.\n#}\n\nnode.backup {\n  # udp listen port, each member should have the same configuration\n  port = 10001\n\n  # my priority, each member should use different priority\n  priority = 8\n\n  # time interval to send keepAlive message, each member should have the same configuration\n  keepAliveInterval = 3000\n\n  # peer's ip list, can't contain mine\n  members = [\n    # \"ip\",\n    # \"ip\"\n  ]\n}\n\n# Specify the algorithm for generating a public key from private key. To avoid forks, please do not modify it\ncrypto {\n  engine = \"eckey\"\n}\n\nnode.metrics = {\n  # prometheus metrics\n  prometheus {\n    enable = false\n    port = 9527\n  }\n\n  # influxdb metrics\n  storageEnable = false # Whether write metrics data into InfluxDb. Default: false.\n  influxdb {\n    ip = \"\"\n    port = 8086\n    database = \"\"\n    metricsReportInterval = 10\n  }\n}\n\nnode {\n  # trust node for solidity node\n  # trustNode = \"ip:port\"\n  trustNode = \"127.0.0.1:50051\"\n\n  # expose extension api to public or not\n  walletExtensionApi = true\n\n  listen.port = 18888\n\n  connection.timeout = 2\n\n  fetchBlock.timeout = 200\n  \n  # syncFetchBatchNum = 2000\n\n  # Number of validate sign thread, default availableProcessors\n  # validateSignThreadNum = 16\n\n  maxConnections = 30\n\n  minConnections = 8\n\n  minActiveConnections = 3\n\n  maxConnectionsWithSameIp = 2\n\n  maxHttpConnectNumber = 50\n\n  minParticipationRate = 15\n\n  # allowShieldedTransactionApi = true\n\n  # openPrintLog = true\n\n  # If set to true, SR packs transactions into a block in descending order of fee; otherwise, it packs\n  # them based on their receive timestamp. Default: false\n  # openTransactionSort = false\n\n  # The threshold for the number of broadcast transactions received from each peer every second,\n  # transactions exceeding this threshold will be discarded\n  # maxTps = 1000\n\n  isOpenFullTcpDisconnect = false\n  inactiveThreshold = 600 //seconds\n\n  p2p {\n    version = 11111 # Mainnet:11111; Nile:201910292; Shasta:1\n  }\n\n  active = [\n    # Active establish connection in any case\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n  ]\n\n  passive = [\n    # Passive accept connection in any case\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n  ]\n\n  fastForward = [\n    \"100.27.171.62:18888\",\n    \"15.188.6.125:18888\"\n  ]\n\n  http {\n    fullNodeEnable = true\n    fullNodePort = 8090\n    solidityEnable = true\n    solidityPort = 8091\n    PBFTEnable = true\n    PBFTPort = 8092\n  }\n\n  rpc {\n    enable = true\n    port = 50051\n    solidityEnable = true\n    solidityPort = 50061\n    PBFTEnable = true\n    PBFTPort = 50071\n\n    # Number of gRPC thread, default availableProcessors / 2\n    # thread = 16\n\n    # The maximum number of concurrent calls permitted for each incoming connection\n    # maxConcurrentCallsPerConnection =\n\n    # The HTTP/2 flow control window, default 1MB\n    # flowControlWindow =\n\n    # Connection being idle for longer than which will be gracefully terminated\n    maxConnectionIdleInMillis = 60000\n\n    # Connection lasting longer than which will be gracefully terminated\n    # maxConnectionAgeInMillis =\n\n    # The maximum message size allowed to be received on the server, default 4MB\n    # maxMessageSize =\n\n    # The maximum size of header list allowed to be received, default 8192\n    # maxHeaderListSize =\n\n    # The number of RST_STREAM frames allowed to be sent per connection per period for grpc, by default there is no limit.\n    # maxRstStream =\n\n    # The number of seconds per period for grpc\n    # secondsPerWindow =\n\n    # Transactions can only be broadcast if the number of effective connections is reached.\n    minEffectiveConnection = 1\n\n    # The switch of the reflection service, effective for all gRPC services, used for grpcurl tool. Default: false\n    reflectionService = false\n  }\n\n  # number of solidity thread in the FullNode.\n  # If accessing solidity rpc and http interface timeout, could increase the number of threads,\n  # The default value is the number of cpu cores of the machine.\n  # solidity.threads = 8\n\n  # Limits the maximum percentage (default 75%) of producing block interval\n  # to provide sufficient time to perform other operations e.g. broadcast block\n  # blockProducedTimeOut = 75\n\n  # Limits the maximum number (default 700) of transaction from network layer\n  # netMaxTrxPerSecond = 700\n\n  # Whether to enable the node detection function. Default: false\n  # nodeDetectEnable = false\n\n  # use your ipv6 address for node discovery and tcp connection. Default: false\n  # enableIpv6 = false\n\n  # if your node's highest block num is below than all your pees', try to acquire new connection. Default: false\n  # effectiveCheckEnable = false\n\n  # Dynamic loading configuration function, disabled by default\n  dynamicConfig = {\n    # enable = false\n    # checkInterval = 600 // Check interval of Configuration file's change, default is 600 seconds\n  }\n\n  # Whether to continue broadcast transactions after at least maxUnsolidifiedBlocks are not solidified. Default: false\n  # unsolidifiedBlockCheck = false\n  # maxUnsolidifiedBlocks = 54\n\n  dns {\n    # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty\n    treeUrls = [\n      #\"tree://AKMQMNAJJBL73LXWPXDI4I5ZWWIZ4AWO34DWQ636QOBBXNFXH3LQS@main.trondisco.net\",\n    ]\n\n    # enable or disable dns publish. Default: false\n    # publish = false\n\n    # dns domain to publish nodes, required if publish is true\n    # dnsDomain = \"nodes1.example.org\"\n\n    # dns private key used to publish, required if publish is true, hex string of length 64\n    # dnsPrivate = \"b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291\"\n\n    # known dns urls to publish if publish is true, url format tree://{pubkey}@{domain}, default empty\n    # knownUrls = [\n    #\"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes2.example.org\",\n    # ]\n\n    # staticNodes = [\n    # static nodes to published on dns\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n    # ]\n\n    # merge several nodes into a leaf of tree, should be 1~5\n    # maxMergeSize = 5\n\n    # only nodes change percent is bigger then the threshold, we update data on dns\n    # changeThreshold = 0.1\n\n    # dns server to publish, required if publish is true, only aws or aliyun is support\n    # serverType = \"aws\"\n\n    # access key id of aws or aliyun api, required if publish is true, string\n    # accessKeyId = \"your-key-id\"\n\n    # access key secret of aws or aliyun api, required if publish is true, string\n    # accessKeySecret = \"your-key-secret\"\n\n    # if publish is true and serverType is aliyun, it's endpoint of aws dns server, string\n    # aliyunDnsEndpoint = \"alidns.aliyuncs.com\"\n\n    # if publish is true and serverType is aws, it's region of aws api, such as \"eu-south-1\", string\n    # awsRegion = \"us-east-1\"\n\n    # if publish is true and server-type is aws, it's host zone id of aws's domain, string\n    # awsHostZoneId = \"your-host-zone-id\"\n  }\n\n  # open the history query APIs(http&GRPC) when node is a lite FullNode,\n  # like {getBlockByNum, getBlockByID, getTransactionByID...}. Default: false.\n  # note: above APIs may return null even if blocks and transactions actually are on the blockchain\n  # when opening on a lite FullNode. only open it if the consequences being clearly known\n  # openHistoryQueryWhenLiteFN = false\n\n  jsonrpc {\n    # Note: Before release_4.8.1, if you turn on jsonrpc and run it for a while and then turn it off,\n    # you will not be able to get the data from eth_getLogs for that period of time. Default: false\n    # httpFullNodeEnable = false\n    # httpFullNodePort = 8545\n    # httpSolidityEnable = false\n    # httpSolidityPort = 8555\n    # httpPBFTEnable = false\n    # httpPBFTPort = 8565\n\n    # The maximum blocks range to retrieve logs for eth_getLogs, default value is 5000,\n    # should be > 0, otherwise means no limit.\n    maxBlockRange = 5000\n\n    # The maximum number of allowed topics within a topic criteria, default value is 1000,\n    # should be > 0, otherwise means no limit.\n    maxSubTopics = 1000\n    # Allowed maximum number for blockFilter\n    maxBlockFilterNum = 50000\n  }\n\n  # Disabled api list, it will work for http, rpc and pbft, both FullNode and SolidityNode,\n  # but not jsonrpc. The setting is case insensitive, GetNowBlock2 is equal to getnowblock2\n  disabledApi = [\n    #  \"getaccount\",\n    #  \"getnowblock2\"\n  ]\n}\n\n## rate limiter config\nrate.limiter = {\n  # Every api could only set a specific rate limit strategy. Three blocking strategy are supported:\n  # GlobalPreemptibleAdapter: The number of preemptible resource or maximum concurrent requests globally.\n  # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer.\n  # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer.\n  # If not set, QpsRateLimiterAdapter with qps=1000 is the default strategy.\n  #\n  # Sample entries:\n  #\n  http = [\n    #  {\n    #    component = \"GetNowBlockServlet\",\n    #    strategy = \"GlobalPreemptibleAdapter\",\n    #    paramString = \"permit=1\"\n    #  },\n\n    #  {\n    #    component = \"GetAccountServlet\",\n    #    strategy = \"IPQPSRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n\n    #  {\n    #    component = \"ListWitnessesServlet\",\n    #    strategy = \"QpsRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  }\n  ],\n\n  rpc = [\n    #  {\n    #    component = \"protocol.Wallet/GetBlockByLatestNum2\",\n    #    strategy = \"GlobalPreemptibleAdapter\",\n    #    paramString = \"permit=1\"\n    #  },\n\n    #  {\n    #    component = \"protocol.Wallet/GetAccount\",\n    #    strategy = \"IPQPSRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n\n    #  {\n    #    component = \"protocol.Wallet/ListWitnesses\",\n    #    strategy = \"QpsRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n  ]\n\n  p2p = {\n    # syncBlockChain = 3.0\n    # fetchInvData = 3.0\n    # disconnect = 1.0\n  }\n\n  # global qps, default 50000\n  global.qps = 50000\n  # IP-based global qps, default 10000\n  global.ip.qps = 10000\n}\n\n\n\nseed.node = {\n  # List of the seed nodes\n  # Seed nodes are stable full nodes\n  # example:\n  # ip.list = [\n  #   \"ip:port\",\n  #   \"ip:port\"\n  # ]\n  ip.list = [\n    \"3.225.171.164:18888\",\n    \"52.8.46.215:18888\",\n    \"3.79.71.167:18888\",\n    \"108.128.110.16:18888\",\n    \"18.133.82.227:18888\",\n    \"35.180.81.133:18888\",\n    \"13.210.151.5:18888\",\n    \"18.231.27.82:18888\",\n    \"3.12.212.122:18888\",\n    \"52.24.128.7:18888\",\n    \"15.207.144.3:18888\",\n    \"3.39.38.55:18888\",\n    \"54.151.226.240:18888\",\n    \"35.174.93.198:18888\",\n    \"18.210.241.149:18888\",\n    \"54.177.115.127:18888\",\n    \"54.254.131.82:18888\",\n    \"18.167.171.167:18888\",\n    \"54.167.11.177:18888\",\n    \"35.74.7.196:18888\",\n    \"52.196.244.176:18888\",\n    \"54.248.129.19:18888\",\n    \"43.198.142.160:18888\",\n    \"3.0.214.7:18888\",\n    \"54.153.59.116:18888\",\n    \"54.153.94.160:18888\",\n    \"54.82.161.39:18888\",\n    \"54.179.207.68:18888\",\n    \"18.142.82.44:18888\",\n    \"18.163.230.203:18888\",\n    # \"[2a05:d014:1f2f:2600:1b15:921:d60b:4c60]:18888\", // use this if support ipv6\n    # \"[2600:1f18:7260:f400:8947:ebf3:78a0:282b]:18888\", // use this if support ipv6\n  ]\n}\n\ngenesis.block = {\n  # Reserve balance\n  assets = [\n    {\n      accountName = \"Zion\"\n      accountType = \"AssetIssue\"\n      address = \"TLLM21wteSPs4hKjbxgmH1L6poyMjeTbHm\"\n      balance = \"99000000000000000\"\n    },\n    {\n      accountName = \"Sun\"\n      accountType = \"AssetIssue\"\n      address = \"TXmVpin5vq5gdZsciyyjdZgKRUju4st1wM\"\n      balance = \"0\"\n    },\n    {\n      accountName = \"Blackhole\"\n      accountType = \"AssetIssue\"\n      address = \"TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy\"\n      balance = \"-9223372036854775808\"\n    }\n  ]\n\n  witnesses = [\n    {\n      address: THKJYuUmMKKARNf7s2VT51g5uPY6KEqnat,\n      url = \"http://GR1.com\",\n      voteCount = 100000026\n    },\n    {\n      address: TVDmPWGYxgi5DNeW8hXrzrhY8Y6zgxPNg4,\n      url = \"http://GR2.com\",\n      voteCount = 100000025\n    },\n    {\n      address: TWKZN1JJPFydd5rMgMCV5aZTSiwmoksSZv,\n      url = \"http://GR3.com\",\n      voteCount = 100000024\n    },\n    {\n      address: TDarXEG2rAD57oa7JTK785Yb2Et32UzY32,\n      url = \"http://GR4.com\",\n      voteCount = 100000023\n    },\n    {\n      address: TAmFfS4Tmm8yKeoqZN8x51ASwdQBdnVizt,\n      url = \"http://GR5.com\",\n      voteCount = 100000022\n    },\n    {\n      address: TK6V5Pw2UWQWpySnZyCDZaAvu1y48oRgXN,\n      url = \"http://GR6.com\",\n      voteCount = 100000021\n    },\n    {\n      address: TGqFJPFiEqdZx52ZR4QcKHz4Zr3QXA24VL,\n      url = \"http://GR7.com\",\n      voteCount = 100000020\n    },\n    {\n      address: TC1ZCj9Ne3j5v3TLx5ZCDLD55MU9g3XqQW,\n      url = \"http://GR8.com\",\n      voteCount = 100000019\n    },\n    {\n      address: TWm3id3mrQ42guf7c4oVpYExyTYnEGy3JL,\n      url = \"http://GR9.com\",\n      voteCount = 100000018\n    },\n    {\n      address: TCvwc3FV3ssq2rD82rMmjhT4PVXYTsFcKV,\n      url = \"http://GR10.com\",\n      voteCount = 100000017\n    },\n    {\n      address: TFuC2Qge4GxA2U9abKxk1pw3YZvGM5XRir,\n      url = \"http://GR11.com\",\n      voteCount = 100000016\n    },\n    {\n      address: TNGoca1VHC6Y5Jd2B1VFpFEhizVk92Rz85,\n      url = \"http://GR12.com\",\n      voteCount = 100000015\n    },\n    {\n      address: TLCjmH6SqGK8twZ9XrBDWpBbfyvEXihhNS,\n      url = \"http://GR13.com\",\n      voteCount = 100000014\n    },\n    {\n      address: TEEzguTtCihbRPfjf1CvW8Euxz1kKuvtR9,\n      url = \"http://GR14.com\",\n      voteCount = 100000013\n    },\n    {\n      address: TZHvwiw9cehbMxrtTbmAexm9oPo4eFFvLS,\n      url = \"http://GR15.com\",\n      voteCount = 100000012\n    },\n    {\n      address: TGK6iAKgBmHeQyp5hn3imB71EDnFPkXiPR,\n      url = \"http://GR16.com\",\n      voteCount = 100000011\n    },\n    {\n      address: TLaqfGrxZ3dykAFps7M2B4gETTX1yixPgN,\n      url = \"http://GR17.com\",\n      voteCount = 100000010\n    },\n    {\n      address: TX3ZceVew6yLC5hWTXnjrUFtiFfUDGKGty,\n      url = \"http://GR18.com\",\n      voteCount = 100000009\n    },\n    {\n      address: TYednHaV9zXpnPchSywVpnseQxY9Pxw4do,\n      url = \"http://GR19.com\",\n      voteCount = 100000008\n    },\n    {\n      address: TCf5cqLffPccEY7hcsabiFnMfdipfyryvr,\n      url = \"http://GR20.com\",\n      voteCount = 100000007\n    },\n    {\n      address: TAa14iLEKPAetX49mzaxZmH6saRxcX7dT5,\n      url = \"http://GR21.com\",\n      voteCount = 100000006\n    },\n    {\n      address: TBYsHxDmFaRmfCF3jZNmgeJE8sDnTNKHbz,\n      url = \"http://GR22.com\",\n      voteCount = 100000005\n    },\n    {\n      address: TEVAq8dmSQyTYK7uP1ZnZpa6MBVR83GsV6,\n      url = \"http://GR23.com\",\n      voteCount = 100000004\n    },\n    {\n      address: TRKJzrZxN34YyB8aBqqPDt7g4fv6sieemz,\n      url = \"http://GR24.com\",\n      voteCount = 100000003\n    },\n    {\n      address: TRMP6SKeFUt5NtMLzJv8kdpYuHRnEGjGfe,\n      url = \"http://GR25.com\",\n      voteCount = 100000002\n    },\n    {\n      address: TDbNE1VajxjpgM5p7FyGNDASt3UVoFbiD3,\n      url = \"http://GR26.com\",\n      voteCount = 100000001\n    },\n    {\n      address: TLTDZBcPoJ8tZ6TTEeEqEvwYFk2wgotSfD,\n      url = \"http://GR27.com\",\n      voteCount = 100000000\n    }\n  ]\n\n  timestamp = \"0\" # Genesis block timestamp, milli seconds\n\n  parentHash = \"0xe58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f\"\n}\n\n# Optional. The default is empty. It is used when the witness account has set the witnessPermission.\n# When it is not empty, the localWitnessAccountAddress represents the address of the witness account,\n# and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.\n# When it is empty,the localwitness is configured with the private key of the witness account.\n# localWitnessAccountAddress =\n\nlocalwitness = [\n]\n\n# localwitnesskeystore = [\n#  \"localwitnesskeystore.json\"\n# ]\n\nblock = {\n  needSyncCheck = true\n  maintenanceTimeInterval = 21600000 // 6 hours: 21600000(ms)\n  proposalExpireTime = 259200000 // default value: 3 days: 259200000(ms), Note: this value is controlled by committee proposal\n  # checkFrozenTime = 1 // for test only\n}\n\n# Transaction reference block, default is \"solid\", configure to \"head\" may cause TaPos error\ntrx.reference.block = \"solid\" // \"head\" or \"solid\"\n\n# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is  60000.\n# trx.expiration.timeInMilliseconds = 60000\n\nvm = {\n  supportConstant = false\n  maxEnergyLimitForConstant = 100000000\n  minTimeRatio = 0.0\n  maxTimeRatio = 5.0\n  saveInternalTx = false\n  # lruCacheSize = 500\n  # vmTrace = false\n\n  # Indicates whether the node stores featured internal transactions, such as freeze, vote and so on. Default: false.\n  # saveFeaturedInternalTx = false\n\n  # Indicates whether the node stores the details of the internal transactions generated by the CANCELALLUNFREEZEV2 opcode,\n  # such as bandwidth/energy/tronpower cancel amount. Default: false.\n  # saveCancelAllUnfreezeV2Details = false\n\n  # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged\n  # longRunningTime = 10\n\n  # Indicates whether the node support estimate energy API. Default: false.\n  # estimateEnergy = false\n\n  # Indicates the max retry time for executing transaction in estimating energy. Default 3.\n  # estimateEnergyMaxRetry = 3\n}\n\n# These parameters are designed for private chain testing only and cannot be freely switched on or off in production systems.\ncommittee = {\n  allowCreationOfContracts = 0  //mainnet:0 (reset by committee),test:1\n  allowAdaptiveEnergy = 0  //mainnet:0 (reset by committee),test:1\n  # allowCreationOfContracts = 0\n  # allowMultiSign = 0\n  # allowAdaptiveEnergy = 0\n  # allowDelegateResource = 0\n  # allowSameTokenName = 0\n  # allowTvmTransferTrc10 = 0\n  # allowTvmConstantinople = 0\n  # allowTvmSolidity059 = 0\n  # forbidTransferToContract = 0\n  # allowShieldedTRC20Transaction = 0\n  # allowTvmIstanbul = 0\n  # allowMarketTransaction = 0\n  # allowProtoFilterNum = 0\n  # allowAccountStateRoot = 0\n  # changedDelegation = 0\n  # allowPBFT = 0\n  # pBFTExpireNum = 0\n  # allowTransactionFeePool = 0\n  # allowBlackHoleOptimization = 0\n  # allowNewResourceModel = 0\n  # allowReceiptsMerkleRoot = 0\n  # allowTvmFreeze = 0\n  # allowTvmVote = 0\n  # unfreezeDelayDays = 0\n  # allowTvmLondon = 0\n  # allowTvmCompatibleEvm = 0\n  # allowNewRewardAlgorithm = 0\n  # allowAccountAssetOptimization = 0\n  # allowAssetOptimization = 0\n  # allowNewReward = 0\n  # memoFee = 0\n  # allowDelegateOptimization = 0\n  # allowDynamicEnergy = 0\n  # dynamicEnergyThreshold = 0\n  # dynamicEnergyMaxFactor = 0\n  # allowTvmShangHai = 0\n  # allowOldRewardOpt = 0\n  # allowEnergyAdjustment = 0\n  # allowStrictMath = 0\n  # allowTvmCancun = 0\n  # allowTvmBlob = 0\n  # consensusLogicOptimization = 0\n  # allowOptimizedReturnValueOfChainId = 0\n}\n\nevent.subscribe = {\n  native = {\n    useNativeQueue = true // if true, use native message queue, else use event plugin.\n    bindport = 5555 // bind port\n    sendqueuelength = 1000 //max length of send queue\n  }\n  version = 0\n  # Specify the starting block number to sync historical events. This is only applicable when version = 1.\n  # After performing a full event sync, set this value to 0 or a negative number.\n  # startSyncBlockNum = 1\n\n  path = \"\" // absolute path of plugin\n  server = \"\" // target server address to receive event triggers\n  # dbname|username|password, if you want to create indexes for collections when the collections\n  # are not exist, you can add version and set it to 2, as dbname|username|password|version\n  # if you use version 2 and one collection not exists, it will create index automaticaly;\n  # if you use version 2 and one collection exists, it will not create index, you must create index manually;\n  dbconfig = \"\"\n  contractParse = true\n  topics = [\n    {\n      triggerName = \"block\" // block trigger, the value can't be modified\n      enable = false\n      topic = \"block\" // plugin topic, the value could be modified\n      solidified = false // if set true, just need solidified block. Default: false\n    },\n    {\n      triggerName = \"transaction\"\n      enable = false\n      topic = \"transaction\"\n      solidified = false\n      ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice. Default: false\n    },\n    {\n      triggerName = \"contractevent\" // contractevent represents contractlog data decoded by the ABI.\n      enable = false\n      topic = \"contractevent\"\n    },\n    {\n      triggerName = \"contractlog\"\n      enable = false\n      topic = \"contractlog\"\n      redundancy = false // if set true, contractevent will also be regarded as contractlog\n    },\n    {\n      triggerName = \"solidity\" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified\n      enable = true            // Default: true\n      topic = \"solidity\"\n    },\n    {\n      triggerName = \"solidityevent\"\n      enable = false\n      topic = \"solidityevent\"\n    },\n    {\n      triggerName = \"soliditylog\"\n      enable = false\n      topic = \"soliditylog\"\n      redundancy = false // if set true, solidityevent will also be regarded as soliditylog\n    }\n  ]\n\n  filter = {\n    fromblock = \"\" // the value could be \"\", \"earliest\" or a specified block number as the beginning of the queried range\n    toblock = \"\" // the value could be \"\", \"latest\" or a specified block number as end of the queried range\n    contractAddress = [\n      \"\" // contract address you want to subscribe, if it's set to \"\", you will receive contract logs/events with any contract address.\n    ]\n\n    contractTopic = [\n      \"\" // contract topic you want to subscribe, if it's set to \"\", you will receive contract logs/events with any contract topic.\n    ]\n  }\n}"
  },
  {
    "path": "private_net_config.conf",
    "content": "net {\n  type = mainnet\n  # type = testnet\n}\n\nstorage {\n  # Directory for storing persistent data\n  db.engine = \"LEVELDB\",\n  db.sync = false,\n  db.directory = \"database\",\n  index.directory = \"index\",\n  transHistory.switch = \"on\",\n  # You can custom these 14 databases' configs:\n\n  # account, account-index, asset-issue, block, block-index,\n  # block_KDB, peers, properties, recent-block, trans,\n  # utxo, votes, witness, witness_schedule.\n\n  # Otherwise, db configs will remain default and data will be stored in\n  # the path of \"output-directory\" or which is set by \"-d\" (\"--output-directory\").\n\n  # setting can impove leveldb performance .... start\n  # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs\n  # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail\n  # if you find block sync has lower performance,you can try  this  settings\n  #default = {\n  #  maxOpenFiles = 100\n  #}\n  #defaultM = {\n  #  maxOpenFiles = 500\n  #}\n  #defaultL = {\n  #  maxOpenFiles = 1000\n  #}\n  # setting can impove leveldb performance .... end\n\n  # Attention: name is a required field that must be set !!!\n  properties = [\n    //    {\n    //      name = \"account\",\n    //      path = \"storage_directory_test\",\n    //      createIfMissing = true,\n    //      paranoidChecks = true,\n    //      verifyChecksums = true,\n    //      compressionType = 1,        // compressed with snappy\n    //      blockSize = 4096,           // 4  KB =         4 * 1024 B\n    //      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B\n    //      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B\n    //      maxOpenFiles = 100\n    //    },\n    //    {\n    //      name = \"account-index\",\n    //      path = \"storage_directory_test\",\n    //      createIfMissing = true,\n    //      paranoidChecks = true,\n    //      verifyChecksums = true,\n    //      compressionType = 1,        // compressed with snappy\n    //      blockSize = 4096,           // 4  KB =         4 * 1024 B\n    //      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B\n    //      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B\n    //      maxOpenFiles = 100\n    //    },\n  ]\n\n  needToUpdateAsset = true\n\n  //dbsettings is needed when using rocksdb as the storage implement (db.engine=\"ROCKSDB\").\n  //we'd strongly recommend that do not modify it unless you know every item's meaning clearly.\n  dbSettings = {\n    levelNumber = 7\n    //compactThreads = 32\n    blocksize = 64  // n * KB\n    maxBytesForLevelBase = 256  // n * MB\n    maxBytesForLevelMultiplier = 10\n    level0FileNumCompactionTrigger = 4\n    targetFileSizeBase = 256  // n * MB\n    targetFileSizeMultiplier = 1\n  }\n\n  //backup settings when using rocks db as the storage implement (db.engine=\"ROCKSDB\").\n  //if you want to use the backup plugin, please confirm set the db.engine=\"ROCKSDB\" above.\n  backup = {\n    enable = false  // indicate whether enable the backup plugin\n    propPath = \"prop.properties\" // record which bak directory is valid\n    bak1path = \"bak1/database\" // you must set two backup directories to prevent application halt unexpected(e.g. kill -9).\n    bak2path = \"bak2/database\"\n    frequency = 10000   // indicate backup db once every 10000 blocks processed.\n  }\n\n  balance.history.lookup = false\n\n  # checkpoint.version = 2\n  # checkpoint.sync = true\n\n  # the estimated number of block transactions (default 1000, min 100, max 10000).\n  # so the total number of cached transactions is 65536 * txCache.estimatedTransactions\n  # txCache.estimatedTransactions = 1000\n  # if true, transaction cache initialization will be faster. default false\n  # txCache.initOptimization = true\n\n  # data root setting, for check data, currently, only reward-vi is used.\n\n  # merkleRoot = {\n  # reward-vi = 9debcb9924055500aaae98cdee10501c5c39d4daa75800a996f4bdda73dbccd8 // main-net, Sha256Hash, hexString\n  # }\n\n}\n\nnode.discovery = {\n  enable = false  # you should set this entry value with true if you want your node can be discovered by other node.\n  persist = true  # this entry is used to determined to whether storing the peers in the database or not.\n  external.ip = 127.0.0.1\n}\n\n# custom stop condition\n#node.shutdown = {\n#  BlockTime  = \"54 59 08 * * ?\" # if block header time in persistent db matched.\n#  BlockHeight = 33350800 # if block header height in persistent db matched.\n#  BlockCount = 12 # block sync count after node start.\n#}\n\nnode.backup {\n  # udp listen port, each member should have the same configuration\n  port = 10001\n\n  # my priority, each member should use different priority\n  priority = 8\n\n  # time interval to send keepAlive message, each member should have the same configuration\n  keepAliveInterval = 3000\n\n  # peer's ip list, can't contain mine\n  members = [\n    # \"ip\",\n    # \"ip\"\n  ]\n}\n\ncrypto {\n  engine = \"eckey\"\n}\n# prometheus metrics start\n# node.metrics = {\n#  prometheus{\n#    enable=true\n#    port=\"9527\"\n#  }\n# }\n\n# prometheus metrics end\n\nnode {\n  # trust node for solidity node\n  # trustNode = \"ip:port\"\n  trustNode = \"127.0.0.1:50051\"\n\n  # expose extension api to public or not\n  walletExtensionApi = true\n\n  listen.port = 16666\n\n  connection.timeout = 2\n\n  fetchBlock.timeout = 200\n\n  tcpNettyWorkThreadNum = 0\n\n  udpNettyWorkThreadNum = 1\n\n  # Number of validate sign thread, default availableProcessors\n  # validateSignThreadNum = 16\n\n  maxConnections = 30\n\n  minConnections = 8\n\n  minActiveConnections = 3\n\n  maxConnectionsWithSameIp = 2\n\n  maxHttpConnectNumber = 50\n\n  minParticipationRate = 15\n\n  isOpenFullTcpDisconnect = false\n  inactiveThreshold = 600 //seconds\n\n  p2p {\n    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.\n  }\n\n  active = [\n    # Active establish connection in any case\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n  ]\n\n  passive = [\n    # Passive accept connection in any case\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n  ]\n\n  fastForward = [\n\n  ]\n\n  http {\n    fullNodeEnable = true\n    fullNodePort = 16667\n    solidityEnable = true\n    solidityPort = 16668\n  }\n\n  rpc {\n    enable = true\n    port = 50051\n    solidityEnable = true\n    solidityPort = 50061\n\n    # Number of gRPC thread, default availableProcessors / 2\n    # thread = 16\n\n    # The maximum number of concurrent calls permitted for each incoming connection\n    # maxConcurrentCallsPerConnection =\n\n    # The HTTP/2 flow control window, default 1MB\n    # flowControlWindow =\n\n    # Connection being idle for longer than which will be gracefully terminated\n    maxConnectionIdleInMillis = 60000\n\n    # Connection lasting longer than which will be gracefully terminated\n    # maxConnectionAgeInMillis =\n\n    # The maximum message size allowed to be received on the server, default 4MB\n    # maxMessageSize =\n\n    # The maximum size of header list allowed to be received, default 8192\n    # maxHeaderListSize =\n\n    # Transactions can only be broadcast if the number of effective connections is reached.\n    minEffectiveConnection = 1\n\n    # The switch of the reflection service, effective for all gRPC services\n    # reflectionService = true\n  }\n\n  # number of solidity thread in the FullNode.\n  # If accessing solidity rpc and http interface timeout, could increase the number of threads,\n  # The default value is the number of cpu cores of the machine.\n  #solidity.threads = 8\n\n  # Limits the maximum percentage (default 75%) of producing block interval\n  # to provide sufficient time to perform other operations e.g. broadcast block\n  # blockProducedTimeOut = 75\n\n  # Limits the maximum number (default 700) of transaction from network layer\n  # netMaxTrxPerSecond = 700\n\n  # Whether to enable the node detection function, default false\n  # nodeDetectEnable = false\n\n  # use your ipv6 address for node discovery and tcp connection, default false\n  # enableIpv6 = false\n\n  # if your node's highest block num is below than all your pees', try to acquire new connection. default false\n  # effectiveCheckEnable = false\n\n  # Dynamic loading configuration function, disabled by default\n  # dynamicConfig = {\n  # enable = false\n  # Configuration file change check interval, default is 600 seconds\n  # checkInterval = 600\n  # }\n\n  dns {\n    # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty\n    treeUrls = [\n      #\"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes1.example.org\",\n    ]\n\n    # enable or disable dns publish, default false\n    # publish = false\n\n    # dns domain to publish nodes, required if publish is true\n    # dnsDomain = \"nodes1.example.org\"\n\n    # dns private key used to publish, required if publish is true, hex string of length 64\n    # dnsPrivate = \"b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291\"\n\n    # known dns urls to publish if publish is true, url format tree://{pubkey}@{domain}, default empty\n    # knownUrls = [\n    #\"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes2.example.org\",\n    # ]\n\n    # staticNodes = [\n    # static nodes to published on dns\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n    # ]\n\n    # merge several nodes into a leaf of tree, should be 1~5\n    # maxMergeSize = 5\n\n    # only nodes change percent is bigger then the threshold, we update data on dns\n    # changeThreshold = 0.1\n\n    # dns server to publish, required if publish is true, only aws or aliyun is support\n    # serverType = \"aws\"\n\n    # access key id of aws or aliyun api, required if publish is true, string\n    # accessKeyId = \"your-key-id\"\n\n    # access key secret of aws or aliyun api, required if publish is true, string\n    # accessKeySecret = \"your-key-secret\"\n\n    # if publish is true and serverType is aliyun, it's endpoint of aws dns server, string\n    # aliyunDnsEndpoint = \"alidns.aliyuncs.com\"\n\n    # if publish is true and serverType is aws, it's region of aws api, such as \"eu-south-1\", string\n    # awsRegion = \"us-east-1\"\n\n    # if publish is true and server-type is aws, it's host zone id of aws's domain, string\n    # awsHostZoneId = \"your-host-zone-id\"\n  }\n\n  # open the history query APIs(http&GRPC) when node is a lite fullNode,\n  # like {getBlockByNum, getBlockByID, getTransactionByID...}.\n  # default: false.\n  # note: above APIs may return null even if blocks and transactions actually are on the blockchain\n  # when opening on a lite fullnode. only open it if the consequences being clearly known\n  # openHistoryQueryWhenLiteFN = false\n\n  jsonrpc {\n    # Note: If you turn on jsonrpc and run it for a while and then turn it off, you will not\n    # be able to get the data from eth_getLogs for that period of time.\n\n    httpFullNodeEnable = true\n    httpFullNodePort = 8545\n    httpSolidityEnable = true\n    httpSolidityPort = 8555\n\n    # The maximum blocks range to retrieve logs for eth_getLogs, default value is 5000,\n    # should be > 0, otherwise means no limit.\n    maxBlockRange = 5000\n\n    # The maximum number of allowed topics within a topic criteria, default value is 1000,\n    # should be > 0, otherwise means no limit.\n    maxSubTopics = 1000\n  }\n\n  # Disabled api list, it will work for http and rpc, both fullnode and soliditynode,\n  # but not jsonrpc.\n  # Sample: The setting is case insensitive, GetNowBlock2 is equal to getnowblock2\n  #\n  # disabledApi = [\n  #   \"getaccount\",\n  #   \"getnowblock2\"\n  # ]\n\n}\n\n## rate limiter config\nrate.limiter = {\n  # Every api could be set a specific rate limit strategy. Three strategy are supported:GlobalPreemptibleAdapter、IPQPSRateLimiterAdapte、QpsRateLimiterAdapter\n  # GlobalPreemptibleAdapter: permit is the number of preemptible resource, every client must apply one resourse\n  #       before do the request and release the resource after got the reponse automaticlly. permit should be a Integer.\n  # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer.\n  # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer.\n  # If do not set, the \"default strategy\" is set.The \"default startegy\" is based on QpsRateLimiterAdapter, the qps is set as 10000.\n  #\n  # Sample entries:\n  #\n  http = [\n    #  {\n    #    component = \"GetNowBlockServlet\",\n    #    strategy = \"GlobalPreemptibleAdapter\",\n    #    paramString = \"permit=1\"\n    #  },\n\n    #  {\n    #    component = \"GetAccountServlet\",\n    #    strategy = \"IPQPSRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n\n    #  {\n    #    component = \"ListWitnessesServlet\",\n    #    strategy = \"QpsRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  }\n  ],\n\n  rpc = [\n    #  {\n    #    component = \"protocol.Wallet/GetBlockByLatestNum2\",\n    #    strategy = \"GlobalPreemptibleAdapter\",\n    #    paramString = \"permit=1\"\n    #  },\n\n    #  {\n    #    component = \"protocol.Wallet/GetAccount\",\n    #    strategy = \"IPQPSRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n\n    #  {\n    #    component = \"protocol.Wallet/ListWitnesses\",\n    #    strategy = \"QpsRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n  ]\n\n  # global qps, default 50000\n  # global.qps = 50000\n  # IP-based global qps, default 10000\n  # global.ip.qps = 10000\n}\n\n\n\nseed.node = {\n  # List of the seed nodes. This is used to enable the node can connect when join one net at first.\n  # If you deploy one private net, you must add some \"ip:port\" here for other node connecting.\n  # Seed nodes are stable full nodes, and the first SuperNode must be inclued in.\n  # example:\n  # ip.list = [\n  #   \"ip:port\",\n  #   \"ip:port\"\n  # ]\n  ip.list = [\n  ]\n}\n\ngenesis.block = {\n  # Reserve balance\n  assets = [\n    {\n      accountName = \"Zion\"\n      accountType = \"AssetIssue\"\n      address = \"TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY\"\n      balance = \"95000000000000000\"\n    },\n    {\n      accountName = \"Sun\"\n      accountType = \"AssetIssue\"\n      address = \"TWsm8HtU2A5eEzoT8ev8yaoFjHsXLLrckb\"\n      balance = \"5000000000000000\"\n    },\n    {\n      accountName = \"Blackhole\"\n      accountType = \"AssetIssue\"\n      address = \"TSJD5rdu6wZXP7F2m3a3tn8Co3JcMjtBip\"\n      balance = \"-9223372036854775808\"\n    },\n    {\n      accountName = \"TestA\"\n      accountType = \"AssetIssue\"\n      address = \"TVdyt1s88BdiCjKt6K2YuoSmpWScZYK1QF\"\n      balance = \"1000000000000000\"\n    },\n    {\n      accountName = \"TestB\"\n      accountType = \"AssetIssue\"\n      address = \"TCNVmGtkfknHpKSZXepZDXRowHF7kosxcv\"\n      balance = \"1000000000000000\"\n    },\n    {\n      accountName = \"TestC\"\n      accountType = \"AssetIssue\"\n      address = \"TAbzgkG8p3yF5aywKVgq9AaAu6hvF2JrVC\"\n      balance = \"1000000000000000\"\n    },\n    {\n      accountName = \"TestD\"\n      accountType = \"AssetIssue\"\n      address = \"TMmmvwvkBPBv3Gkw9cGKbZ8PLznYkTu3ep\"\n      balance = \"1000000000000000\"\n    },\n    {\n      accountName = \"TestE\"\n      accountType = \"AssetIssue\"\n      address = \"TBJHZu4Sm86aWHtt6VF6KQSzot8vKTuTKx\"\n      balance = \"1000000000000000\"\n    }\n  ]\n\n  witnesses = [\n    {\n      address: TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY,\n      url = \"http://tronstudio.com\",\n      voteCount = 10000\n    }\n  ]\n\n  timestamp = \"0\" #2017-8-26 12:00:00\n\n  parentHash = \"957dc2d350daecc7bb6a38f3938ebde0a0c1cedafe15f0edae4256a2907449f6\"\n}\n\n// Optional.The default is empty.\n// It is used when the witness account has set the witnessPermission.\n// When it is not empty, the localWitnessAccountAddress represents the address of the witness account,\n// and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.\n// When it is empty,the localwitness is configured with the private key of the witness account.\n\n//localWitnessAccountAddress =\n\nlocalwitness = [\n  da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0  # you must enable this value and the witness address TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY are matched.\n]\n\n#localwitnesskeystore = [\n#  \"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.\n#]\n\nblock = {\n  needSyncCheck = false # first node : false, other : true\n  maintenanceTimeInterval = 21600000 // 1 day: 86400000(ms), 6 hours: 21600000(ms)\n  proposalExpireTime = 259200000 // 3 day: 259200000(ms)\n}\n\n# Transaction reference block, default is \"solid\", configure to \"head\" may cause TaPos error\n# trx.reference.block = \"solid\" // head;solid;\n\n# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is  60000.\n# trx.expiration.timeInMilliseconds = 60000\n\nvm = {\n  supportConstant = false\n  maxEnergyLimitForConstant = 100000000\n  minTimeRatio = 0.0\n  maxTimeRatio = 5.0\n  saveInternalTx = false\n\n  # Indicates whether the node stores featured internal transactions, such as freeze, vote and so on\n  # saveFeaturedInternalTx = false\n\n  # Indicates whether the node stores the details of the internal transactions generated by the\n  # CANCELALLUNFREEZEV2 opcode, such as bandwidth/energy/tronpower cancel amount.\n  # saveCancelAllUnfreezeV2Details = false\n\n  # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged\n  # longRunningTime = 10\n\n  # Indicates whether the node support estimate energy API.\n  # estimateEnergy = false\n\n  # Indicates the max retry time for executing transaction in estimating energy.\n  # estimateEnergyMaxRetry = 3\n}\n\ncommittee = {\n  allowCreationOfContracts = 1  //mainnet:0 (reset by committee),test:1\n}\n\nevent.subscribe = {\n  native = {\n    useNativeQueue = true // if true, use native message queue, else use event plugin.\n    bindport = 5555 // bind port\n    sendqueuelength = 1000 //max length of send queue\n  }\n  # version = 0\n  # Specify the starting block number to sync historical events. This is only applicable when version = 1.\n  # After performing a full event sync, set this value to 0 or a negative number.\n  # startSyncBlockNum = 1\n\n  path = \"\" // absolute path of plugin\n  server = \"\" // target server address to receive event triggers\n  // dbname|username|password, if you want to create indexes for collections when the collections\n  // are not exist, you can add version and set it to 2, as dbname|username|password|version\n  // if you use version 2 and one collection not exists, it will create index automaticaly;\n  // if you use version 2 and one collection exists, it will not create index, you must create index manually;\n  dbconfig = \"\"\n  contractParse = true\n  topics = [\n    {\n      triggerName = \"block\" // block trigger, the value can't be modified\n      enable = false\n      topic = \"block\" // plugin topic, the value could be modified\n      solidified = false // if set true, just need solidified block, default is false\n    },\n    {\n      triggerName = \"transaction\"\n      enable = false\n      topic = \"transaction\"\n      solidified = false\n      ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice, default is false\n    },\n    {\n      triggerName = \"contractevent\"\n      enable = false\n      topic = \"contractevent\"\n    },\n    {\n      triggerName = \"contractlog\"\n      enable = false\n      topic = \"contractlog\"\n      redundancy = false // if set true, contractevent will also be regarded as contractlog\n    },\n    {\n      triggerName = \"solidity\" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified\n      enable = true            // the default value is true\n      topic = \"solidity\"\n    },\n    {\n      triggerName = \"solidityevent\"\n      enable = false\n      topic = \"solidityevent\"\n    },\n    {\n      triggerName = \"soliditylog\"\n      enable = false\n      topic = \"soliditylog\"\n      redundancy = false // if set true, solidityevent will also be regarded as soliditylog\n    }\n  ]\n\n  filter = {\n    fromblock = \"\" // the value could be \"\", \"earliest\" or a specified block number as the beginning of the queried range\n    toblock = \"\" // the value could be \"\", \"latest\" or a specified block number as end of the queried range\n    contractAddress = [\n      \"\" // contract address you want to subscribe, if it's set to \"\", you will receive contract logs/events with any contract address.\n    ]\n\n    contractTopic = [\n      \"\" // contract topic you want to subscribe, if it's set to \"\", you will receive contract logs/events with any contract topic.\n    ]\n  }\n}\n\n"
  },
  {
    "path": "test_net_config.conf",
    "content": "net {\n  # Type can be 'mainnet' or 'testnet', refers to address type.\n  # Hex address of 'mainnet' begin with 0x41, and 'testnet' begin with 0xa0.\n  # Note: 'testnet' is not related to TRON network Nile, Shasta or private net\n  type = mainnet\n}\n\nstorage {\n  # Directory for storing persistent data\n   db.engine = \"LEVELDB\",  // deprecated for arm, because arm only support  \"ROCKSDB\".\n   db.sync = false,\n   db.directory = \"database\",\n\n   # Whether to write transaction result in transactionRetStore\n   transHistory.switch = \"on\",\n\n   # setting can improve leveldb performance .... start, deprecated for arm\n   # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs\n   # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail\n   # if you find block sync has lower performance, you can try this settings\n   # default = {\n   #  maxOpenFiles = 100\n   # }\n   # defaultM = {\n   #  maxOpenFiles = 500\n   # }\n   # defaultL = {\n   #  maxOpenFiles = 1000\n   # }\n   # setting can improve leveldb performance .... end, deprecated for arm\n\n   # You can customize the configuration for each database. Otherwise, the database settings will use\n   # their defaults, and data will be stored in the \"output-directory\" or in the directory specified\n   # by the \"-d\" or \"--output-directory\" option. Attention: name is a required field that must be set!\n   # In this configuration, the name and path properties take effect for both LevelDB and RocksDB storage engines,\n   # while the additional properties (such as createIfMissing, paranoidChecks, compressionType, etc.) only take effect when using LevelDB.\n   properties = [\n     #    {\n     #      name = \"account\",\n     #      path = \"storage_directory_test\",\n     #      createIfMissing = true, // deprecated for arm start\n     #      paranoidChecks = true,\n     #      verifyChecksums = true,\n     #      compressionType = 1,        // compressed with snappy\n     #      blockSize = 4096,           // 4  KB =         4 * 1024 B\n     #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B\n     #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B\n     #      maxOpenFiles = 100 // deprecated for arm end\n     #    },\n     #    {\n     #      name = \"account-index\",\n     #      path = \"storage_directory_test\",\n     #      createIfMissing = true,\n     #      paranoidChecks = true,\n     #      verifyChecksums = true,\n     #      compressionType = 1,        // compressed with snappy\n     #      blockSize = 4096,           // 4  KB =         4 * 1024 B\n     #      writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B\n     #      cacheSize = 10485760,       // 10 MB = 10 * 1024 * 1024 B\n     #      maxOpenFiles = 100\n     #    },\n   ]\n\n   needToUpdateAsset = true\n\n   # dbsettings is needed when using rocksdb as the storage implement (db.engine=\"ROCKSDB\").\n   # we'd strongly recommend that do not modify it unless you know every item's meaning clearly.\n   dbSettings = {\n     levelNumber = 7\n     # compactThreads = 32\n     blocksize = 64  // n * KB\n     maxBytesForLevelBase = 256  // n * MB\n     maxBytesForLevelMultiplier = 10\n     level0FileNumCompactionTrigger = 4\n     targetFileSizeBase = 256  // n * MB\n     targetFileSizeMultiplier = 1\n     maxOpenFiles = 5000\n   }\n\n   balance.history.lookup = false\n\n   # checkpoint.version = 2\n   # checkpoint.sync = true\n\n   # the estimated number of block transactions (default 1000, min 100, max 10000).\n   # so the total number of cached transactions is 65536 * txCache.estimatedTransactions\n   # txCache.estimatedTransactions = 1000\n\n   # if true, transaction cache initialization will be faster. Default: false\n   txCache.initOptimization = true\n\n   # The number of blocks flushed to db in each batch during node syncing. Default: 1\n   # snapshot.maxFlushCount = 1\n\n  # data root setting, for check data, currently, only reward-vi is used.\n  merkleRoot = {\n    reward-vi = b474b61f93824cd70106f8f5283fa740d61b83a7d57a3c12401d627f1fae0a77 // nile-net, Sha256Hash, hexString\n  }\n}\n\nnode.discovery = {\n  enable = true\n  persist = true\n}\n\n# custom stop condition\n#node.shutdown = {\n#  BlockTime  = \"54 59 08 * * ?\" # if block header time in persistent db matched.\n#  BlockHeight = 33350800 # if block header height in persistent db matched.\n#  BlockCount = 12 # block sync count after node start.\n#}\n\nnode.backup {\n  # udp listen port, each member should have the same configuration\n  port = 10001\n\n  # my priority, each member should use different priority\n  priority = 8\n\n  # time interval to send keepAlive message, each member should have the same configuration\n  keepAliveInterval = 3000\n\n  # peer's ip list, can't contain mine\n  members = [\n    # \"ip\",\n    # \"ip\"\n  ]\n}\n\n# Specify the algorithm for generating a public key from private key. To avoid forks, please do not modify it\ncrypto {\n  engine = \"eckey\"\n}\n\nnode.metrics = {\n  # prometheus metrics\n  prometheus {\n    enable = false\n    port = 9527\n  }\n\n  # influxdb metrics\n  storageEnable = false # Whether write metrics data into InfluxDb. Default: false.\n  influxdb {\n    ip = \"\"\n    port = 8086\n    database = \"\"\n    metricsReportInterval = 10\n  }\n}\n\nnode {\n  # trust node for solidity node\n  # trustNode = \"ip:port\"\n  trustNode = \"127.0.0.1:50051\"\n\n  # expose extension api to public or not\n  walletExtensionApi = true\n\n  listen.port = 18888\n\n  connection.timeout = 2\n\n  fetchBlock.timeout = 200\n  # syncFetchBatchNum = 2000\n\n  # Number of validate sign thread, default availableProcessors\n  # validateSignThreadNum = 16\n\n  maxConnections = 30\n\n  minConnections = 8\n\n  minActiveConnections = 3\n\n  maxConnectionsWithSameIp = 2\n\n  maxHttpConnectNumber = 50\n\n  minParticipationRate = 15\n\n  zenTokenId = 1000016\n\n  # allowShieldedTransactionApi = true\n\n  # openPrintLog = true\n\n  # If set to true, SR packs transactions into a block in descending order of fee; otherwise, it packs\n  # them based on their receive timestamp. Default: false\n  # openTransactionSort = false\n\n  # The threshold for the number of broadcast transactions received from each peer every second,\n  # transactions exceeding this threshold will be discarded\n  # maxTps = 1000\n\n  isOpenFullTcpDisconnect = false\n  inactiveThreshold = 600 //seconds\n\n  p2p {\n    version = 201910292 # Mainnet:11111; Nile:201910292; Shasta:1\n  }\n\n  active = [\n    # Active establish connection in any case\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n  ]\n\n  passive = [\n    # Passive accept connection in any case\n    # Sample entries:\n    # \"ip:port\",\n    # \"ip:port\"\n  ]\n\n  # read node.active and node.passive periodically, default false\n  # checkInterval unit: second\n  dynamicConfig {\n    # enable = false\n    # checkInterval = 600\n  }\n\n  fastForward = [\n  ]\n\n  http {\n    fullNodeEnable = true\n    fullNodePort = 8090\n    solidityEnable = true\n    solidityPort = 8091\n    PBFTEnable = true\n    PBFTPort = 8092\n  }\n\n\n  rpc {\n    enable = true\n    port = 50051\n    solidityEnable = true\n    solidityPort = 50061\n    PBFTEnable = true\n    PBFTPort = 50071\n\n    # Number of gRPC thread, default availableProcessors / 2\n    # thread = 16\n\n    # The maximum number of concurrent calls permitted for each incoming connection\n    # maxConcurrentCallsPerConnection =\n\n    # The HTTP/2 flow control window, default 1MB\n    # flowControlWindow =\n\n    # Connection being idle for longer than which will be gracefully terminated\n    maxConnectionIdleInMillis = 60000\n\n    # Connection lasting longer than which will be gracefully terminated\n    # maxConnectionAgeInMillis =\n\n    # The maximum message size allowed to be received on the server, default 4MB\n    # maxMessageSize =\n\n    # The maximum size of header list allowed to be received, default 8192\n    # maxHeaderListSize =\n\n    # The number of RST_STREAM frames allowed to be sent per connection per period for grpc, by default there is no limit.\n    # maxRstStream =\n\n    # The number of seconds per period for grpc\n    # secondsPerWindow =\n\n    # Transactions can only be broadcast if the number of effective connections is reached.\n    minEffectiveConnection = 1\n\n    # The switch of the reflection service, effective for all gRPC services, used for grpcurl tool. Default: false\n    reflectionService = false\n  }\n\n  # number of solidity thread in the FullNode.\n  # If accessing solidity rpc and http interface timeout, could increase the number of threads,\n  # The default value is the number of cpu cores of the machine.\n  # solidity.threads = 8\n\n  # Limits the maximum percentage (default 75%) of producing block interval\n  # to provide sufficient time to perform other operations e.g. broadcast block\n  # blockProducedTimeOut = 75\n\n  # Limits the maximum number (default 700) of transaction from network layer\n  # netMaxTrxPerSecond = 700\n\n  # Whether to enable the node detection function. Default: false\n  # nodeDetectEnable = false\n\n  # use your ipv6 address for node discovery and tcp connection. Default: false\n  # enableIpv6 = false\n\n  # if your node's highest block num is below than all your pees', try to acquire new connection. Default: false\n  # effectiveCheckEnable = false\n\n  # Dynamic loading configuration function, disabled by default\n  dynamicConfig = {\n    # enable = false\n    # checkInterval = 600 // Check interval of Configuration file's change, default is 600 seconds\n  }\n\n  # Whether to continue broadcast transactions after at least maxUnsolidifiedBlocks are not solidified. Default: false\n  # unsolidifiedBlockCheck = false\n  # maxUnsolidifiedBlocks = 54\n\n  dns {\n    # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty\n    treeUrls = [\n      #\"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes1.example.org\",\n    ]\n  }\n\n  jsonrpc {\n    # Note: If you turn on jsonrpc and run it for a while and then turn it off, you will not\n    # be able to get the data from eth_getLogs for that period of time.\n\n    # httpFullNodeEnable = true\n    # httpFullNodePort = 8545\n    # httpSolidityEnable = true\n    # httpSolidityPort = 8555\n    # httpPBFTEnable = true\n    # httpPBFTPort = 8565\n\n    # The maximum blocks range to retrieve logs for eth_getLogs, default value is 5000,\n    # should be > 0, otherwise means no limit.\n    maxBlockRange = 5000\n\n    # The maximum number of allowed topics within a topic criteria, default value is 1000,\n    # should be > 0, otherwise means no limit.\n    maxSubTopics = 1000\n    # Allowed maximum number for blockFilter\n    maxBlockFilterNum = 30000\n  }\n\n  # Disabled api list, it will work for http, rpc and pbft, both FullNode and SolidityNode,\n  # but not jsonrpc. The setting is case insensitive, GetNowBlock2 is equal to getnowblock2\n  disabledApi = [\n    #  \"getaccount\",\n    #  \"getnowblock2\"\n  ]\n\n}\n\n## rate limiter config\nrate.limiter = {\n  # Every api could only set a specific rate limit strategy. Three blocking strategy are supported:\n  # GlobalPreemptibleAdapter: The number of preemptible resource or maximum concurrent requests globally.\n  # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer.\n  # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer.\n  # If not set, QpsRateLimiterAdapter with qps=1000 is the default strategy.\n  #\n  # Sample entries:\n  #\n  http = [\n    #  {\n    #    component = \"GetNowBlockServlet\",\n    #    strategy = \"GlobalPreemptibleAdapter\",\n    #    paramString = \"permit=1\"\n    #  },\n\n    #  {\n    #    component = \"GetAccountServlet\",\n    #    strategy = \"IPQPSRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n\n    #  {\n    #    component = \"ListWitnessesServlet\",\n    #    strategy = \"QpsRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  }\n  ],\n\n  rpc = [\n    #  {\n    #    component = \"protocol.Wallet/GetBlockByLatestNum2\",\n    #    strategy = \"GlobalPreemptibleAdapter\",\n    #    paramString = \"permit=1\"\n    #  },\n\n    #  {\n    #    component = \"protocol.Wallet/GetAccount\",\n    #    strategy = \"IPQPSRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n\n    #  {\n    #    component = \"protocol.Wallet/ListWitnesses\",\n    #    strategy = \"QpsRateLimiterAdapter\",\n    #    paramString = \"qps=1\"\n    #  },\n  ]\n\n  p2p = {\n    # syncBlockChain = 3.0\n    # fetchInvData = 3.0\n    # disconnect = 1.0\n  }\n\n  # global qps, default 50000\n  global.qps = 50000\n  # IP-based global qps, default 10000\n  global.ip.qps = 10000\n}\n\n\nseed.node = {\n  # List of the seed nodes\n  # Seed nodes are stable full nodes\n  # example:\n  # ip.list = [\n  #   \"ip:port\",\n  #   \"ip:port\"\n  # ]\n  ip.list = [\n    \"44.236.192.97:18888\",\n    \"44.236.125.107:18888\",\n    \"44.232.119.174:18888\",\n    \"52.39.105.180:18888\",\n    \"54.70.52.47:18888\"\n  ]\n}\n\ngenesis.block = {\n  # Reserve balance\n  assets = [\n    {\n      accountName = \"Zion\"\n      accountType = \"AssetIssue\"\n      address = \"TMWXhuxiT1KczhBxCseCDDsrhmpYGUcoA9\"\n      balance = \"99000000000000000\"\n    },\n    {\n      accountName = \"Sun\"\n      accountType = \"AssetIssue\"\n      address = \"TN21Wx2yoNYiZ7znuQonmZMJnH5Vdfxu78\"\n      balance = \"99000000000000000\"\n    },\n    {\n      accountName = \"Blackhole\"\n      accountType = \"AssetIssue\"\n      address = \"TDPJULRzVtzVjnBmZvfaTcTNQ2tsVi6XxQ\"\n      balance = \"-9223372036854775808\"\n    }\n  ]\n\n  witnesses = [\n    {\n      address: TD23EqH3ixYMYh8CMXKdHyQWjePi3KQvxV,\n      url = \"http://GR1.com\",\n      voteCount = 100000026\n    },\n    {\n      address: TCm4Lz1uP3tQm3jzpwFTG6o5UvSTA2XEHc,\n      url = \"http://GR2.com\",\n      voteCount = 100000025\n    },\n    {\n      address: TTgDUgREiPBeY3iudD5e2eEibE4v4CE8C9,\n      url = \"http://GR3.com\",\n      voteCount = 100000024\n    },\n    {\n      address: TFVDe7kMEmb8EuUxxp42kocQY1fFY727WS,\n      url = \"http://GR4.com\",\n      voteCount = 100000023\n    },\n    {\n      address: TY4NSjctzTchHkhaCskVc5zQtnX9s1uxAX,\n      url = \"http://GR5.com\",\n      voteCount = 100000022\n    },\n    {\n      address: TWSMPrm6aizvsJmPnjMB7x3UExJfRhyQhd,\n      url = \"http://GR6.com\",\n      voteCount = 100000021\n    },\n    {\n      address: TKwLkSaCvqqpAB44qaHGTohCTCFoYw7ecy,\n      url = \"http://GR7.com\",\n      voteCount = 100000020\n    },\n    {\n      address: TDsYmm1St9r4UZebDGWBcTMtfYTw9YX5h4,\n      url = \"http://GR8.com\",\n      voteCount = 100000019\n    },\n    {\n      address: TFEQbWAPxhbUr1P14y9UJBUZo3LgtdqTS7,\n      url = \"http://GR9.com\",\n      voteCount = 100000018\n    },\n    {\n      address: TCynAi8tb7UWP7uhLv6fe971KLm2KT8tcs,\n      url = \"http://GR10.com\",\n      voteCount = 100000017\n    },\n    {\n      address: TC2YsLp4rzrt3AbeN3EryoSywrBjEUVCq3,\n      url = \"http://GR11.com\",\n      voteCount = 100000016\n    },\n    {\n      address: THxMKH1uaL5FpURujkQR7u2sNZ2n5PSsiH,\n      url = \"http://GR12.com\",\n      voteCount = 100000015\n    },\n    {\n      address: TWbzgoHimDcXWy19ts1An8bxA4JKjcYHeG,\n      url = \"http://GR13.com\",\n      voteCount = 100000014\n    },\n    {\n      address: TW2LmXnVCEaxuVtQN8gZR1ixT5PNm4QLft,\n      url = \"http://GR14.com\",\n      voteCount = 100000013\n    },\n    {\n      address: TVuqk4rYYVHVA6j6sSEnaLexhhoQhN8nyZ,\n      url = \"http://GR15.com\",\n      voteCount = 100000012\n    },\n    {\n      address: TVMZu5ptZPhhkZ3Kaagkq35FmyuKNvUKJV,\n      url = \"http://GR16.com\",\n      voteCount = 100000011\n    },\n    {\n      address: TFDHT8PqUrL2Bd8DeysSiHHBAEMidZgkhx,\n      url = \"http://GR17.com\",\n      voteCount = 100000010\n    },\n    {\n      address: TVqz5Bj3M1uEenaSsw2NnXvTWChPj6K3hb,\n      url = \"http://GR18.com\",\n      voteCount = 100000009\n    },\n    {\n      address: TSt8YNpARJkhdMdEV4C7ajH1tFHpZWzF1T,\n      url = \"http://GR19.com\",\n      voteCount = 100000008\n    },\n    {\n      address: TTxWDjEb3Be1Ax8BCvK48cnaorZofLq2C9,\n      url = \"http://GR20.com\",\n      voteCount = 100000007\n    },\n    {\n      address: TU5T838YtyZtEQKpnXEdRz3d8hJn6WHhjw,\n      url = \"http://GR21.com\",\n      voteCount = 100000006\n    },\n    {\n      address: TRuSs1MpL3o2hzhU8r6HLC7WtDyVE9hsF6,\n      url = \"http://GR22.com\",\n      voteCount = 100000005\n    },\n    {\n      address: TYMCoCZyAjWkWdUfEHg1oZQYbLKev282ou,\n      url = \"http://GR23.com\",\n      voteCount = 100000004\n    },\n    {\n      address: TQvAyGATpLZymHbpeaRozJCKqSeRWVNhCJ,\n      url = \"http://GR24.com\",\n      voteCount = 100000003\n    },\n    {\n      address: TYDd9nskbhJmLLNoe4yV2Z1SYtGjNa8wyg,\n      url = \"http://GR25.com\",\n      voteCount = 100000002\n    },\n    {\n      address: TS5991Geh2qeHtw46rskpJyn6hFNbuZGGc,\n      url = \"http://GR26.com\",\n      voteCount = 100000001\n    },\n    {\n      address: TKnn5MBnmXXeKdu9dxKVfKk4n1YdCeSRGr,\n      url = \"http://GR27.com\",\n      voteCount = 100000000\n    }\n  ]\n\n  timestamp = \"0\" # Genesis block timestamp, milli seconds\n\n  parentHash = \"0xe58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f\"\n}\n\n# Optional. The default is empty. It is used when the witness account has set the witnessPermission.\n# When it is not empty, the localWitnessAccountAddress represents the address of the witness account,\n# and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.\n# When it is empty,the localwitness is configured with the private key of the witness account.\n# localWitnessAccountAddress =\n\nlocalwitness = [\n]\n\n# localwitnesskeystore = [\n#  \"localwitnesskeystore.json\"\n# ]\n\nblock = {\n  needSyncCheck = false\n  maintenanceTimeInterval = 600000\n  proposalExpireTime = 600000 //\n  # checkFrozenTime = 1 // for test only\n}\n\n# Transaction reference block, default is \"head\", configure to \"solid\" can avoid TaPos error\n# trx.reference.block = \"head\" // head;solid;\n\n# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is  60000.\n# trx.expiration.timeInMilliseconds = 60000\n\nvm = {\n  supportConstant = true\n  minTimeRatio = 0.0\n  maxTimeRatio = 5.0\n  saveInternalTx = true\n  saveFeaturedInternalTx = true\n  saveCancelAllUnfreezeV2Details = true\n\n  # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged\n  # longRunningTime = 10\n\n  # Indicates whether the node support estimate energy API. Default: false.\n  # estimateEnergy = false\n\n  # Indicates the max retry time for executing transaction in estimating energy. Default 3.\n  # estimateEnergyMaxRetry = 3\n}\n\ncommittee = {\n  allowCreationOfContracts = 0  //mainnet:0 (reset by committee),test:1\n  allowAdaptiveEnergy = 0  //mainnet:0 (reset by committee),test:1\n}\n\nevent.subscribe = {\n  native = {\n    useNativeQueue = true // if true, use native message queue, else use event plugin.\n    bindport = 5555 // bind port\n    sendqueuelength = 1000 //max length of send queue\n  }\n  version = 0\n  # Specify the starting block number to sync historical events. This is only applicable when version = 1.\n  # After performing a full event sync, set this value to 0 or a negative number.\n  # startSyncBlockNum = 1\n\n  path = \"\" // absolute path of plugin\n  server = \"\" // target server address to receive event triggers\n  # dbname|username|password, if you want to create indexes for collections when the collections\n  # are not exist, you can add version and set it to 2, as dbname|username|password|version\n  # if you use version 2 and one collection not exists, it will create index automaticaly;\n  # if you use version 2 and one collection exists, it will not create index, you must create index manually;\n  dbconfig = \"\"\n  contractParse = true\n  topics = [\n    {\n      triggerName = \"block\" // block trigger, the value can't be modified\n      enable = false\n      topic = \"block\" // plugin topic, the value could be modified\n      solidified = false // if set true, just need solidified block. Default: false\n    },\n    {\n      triggerName = \"transaction\"\n      enable = false\n      topic = \"transaction\"\n      solidified = false\n      ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice. Default: false\n    },\n    {\n      triggerName = \"contractevent\" // contractevent represents contractlog data decoded by the ABI.\n      enable = false\n      topic = \"contractevent\"\n    },\n    {\n      triggerName = \"contractlog\"\n      enable = false\n      topic = \"contractlog\"\n      redundancy = false // if set true, contractevent will also be regarded as contractlog\n    },\n    {\n      triggerName = \"solidity\" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified\n      enable = true            // Default: true\n      topic = \"solidity\"\n    },\n    {\n      triggerName = \"solidityevent\"\n      enable = false\n      topic = \"solidityevent\"\n    },\n    {\n      triggerName = \"soliditylog\"\n      enable = false\n      topic = \"soliditylog\"\n      redundancy = false // if set true, solidityevent will also be regarded as soliditylog\n    }\n  ]\n\n  filter = {\n    fromblock = \"\" // the value could be \"\", \"earliest\" or a specified block number as the beginning of the queried range\n    toblock = \"\" // the value could be \"\", \"latest\" or a specified block number as end of the queried range\n    contractAddress = [\n      \"\" // contract address you want to subscribe, if it's set to \"\", you will receive contract logs/events with any contract address.\n    ]\n\n    contractTopic = [\n      \"\" // contract topic you want to subscribe, if it's set to \"\", you will receive contract logs/events with any contract topic.\n    ]\n  }\n}\n"
  }
]