2016-01-18 15:33:29 +00:00
// Copyright (c) 2011-2016 The Cryptonote developers
2014-03-03 22:07:58 +00:00
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
# pragma once
2014-08-13 10:51:37 +00:00
# include <cstdint>
2015-04-23 16:07:22 +00:00
# include <initializer_list>
2014-03-03 22:07:58 +00:00
2015-05-27 12:08:46 +00:00
namespace CryptoNote {
2014-08-13 10:51:37 +00:00
namespace parameters {
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const uint64_t CRYPTONOTE_MAX_BLOCK_NUMBER = 500000000 ;
const size_t CRYPTONOTE_MAX_BLOCK_BLOB_SIZE = 500000000 ;
const size_t CRYPTONOTE_MAX_TX_SIZE = 1000000000 ;
2017-12-28 19:37:11 +00:00
const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 0xdd ;
2014-06-21 13:41:43 +00:00
//TODO Choose maturity period for your currency
2015-04-23 16:07:22 +00:00
const size_t CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW = 60 ;
2014-08-13 10:51:37 +00:00
const uint64_t CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT = 60 * 60 * 2 ;
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const size_t BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW = 60 ;
2014-03-03 22:07:58 +00:00
2014-06-21 13:41:43 +00:00
//TODO Specify total number of available coins
//TODO ((uint64_t)(-1)) equals to 18446744073709551616 coins
//TODO or you can define number explicitly UINT64_C(858986905600000000)
2017-12-28 19:37:11 +00:00
const uint64_t MONEY_SUPPLY = ( uint64_t ) ( - 1 ) ;
2014-08-13 10:51:37 +00:00
const unsigned EMISSION_SPEED_FACTOR = 18 ;
static_assert ( EMISSION_SPEED_FACTOR < = 8 * sizeof ( uint64_t ) , " Bad EMISSION_SPEED_FACTOR " ) ;
2014-04-02 16:00:17 +00:00
2014-06-24 19:30:02 +00:00
//TODO Define number of blocks for block size median calculation
2014-08-13 10:51:37 +00:00
const size_t CRYPTONOTE_REWARD_BLOCKS_WINDOW = 100 ;
2015-04-23 16:07:22 +00:00
const size_t CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE = 10000 ; //size of block (bytes) after which reward for block calculated using block size
2014-08-13 10:51:37 +00:00
const size_t CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE = 600 ;
2014-06-24 19:30:02 +00:00
//TODO Define number of digits
2014-08-13 10:51:37 +00:00
const size_t CRYPTONOTE_DISPLAY_DECIMAL_POINT = 8 ;
2017-12-28 19:37:11 +00:00
const uint64_t MINIMUM_FEE = 10000 ;
2015-04-23 16:07:22 +00:00
const uint64_t DEFAULT_DUST_THRESHOLD = MINIMUM_FEE ;
2014-03-03 22:07:58 +00:00
2014-06-24 19:30:02 +00:00
//TODO Define preferred block's target time
2014-08-13 10:51:37 +00:00
const uint64_t DIFFICULTY_TARGET = 120 ; // seconds
const uint64_t EXPECTED_NUMBER_OF_BLOCKS_PER_DAY = 24 * 60 * 60 / DIFFICULTY_TARGET ;
2015-04-23 16:07:22 +00:00
//TODO There are options to tune CryptoNote's difficulty retargeting function.
2014-06-21 13:41:43 +00:00
//TODO We recommend not to change it.
2014-08-13 10:51:37 +00:00
const size_t DIFFICULTY_WINDOW = EXPECTED_NUMBER_OF_BLOCKS_PER_DAY ; // blocks
const size_t DIFFICULTY_CUT = 60 ; // timestamps to cut after sorting
2015-04-23 16:07:22 +00:00
const size_t DIFFICULTY_LAG = 15 ;
2014-08-13 10:51:37 +00:00
static_assert ( 2 * DIFFICULTY_CUT < = DIFFICULTY_WINDOW - 2 , " Bad DIFFICULTY_WINDOW or DIFFICULTY_CUT " ) ;
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const size_t MAX_BLOCK_SIZE_INITIAL = 20 * 1024 ;
const uint64_t MAX_BLOCK_SIZE_GROWTH_SPEED_NUMERATOR = 100 * 1024 ;
const uint64_t MAX_BLOCK_SIZE_GROWTH_SPEED_DENOMINATOR = 365 * 24 * 60 * 60 / DIFFICULTY_TARGET ;
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const uint64_t CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS = 1 ;
const uint64_t CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_SECONDS = DIFFICULTY_TARGET * CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS ;
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const uint64_t CRYPTONOTE_MEMPOOL_TX_LIVETIME = 60 * 60 * 24 ; //seconds, one day
const uint64_t CRYPTONOTE_MEMPOOL_TX_FROM_ALT_BLOCK_LIVETIME = 60 * 60 * 24 * 7 ; //seconds, one week
2015-07-15 12:23:00 +00:00
const uint64_t CRYPTONOTE_NUMBER_OF_PERIODS_TO_FORGET_TX_DELETED_FROM_POOL = 7 ; // CRYPTONOTE_NUMBER_OF_PERIODS_TO_FORGET_TX_DELETED_FROM_POOL * CRYPTONOTE_MEMPOOL_TX_LIVETIME = time to forget tx
2014-08-13 10:51:37 +00:00
2015-08-11 14:33:19 +00:00
const size_t FUSION_TX_MAX_SIZE = CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE * 30 / 100 ;
2015-08-27 18:55:14 +00:00
const size_t FUSION_TX_MIN_INPUT_COUNT = 12 ;
const size_t FUSION_TX_MIN_IN_OUT_COUNT_RATIO = 4 ;
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const char CRYPTONOTE_BLOCKS_FILENAME [ ] = " blocks.dat " ;
const char CRYPTONOTE_BLOCKINDEXES_FILENAME [ ] = " blockindexes.dat " ;
const char CRYPTONOTE_BLOCKSCACHE_FILENAME [ ] = " blockscache.dat " ;
const char CRYPTONOTE_POOLDATA_FILENAME [ ] = " poolstate.bin " ;
const char P2P_NET_DATA_FILENAME [ ] = " p2pstate.bin " ;
2015-07-30 15:22:07 +00:00
const char CRYPTONOTE_BLOCKCHAIN_INDICES_FILENAME [ ] = " blockchainindices.dat " ;
2014-08-13 10:51:37 +00:00
const char MINER_CONFIG_FILE_NAME [ ] = " miner_conf.json " ;
} // parameters
2014-03-03 22:07:58 +00:00
2017-12-28 19:37:11 +00:00
const char CRYPTONOTE_NAME [ ] = " danicoin " ;
2015-04-23 16:07:22 +00:00
const char GENESIS_COINBASE_TX_HEX [ ] = " " ;
2014-03-03 22:07:58 +00:00
2014-08-13 10:51:37 +00:00
const uint8_t CURRENT_TRANSACTION_VERSION = 1 ;
const uint8_t BLOCK_MAJOR_VERSION_1 = 1 ;
const uint8_t BLOCK_MINOR_VERSION_0 = 0 ;
const size_t BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT = 10000 ; //by default, blocks ids count in synchronizing
const size_t BLOCKS_SYNCHRONIZING_DEFAULT_COUNT = 200 ; //by default, blocks count in blocks downloading
const size_t COMMAND_RPC_GET_BLOCKS_FAST_MAX_COUNT = 1000 ;
2014-03-03 22:07:58 +00:00
2017-12-28 19:37:11 +00:00
const int P2P_DEFAULT_PORT = 14086 ;
const int RPC_DEFAULT_PORT = 25096 ;
2014-08-13 10:51:37 +00:00
const size_t P2P_LOCAL_WHITE_PEERLIST_LIMIT = 1000 ;
const size_t P2P_LOCAL_GRAY_PEERLIST_LIMIT = 5000 ;
2015-07-30 15:22:07 +00:00
const size_t P2P_CONNECTION_MAX_WRITE_BUFFER_SIZE = 16 * 1024 * 1024 ; // 16 MB
2014-08-13 10:51:37 +00:00
const uint32_t P2P_DEFAULT_CONNECTIONS_COUNT = 8 ;
2015-07-30 15:22:07 +00:00
const size_t P2P_DEFAULT_WHITELIST_CONNECTIONS_PERCENT = 70 ;
2014-08-13 10:51:37 +00:00
const uint32_t P2P_DEFAULT_HANDSHAKE_INTERVAL = 60 ; // seconds
const uint32_t P2P_DEFAULT_PACKET_MAX_SIZE = 50000000 ; // 50000000 bytes maximum packet size
const uint32_t P2P_DEFAULT_PEERS_IN_HANDSHAKE = 250 ;
const uint32_t P2P_DEFAULT_CONNECTION_TIMEOUT = 5000 ; // 5 seconds
const uint32_t P2P_DEFAULT_PING_CONNECTION_TIMEOUT = 2000 ; // 2 seconds
const uint64_t P2P_DEFAULT_INVOKE_TIMEOUT = 60 * 2 * 1000 ; // 2 minutes
const size_t P2P_DEFAULT_HANDSHAKE_INVOKE_TIMEOUT = 5000 ; // 5 seconds
2015-04-23 16:07:22 +00:00
const char P2P_STAT_TRUSTED_PUB_KEY [ ] = " 8f80f9a5a434a9f1510d13336228debfee9c918ce505efe225d8c94d045fa115 " ;
2014-08-13 10:51:37 +00:00
2015-04-23 16:07:22 +00:00
const std : : initializer_list < const char * > SEED_NODES = {
2017-12-28 19:37:11 +00:00
" danico.in:14086 " ,
2014-08-13 10:51:37 +00:00
} ;
struct CheckpointData {
2015-07-30 15:22:07 +00:00
uint32_t height ;
2014-08-13 10:51:37 +00:00
const char * blockId ;
} ;
2015-04-23 16:07:22 +00:00
# ifdef __GNUC__
__attribute__ ( ( unused ) )
# endif
// You may add here other checkpoints using the following format:
// {<block height>, "<block hash>"},
const std : : initializer_list < CheckpointData > CHECKPOINTS = {
//{ 10000, "84b6345731e2702cdaadc6ce5e5238c4ca5ecf48e3447136b2ed829b8a95f3ad" },
2014-08-13 10:51:37 +00:00
} ;
2015-05-27 12:08:46 +00:00
} // CryptoNote
2014-03-03 22:07:58 +00:00
# define ALLOW_DEBUG_COMMANDS