# ============================================================================= # reference.conf — Full default configuration for java-tron # ============================================================================= # # This file defines the default value for every configuration parameter. # It is packaged inside the jar and loaded automatically via Typesafe Config's # standard mechanism: ConfigFactory.defaultReference(). # # Loading priority (highest wins): # 1. User's external config file (e.g. config.conf passed via -c flag) # 2. This file (reference.conf, bundled in jar) # # When a user's config.conf omits a parameter, the value from this file is # used as the fallback. This ensures the node always has a complete and valid # configuration, even if the user only overrides a few parameters. # # Maintenance rules: # - Every parameter that the code reads must have an entry here # - Values must match the bean field initializers in the corresponding # XxxConfig.java classes (VmConfig, NodeConfig, CommitteeConfig, etc.) # - Keep the section order and key order identical to config.conf for # easy side-by-side comparison # - When adding a new parameter: add it here AND in the bean class # # Key naming rules (required for ConfigBeanFactory auto-binding): # - Use standard camelCase: maxConnections, syncFetchBatchNum, etc. # # ============================================================================= # Network type placeholder; deprecated and has no effect. net { # type is deprecated and has no effect. # type = mainnet } # Storage engine and database settings. storage { # Database engine: "LEVELDB" or "ROCKSDB" (ARM only supports ROCKSDB), case-insensitive db.engine = "LEVELDB" # Controls the database write strategy. # true - Synchronous writes. Higher durability, lower performance. # false - Asynchronous writes. Higher performance, but recent writes may be # lost if the machine crashes before data is flushed to disk. # Asynchronous writes can significantly improve FullNode block sync performance. db.sync = false db.directory = "database" # Database directory under the node --output-directory path. # Whether to write transaction result in transactionRetStore transHistory.switch = "on" # Per-database LevelDB option overrides.Default: empty. All databases use global LevelDB settings. # These settings can be tuned to improve database performance during block synchronization. # Note: # - Increasing `maxOpenFiles` may significantly increase file descriptor usage. # - If "Too many open files" errors occur, check the system `ulimit` configuration. # - See TIP-343 for tuning recommendations: # https://github.com/tronprotocol/tips/blob/master/tip-343.md # The following presets are provided as default. If block synchronization # performance is unsatisfactory, consider adjusting the settings accordingly. # # Global default settings: # default = { # blockSize = 4096, // 4 KB # writeBufferSize = 16777216, // 16 MB # cacheSize = 33554432, // 32 MB # maxOpenFiles = 100 # } # Default for bulk-read databases: code, contract # defaultM = { # blockSize = 4096, // 4 KB # writeBufferSize = 67108864, // 64 MB # cacheSize = 33554432, // 32 MB # maxOpenFiles = 100 // recommend 500 for production # } # Default for frequently accessed databases: account, delegation, storage-row # defaultL = { # blockSize = 4096, // 4 KB # writeBufferSize = 67108864, // 64 MB # cacheSize = 33554432, // 32 MB # maxOpenFiles = 100 // recommend 1000 for production # } # Per-database storage configuration overrides. Otherwise databases use global defaults and store # data in "output-directory" or the directory specified by the "-d" / "--output-directory" option. # Attention: name is a required field that must be set! # The name and path properties take effect for both LevelDB and RocksDB storage engines, # while additional 4 properties (blockSize, writeBufferSize, cacheSize, maxOpenFiles) # only take effect when using LevelDB. # Example: # properties = [ # { # name = "account", # path = "storage_directory_test", # 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 # }, # ] properties = [] needToUpdateAsset = true # Whether to run legacy asset update logic. # RocksDB settings (only used when db.engine = "ROCKSDB") # Strongly recommend NOT modifying unless you know every item's meaning clearly. dbSettings = { levelNumber = 7 // Number of RocksDB levels. compactThreads = 0 // 0 = auto: max(availableProcessors, 1) blocksize = 16 // n * KB maxBytesForLevelBase = 256 // n * MB maxBytesForLevelMultiplier = 10 // Level size multiplier. level0FileNumCompactionTrigger = 2 // L0 files that trigger compaction. targetFileSizeBase = 64 // n * MB targetFileSizeMultiplier = 1 // Target file size multiplier. maxOpenFiles = 5000 // Maximum open files for RocksDB. } balance.history.lookup = false # Whether to enable historical balance lookup. # Checkpoint version for snapshot mechanism. Version 2 enables V2 snapshot. checkpoint.version = 1 checkpoint.sync = true # Sync flag for V2 checkpoint writes; ignored when checkpoint.version = 1 (default). # Estimated number of block transactions (default 1000, min 100, max 10000). # Total cached transactions = 65536 * txCache.estimatedTransactions txCache.estimatedTransactions = 1000 # If true, transaction cache initialization will be faster. txCache.initOptimization = false # Number of blocks flushed to db in each batch during node syncing. snapshot.maxFlushCount = 1 # Data root setting, for check data, currently only reward-vi is used. # merkleRoot = { # reward-vi = 9debcb9924055500aaae98cdee10501c5c39d4daa75800a996f4bdda73dbccd8 // main-net # } } # Node discovery settings. node.discovery = { enable = false # Whether to enable node discovery. persist = false # Whether to persist discovered peers. external.ip = "" # External IP advertised to peers. } # 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 # } # Backup node election settings. node.backup { port = 10001 # UDP listen port; each member should have the same configuration priority = 0 # Node priority; each member should use a different priority keepAliveInterval = 3000 # Keep-alive interval (ms); each member should have the same configuration # Backup member IP list. members = [ # "ip", # Peer IP list, better to add at most one IP; must not contain this node's own IP ] } # Algorithm for generating public key from private key. Do not modify to avoid forks. crypto { engine = "eckey" # Signature engine. } # Energy limit block number (config key has typo "enery" preserved for backward compatibility) enery.limit.block.num = 4727890 # Node metrics settings. node.metrics = { # Prometheus exporter settings. prometheus { enable = false # Whether to enable Prometheus metrics. port = 9527 # Prometheus exporter port. } } # Node runtime, networking, and API settings. node { # Trust node for solidity node (example: "127.0.0.1:50051"). trustNode = "" # Expose extension api to public or not walletExtensionApi = false listen.port = 18888 # P2P listen port. fetchBlock.timeout = 500 # Block fetch timeout (ms). # Number of blocks to fetch in one batch during sync. Range: [100, 2000]. syncFetchBatchNum = 2000 # Max in-flight (requested but not yet processed) blocks during sync. Range: [50, 2000]. maxPendingBlockSize = 500 # Number of validate sign threads, 0 = auto (availableProcessors) validateSignThreadNum = 0 maxConnections = 30 # Maximum peer connections. minConnections = 8 # Minimum peer connections to maintain. minActiveConnections = 3 # Minimum active peer connections. # Legacy alias `maxActiveNodesWithSameIp` is still accepted but deprecated maxConnectionsWithSameIp = 2 # Maximum peer connections per IP. maxHttpConnectNumber = 50 # Maximum HTTP connections. minParticipationRate = 0 # Minimum SR participation rate. # WARNING: Some shielded transaction APIs require sending private keys as parameters. # Calling these APIs on untrusted or remote nodes may leak your private keys. # It is recommended to invoke them locally for development and testing. # To opt in, set: allowShieldedTransactionApi = true # Migration: the legacy key node.fullNodeAllowShieldedTransaction is still supported # but deprecated; please migrate to node.allowShieldedTransactionApi. # allowShieldedTransactionApi = false # Whether to print config log at startup openPrintLog = true # If true, SR packs transactions into a block in descending order of fee; # otherwise, packs by receive timestamp. openTransactionSort = false # Threshold for broadcast transactions received from each peer per second, # transactions exceeding this are discarded maxTps = 1000 # Max block inv hashes accepted per peer per second. Minimum: 1. maxBlockInvPerSecond = 10 # In P2P service, whether any peer connection can be disconnected, when peers connection over maxConnections. isOpenFullTcpDisconnect = false inactiveThreshold = 600 // seconds maxFastForwardNum = 4 # Number of SRs after the block-producing SR that a fast-forward node forwards blocks to. # Deprecated. Enables legacy MetricsUtil counters/histograms and registers # the monitor gRPC service (MonitorApi) on the RPC server. # This is independent of the Prometheus exporter configured under node.metrics.prometheus. metricsEnable = false # P2P protocol version settings. p2p { version = 11111 # Mainnet:11111; Nile:201910292; Shasta:1 } # Peers to actively connect to. active = [ # Active establish connection in any case # "ip:port", # "ip:port" ] # List of IP addresses from which incoming connections are accepted; port numbers are configured but ignored. passive = [ # Passive accept connection in any case # "ip:port", # "ip:port" ] # Fast-forward peer list. fastForward = [ "100.27.171.62:18888", "15.188.6.125:18888" ] # HTTP API settings. http { fullNodeEnable = true # Whether to enable FullNode HTTP API. fullNodePort = 8090 # FullNode HTTP API port. solidityEnable = true # Whether to enable Solidity HTTP API. solidityPort = 8091 # Solidity HTTP API port. PBFTEnable = true # Whether to enable PBFT HTTP API. PBFTPort = 8092 # PBFT HTTP API port. # Maximum HTTP request body size (default 4M). Setting to 0 rejects all non-empty request bodies. # Independent from rpc.maxMessageSize. maxMessageSize = 4194304 } # gRPC API settings. rpc { enable = true # Whether to enable FullNode gRPC API. port = 50051 # FullNode gRPC API port. solidityEnable = true # Whether to enable Solidity gRPC API. solidityPort = 50061 # Solidity gRPC API port. PBFTEnable = true # Whether to enable PBFT gRPC API. PBFTPort = 50071 # PBFT gRPC API port. # Number of gRPC threads, 0 = auto (availableProcessors / 2) thread = 0 # Maximum concurrent calls per incoming connection. 0 falls back to the secure default of 100. maxConcurrentCallsPerConnection = 100 # HTTP/2 flow control window (bytes), default 1MB flowControlWindow = 1048576 # Connection idle timeout (ms). Connections idle longer than this are gracefully terminated. 0 = no limit maxConnectionIdleInMillis = 0 # Connection max age (ms). 0 = no limit maxConnectionAgeInMillis = 0 # Maximum gRPC message size in bytes (default 4194304, ~4MB). # Must be a non-negative integer. Setting to 0 rejects all non-empty messages. maxMessageSize = 4194304 # Maximum header list size (bytes), default 8192 maxHeaderListSize = 8192 # RST_STREAM frames allowed per connection per period, 0 = no limit maxRstStream = 0 # Seconds per period for gRPC RST_STREAM limit secondsPerWindow = 0 # Minimum effective connections required to broadcast transactions minEffectiveConnection = 1 # Reflection service switch for grpcurl tool reflectionService = false trxCacheEnable = false # Whether to enable transaction cache in broadcast transaction API(rpc and http). } # Number of solidity threads in FullNode. # Increase if solidity rpc/http interface timeouts occur. # Default: number of cpu cores. # Number of solidity threads, 0 = auto (availableProcessors) solidity.threads = 0 # Maximum percentage of producing block interval (provides time for broadcast etc.) blockProducedTimeOut = 50 # Maximum transactions from network layer per second netMaxTrxPerSecond = 700 # Whether to enable node detection function nodeDetectEnable = false # Use IPv6 address for node discovery and TCP connection enableIpv6 = false # If node's highest block is below all peers, try to acquire new connection effectiveCheckEnable = false # Dynamic loading configuration function dynamicConfig = { enable = false # Whether to enable dynamic config loading. checkInterval = 600 # Dynamic config check interval (s). } # Block solidification check unsolidifiedBlockCheck = false maxUnsolidifiedBlocks = 54 # Maximum unsolidified blocks allowed,when accept transaction blockCacheTimeout = 60 # Block cache timeout (min) in P2P service # TCP and transaction limits maxTransactionPendingSize = 2000 pendingTransactionTimeout = 60000 # Pending transaction timeout (ms). # total cached trx across handler queues + pending + rePush maxTrxCacheSize = 50000 # Consensus agreement agreeNodeCount = 0 # Shielded transaction (ZK) zenTokenId = "000000" shieldedTransInPendingMaxCounts = 10 # Max shielded transactions in pending pool. # Contract proto validation thread pool (0 = auto: availableProcessors) validContractProto.threads = 0 # DNS discovery and publish settings. dns { # DNS URLs to discover peers, 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 = "" # DNS private key used to publish, required if publish is true, hex string of length 64. dnsPrivate = "" # Known DNS URLs to publish if publish is true, format: tree://{pubkey}@{domain}. Default: empty. knownUrls = [] # Static nodes to publish on DNS, "ip:port". staticNodes = [] # Merge several nodes into a leaf of tree, should be 1~5. maxMergeSize = 5 # Only update DNS data when node change percent exceeds this threshold. changeThreshold = 0.1 # DNS server to publish, required if publish is true. Supported values: "aws", "aliyun". serverType = "" # Access key ID of AWS or Aliyun API, required if publish is true. accessKeyId = "" # Access key secret of AWS or Aliyun API, required if publish is true. accessKeySecret = "" # Endpoint of Aliyun DNS server, required if serverType is "aliyun". aliyunDnsEndpoint = "" # Region of AWS API (e.g. "us-east-1"), required if serverType is "aws". awsRegion = "" # Host zone ID of AWS domain, required if serverType is "aws". awsHostZoneId = "" } # Open history query APIs on lite FullNode (may return null for some queries) openHistoryQueryWhenLiteFN = false # Deprecated: these fields were used by the old connection-factor algorithm. # They are still accepted from user config for backward compatibility but have no effect. activeConnectFactor = 0.1 connectFactor = 0.6 # Deprecated connection factor. # JSON-RPC API settings. 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 # FullNode JSON-RPC HTTP port. httpSolidityEnable = false # Whether to enable Solidity JSON-RPC HTTP API. httpSolidityPort = 8555 # Solidity JSON-RPC HTTP port. httpPBFTEnable = false # Whether to enable PBFT JSON-RPC HTTP API. httpPBFTPort = 8565 # PBFT JSON-RPC HTTP port. # The maximum blocks range to retrieve logs for eth_getLogs, default: 5000, <=0 means no limit maxBlockRange = 5000 # Allowed max address count in filter request, default: 1000, <=0 means no limit maxAddressSize = 1000 # The maximum number of allowed topics within a topic criteria, default: 1000, <=0 means no limit maxSubTopics = 1000 # Allowed maximum number for blockFilter, default: 50000, <=0 means no limit maxBlockFilterNum = 50000 # Allowed batch size, default: 100, <=0 means no limit maxBatchSize = 100 # Allowed max response byte size, default: 26214400 (25 MB), <=0 means no limit maxResponseSize = 26214400 # Allowed maximum number for newFilter, <=0 means no limit maxLogFilterNum = 20000 # Maximum JSON-RPC request body size in bytes (default 4194304, ~4MB). Independent from rpc.maxMessageSize. maxMessageSize = 4194304 } # Disabled API list (works for http, rpc and pbft, not jsonrpc). Case insensitive. disabledApi = [ # "getaccount", # "getnowblock2" ] } ## Rate limiter config rate.limiter = { # Each HTTP servlet and gRPC method can have its own rate-limit strategy. # Three API rate-limit strategies are available: # GlobalPreemptibleAdapter – limits maximum concurrent requests globally. # paramString = "permit=N" (N = max concurrent calls) # QpsRateLimiterAdapter – limits average QPS across all callers. # paramString = "qps=N" (N may be a decimal) # IPQPSRateLimiterAdapter – limits average QPS per source IP. # paramString = "qps=N" (N may be a decimal) # If no strategy is configured for an endpoint, QpsRateLimiterAdapter with # qps=1000 is applied automatically. # Per-servlet HTTP rate limits. component is the servlet class simple name. http = [ # { # component = "GetNowBlockServlet", # strategy = "GlobalPreemptibleAdapter", # paramString = "permit=1" # }, # { # component = "GetAccountServlet", # strategy = "IPQPSRateLimiterAdapter", # paramString = "qps=1" # }, # { # component = "ListWitnessesServlet", # strategy = "QpsRateLimiterAdapter", # paramString = "qps=1" # } ] # Per-method gRPC rate limits. component is "package.ServiceName/MethodName". 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 message rate limits. p2p = { # QPS ceiling for individual P2P message types received from peers. # Values are doubles; fractional QPS is allowed (e.g. 0.5 = one per 2 s). syncBlockChain = 3.0 # SyncBlockChain handshake messages fetchInvData = 3.0 # FetchInvData (block/tx fetch) messages disconnect = 1.0 # Disconnect messages } # Node-wide QPS ceiling across all HTTP + gRPC requests combined. global.qps = 50000 # Per-source-IP QPS ceiling across all HTTP + gRPC requests from that IP. global.ip.qps = 10000 # Default per-endpoint QPS limit applied to any endpoint with no explicit strategy. global.api.qps = 1000 # true = reject over-limit requests immediately; false = queue and block the caller. apiNonBlocking = false } # Bootstrap seed node settings. seed.node = { # Seed node addresses. 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 config # WARNING: All nodes in the same network must have identical genesis.block settings. # Any change here produces a different genesis block hash and creates an incompatible chain. genesis.block = { # Pre-allocated accounts created at block 0, before any transactions are processed. # Fields: # accountName – human-readable label stored on-chain; must not be blank # accountType – one of: Normal, AssetIssue, Contract # address – Base58Check-encoded account address (T...) # balance – initial balance in SUN (1 TRX = 1,000,000 SUN); stored as String # to accommodate values that exceed Integer range # Mainnet special accounts: # Zion – holds the initial circulating supply (99,000,000,000 TRX = 99×10¹⁵ SUN) # Sun – the founding account; starts at 0 # Blackhole – receives burned TRX; initialized to Long.MIN_VALUE so it can only increase assets = [ { accountName = "Zion" # human-readable label stored on-chain; must not be blank accountType = "AssetIssue" # one of: Normal, AssetIssue, Contract address = "TLLM21wteSPs4hKjbxgmH1L6poyMjeTbHm" # Base58Check-encoded account address (T...) balance = "99000000000000000" # initial balance in SUN (1 TRX = 1,000,000 SUN); stored as String }, { accountName = "Sun" accountType = "AssetIssue" address = "TXmVpin5vq5gdZsciyyjdZgKRUju4st1wM" balance = "0" }, { accountName = "Blackhole" accountType = "AssetIssue" address = "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy" balance = "-9223372036854775808" } ] # Initial Super Representatives at block 0. # Fields: # address – Base58Check-encoded SR address (T...) # url – SR's public URL (informational only, stored on-chain) # voteCount – initial vote count; seeds SR ranking before any user votes are cast # The 27 witnesses with the highest voteCount produce the first round of blocks. witnesses = [ { address: THKJYuUmMKKARNf7s2VT51g5uPY6KEqnat, # Base58Check-encoded SR address (T...) url = "http://GR1.com", # SR's public URL (informational only, stored on-chain) voteCount = 100000026 # initial vote count; seeds SR ranking before any user votes are cast }, { 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 } ] # Genesis block timestamp in milliseconds since Unix epoch. Must be >= 0. # Stored as a numeric String to accommodate Long-range values. timestamp = "0" # Hash of the genesis block's conceptual parent. This is a fixed sentinel value # embedded in the genesis block header; changing it changes the genesis block hash # and therefore the chain identity. parentHash = "0xe58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f" } # Optional. Used when the witness account has set 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 = # Local witness private keys. localwitness = [ ] # localwitnesskeystore = [ # "localwitnesskeystore.json" # ] # Block processing settings. block = { needSyncCheck = false // Whether to check sync before producing blocks. maintenanceTimeInterval = 21600000 // 6 hours (ms) proposalExpireTime = 259200000 // 3 days (ms), controlled by committee proposal checkFrozenTime = 1 // maintenance periods to check frozen balance (test only) } # Transaction reference block: "solid" or "head". Default "solid". "head" may cause TaPos error. trx.reference.block = "solid" # Transaction expiration time in milliseconds. trx.expiration.timeInMilliseconds = 60000 # TVM execution settings. vm = { supportConstant = false # Whether to support constant contract calls. maxEnergyLimitForConstant = 100000000 # Max energy for constant calls. minTimeRatio = 0.0 # Minimum VM time ratio. maxTimeRatio = 5.0 # Maximum VM time ratio. saveInternalTx = false # Whether to save internal transactions. lruCacheSize = 500 # VM LRU cache size. vmTrace = false # Whether to enable VM trace output. # Whether to store featured internal transactions (freeze, vote, etc.) saveFeaturedInternalTx = false # Whether to store details of CANCELALLUNFREEZEV2 opcode internal transactions saveCancelAllUnfreezeV2Details = false # Max execution time (ms) for re-executed transactions during packaging longRunningTime = 10 # Whether to support estimate energy API estimateEnergy = false # Max retry time for executing transaction in estimating energy estimateEnergyMaxRetry = 3 # Max TVM execution time (ms) for constant calls — applies to # triggerconstantcontract, triggersmartcontract dispatched to view/pure # functions, estimateenergy, eth_call, eth_estimateGas, and any other RPC # routed through the constant-call path. When set, must be a positive # integer that fits VM deadline conversion and is used verbatim as the # per-call deadline (no clamp against the network's maxCpuTimeOfOneTx). # Omit the property entirely to keep the default behaviour of sharing the # block-processing deadline. Migration note: if previously running --debug # to extend constant calls, switch to this option (--debug also extends # block-processing, which is unsafe; see issue #6266). Default: 0 (no effect). constantCallTimeoutMs = 0 } # Governance / feature-flag parameters. Most are controlled by on-chain committee proposals; # a few (e.g. allowNewRewardAlgorithm) are startup-only flags. # Comments list the /wallet/getchainparameters API key and ProposalType ID where applicable. # All default to 0 (disabled) unless noted. Manual config is for private-chain testing only. committee = { allowCreationOfContracts = 0 # getAllowCreationOfContracts, #9: enable smart contract creation allowMultiSign = 0 # getAllowMultiSign, #20: enable account permission multi-signature allowAdaptiveEnergy = 0 # getAllowAdaptiveEnergy, #21: enable adaptive energy limits allowDelegateResource = 0 # getAllowDelegateResource, #16: enable delegated resource operations allowSameTokenName = 0 # getAllowSameTokenName, #15: allow duplicate TRC10 token names allowTvmTransferTrc10 = 0 # getAllowTvmTransferTrc10, #18: allow TRC10 transfer in TVM allowTvmConstantinople = 0 # getAllowTvmConstantinople, #26: enable Constantinople TVM rules allowTvmSolidity059 = 0 # getAllowTvmSolidity059, #32: enable Solidity 0.5.9 TVM rules forbidTransferToContract = 0 # getForbidTransferToContract, #35: forbid direct transfers to contracts allowShieldedTRC20Transaction = 0 # getAllowShieldedTRC20Transaction, #39: enable shielded TRC20 transfers allowTvmIstanbul = 0 # getAllowTvmIstanbul, #41: enable Istanbul TVM rules allowMarketTransaction = 0 # getAllowMarketTransaction, #44: enable market transactions allowProtoFilterNum = 0 # getAllowProtoFilterNum, #24: enable protobuf field-number filtering allowAccountStateRoot = 0 # getAllowAccountStateRoot, #25: enable account state root changedDelegation = 0 # getChangeDelegation, #30: enable delegation changes allowPBFT = 0 # getAllowPBFT, #40: enable PBFT consensus pBFTExpireNum = 20 # PBFT message expiration: drop BLOCK messages whose block number lags head by more than this many blocks allowTransactionFeePool = 0 # getAllowTransactionFeePool, #48: enable transaction fee pool allowBlackHoleOptimization = 0 # getAllowOptimizeBlackHole, #49: enable blackhole account optimization allowNewResourceModel = 0 # getAllowNewResourceModel, #51: enable new resource model allowReceiptsMerkleRoot = 0 # receiptsMerkleRoot: receipts Merkle root (not yet applied at runtime) allowTvmFreeze = 0 # getAllowTvmFreeze, #52: enable freeze operations in TVM allowTvmVote = 0 # getAllowTvmVote, #59: enable vote operations in TVM unfreezeDelayDays = 0 # getUnfreezeDelayDays, #70: resource unfreeze delay days [1, 365] allowTvmLondon = 0 # getAllowTvmLondon, #63: enable London TVM rules allowTvmCompatibleEvm = 0 # getAllowTvmCompatibleEvm, #60: enable EVM-compatible TVM behavior allowHigherLimitForMaxCpuTimeOfOneTx = 0 # getAllowHigherLimitForMaxCpuTimeOfOneTx, #65: allow higher tx CPU limit allowNewRewardAlgorithm = 0 # newRewardAlgorithm: enable new reward algorithm allowOptimizedReturnValueOfChainId = 0 # getAllowOptimizedReturnValueOfChainId, #71: optimize CHAINID return value allowTvmShangHai = 0 # getAllowTvmShangHai, #76: enable Shanghai TVM rules allowOldRewardOpt = 0 # getAllowOldRewardOpt, #79: enable old reward optimization allowEnergyAdjustment = 0 # getAllowEnergyAdjustment, #81: enable energy adjustment allowStrictMath = 0 # getAllowStrictMath, #87: enable strict arithmetic checks consensusLogicOptimization = 0 # getConsensusLogicOptimization, #88: enable consensus logic optimization allowTvmCancun = 0 # getAllowTvmCancun, #83: enable Cancun TVM rules allowTvmBlob = 0 # getAllowTvmBlob, #89: enable blob-related TVM opcodes (BLOBHASH, BLOBBASEFEE) allowAccountAssetOptimization = 0 # getAllowAccountAssetOptimization, #53: enable account asset optimization allowAssetOptimization = 0 # getAllowAssetOptimization, #66: enable asset optimization allowNewReward = 0 # getAllowNewReward, #67: enable new reward logic memoFee = 0 # getMemoFee, #68: memo fee in SUN [0, 1000000000] allowDelegateOptimization = 0 # getAllowDelegateOptimization, #69: enable delegate optimization allowDynamicEnergy = 0 # getAllowDynamicEnergy, #72: enable contract dynamic energy model dynamicEnergyThreshold = 0 # getDynamicEnergyThreshold, #73: usage threshold for dynamic energy dynamicEnergyIncreaseFactor = 0 # getDynamicEnergyIncreaseFactor, #74: dynamic energy increase factor dynamicEnergyMaxFactor = 0 # getDynamicEnergyMaxFactor, #75: maximum dynamic energy factor } # Event subscription settings. event.subscribe = { enable = false # Whether to enable event subscription. # Native event queue settings. native = { useNativeQueue = false // if true, use native message queue, else use event plugin. bindport = 5555 // bind port sendqueuelength = 1000 // max length of send queue } version = 0 # Event subscription version. # Specify the starting block number to sync historical events. Only applicable when version = 1. # After performing a full event sync, set this value to 0 or a negative number. startSyncBlockNum = 0 path = "" // absolute path of plugin server = "" // target server address to receive event triggers, "ip:port" # dbname|username|password. To auto-create indexes on missing collections, append |2: # dbname|username|password|2 (if collection exists, indexes must be created manually). dbconfig = "" contractParse = true # Whether to parse contract event data. # Event trigger topics. topics = [ { triggerName = "block" // block trigger, the value can't be modified enable = false // Whether to enable this trigger. 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 // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice. // Default: false ethCompatible = 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 block number and timestamp), the value can't be modified enable = false 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 } ] # Event filter settings. filter = { fromblock = "" // "", "earliest", or a specific block number as the beginning of the queried range toblock = "" // "", "latest", or a specific block number as end of the queried range // Contract addresses to subscribe; "" means any contract address. contractAddress = [ "" ] // Contract topics to subscribe; "" means any contract topic. contractTopic = [ "" ] } }