#pragma once #include #include namespace CryptoNote { namespace parameters { 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; const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 0x33; const size_t CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW = 60; const uint64_t CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT = 60 * 60 * 2; const size_t BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW = 30; const uint64_t MONEY_SUPPLY = UINT64_C(666666666666666); const unsigned EMISSION_SPEED_FACTOR = 17; static_assert(EMISSION_SPEED_FACTOR <= 8 * sizeof(uint64_t), "Bad EMISSION_SPEED_FACTOR"); const size_t CRYPTONOTE_REWARD_BLOCKS_WINDOW = 100; const size_t CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE = 32000; const size_t CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE = 600; const size_t CRYPTONOTE_DISPLAY_DECIMAL_POINT = 8; const uint64_t MINIMUM_FEE = 100000; const uint64_t DEFAULT_DUST_THRESHOLD = MINIMUM_FEE; const uint64_t DIFFICULTY_TARGET = 200; const uint64_t EXPECTED_NUMBER_OF_BLOCKS_PER_DAY = 24 * 60 * 60 / DIFFICULTY_TARGET; const size_t DIFFICULTY_WINDOW = EXPECTED_NUMBER_OF_BLOCKS_PER_DAY; const size_t DIFFICULTY_CUT = 60; const size_t DIFFICULTY_LAG = 15; static_assert(2 * DIFFICULTY_CUT <= DIFFICULTY_WINDOW - 2, "Bad DIFFICULTY_WINDOW or DIFFICULTY_CUT"); 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; 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; const uint64_t CRYPTONOTE_MEMPOOL_TX_LIVETIME = 60 * 60 * 14; const uint64_t CRYPTONOTE_MEMPOOL_TX_FROM_ALT_BLOCK_LIVETIME = 60 * 60 * 24 * 7; const uint64_t CRYPTONOTE_NUMBER_OF_PERIODS_TO_FORGET_TX_DELETED_FROM_POOL = 7; const size_t FUSION_TX_MAX_SIZE = CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE * 30 / 100; const size_t FUSION_TX_MIN_INPUT_COUNT = 12; const size_t FUSION_TX_MIN_IN_OUT_COUNT_RATIO = 4; 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"; const char CRYPTONOTE_BLOCKCHAIN_INDICES_FILENAME[] = "blockchainindices.dat"; const char MINER_CONFIG_FILE_NAME[] = "miner_conf.json"; } const char CRYPTONOTE_NAME[] = "xmdcoin"; const char GENESIS_COINBASE_TX_HEX[] = "013c01ff0001eceda8f912029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd0880712101ac252edf7d537521b9be9e764a2888d295db8c4d4c7105314b11e9ea32591bb9"; 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; const int P2P_DEFAULT_PORT = 63666; const int RPC_DEFAULT_PORT = 63667; const size_t P2P_LOCAL_WHITE_PEERLIST_LIMIT = 1000; const size_t P2P_LOCAL_GRAY_PEERLIST_LIMIT = 5000; const size_t P2P_CONNECTION_MAX_WRITE_BUFFER_SIZE = 16 * 1024 * 1024; // 16 MB const uint32_t P2P_DEFAULT_CONNECTIONS_COUNT = 8; const size_t P2P_DEFAULT_WHITELIST_CONNECTIONS_PERCENT = 70; 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 const char P2P_STAT_TRUSTED_PUB_KEY[] = "8f80f9a5a434a9f1510d13336228debfee9c918ce505efe225d8c94d045fa115"; const std::initializer_list SEED_NODES = { "seed1.xmdcoin.com:63666", "seed2.xmdcoin.com:63666", "seed3.xmdcoin.com:63666", "seed4.xmdcoin.com:63666", "pool.xmdcoin.com:63666" }; struct CheckpointData { uint32_t height; const char* blockId; }; #ifdef __GNUC__ __attribute__((unused)) #endif const std::initializer_list CHECKPOINTS = { //{ 10000, "84b6345731e2702cdaadc6ce5e5238c4ca5ecf48e3447136b2ed829b8a95f3ad" }, }; } #define ALLOW_DEBUG_COMMANDS