Classes

Policy

Properties

BATCHES_PER_EPOCH

`readonly` `static` BATCHES\_PER\_EPOCH: `number`

How many batches constitute an epoch


BLOCK_SEPARATION_TIME

`readonly` `static` BLOCK\_SEPARATION\_TIME: `bigint`

The optimal time in milliseconds between blocks (1s)


BLOCKS_PER_BATCH

`readonly` `static` BLOCKS\_PER\_BATCH: `number`

Length of a batch including the macro block


BLOCKS_PER_EPOCH

`readonly` `static` BLOCKS\_PER\_EPOCH: `number`

Length of an epoch including the election block


BLS_CACHE_MAX_CAPACITY

`readonly` `static` BLS\_CACHE\_MAX\_CAPACITY: `number`

The maximum size of the BLS public key cache.


COINBASE_ADDRESS

`readonly` `static` COINBASE\_ADDRESS: `string`

This is the address for the coinbase. Note that this is not a real account, it is just the address we use to denote that some coins originated from a coinbase event.


F_PLUS_ONE

`readonly` `static` F\_PLUS\_ONE: `number`

Calculates f+1 slots which is the minimum number of slots necessary to be guaranteed to have at least one honest slots. That's because from a total of 3f+1 slots at most f will be malicious. It is calculated as ceil(SLOTS/3) and we use the formula ceil(x/y) = (x+y-1)/y for the ceiling division.


GENESIS_BLOCK_NUMBER

`readonly` `static` GENESIS\_BLOCK\_NUMBER: `number`

Genesis block number


HISTORY_CHUNKS_MAX_SIZE

`readonly` `static` HISTORY\_CHUNKS\_MAX\_SIZE: `bigint`

Maximum size of history chunks. 25 MB.


JAIL_EPOCHS

`readonly` `static` JAIL\_EPOCHS: `number`

The number of epochs a validator is put in jail for. The jailing only happens for severe offenses.


MAX_SIZE_MICRO_BODY

`readonly` `static` MAX\_SIZE\_MICRO\_BODY: `number`

The maximum allowed size, in bytes, for a micro block body.


MIN_EPOCHS_STORED

`readonly` `static` MIN\_EPOCHS\_STORED: `number`

Minimum number of epochs that the ChainStore will store fully


MIN_PRODUCER_TIMEOUT

`readonly` `static` MIN\_PRODUCER\_TIMEOUT: `bigint`

The minimum timeout in milliseconds for a validator to produce a block (4s)


MINIMUM_REWARDS_PERCENTAGE

`readonly` `static` MINIMUM\_REWARDS\_PERCENTAGE: `number`

The minimum rewards percentage that we allow


SLOTS

`readonly` `static` SLOTS: `number`

Number of available validator slots. Note that a single validator may own several validator slots.


STAKING_CONTRACT_ADDRESS

`readonly` `static` STAKING\_CONTRACT\_ADDRESS: `string`

This is the address for the staking contract.


STATE_CHUNKS_MAX_SIZE

`readonly` `static` STATE\_CHUNKS\_MAX\_SIZE: `number`

Maximum size of accounts trie chunks.


TIMESTAMP_MAX_DRIFT

`readonly` `static` TIMESTAMP\_MAX\_DRIFT: `bigint`

The maximum drift, in milliseconds, that is allowed between any block's timestamp and the node's system time. We only care about drifting to the future.


TOTAL_SUPPLY

`readonly` `static` TOTAL\_SUPPLY: `bigint`

Total supply in units.


TRANSACTION_VALIDITY_WINDOW

`readonly` `static` TRANSACTION\_VALIDITY\_WINDOW: `number`

Number of batches a transaction is valid with Albatross consensus.


TRANSACTION_VALIDITY_WINDOW_BLOCKS

`readonly` `static` TRANSACTION\_VALIDITY\_WINDOW\_BLOCKS: `number`

Number of blocks a transaction is valid with Albatross consensus.


TWO_F_PLUS_ONE

`readonly` `static` TWO\_F\_PLUS\_ONE: `number`

Calculates 2f+1 slots which is the minimum number of slots necessary to produce a macro block, a skip block and other actions. It is also the minimum number of slots necessary to be guaranteed to have a majority of honest slots. That's because from a total of 3f+1 slots at most f will be malicious. If in a group of 2f+1 slots we have f malicious ones (which is the worst case scenario), that still leaves us with f+1 honest slots. Which is more than the f slots that are not in this group (which must all be honest). It is calculated as ceil(SLOTS*2/3) and we use the formula ceil(x/y) = (x+y-1)/y for the ceiling division.


VALIDATOR_DEPOSIT

`readonly` `static` VALIDATOR\_DEPOSIT: `bigint`

The deposit necessary to create a validator in Lunas (1 NIM = 100,000 Lunas). A validator is someone who actually participates in block production. They are akin to miners in proof-of-work.


VERSION

`readonly` `static` VERSION: `number`

The current version number of the protocol. Changing this always results in a hard fork.

Methods

free()

free(): `void`

batchAt()

`static` batchAt(`block_number`): `number`

Returns the batch number at a given block_number (height)

ParameterType
Firstnumber

batchDelayPenalty()

`static` batchDelayPenalty(`delay`): `number`

Returns the percentage reduction that should be applied to the rewards due to a delayed batch. This function returns a float in the range [0, 1] I.e 1 means that the full rewards should be given, whereas 0.5 means that half of the rewards should be given The input to this function is the batch delay, in milliseconds The function is: [(1 - MINIMUM_REWARDS_PERCENTAGE) * BLOCKS_DELAY_DECAY ^ (t^2)] + MINIMUM_REWARDS_PERCENTAGE

ParameterType
Firstbigint

batchIndexAt()

`static` batchIndexAt(`block_number`): `number`

Returns the batch index at a given block number. The batch index is the number of a block relative to the batch it is in. For example, the first block of any batch always has an batch index of 0.

ParameterType
Firstnumber

blockAfterJail()

`static` blockAfterJail(`block_number`): `number`

Returns the first block after the jail period of a given block number has ended.

ParameterType
Firstnumber

blockAfterReportingWindow()

`static` blockAfterReportingWindow(`block_number`): `number`

Returns the first block after the reporting window of a given block number has ended.

ParameterType
Firstnumber

electionBlockAfter()

`static` electionBlockAfter(`block_number`): `number`

Returns the number (height) of the next election macro block after a given block number (height).

ParameterType
Firstnumber

electionBlockBefore()

`static` electionBlockBefore(`block_number`): `number`

Returns the block number (height) of the preceding election macro block before a given block number (height). If the given block number is an election macro block, it returns the election macro block before it.

ParameterType
Firstnumber

electionBlockOf()

`static` electionBlockOf(`epoch`): `number`

Returns the block number of the election macro block of the given epoch (which is always the last block). If the index is out of bounds, None is returned

ParameterType
Firstnumber

epochAt()

`static` epochAt(`block_number`): `number`

Returns the epoch number at a given block number (height).

ParameterType
Firstnumber

epochIndexAt()

`static` epochIndexAt(`block_number`): `number`

Returns the epoch index at a given block number. The epoch index is the number of a block relative to the epoch it is in. For example, the first block of any epoch always has an epoch index of 0.

ParameterType
Firstnumber

firstBatchOfEpoch()

`static` firstBatchOfEpoch(`block_number`): `boolean`

Returns a boolean expressing if the batch at a given block number (height) is the first batch of the epoch.

ParameterType
Firstnumber

firstBlockOf()

`static` firstBlockOf(`epoch`): `number`

Returns the block number of the first block of the given epoch (which is always a micro block). If the index is out of bounds, None is returned

ParameterType
Firstnumber

firstBlockOfBatch()

`static` firstBlockOfBatch(`batch`): `number`

Returns the block number of the first block of the given batch (which is always a micro block). If the index is out of bounds, None is returned

ParameterType
Firstnumber

isElectionBlockAt()

`static` isElectionBlockAt(`block_number`): `boolean`

Returns a boolean expressing if the block at a given block number (height) is an election macro block.

ParameterType
Firstnumber

isMacroBlockAt()

`static` isMacroBlockAt(`block_number`): `boolean`

Returns a boolean expressing if the block at a given block number (height) is a macro block.

ParameterType
Firstnumber

isMicroBlockAt()

`static` isMicroBlockAt(`block_number`): `boolean`

Returns a boolean expressing if the block at a given block number (height) is a micro block.

ParameterType
Firstnumber

lastBlockOfReportingWindow()

`static` lastBlockOfReportingWindow(`block_number`): `number`

Returns the block height for the last block of the reporting window of a given block number. Note: This window is meant for reporting malicious behaviour (aka jailable behaviour).

ParameterType
Firstnumber

lastElectionBlock()

`static` lastElectionBlock(`block_number`): `number`

Returns the block number (height) of the last election macro block at a given block number (height). If the given block number is an election macro block, then it returns that block number.

ParameterType
Firstnumber

lastMacroBlock()

`static` lastMacroBlock(`block_number`): `number`

Returns the block number (height) of the last macro block at a given block number (height). If the given block number is a macro block, then it returns that block number.

ParameterType
Firstnumber

macroBlockAfter()

`static` macroBlockAfter(`block_number`): `number`

Returns the block number (height) of the next macro block after a given block number (height). If the given block number is a macro block, it returns the macro block after it.

ParameterType
Firstnumber

macroBlockBefore()

`static` macroBlockBefore(`block_number`): `number`

Returns the block number (height) of the preceding macro block before a given block number (height). If the given block number is a macro block, it returns the macro block before it.

ParameterType
Firstnumber

macroBlockOf()

`static` macroBlockOf(`batch`): `number`

Returns the block number of the macro block (checkpoint or election) of the given batch (which is always the last block). If the index is out of bounds, None is returned

ParameterType
Firstnumber

supplyAt()

`static` supplyAt(`genesis_supply`, `genesis_time`, `current_time`): `bigint`

Returns the supply at a given time (as Unix time) in Lunas (1 NIM = 100,000 Lunas). It is calculated using the following formula:

supply(t) = total_supply - (total_supply - genesis_supply) * supply_decay^t

Where t is the time in milliseconds since the PoS genesis block and genesis_supply is the supply at the genesis of the Nimiq 2.0 chain.

ParameterType
Firstbigint