---
title: Configuration file
slug: signum/configuration-file
createdAt: 2022-04-01T10:03:55.000Z
---

The standard mainnet configuration file without any adjustments using the SQLite database, and ready to go looks like this:

:::CodeblockTabs
node-default

```ini
#######################################################################
# Either edit this file to suit your needs or make a copy and name it #
# 'node.properties'.                                                  #
#                                                                     #
# Lines starting with '#' are ignored, remove this character to       #
# activate the command.                                               #
#                                                                     #
# Settings on a 'node.properties' file overwrite the values on the    #
# 'node-default.properties'.                                          #
#######################################################################
#
# Integer parameters can be
# decimal     123
# binary      0b100101
# hexadecimal 0xAF1D
#
# Boolean parameters can be
# 1, true, yes, on
# 0, false, no, off
# (case insensitive)
#

#### CASHBACK FOR TRANSACTION FEES ####

## Set an account ID and get a 25% cashback on every transaction fee that is
## created by this node.

# node.cashBackId = 8952122635653861124

#### DATABASE SECTION ####

## Maximum allowed connections by Database connection pool
# DB.Connections = 30

## If a database, i.e. SQLITE, supports optimization features, like SHUTDOWN DEFRAG, VACUUM etc. This might require some additional shutdown or startup time (depending on the database).
## This can help improve performance and reduce the size of the database file on disk.
## This is "on" by default but can cost some time while starting/shutting down.
# DB.Optimize = off

## If you want to use Sqlite (recommended for local/non-public nodes):
# DB.Url=jdbc:sqlite:file:./db/signum.sqlite.db

## Sqlite Journaling Mode
## https://www.sqlite.org/pragma.html#pragma_journal_mode
## Possible Values are: DELETE,TRUNCATE,PERSIST,WAL (default, recommended)
## WAL may occupy up to twice more disc space than others while running the node, but allows read concurrency and usually better performance (see more here: https://www.sqlite.org/wal.html)
## It's highly recommended to use WAL mode during syncing, to dramatically reduce I/O operations and though faster sync times.
## Info: MEMORY journal mode is not supported
# DB.SqliteJournalMode = WAL

## If you want to use MariaDB (recommended for public nodes):
# DB.Url=jdbc:mariadb://localhost:3306/signum
# DB.Username=signumnode
# DB.Password=s1gn00m_n0d3

## If you want to use Postgres (Experimental - considered alternative for MariaDB):
# DB.Url=jdbc:postgresql://localhost:5432/signum?sslMode=disabled
# DB.Username=signumnode
# DB.Password=s1gn00m_n0d3

#### PEER 2 PEER NETWORKING ####

## Announce my IP address/hostname to peers and allow them to share it with other peers.
## If disabled, peer networking servlet will not be started at all.

# P2P.shareMyAddress = yes

## My externally visible IP address or host name, to be announced to peers.
## It can optionally include a port number, which will also be announced to peers,
## and may be different from P2P.Port (useful if you do port forwarding behind a router).

# P2P.myAddress =

## Host interface on which to listen for peer networking requests, default all.
## Use 0.0.0.0 to listen on all IPv4 and IPv6 interfaces

# P2P.Listen = 0.0.0.0

## Port for incoming peer to peer networking requests, if enabled.

# P2P.Port = 8123

## Use UPnP-Portforwarding
## Set to no on a server setup

# P2P.UPnP = yes

## My platform, to be announced to peers.
## Enter your Signum address here for SNR rewards, see here: https://wiki.signum.network/signum-snr-awards/

# P2P.myPlatform = PC

## A list of peer addresses / host names, separated by '; ' used for faster P2P networking bootstrap.

# P2P.BootstrapPeers = australia.signum.network:8123; brazil.signum.network:8123; canada.signum.network:8123; europe.signum.network:8123; europe1.signum.network:8123; europe2.signum.network:8123; europe3.signum.network:8123; latam.signum.network:8123; singapore.signum.network:8123; ru.signum.network:8123; us-central.signum.network:8123; us-east.signum.network:8123

## These peers will always be sent rebroadcast transactions. They are also automatically added to P2P.BootstrapPeers, so no need for duplicates.

# P2P.rebroadcastTo = 216.114.232.67:8123; 51.235.143.229:8123; signode.ddns.net:8123; 188.34.159.176:8123;signum.mega-bit.ru:8123; storjserver2.cryptomass.de:8123; 89.58.10.207:8123; 84.54.46.176:8123; signumwallet.ddns.net:8123; taylorforce.synology.me:8123; zwurg.feste-ip.net:51940; zmail.cloudns.ph:8123; wallet.signa-coin.eu:8123; wekuz-signa-node.duckdns.org:8123; austria-sn.albatros.cc:8123; signumwallet.lucentinian.com:8123; 85.238.97.205:8123; 124.246.79.194:8123

## Connect to this many bootstrap connection peers before using the peer database to get connected faster. Please be aware, that higher != better (3-5 are usually good values) Set to 0 to disable.

# P2P.NumBootstrapConnections = 3

## Known bad peers to be blacklisted

# P2P.BlacklistedPeers =

## Maintain active connections with at least that many peers. Also more != better (you want good peers, not just many)

# P2P.MaxConnections = 20

## Maximum number of blocks sent to other peers in a single request

# P2P.MaxBlocks = 720

## Use Peers Database? (Only if not in Offline mode)

# P2P.usePeersDb = yes

## Save known peers in the PeersDB? (only if P2P.usePeersDB is true)

# P2P.savePeers = yes

## Set to false to disable getting more peers from the currently connected peers. Only useful
## when debugging and want to limit the peers to those in peersDb or P2P.BootstrapPeers.

# P2P.getMorePeers = yes

## If database of peers exceed this value more peers will not be downloaded.
## This value will never be below MaxConnections. To high value will slowdown connections.

# P2P.getMorePeersThreshold = 400

## Peer networking connect timeout for outgoing connections.

# P2P.TimeoutConnect_ms = 4000

## Peer networking read timeout for outgoing connections.

# P2P.TimeoutRead_ms = 8000

## Peer networking server idle timeout, milliseconds.

# P2P.TimeoutIdle_ms = 30000

## Blacklist peers for 600000 milliseconds (i.e. 10 minutes by default).

# P2P.BlacklistingTime_ms = 600000

## Enable priority (re-)broadcasting of transactions. When enabled incoming transactions
## will be priority resent to the rebroadcast targets

# P2P.enableTxRebroadcast = yes

## Amount of extra peers to send a transaction to after sending to all rebroadcast targets

# P2P.sendToLimit=10

## Max number of unconfirmed transactions that will be kept in cache.

# P2P.maxUnconfirmedTransactions = 8192

## Max percentage of unconfirmed transactions that have a full hash reference to another transaction kept in cache

# P2P.maxUnconfirmedTransactionsFullHashReferencePercentage = 5

## Max amount of raw UT bytes we will send to someone through both push and pull. Keep in mind that the resulting JSON size will always be bigger.

# P2P.maxUTRawSizeBytesToSend = 175000

## JETTY pass-through options.
## P2P section:

# JETTY.P2P.DoSFilter                   = on
# JETTY.P2P.DoSFilter.maxRequestsPerSec = 30
# JETTY.P2P.DoSFilter.delayMs           = 500
# JETTY.P2P.DoSFilter.maxRequestMs      = 300000
# JETTY.P2P.DoSFilter.throttleMs        = 30000
# JETTY.P2P.DoSFilter.maxIdleTrackerMs  = 30000
# JETTY.P2P.DoSFilter.maxWaitMs         = 50
# JETTY.P2P.DoSFilter.throttledRequests = 5
# JETTY.P2P.DoSFilter.insertHeaders     = true
# JETTY.P2P.DoSFilter.trackSessions     = false
# JETTY.P2P.DoSFilter.remotePort        = false
# JETTY.P2P.DoSFilter.ipWhitelist       = 127.0.0.1,localhost
# JETTY.P2P.DoSFilter.managedAttr       = true

## Jetty-passthrough parameters for P2P responses GZIP compression.

# JETTY.P2P.GZIPFilter             = on
# JETTY.P2P.GZIPFilter.minGzipSize = 1024

## Size of the download cache for blocks

# node.blockCacheMB = 40

## Add this to check the deadline of every block since Genesis, otherwise only past the checkpoint.

# node.checkPointHeight = -1

## Number of past blocks for AT processor to load into memory/cache
## Put -1, if you want to disable the cache, which may slow down AT/smart contract processing significantly
## Do not put too high values as this may cause significant memory occupation and cause even negative impact on processing times.
# node.atProcessorCacheBlockCount = 1000


#### API SERVER ####

## Accept http/json API requests.

# API.Server = on

## JETTY pass-through options.
## API section:

# JETTY.API.DoSFilter                   = on
# JETTY.API.DoSFilter.maxRequestsPerSec = 30
# JETTY.API.DoSFilter.delayMs           = 500
# JETTY.API.DoSFilter.maxRequestMs      = 30000
# JETTY.API.DoSFilter.throttleMs        = 30000
# JETTY.API.DoSFilter.maxIdleTrackerMs  = 30000
# JETTY.API.DoSFilter.maxWaitMs         = 50
# JETTY.API.DoSFilter.throttledRequests = 5
# JETTY.API.DoSFilter.insertHeaders     = true
# JETTY.API.DoSFilter.trackSessions     = false
# JETTY.API.DoSFilter.remotePort        = false
# JETTY.API.DoSFilter.ipWhitelist       = 127.0.0.1,localhost
# JETTY.API.DoSFilter.managedAttr       = true

## Jetty-passthrough parameters for API responses GZIP compression.

# JETTY.API.GZIPFilter             = on
# JETTY.API.GZIPFilter.minGzipSize = 1024

## Hosts or subnets from which to allow http/json API requests, if enabled.
## List delimited by ';', IPv4/IPv6 possible, default: localhost

# API.allowed = 127.0.0.1;localhost;[0:0:0:0:0:0:0:1];

## Key list to access the admin API requests, uncomment and replace with your own keys
## delimited by ';' if more than one key should be available

# API.adminKeyList = e673529588638d2129af1e0528a1642cf2e0c180

## Does the API accept additional/redundant parameters in an API call?
## default is no (Wallet accepts only params specified for given call)
## enable this if you have a sloppy client interacting, but please be aware that this
## can be a security risk.

# API.AcceptSurplusParams = no

## Host interface on which to listen for http/json API request, default localhost only.
## Set to 0.0.0.0 to allow the API server to accept requests from all network interfaces.

# API.Listen = 127.0.0.1

## List of CORS allowed origins.

# API.AllowedOrigins=*

## Port for http/json API requests.

# API.Port = 8125

## Websocket JSON Event Emission
# available under ws://localhost:8126/events (or configured port)

# API.WebSocketEnable = true

## Port for websocket/json API events

# API.WebSocketPort = 8126

## The heartbeat interval in seconds that indicates a working connection
# API.WebSocketHeartbeatInterval = 30

## Idle timeout for http/json API request connections, milliseconds.

# API.ServerIdleTimeout = 60000

## Directory with html and javascript files for the new client UI, and admin tools utilizing
## the http/json API.
# API.UI_Dir = html/ui

## Set the documentation mode. Use one of [ modern, legacy, off ] to enable or even disable the API Doc UI
# API.DocMode = modern

## Enable SSL for the API server (also need to set API.SSL_keyStorePath and API.SSL_keyStorePassword).

# API.SSL = off

## Enforce requests that require POST to only be accepted when submitted as POST.

# API.ServerEnforcePOST = yes

## Your keystore file and password, required if uiSSL or apiSSL are enabled.
# API.SSL_keyStorePath     = keystore
# API.SSL_keyStorePassword = password

## If you use https://certbot.eff.org/ to issue your certificate, provide below the path for your keys.
## BRS will automatically create the keystore file using the password above and will reload it weekly.
## Make sure you configure certbot to renew your certificate automatically so you don't need to worry about it.
# API.SSL_letsencryptPath = /etc/letsencrypt/live/yourdomain.com

#### DATABASE ####



## Enable trimming of derived objects tables.

# DB.trimDerivedTables = on

## If trimming enabled, maintain enough previous height records to allow rollback of at least
## that many blocks. Must be at least 1440 to allow normal fork resolution. After increasing
## this value, a full re-scan needs to be done in order for previously trimmed records to be
## re-created and preserved.

# DB.maxRollback = 1440

## Database default lock timeout in seconds.

# DB.LockTimeout = 60

## Maximum number of rows to be inserted in a single SQL statement.
## Defaults to 10000, should be ok in most situations.
## May be fine tuned according to your DBMS or to your machine performances.
## Warning: a high value (> 15000 rows) is known to generate queries too big for an SQLite backend

# DB.InsertBatchMaxSize = 10000

### GPU Acceleration

## enable GPU acceleration

# GPU.Acceleration = off
# GPU.AutoDetect   = on

## If GPU auto-detection is off (GPU.AutoDetect = off), you must specify manually which one to use

# GPU.PlatformIdx = 0
# GPU.DeviceIdx   = 0

## GPU memory usage in percent and how many hashes to process in one batch

# GPU.MemPercent       = 50
# GPU.HashesPerBatch = 1000

## number of unverified transactions in cache before GPU verification starts.

# GPU.UnverifiedQueue = 1000

## Uncomment this to limit the number of cpu cores the wallet sees. Default is half available.

# CPU.NumCores = 4


#### MINING ####

## List of semicolon-separated passphrases to use when solo mining. When mining solo, if you enter your passphrase here,
## you can set your miner to pool mining mode and avoid sending your passphrase over the wire constantly.
## Do not use on public facing nodes or nodes that are accessible (filesystem or API server) by others, as it could
## cause your passphrase to become compromised or allow others to mine on your behalf without your knowledge

# SoloMiningPassphrases=passphrase1;passphrase2;passphrase3;

## List of semicolon-separated passphrases to use when solo mining but with a reward recipient set.
## Your miner account is the one you provide only the id, while the account which you set
## your reward recipient is the one you provide the passphrase here.

# RewardRecipientPassphrases=id1:passphrase1;id2:passphrase2;id3:passphrase3;

## Allow anyone to use the "submitNonce" API call. This call can be abused to force your node to perform lots
## of work in order to effectively mine for others. Enabling this option will only allow accounts whose passphrases
## are in SoloMiningPassphrases to mine through this node.

# AllowOtherSoloMiners=false


#### DEVELOPMENT ####

## (proceed with extreme caution beyond this point)

## Run with a different network

# Testnet network
# node.network = signum.net.TestnetNetwork

# Mock mining (offline and accepting any nonce as valid)
# node.network = signum.net.MockNetwork

## Enter a version. Upon exit, print a list of peers having this version.

# DEV.dumpPeersVersion =

## Force re-build of derived objects tables at start.

# DEV.forceScan = off


### Debugging (part of Development - isn't it)

## Used for debugging peer to peer communications.

# brs.communicationLoggingMask = 0

## Track balances of the following accounts and related events for debugging purposes.

# brs.debugTraceAccounts=

## File name for logging tracked account balances.

# brs.debugTraceLog = LOG_AccountBalances_trace.csv

## Separator character for trace log. (default '\t' - TAB)

# brs.debugTraceSeparator =

## Quote character for trace log. (default " - double quote)

# brs.debugTraceQuote =

## Log changes to unconfirmed balances.

# brs.debugLogUnconfirmed = false

## Timeout in Seconds to wait for a graceful shutdown

# node.shutdownTimeout = 180

## Enable the indirect incoming tracker service. This allows you to see transactions where you are paid
## but are not the direct recipient eg. Multi-Outs.

# node.indirectIncomingService.enable = true

## Auto Pop Off means that the node will, when failing to push a block received whilst syncing (from another
## peer), pop off n-1 blocks, where n is the number of failures to push a block at this height.
## This, combined with blacklisting, should significantly lower the chance of your node becoming stuck,
## whilst syncing or when operating normally.

# node.autoPopOff.enable = true

```
:::

