Best Practices

In order to make it more convenient for DApps and node hosts to set up a node, we have put together a list of useful settings and configurations. Feel free to refer to this guide and adapt settings to suit your own use cases.

config.toml

Log_level

  • info Depending on the needs of your application it is ok to stick to info (default), but do consider setting up log-rotation for your logs, and archive logs after a certain amount of time or size, e.g. use a cron job with weekly rotation or until your file size hits ~5GB.

  • set to debug only for debugging purposes, turn off after you are finished with debugging.

db_backend

Since 1.0.2 there is another db parameter in app.toml as well. Be sure to make these 2 parameters the same to avoid issues.

  • goleveldb (default) db for low / medium level traffic use case. The reason being there can be some lock contention, especially with P2P.

  • rocksdb suited for a lot of use-cases, especially for high query load ~ few M / day. Has a better balance between rpc queries and p2p at high traffic. Note thatRocksdb however might have a slower startup time and requires a higher memory allocation. \

Seeds and persistent_peers

  • max_num_inbound_peers For node providers the number of inbound peers can be set to a higher value for example 50.

  • max_num_outbound_peers For users on a private network set a higher number of outbound peers to 30 for example.

  • After peers are connected, set it back to its default value. Note that some trial values might be needed to get it right.

  • seeds Set the list of seeds as instructed in the Running nodes section to connect to.

  • persistent_peers is especially useful when using State-sync to pull snapshots from.

send_rate and recv_rate

Free to tweak to a higher bytes/sec value, if your networking allows this, e.g. 51200000

timeout_broadcast_tx_commit

  • Freely tweak this parameter. Set to a slightly higher value, such as 20s to wait for a tx to be committed during / broadcast_tx_commit. Be careful a value larger than 10s will result in increasing the global HTTP write timeout, which applies to all connections and endpoints.

max_num_inbound_peers and max_num_outbound_peers

  • max_num_inbound_peers For node providers the number of inbound peers can be set to a higher value for example 50.

  • max_num_outbound_peers For users on a private network set a higher number of outbound peers to 30 for example.

  • After peers are connected, set it back to its default value. Note that some trial values might be needed to get it right.

Metrics

Prometheus provides real-time metrics used for event monitoring and alerting. Prometheus metrics can be served on the Planq chain. To enable the Prometheus metrics, you will need to set instrumentation.prometheus=true in the config.toml file manually.

Metrics will be served under …/metrics on 26660 port by default, e.g. localhost:26660/metrics. The listening address can be changed in the config.toml file (prometheus_listen_addr).

Sample Settings:

app.toml

Pruning

  • default Normal usage can just be set to default. In the Cosmos SDK this is defined as:

meaning the app will keep the latest 362880 versions (around 21 days by 5 secs block time), and then only keep 1 version for every 100 blocks past the keepRecent period( the rest will be put into the pruning list), and then execute the pruning every 10 blocks.

  • everything if you only need to do transaction broadcasting and only need the last blocks.

  • nothing for DApps that want to be able to query information at a certain known blockheight. Note that this is only needed for archive nodes.

iavl-disable-fastnode and iavl-cache-size

During the dragonberry patch and the upgrade to 0.8.2 and 0.8.3, we enabled the iavl-disable-fastnode config parameter. This provides the option to disable the iavl fastnode indexing migration, as a migration will take multiple hours to complete.

  • iavl-disable-fastnode = false is the default setting and performs the migration. This might take a while. So be prepared in advance and schedule this migration downtime. In case you use a snapshot that has performed migration already (e.g. quicksync), leave the value to false

  • iavl-disable-fastnode = true if you want to disable the fast indexing, and skip the migration. Only use this in case you really are not able to perform the migration now.

  • iavl-cache-size set to 781250 works well as our testing has shown.

app-db-backend

As of v1.0.0 we support golevelDB and rocksDB in a single binary, hence we allow to select the backend with the app-db-backend parameter. If not filled in it will use a fallback option. First fallback is the deprecated compile-time types.DBBackend value. Second fallback (if the types.DBBackend also isn't set), is the db-backend value set in config.toml.

  • app-db-backend = "rocksdb" or "golevelsdb"

API

  • enable = true to enable the API server

  • swagger = true to setup the swagger endpoint

Json-RPC

  • api = "eth,txpool,web3" Set to the namespaces you wish to use, optionally add personal,net,debug to that list.

  • evm-timeout Freely tweak this parameter. Set to a slightly higher value, such as 60s to avoid timeouts on eth_calls.

  • http-timeout Freely tweak this parameter. Set to a slightly higher value, such as 60s to avoid read/writes timeouts of the http json-rpc server.

  • http-idle-timeout. Freely tweak this parameter. Set to a slightly higher value, such as 120s to avoid idle timeout of the http json-rpc server.

Debug Method

debug_trace allows nodes to return the trace of block and transaction details. In order to enable debug_trace for your node on the Planq chain, two places need to be configured correctly under app.toml.

Sample Settings:

In addition, it should run as planqd start --trace in planqd start command (archived node). For the resources needed for --trace flag in Planq mainnet, the mem usage is slightly higher than the others but 64GB should be enough.

Last updated