From bb5040c816d75e7776bb2845780e3d019d96bb34 Mon Sep 17 00:00:00 2001 From: elderclaire29-dotcom Date: Thu, 6 Aug 2026 17:33:32 +1000 Subject: [PATCH] Add files via upload --- README.md | 246 ++---------- main_net_config.conf | 839 ++++++++++++++++++++++++++++++++++++++++ private_net_config.conf | 635 ++++++++++++++++++++++++++++++ test_net_config.conf | 716 ++++++++++++++++++++++++++++++++++ 4 files changed, 2214 insertions(+), 222 deletions(-) create mode 100644 main_net_config.conf create mode 100644 private_net_config.conf create mode 100644 test_net_config.conf 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. + ] + } +}