2015-04-23 16:07:22 +00:00
|
|
|
// Copyright (c) 2011-2015 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
|
|
|
|
2014-08-13 10:51:37 +00:00
|
|
|
namespace cryptonote {
|
|
|
|
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;
|
2014-07-10 16:47:56 +00:00
|
|
|
//TODO Currency-specific address prefix
|
2015-04-23 16:07:22 +00:00
|
|
|
const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = ;
|
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)
|
2015-04-23 16:07:22 +00:00
|
|
|
const uint64_t MONEY_SUPPLY = ;
|
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;
|
2015-04-23 16:07:22 +00:00
|
|
|
//TODO Define minimum fee for transactions
|
|
|
|
const uint64_t MINIMUM_FEE = ;
|
|
|
|
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
|
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";
|
|
|
|
const char MINER_CONFIG_FILE_NAME[] = "miner_conf.json";
|
|
|
|
} // parameters
|
2014-03-03 22:07:58 +00:00
|
|
|
|
2015-04-23 16:07:22 +00:00
|
|
|
//TODO Put here the name of your currency
|
|
|
|
const char CRYPTONOTE_NAME[] = "";
|
|
|
|
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
|
|
|
|
2014-06-21 13:41:43 +00:00
|
|
|
//TODO This port will be used by the daemon to establish connections with p2p network
|
2015-04-23 16:07:22 +00:00
|
|
|
const int P2P_DEFAULT_PORT = ;
|
2014-06-21 13:41:43 +00:00
|
|
|
//TODO This port will be used by the daemon to interact with simlewallet
|
2015-04-23 16:07:22 +00:00
|
|
|
const int RPC_DEFAULT_PORT = ;
|
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;
|
|
|
|
|
|
|
|
const uint32_t P2P_DEFAULT_CONNECTIONS_COUNT = 8;
|
|
|
|
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
|
|
|
const size_t P2P_DEFAULT_WHITELIST_CONNECTIONS_PERCENT = 70;
|
|
|
|
|
|
|
|
const unsigned THREAD_STACK_SIZE = 5 * 1024 * 1024;
|
|
|
|
|
2015-04-23 16:07:22 +00:00
|
|
|
//TODO Add here your network seed nodes
|
|
|
|
const std::initializer_list<const char*> SEED_NODES = {
|
|
|
|
//"your_seed_ip1.com:8080",
|
|
|
|
//"your_seed_ip2.com:8080",
|
2014-08-13 10:51:37 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct CheckpointData {
|
|
|
|
uint64_t height;
|
|
|
|
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-04-23 16:07:22 +00:00
|
|
|
|
2014-08-13 10:51:37 +00:00
|
|
|
} // cryptonote
|
2014-03-03 22:07:58 +00:00
|
|
|
|
|
|
|
#define ALLOW_DEBUG_COMMANDS
|