net { type = mainnet # type = testnet } storage { # Directory for storing persistent data db.version = 2, 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 defualt and data will be stored in # the path of "output-directory" or which is set by "-d" ("--output-directory"). # 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.version=2 and 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.version=2 and db.engine="ROCKSDB"). //if you want to use the backup plugin, please confirm set the db.version=2 and 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. } # 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 = b474b61f93824cd70106f8f5283fa740d61b83a7d57a3c12401d627f1fae0a77 } } node.discovery = { enable = true persist = true bind.ip = "" external.ip = null } node.backup { port = 10001 # my priority, each member should use different priority priority = 8 # peer's ip list, can't contain mine members = [ # "ip", # "ip" ] } 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 tcpNettyWorkThreadNum = 0 udpNettyWorkThreadNum = 1 # Number of validate sign thread, default availableProcessors / 2 # validateSignThreadNum = 16 maxConnections = 30 minConnections = 8 minActiveConnections = 3 maxActiveNodesWithSameIp = 2 maxHttpConnectNumber = 50 minParticipationRate = 15 zenTokenId = 1000016 # check the peer data transfer ,disconnect factor disconnectNumberFactor = 0.4 maxConnectNumberFactor = 0.8 receiveTcpMinDataLength = 2048 isOpenFullTcpDisconnect = true p2p { version = 201910292 } 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 { fullNodePort = 8090 solidityPort = 8091 } # 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 # Enable node detect # nodeDetectEnable = false dns { # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty treeUrls = [ #"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes1.example.org", ] } 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 } ## rate limiter config rate.limiter = { # Use global settings to limit the QPS of the entire node or every ip address # global.qps = 1000 # global.ip.qps = 100 # 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" # }, ] } 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" #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 = #localwitnesskeystore = [ # "localwitnesskeystore.json" #] block = { needSyncCheck = false maintenanceTimeInterval = 600000 proposalExpireTime = 600000 // } # 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 # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged # longRunningTime = 10 } 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 dbconfig = "" // dbname|username|password contractParse = true, topics = [ { triggerName = "block" // block trigger, the value can't be modified enable = false topic = "block" // plugin topic, the value could be modified }, { triggerName = "transaction" enable = false topic = "transaction" }, { triggerName = "contractevent" enable = false topic = "contractevent" }, { triggerName = "contractlog" enable = false topic = "contractlog" } ] 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. ] } }