mirror of
https://github.com/monero-project/monero.git
synced 2025-10-11 22:30:38 -04:00
Merge pull request #3854
149da42
db_lmdb: enable batch transactions by default (stoffu)34cb6b4
add --regtest and --fixed-difficulty for regression testing (vicsn)9e1403e
update get_info RPC and bump RPC version (vicsn)207b66e
first new functional tests (vicsn)
This commit is contained in:
commit
025187e6c9
27 changed files with 719 additions and 16 deletions
|
@ -194,6 +194,7 @@ namespace cryptonote
|
|||
res.mainnet = m_nettype == MAINNET;
|
||||
res.testnet = m_nettype == TESTNET;
|
||||
res.stagenet = m_nettype == STAGENET;
|
||||
res.nettype = m_nettype == MAINNET ? "mainnet" : m_nettype == TESTNET ? "testnet" : m_nettype == STAGENET ? "stagenet" : "fakechain";
|
||||
res.cumulative_difficulty = m_core.get_blockchain_storage().get_db().get_block_cumulative_difficulty(res.height - 1);
|
||||
res.block_size_limit = m_core.get_blockchain_storage().get_current_cumulative_blocksize_limit();
|
||||
res.block_size_median = m_core.get_blockchain_storage().get_current_cumulative_blocksize_median();
|
||||
|
@ -1210,6 +1211,68 @@ namespace cryptonote
|
|||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
bool core_rpc_server::on_generateblocks(const COMMAND_RPC_GENERATEBLOCKS::request& req, COMMAND_RPC_GENERATEBLOCKS::response& res, epee::json_rpc::error& error_resp)
|
||||
{
|
||||
PERF_TIMER(on_generateblocks);
|
||||
|
||||
CHECK_CORE_READY();
|
||||
|
||||
res.status = CORE_RPC_STATUS_OK;
|
||||
|
||||
if(m_core.get_nettype() != FAKECHAIN)
|
||||
{
|
||||
error_resp.code = CORE_RPC_ERROR_CODE_REGTEST_REQUIRED;
|
||||
error_resp.message = "Regtest required when generating blocks";
|
||||
return false;
|
||||
}
|
||||
|
||||
COMMAND_RPC_GETBLOCKTEMPLATE::request template_req;
|
||||
COMMAND_RPC_GETBLOCKTEMPLATE::response template_res;
|
||||
COMMAND_RPC_SUBMITBLOCK::request submit_req;
|
||||
COMMAND_RPC_SUBMITBLOCK::response submit_res;
|
||||
|
||||
template_req.reserve_size = 1;
|
||||
template_req.wallet_address = req.wallet_address;
|
||||
submit_req.push_back(boost::value_initialized<std::string>());
|
||||
res.height = m_core.get_blockchain_storage().get_current_blockchain_height();
|
||||
|
||||
bool r;
|
||||
|
||||
for(size_t i = 0; i < req.amount_of_blocks; i++)
|
||||
{
|
||||
r = on_getblocktemplate(template_req, template_res, error_resp);
|
||||
res.status = template_res.status;
|
||||
|
||||
if (!r) return false;
|
||||
|
||||
blobdata blockblob;
|
||||
if(!string_tools::parse_hexstr_to_binbuff(template_res.blocktemplate_blob, blockblob))
|
||||
{
|
||||
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_BLOCKBLOB;
|
||||
error_resp.message = "Wrong block blob";
|
||||
return false;
|
||||
}
|
||||
block b = AUTO_VAL_INIT(b);
|
||||
if(!parse_and_validate_block_from_blob(blockblob, b))
|
||||
{
|
||||
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_BLOCKBLOB;
|
||||
error_resp.message = "Wrong block blob";
|
||||
return false;
|
||||
}
|
||||
miner::find_nonce_for_given_block(b, template_res.difficulty, template_res.height);
|
||||
|
||||
submit_req.front() = string_tools::buff_to_hex_nodelimer(block_to_blob(b));
|
||||
r = on_submitblock(submit_req, submit_res, error_resp);
|
||||
res.status = submit_res.status;
|
||||
|
||||
if (!r) return false;
|
||||
|
||||
res.height = template_res.height;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
uint64_t core_rpc_server::get_block_reward(const block& blk)
|
||||
{
|
||||
uint64_t reward = 0;
|
||||
|
@ -1565,6 +1628,7 @@ namespace cryptonote
|
|||
res.mainnet = m_nettype == MAINNET;
|
||||
res.testnet = m_nettype == TESTNET;
|
||||
res.stagenet = m_nettype == STAGENET;
|
||||
res.nettype = m_nettype == MAINNET ? "mainnet" : m_nettype == TESTNET ? "testnet" : m_nettype == STAGENET ? "stagenet" : "fakechain";
|
||||
res.cumulative_difficulty = m_core.get_blockchain_storage().get_db().get_block_cumulative_difficulty(res.height - 1);
|
||||
res.block_size_limit = m_core.get_blockchain_storage().get_current_cumulative_blocksize_limit();
|
||||
res.block_size_median = m_core.get_blockchain_storage().get_current_cumulative_blocksize_median();
|
||||
|
|
|
@ -129,6 +129,7 @@ namespace cryptonote
|
|||
MAP_JON_RPC_WE("getblocktemplate", on_getblocktemplate, COMMAND_RPC_GETBLOCKTEMPLATE)
|
||||
MAP_JON_RPC_WE("submit_block", on_submitblock, COMMAND_RPC_SUBMITBLOCK)
|
||||
MAP_JON_RPC_WE("submitblock", on_submitblock, COMMAND_RPC_SUBMITBLOCK)
|
||||
MAP_JON_RPC_WE_IF("generateblocks", on_generateblocks, COMMAND_RPC_GENERATEBLOCKS, !m_restricted)
|
||||
MAP_JON_RPC_WE("get_last_block_header", on_get_last_block_header, COMMAND_RPC_GET_LAST_BLOCK_HEADER)
|
||||
MAP_JON_RPC_WE("getlastblockheader", on_get_last_block_header, COMMAND_RPC_GET_LAST_BLOCK_HEADER)
|
||||
MAP_JON_RPC_WE("get_block_header_by_hash", on_get_block_header_by_hash, COMMAND_RPC_GET_BLOCK_HEADER_BY_HASH)
|
||||
|
@ -196,6 +197,7 @@ namespace cryptonote
|
|||
bool on_getblockhash(const COMMAND_RPC_GETBLOCKHASH::request& req, COMMAND_RPC_GETBLOCKHASH::response& res, epee::json_rpc::error& error_resp);
|
||||
bool on_getblocktemplate(const COMMAND_RPC_GETBLOCKTEMPLATE::request& req, COMMAND_RPC_GETBLOCKTEMPLATE::response& res, epee::json_rpc::error& error_resp);
|
||||
bool on_submitblock(const COMMAND_RPC_SUBMITBLOCK::request& req, COMMAND_RPC_SUBMITBLOCK::response& res, epee::json_rpc::error& error_resp);
|
||||
bool on_generateblocks(const COMMAND_RPC_GENERATEBLOCKS::request& req, COMMAND_RPC_GENERATEBLOCKS::response& res, epee::json_rpc::error& error_resp);
|
||||
bool on_get_last_block_header(const COMMAND_RPC_GET_LAST_BLOCK_HEADER::request& req, COMMAND_RPC_GET_LAST_BLOCK_HEADER::response& res, epee::json_rpc::error& error_resp);
|
||||
bool on_get_block_header_by_hash(const COMMAND_RPC_GET_BLOCK_HEADER_BY_HASH::request& req, COMMAND_RPC_GET_BLOCK_HEADER_BY_HASH::response& res, epee::json_rpc::error& error_resp);
|
||||
bool on_get_block_header_by_height(const COMMAND_RPC_GET_BLOCK_HEADER_BY_HEIGHT::request& req, COMMAND_RPC_GET_BLOCK_HEADER_BY_HEIGHT::response& res, epee::json_rpc::error& error_resp);
|
||||
|
|
|
@ -49,7 +49,7 @@ namespace cryptonote
|
|||
// advance which version they will stop working with
|
||||
// Don't go over 32767 for any of these
|
||||
#define CORE_RPC_VERSION_MAJOR 1
|
||||
#define CORE_RPC_VERSION_MINOR 20
|
||||
#define CORE_RPC_VERSION_MINOR 21
|
||||
#define MAKE_CORE_RPC_VERSION(major,minor) (((major)<<16)|(minor))
|
||||
#define CORE_RPC_VERSION MAKE_CORE_RPC_VERSION(CORE_RPC_VERSION_MAJOR, CORE_RPC_VERSION_MINOR)
|
||||
|
||||
|
@ -955,6 +955,7 @@ namespace cryptonote
|
|||
bool mainnet;
|
||||
bool testnet;
|
||||
bool stagenet;
|
||||
std::string nettype;
|
||||
std::string top_block_hash;
|
||||
uint64_t cumulative_difficulty;
|
||||
uint64_t block_size_limit;
|
||||
|
@ -984,6 +985,7 @@ namespace cryptonote
|
|||
KV_SERIALIZE(mainnet)
|
||||
KV_SERIALIZE(testnet)
|
||||
KV_SERIALIZE(stagenet)
|
||||
KV_SERIALIZE(nettype)
|
||||
KV_SERIALIZE(top_block_hash)
|
||||
KV_SERIALIZE(cumulative_difficulty)
|
||||
KV_SERIALIZE(block_size_limit)
|
||||
|
@ -1151,6 +1153,31 @@ namespace cryptonote
|
|||
END_KV_SERIALIZE_MAP()
|
||||
};
|
||||
};
|
||||
|
||||
struct COMMAND_RPC_GENERATEBLOCKS
|
||||
{
|
||||
struct request
|
||||
{
|
||||
uint64_t amount_of_blocks;
|
||||
std::string wallet_address;
|
||||
|
||||
BEGIN_KV_SERIALIZE_MAP()
|
||||
KV_SERIALIZE(amount_of_blocks)
|
||||
KV_SERIALIZE(wallet_address)
|
||||
END_KV_SERIALIZE_MAP()
|
||||
};
|
||||
|
||||
struct response
|
||||
{
|
||||
uint64_t height;
|
||||
std::string status;
|
||||
|
||||
BEGIN_KV_SERIALIZE_MAP()
|
||||
KV_SERIALIZE(height)
|
||||
KV_SERIALIZE(status)
|
||||
END_KV_SERIALIZE_MAP()
|
||||
};
|
||||
};
|
||||
|
||||
struct block_header_response
|
||||
{
|
||||
|
|
|
@ -42,5 +42,6 @@
|
|||
#define CORE_RPC_ERROR_CODE_WRONG_BLOCKBLOB_SIZE -10
|
||||
#define CORE_RPC_ERROR_CODE_UNSUPPORTED_RPC -11
|
||||
#define CORE_RPC_ERROR_CODE_MINING_TO_SUBADDRESS -12
|
||||
#define CORE_RPC_ERROR_CODE_REGTEST_REQUIRED -13
|
||||
|
||||
|
||||
|
|
|
@ -181,6 +181,7 @@ namespace rpc
|
|||
bool mainnet;
|
||||
bool testnet;
|
||||
bool stagenet;
|
||||
std::string nettype;
|
||||
crypto::hash top_block_hash;
|
||||
uint64_t cumulative_difficulty;
|
||||
uint64_t block_size_limit;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue