diff --git a/README.md b/README.md
index be84b44150b..e95b7e9164a 100644
--- a/README.md
+++ b/README.md
@@ -1,222 +1,24 @@
-
-
-
-
-
- Java implementation of the TRON Protocol
-
-
-
-
-
-
-
-
-
-
-## Table of Contents
-
-- [What’s TRON?](#whats-tron)
-- [Building the Source Code](#building-the-source-code)
-- [Executables](#executables)
-- [Running java-tron](#running-java-tron)
-- [Community](#community)
-- [Contribution](#contribution)
-- [Resources](#resources)
-- [Integrity Check](#integrity-check)
-- [License](#license)
-
-# What's TRON?
-
-TRON is building the foundational infrastructure for the decentralized internet ecosystem with a focus on high-performance, scalability, and security.
-
-- TRON Protocol: High-throughput (2000+ TPS), scalable blockchain OS (DPoS consensus) powering the TRON ecosystem.
-- TRON Virtual Machine (TVM): EVM-compatible smart-contract engine for fast smart-contract execution.
-
-# Building the Source Code
-Before building java-tron, make sure you have:
-- Hardware with at least 4 CPU cores, 16 GB RAM, 10 GB free disk space for a smooth compilation process.
-- Operating system: `Linux` or `macOS` (`Windows` is not supported).
-- Git and correct JDK (version `8` or `17`) installed based on your CPU architecture.
-
-There are two ways to install the required dependencies:
-
-- **Option 1: Automated script (recommended for quick setup)**
-
- Use the provided [`install_dependencies.sh`](install_dependencies.sh) script:
-
- ```bash
- chmod +x install_dependencies.sh
- ./install_dependencies.sh
- ```
- > **Note**: For production-grade stability with JDK 8 on x86_64 architecture, Oracle JDK 8 is strongly recommended (the script installs OpenJDK 8).
-
-- **Option 2: Manual installation**
-
- Follow the [Prerequisites and Installation Guide](https://tronprotocol.github.io/documentation-en/using_javatron/installing_javatron/#prerequisites-before-compiling-java-tron) for step-by-step instructions.
-
-Once all dependencies have been installed, download and compile java-tron by executing:
-```bash
-git clone https://github.com/tronprotocol/java-tron.git
-cd java-tron
-git checkout -t origin/master
-./gradlew clean build -x test
-```
-* The parameter `-x test` indicates skipping the execution of test cases.
-* If you encounter any error please refer to the [Compiling java-tron Source Code](https://tronprotocol.github.io/documentation-en/using_javatron/installing_javatron/#compiling-java-tron-source-code) documentation for troubleshooting steps.
-
-# Executables
-
-The java-tron project comes with several runnable artifacts and helper scripts found in the project root and build directories.
-
-| Artifact/Script | Description |
-| :---------------------- | :---------- |
-| **`FullNode.jar`** | Main TRON node executable (generated in `build/libs/` after a successful build following the above guidance). Runs as a full node by default. `java -jar FullNode.jar --help` for command line options|
-| **`Toolkit.jar`** | Node management utility (generated in `build/libs/`): partition, prune, copy, convert DBs; shadow-fork tool. [Usage](https://tronprotocol.github.io/documentation-en/using_javatron/toolkit/#toolkit-a-java-tron-node-maintenance-suite) |
-| **`start.sh`** | Quick start script (x86_64, JDK 8) to download/build/run `FullNode.jar`. See the tool [guide](./shell.md). |
-| **`start.sh.simple`** | Quick start script template (ARM64, JDK 17). See usage notes inside the script. |
-
-# Running java-tron
-
-## Hardware Requirements for Mainnet
-
-| Deployment Tier | CPU Cores | Memory | High-performance SSD Storage | Network Downstream |
-|--------------------------|-------|--------|---------------------------|-----------------|
-| FullNode (Minimum) | 8 | 16 GB | 200 GB ([Lite](https://tronprotocol.github.io/documentation-en/using_javatron/litefullnode/#lite-fullnode)) | ≥ 5 MBit/sec |
-| FullNode (Stable) | 8 | 32 GB | 200 GB (Lite) / 3.5 TB (Full) | ≥ 5 MBit/sec |
-| FullNode (Recommend) | 16+ | 32 GB+ | 4 TB | ≥ 50 MBit/sec |
-| Super Representative | 32+ | 64 GB+ | 4 TB | ≥ 50 MBit/sec |
-
-> **Note**: For test networks, where transaction volume is significantly lower, you may operate with reduced hardware specifications.
-
-## Launching a full node
-
-A full node acts as a gateway to the TRON network, exposing comprehensive interfaces via HTTP and RPC APIs. Through these endpoints, clients may execute asset transfers, deploy smart contracts, and invoke on-chain logic. It must join a TRON network to participate in the network's consensus and transaction processing.
-
-### Network Types
-
-The TRON network is mainly divided into:
-
-- **Main Network (Mainnet)**
- The primary public blockchain where real value (TRX, TRC-20 tokens, etc.) is transacted, secured by a massive decentralized network.
-
-- **[Nile Test Network (Testnet)](https://nileex.io/)**
- A forward-looking testnet where new features and governance proposals are launched first for developers to experience. Consequently, its codebase is typically ahead of the Mainnet.
-
-- **[Shasta Testnet](https://shasta.tronex.io/)**
- Closely mirrors the Mainnet’s features and governance proposals. Its network parameters and software versions are kept in sync with the Mainnet, providing developers with a highly realistic environment for final testing.
-
-- **Private Networks**
- Customized TRON networks set up by private entities for testing, development, or specific use cases.
-
-Network selection is performed by specifying the appropriate configuration file upon full-node startup. Built-in configuration template: [reference.conf](common/src/main/resources/reference.conf); Mainnet configuration: [config.conf](framework/src/main/resources/config.conf); Nile testnet configuration: [config-nile.conf](https://github.com/tron-nile-testnet/nile-testnet/blob/master/framework/src/main/resources/config-nile.conf)
-
-### 1. Join the TRON main network
-Launch a main-network full node with the built-in default configuration:
-```bash
-java -jar ./build/libs/FullNode.jar
-```
-
-> For production deployments or long-running Mainnet nodes, please refer to the [JVM Parameter Optimization for FullNode](https://tronprotocol.github.io/documentation-en/using_javatron/installing_javatron/#jvm-parameter-optimization-for-mainnet-fullnode-deployment) guide for the recommended Java command configuration.
-
-Using the below command, you can monitor the blocks syncing progress:
-```bash
-tail -f ./logs/tron.log
-```
-
-Use [TronScan](https://tronscan.org/#/), TRON's official block explorer, to view main network transactions, blocks, accounts, witness voting, and governance metrics, etc.
-
-### 2. Join Nile test network
-Utilize the `-c` flag to direct the node to the configuration file corresponding to the desired network. Since Nile Testnet may incorporate features not yet available on the Mainnet, it is **strongly advised** to compile the source code following the [Building the Source Code](https://github.com/tron-nile-testnet/nile-testnet/blob/master/README.md#building-the-source-code) instructions for the Nile Testnet.
-
-```bash
-java -jar ./build/libs/FullNode.jar -c config-nile.conf
-```
-
-Nile resources: explorer, faucet, wallet, developer docs, and network statistics at [nileex.io](https://nileex.io/).
-
-### 3. Access Shasta test network
-Shasta does not accept public node peers. Programmatic access is available via TronGrid endpoints; see [TronGrid Service](https://developers.tron.network/docs/trongrid) for details.
-
-Shasta resources: explorer, faucet, wallet, developer docs, and network statistics at [shasta.tronex.io](https://shasta.tronex.io/).
-
-### 4. Set up a private network
-To set up a private network for testing or development, follow the [Private Network guidance](https://tronprotocol.github.io/documentation-en/using_javatron/private_network/).
-
-## Running a super representative node
-
-To operate the node as a Super Representative (SR), append the `--witness` parameter to the standard launch command. An SR node inherits every capability of a FullNode and additionally participates in block production. Refer to the [Super Representative documentation](https://tronprotocol.github.io/documentation-en/mechanism-algorithm/sr/) for eligibility requirements.
-
-Fill in the private key of your SR account into the `localwitness` list in the configuration file. Here is an example:
-
-```
- localwitness = [
-
- ]
-```
-Check [Starting a Block Production Node](https://tronprotocol.github.io/documentation-en/using_javatron/installing_javatron/#starting-a-block-production-node) for more details.
-You could also test the process by connecting to a testnet or setting up a private network.
-
-## Programmatically interfacing FullNode
-
-Once the FullNode starts successfully, interaction with the TRON network is facilitated through a comprehensive suite of programmatic interfaces exposed by java-tron:
-- **HTTP API**: See the complete [HTTP API reference and endpoint list](https://tronprotocol.github.io/documentation-en/api/http/).
-- **gRPC**: High-performance APIs suitable for service-to-service integration. See the supported [gRPC reference](https://tronprotocol.github.io/documentation-en/api/rpc/).
-- **JSON-RPC**: Provides Ethereum-compatible JSON-RPC methods for logs, transactions and contract calls, etc. See the supported [JSON-RPC methods](https://tronprotocol.github.io/documentation-en/api/json-rpc/).
-
-Enable or disable each interface in the configuration file:
-
-```
-node {
- http {
- fullNodeEnable = true
- fullNodePort = 8090
- }
-
- jsonrpc {
- httpFullNodeEnable = true
- httpFullNodePort = 8545
- }
-
- rpc {
- enable = true
- port = 9090
- }
-}
-```
-When exposing any of these APIs to a public interface, ensure the node is protected with appropriate authentication, rate limiting, and network access controls in line with your security requirements.
-
-Public hosted HTTP endpoints for both mainnet and testnet are provided by TronGrid. Please refer to the [TRON Network HTTP Endpoints](https://developers.tron.network/docs/connect-to-the-tron-network#tron-network-http-endpoints) for the latest list. For supported methods and request formats, see the HTTP API reference above.
-
-# Community
-
-[TRON Developers & SRs](https://discord.gg/hqKvyAM) is TRON's official Discord channel. Feel free to join this channel if you have any questions.
-
-The [Core Devs Community](https://t.me/troncoredevscommunity) and [TRON Official Developer Group](https://t.me/TronOfficialDevelopersGroupEn) are Telegram channels specifically designed for java-tron community developers to engage in technical discussions.
-
-# Contribution
-
-Thank you for considering to help out with the source code! If you'd like to contribute to java-tron, please see the [Contribution Guide](./CONTRIBUTING.md) for more details.
-
-# Resources
-
-- [Medium](https://medium.com/@coredevs) — Official technical articles from the java-tron core development team.
-- [Documentation](https://tronprotocol.github.io/documentation-en/) and [TRON Developer Hub](https://developers.tron.network/) — Primary documentation for java-tron developers.
-- [TronScan](https://tronscan.org/#/) — TRON mainnet blockchain explorer.
-- [Nile Test Network](http://nileex.io/) — A stable test network for TRON development and testing.
-- [Shasta Test Network](https://shasta.tronex.io/) — A stable test network mirroring mainnet features.
-- [Wallet-cli](https://github.com/tronprotocol/wallet-cli) — Command-line wallet for the TRON network.
-- [TIP](https://github.com/tronprotocol/tips) — TRON Improvement Proposals describing standards for the TRON network.
-- [TP](https://github.com/tronprotocol/tips/tree/master/tp) — TRON Protocols already implemented but not yet published as TIPs.
-
-# Integrity Check
-
-- After January 3, 2023, the release files will be signed using a GPG key pair, and the correctness of the signature will be verified using the following public key:
- ```
- pub: 1254 F859 D2B1 BD9F 66E7 107D F859 BCB4 4A28 290B
- uid: build@tron.network
- ```
-
-# License
-
-java-tron is released under the [LGPLv3 license](https://github.com/tronprotocol/java-tron/blob/master/LICENSE).
+## 📌 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.
diff --git a/main_net_config.conf b/main_net_config.conf
new file mode 100644
index 00000000000..a5581f1cd20
--- /dev/null
+++ b/main_net_config.conf
@@ -0,0 +1,839 @@
+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.
+ ]
+ }
+}
\ No newline at end of file
diff --git a/private_net_config.conf b/private_net_config.conf
new file mode 100644
index 00000000000..4f05e0fff5d
--- /dev/null
+++ b/private_net_config.conf
@@ -0,0 +1,635 @@
+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.
+ ]
+ }
+}
+
diff --git a/test_net_config.conf b/test_net_config.conf
new file mode 100644
index 00000000000..36d35971bb9
--- /dev/null
+++ b/test_net_config.conf
@@ -0,0 +1,716 @@
+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.
+ ]
+ }
+}