Constants
Policy
Block Parameters
Parameters | Value | Description |
---|---|---|
BLOCK_TIME |
60 | Targeted block time in seconds. |
BLOCK_SIZE_MAX |
1e5 (100 kB) | Maximum block size in bytes. |
DIFFICULTY_BLOCK_WINDOW |
120 | Number of blocks that are taken into account for calculating the next difficulty. |
DIFFICULTY_MAX_ADJUSTMENT_FACTOR |
2 | Maximum factor about which the difficulty can be adjusted from one block to the next. |
TRANSACTION_VALIDITY_WINDOW |
120 | Number of blocks a transaction is valid for, after it’s startValidity . |
Supply & Emission Parameters
Parameter | Value | Description |
---|---|---|
LUNAS_PER_COIN |
1e5 | Number of Lunas per Nimiq. Referred to in code as Satoshi. |
TOTAL_SUPPLY |
21e14 | Targeted total supply in Lunas. This is the same amount that Bitcoin has. |
INITIAL_SUPPLY |
252000000000000 | Initial supply at the genesis block in Lunas. This describes the amount NIMs that are created from the fundraising and all other pre-allocated funds. |
EMISSION_SPEED |
2^22 | The amount of Lunas that haven’t been rewarded at that point in time are divided by this speed to calculate the reward (this ensures the smoothness of the reward emission process). |
EMISSION_TAIL_START |
48692960 | First block using constant tail emission until total supply is reached. |
EMISSION_TAIL_REWARD |
4000 | Constant tail emission per block in Lunas until total supply is reached. |
M |
240 | NIPoPoW parameter M ; The minimum length of a superchain. |
K |
120 | NIPoPoW parameter K ; The suffix size of the chainproof. |
DELTA |
0.1 | NIPoPoW Security parameter DELTA . |
NUM_BLOCKS_VERIFICATION |
250 | Number of blocks the light client downloads to verify the accounts tree construction. |
NUM_SNAPSHOTS_MAX |
20 | Maximum number of snapshots that a node will keep (snapshots are used so that other nodes can synchronize to a consistent state even if a new block is added to the blockchain). |
Network
Parameter | Value | Description |
---|---|---|
PEER_COUNT_DESIRED |
6 | Number of peers a node aims to connect to. |
PEER_COUNT_RELAY |
4 | Specifies to how many peers newly learned addresses are forwarded. |
CONNECTING_COUNT_MAX |
2 | Maximum number of simultaneous outbound connection attempts. |
SIGNAL_TTL_INITIAL |
3 | Considered to check validity of signals. |
ADDRESS_UPDATE_DELAY |
1000 | Delay added before checking peer count and connecting to new peers. This allows RTC peer addresses to be sent to the peer in question. |
CONNECT_BACKOFF_INITIAL |
1000 | Backoff for peer count check in seconds. |
CONNECT_BACKOFF_MAX |
300000 (5 min) |
Maximum Backoff time before a new backoff is triggered. |
SIGNAL_MAX_AGE |
10 | Maximum age in seconds a signal needs to have to be valid. |
PEER_COUNT_MAX |
15/50000 | Maximum amount of peers. Browsers are limited to 15, other platforms to 50k. |
PEER_COUNT_PER_IP_WS_MAX |
1/25 | Maximum WebSocket connections from the same IP Address. Browsers are limited to 1, other platforms to 25. |
PEER_COUNT_PER_IP_RTC_MAX |
2 | Maximum RTC connections for a peer’s IP Address. |
Network Utils
Parameter | Value | Description |
---|---|---|
IP_BLACKLIST |
‘0.0.0.0’, ‘255.255.255.255’,’::’ |
Blacklisted IP addresses will never be contacted. |
IPv4_PRIVATE_NETWORK |
‘10.0.0.0/8’, ‘172.16.0.0/12’, ‘192.168.0.0/16’, ‘100.64.0.0/10’, ‘169.254.0.0/16’ |
IP Address ranges considered to be within private networks and thus are not connected to. |
Network Agent
Parameter | Value | Description |
---|---|---|
HANDSHAKE_TIMEOUT |
3000 (3 sec) |
Timeout {ms} the node waits before droping a peer’s connection. |
PING_TIMEOUT |
10000 (10 sec) |
Timeout {ms} the node waits for a peer to answer with a matching pong message during connectivity check. |
CONNECTIVITY_CHECK_INTERVAL |
60000 (1 min) |
Interval at which the node regularly checks connectivity. |
ANNOUNCE_ADDR_INTERVAL |
300000 (5 min) |
Interval at which the node regularly announces its address. |
RELAY_THROTTLE |
120000 (2 min) |
Time {ms} the node will wait to re send an address. |
VERSION_ATTEMPTS_MAX |
10 | During handshake, maximum amount of version attempts per address the node will allow before droping the connection. A version attempt checks version, network address & blockchain head hash. |
VERSION_RETRY_DELAY |
500 | Time {ms} the node waits before retrying a version attempt during handshake. |
Peer Address
Parameters
Parameter | Value | Description |
---|---|---|
MAX_AGE_WEBRTC |
60000 (1 min) |
Age {ms} of a peer address to be sent back in a WebRTC address query. |
MAX_AGE_DUMB |
4 | Age {ms} of a peer address to be sent back in a Dumb address query. |
MAX_FAILED_ATTEMPTS_WS |
3 | Maximum failed attempts for peers connecting using WebSocket |
MAX_FAILED_ATTEMPTS_RTC |
2 | Maximum failed attempts for peers connecting using WebRTC |
MAX_TIMESTAMP_DRIFT |
600000 (10 min) |
Maximum time allowed for a peer address’s timestamp to drift into the future. |
HOUSEKEEPING_INTERVAL |
60000 (1 min) |
Interval {ms} at which regular housekeeping routines are executed. |
DEFAULT_BAN_TIME |
600000 (10 min) |
Duration {ms} a peer address remains banned. |
INITIAL_FAILED_BACKOFF |
15000 (15 sec) |
Initial backoff, {ms}, for failed connections. |
MAX_FAILED_BACKOFF |
600000 (10 min) |
Maximum backoff, {ms}, for failed connections. |
States
State | Value | Description |
---|---|---|
NEW |
1 | Initial state peer addresses are initialized with. |
CONNECTING |
2 | State in which the node remains while connection to the peer address is being established |
CONNECTED |
3 | Indicates a connection to a peer address has been established. |
TRIED |
4 | State a peer address is set to when it is disconnected. |
FAILED |
5 | Indicates a network connection to a peerAddress has failed. |
BANNED |
6 | State of a peer address that have been banned. |
Signal ID Serialized Size
Parameter | Value | Description |
---|---|---|
SERIALIZED_SIZE |
16 | Size in bytes of the serialized signal. |
Transaction Receipts Message Maximum Count
Parameter | Value | Description |
---|---|---|
RECEIPTS_MAX_COUNT |
500 | Maximum amount of transaction receipts in transaction receipts. |
Signal Message Flags
Flag | Value | Description |
---|---|---|
UNROUTABLE |
0x1 | Indicates a signal message is unroutable. |
TTL_EXCEEDED |
0x2 | Indicates the TTL of a signal message has exceeded the maximum allowed. |
Reject Message Code
Flag | Value |
---|---|
REJECT_MALFORMED |
0x01 |
REJECT_INVALID |
0x10 |
REJECT_OBSOLETE |
0x11 |
REJECT_DOUBLE |
0x12 |
REJECT_DUST |
0x41 |
REJECT_INSUFFICIENT_FEE |
0x42 |
Messages
Message Magic
Type | Value | Description |
---|---|---|
MAGIC |
0x42042042 | Special string that indicates the information sent should be interpreted as a message. |
Message Types
Type | Value | Description |
---|---|---|
VERSION |
0 | Version message. |
INV |
1 | Inventory message |
GET_DATA |
2 | |
GET_HEADER |
3 | |
NOT_FOUND |
4 | |
GET_BLOCKS |
5 | Get Blocks message |
BLOCK |
6 | Blocks message |
HEADER |
7 | Header message |
TX |
8 | Transaction message |
MEMPOOL |
9 | Mempool message |
REJECT |
10 | Reject message |
SUBSCRIBE |
11 | Subscribe message |
ADDR |
20 | Addresses Message |
GET_ADDR |
21 | Get Addresses Message |
PING |
22 | Ping message |
PONG |
23 | Pong message |
SIGNAL |
30 | Signal message |
GET_CHAIN_PROOF |
40 | Get Chain Proof message |
CHAIN_PROOF |
41 | Chain proof message |
GET_ACCOUNTS_PROOF |
42 | Get accounts proof message |
ACCOUNTS_PROOF |
43 | Accounts proof message |
GET_ACCOUNTS_TREE_CHUNK |
44 | Gets accounts tree chunk message |
ACCOUNTS_TREE_CHUNK |
45 | Accounts tree chunk message |
GET_TRANSACTIONS_PROOF |
47 | Get transactions proof message |
TRANSACTIONS_PROOF |
48 | Transactions proof |
GET_TRANSACTION_RECEIPTS |
49 | |
TRANSACTION_RECEIPTS |
50 | Transactions receipts |
Get Blocks Message Directions
Direction | Value |
---|---|
FORWARD |
0x1 |
BACKWARD |
0x2 |
Further Constants
Protocol Types
Protocol | Value |
---|---|
DUMP |
0 |
WS |
1 |
RTC |
2 |
Services Types
Protocol | Value |
---|---|
NONE |
0 |
NANO |
1 |
LIGHT |
2 |
FULL |
4 |
Alphabets
Alphabet | Value |
---|---|
RFC4648 |
‘ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=’ |
RFC4648_HEX |
‘0123456789ABCDEFGHIJKLMNOPQRSTUV=’ |
NIMIQ |
‘0123456789ABCDEFGHJKLMNPQRSTUVXY’ |
HEX_ALPHABET |
‘0123456789abcdef’ |
WebRTC Data Channel
Parameter | Value | Description |
---|---|---|
CHUNK_SIZE_MAX |
16384 (16 Kb) |
Maximum size {bits} allowed for a WebRTC message before being splited into chunks. |
MESSAGE_SIZE_MAX |
10485760 (10Mb) |
Maximum size {bits} allowed for a message WebRTC. |
CHUNK_TIMEOUT |
5000 (5 sec) |
Allowed timeout between chunks for a chunked WebRTC message. |
CHUNK_BEGIN_MAGIC |
0xff | Special string that indicates the beginning chunk of a message splitted in chunks. |
CHUNK_INNER_MAGIC |
0xfe | Special string that indicates the middle chunks of a message splitted in chunks. |
CHUNK_END_MAGIC |
0xfd | Special string that indicates the end chunk of a message splitted in chunks. |
WebSocket Connector
Parameter | Value | Description |
---|---|---|
CONNECT_TIMEOUT |
5000 | Timeout for WebSocket conections in Browsers. |
Consensus Constants
Full Consensus
Parameter | Value | Description |
---|---|---|
SYNC_THROTTLE |
1500 | Time {ms} for the node to wait for more peers to connect before start syncing. |
Full Consensus Agent
Parameter | Value | Description |
---|---|---|
SYNC_ATTEMPTS_MAX |
10 | Maximum number of blockchain sync retries before closing the connection. |
GETBLOCKS_VECTORS_MAX |
500 | Maximum number of inventory vectors to sent in the response for onGetBlocks . |
RESYNC_THROTTLE |
3000 (3 sec) |
Time in millisecongs to wait before triggering a blockchain re-sync with the peer. |
MEMPOOL_DELAY_MIN |
2000 (2 sec) |
Minimum time {ms} to wait before triggering the initial mempool request. |
MEMPOOL_DELAY_MAX |
20000 (20 sec) |
Maximum time {ms} to wait before triggering the initial mempool request. |
MEMPOOL_THROTTLE |
1000 | Time {ms} to wait between sending full inv vectors of transactions during Mempool request. |
MEMPOOL_ENTRIES_MAX |
10 | Maximum number Number of allowed transaction to send. |
Full Chain
Parameter | Value | Description |
---|---|---|
ERR_ORPHAN |
-2 | Indicates the block’s immediate predecessor is not part of the chain. |
ERR_INVALID |
-1 | Indicates the block is not a full block (does not include block body) or matches with an intrinsic variant. (?) |
OK_KNOWN |
0 | Indicates the node already knows this block. |
OK_EXTENDED |
1 | Indicates the block extends the node’s current main chain. |
OK_REBRANCHED |
2 | Indicates the block fork has become the hardest chain and the node will rebranch to it. |
OK_FORKED |
3 | Indicates a new fork was created. |
Light Consensus Agent
Parameter | Value | Description |
---|---|---|
CHAINPROOF_REQUEST_TIMEOUT |
20000 | Maximum time {ms} to wait for chainProof after sending out getChainProof before dropping the peer. |
ACCOUNTS_TREE_CHUNK_REQUEST_TIMEOUT |
5000 | Maximum time {ms} to wait for accounts tree chunk after requesting it to a peer before dropping that peer. |
SYNC_ATTEMPTS_MAX |
5 | Maximum number of blockchain sync retries before closing the connection. |
GETBLOCKS_VECTORS_MAX |
500 | Maximum number of inventory vectors to sent in the response for onGetBlocks . |
Light Consensus
Parameter | Value | Description |
---|---|---|
SYNC_THROTTLE |
1000 | Time {ms} for the node to wait for more peers to connect before start syncing. |
Nano Mempool
Parameter | Value | Description |
---|---|---|
TRANSACTIONS_MAX_COUNT |
50000 | Maximum lenght of the mempool, oldest transactions are evicted from the mempool if it grows too large than this value. |
TRANSACTIONS_EVICT_COUNT |
5000 | Amount of transaction to be evicted each time. |
Nano Consensus Agent
Parameter | Value | Description |
---|---|---|
CHAINPROOF_REQUEST_TIMEOUT |
30000 | Maximum time {ms} to wait for chainProof after sending out getChainProof before dropping the peer. |
ACCOUNTSPROOF_REQUEST_TIMEOUT |
5000 | Maximum time {ms} to wait for accounts proof after requesting it to a peer before dropping that peer. |
TRANSACTIONSPROOF_REQUEST_TIMEOUT |
10000 | Maximum time {ms} to wait for transaction proof after requesting it to a peer before dropping that peer. |
TRANSACTIONS_REQUEST_TIMEOUT |
15000 | Maximum time {ms} to wait for transactions after sending out getTransactions before dropping the peer. |
Nano Consensus
Parameter | Value | Description |
---|---|---|
SYNC_THROTTLE |
1000 | Time {ms} for the node to wait for more peers to connect before start syncing. |
Nano Chain
Parameter | Value | Description |
---|---|---|
ERR_ORPHAN |
-2 | Indicates the block’s immediate predecessor is not part of the chain. |
ERR_INVALID |
-1 | Idicates the block is not a full block (includes block body) or match with an intrinsic variant. (?) |
OK_KNOWN |
0 | Indicates the node already knows this block.. |
OK_EXTENDED |
1 | Indicates the block extends our current main chain. |
OK_REBRANCHED |
2 | Indicates the block fork has become the hardest chain and node will rebranch to it. |
OK_FORKED |
3 | Indicates a new fork was created. |