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. ] } }