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 # 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" ] } 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 = 18888 connection.timeout = 2 fetchBlock.timeout = 200 tcpNettyWorkThreadNum = 0 udpNettyWorkThreadNum = 1 # Number of validate sign thread, default availableProcessors / 2 # validateSignThreadNum = 16 maxConnections = 30 minConnections = 8 minActiveConnections = 3 maxConnectionsWithSameIp = 2 maxHttpConnectNumber = 50 minParticipationRate = 15 isOpenFullTcpDisconnect = false p2p { version = 11111 # 11111: mainnet; 20180622: testnet } 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.26.245.209:18888", "15.188.6.125:18888" ] http { fullNodeEnable = true fullNodePort = 8090 solidityEnable = true solidityPort = 8091 } rpc { port = 50051 #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://AKMQMNAJJBL73LXWPXDI4I5ZWWIZ4AWO34DWQ636QOBBXNFXH3LQS@main.trondisco.net", //offical dns tree ] # 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 # httpPBFTEnable = true # httpPBFTPort = 8565 } # Disabled api list, it will work for http, rpc and pbft, 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 # Seed nodes are stable full nodes # example: # ip.list = [ # "ip:port", # "ip:port" # ] ip.list = [ "3.225.171.164:18888", "52.53.189.99:18888", "18.196.99.16:18888", "34.253.187.192:18888", "18.133.82.227:18888", "35.180.51.163:18888", "54.252.224.209:18888", "18.231.27.82:18888", "52.15.93.92:18888", "34.220.77.106:18888", "15.207.144.3:18888", "13.124.62.58: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" #2017-8-26 12:00:00 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 proposalExpireTime = 259200000 // 3 day: 259200000(ms) } # Transaction reference block, default is "solid", configure to "head" may incur 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 # 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 = 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 } 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. ] } }