@ -44,13 +44,13 @@ static const size_t MAX_GETUTXOS_OUTPOINTS = 15; //allow a max of 15 outpoints t
static constexpr unsigned int MAX_REST_HEADERS_RESULTS = 2000 ;
static const struct {
R et Format rf ;
R ESTResponse Format rf ;
const char * name ;
} rf_names [ ] = {
{ R et Format: : UNDEF , " " } ,
{ R et Format: : BINARY , " bin " } ,
{ R et Format: : HEX , " hex " } ,
{ R et Format: : JSON , " json " } ,
{ R ESTResponse Format: : UNDEF , " " } ,
{ R ESTResponse Format: : BINARY , " bin " } ,
{ R ESTResponse Format: : HEX , " hex " } ,
{ R ESTResponse Format: : JSON , " json " } ,
} ;
struct CCoin {
@ -133,7 +133,7 @@ static ChainstateManager* GetChainman(const std::any& context, HTTPRequest* req)
return node_context - > chainman . get ( ) ;
}
R et Format ParseDataFormat ( std : : string & param , const std : : string & strReq )
R ESTResponse Format ParseDataFormat ( std : : string & param , const std : : string & strReq )
{
const std : : string : : size_type pos = strReq . rfind ( ' . ' ) ;
if ( pos = = std : : string : : npos )
@ -187,7 +187,7 @@ static bool rest_headers(const std::any& context,
if ( ! CheckWarmup ( req ) )
return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
std : : vector < std : : string > path ;
boost : : split ( path , param , boost : : is_any_of ( " / " ) ) ;
@ -225,7 +225,7 @@ static bool rest_headers(const std::any& context,
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
CDataStream ssHeader ( SER_NETWORK , PROTOCOL_VERSION ) ;
for ( const CBlockIndex * pindex : headers ) {
ssHeader < < pindex - > GetBlockHeader ( ) ;
@ -237,7 +237,7 @@ static bool rest_headers(const std::any& context,
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
CDataStream ssHeader ( SER_NETWORK , PROTOCOL_VERSION ) ;
for ( const CBlockIndex * pindex : headers ) {
ssHeader < < pindex - > GetBlockHeader ( ) ;
@ -248,7 +248,7 @@ static bool rest_headers(const std::any& context,
req - > WriteReply ( HTTP_OK , strHex ) ;
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue jsonHeaders ( UniValue : : VARR ) ;
for ( const CBlockIndex * pindex : headers ) {
jsonHeaders . push_back ( blockheaderToJSON ( tip , pindex ) ) ;
@ -272,7 +272,7 @@ static bool rest_block(const std::any& context,
if ( ! CheckWarmup ( req ) )
return false ;
std : : string hashStr ;
const R et Format rf = ParseDataFormat ( hashStr , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( hashStr , strURIPart ) ;
uint256 hash ;
if ( ! ParseHashStr ( hashStr , hash ) )
@ -300,7 +300,7 @@ static bool rest_block(const std::any& context,
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
CDataStream ssBlock ( SER_NETWORK , PROTOCOL_VERSION | RPCSerializationFlags ( ) ) ;
ssBlock < < block ;
std : : string binaryBlock = ssBlock . str ( ) ;
@ -309,7 +309,7 @@ static bool rest_block(const std::any& context,
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
CDataStream ssBlock ( SER_NETWORK , PROTOCOL_VERSION | RPCSerializationFlags ( ) ) ;
ssBlock < < block ;
std : : string strHex = HexStr ( ssBlock ) + " \n " ;
@ -318,7 +318,7 @@ static bool rest_block(const std::any& context,
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue objBlock = blockToJSON ( block , tip , pblockindex , tx_verbosity ) ;
std : : string strJSON = objBlock . write ( ) + " \n " ;
req - > WriteHeader ( " Content-Type " , " application/json " ) ;
@ -347,7 +347,7 @@ static bool rest_filter_header(const std::any& context, HTTPRequest* req, const
if ( ! CheckWarmup ( req ) ) return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
std : : vector < std : : string > uri_parts ;
boost : : split ( uri_parts , param , boost : : is_any_of ( " / " ) ) ;
@ -413,7 +413,7 @@ static bool rest_filter_header(const std::any& context, HTTPRequest* req, const
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
CDataStream ssHeader { SER_NETWORK , PROTOCOL_VERSION } ;
for ( const uint256 & header : filter_headers ) {
ssHeader < < header ;
@ -424,7 +424,7 @@ static bool rest_filter_header(const std::any& context, HTTPRequest* req, const
req - > WriteReply ( HTTP_OK , binaryHeader ) ;
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
CDataStream ssHeader { SER_NETWORK , PROTOCOL_VERSION } ;
for ( const uint256 & header : filter_headers ) {
ssHeader < < header ;
@ -435,7 +435,7 @@ static bool rest_filter_header(const std::any& context, HTTPRequest* req, const
req - > WriteReply ( HTTP_OK , strHex ) ;
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue jsonHeaders ( UniValue : : VARR ) ;
for ( const uint256 & header : filter_headers ) {
jsonHeaders . push_back ( header . GetHex ( ) ) ;
@ -457,7 +457,7 @@ static bool rest_block_filter(const std::any& context, HTTPRequest* req, const s
if ( ! CheckWarmup ( req ) ) return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
// request is sent over URI scheme /rest/blockfilter/filtertype/blockhash
std : : vector < std : : string > uri_parts ;
@ -513,7 +513,7 @@ static bool rest_block_filter(const std::any& context, HTTPRequest* req, const s
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
CDataStream ssResp { SER_NETWORK , PROTOCOL_VERSION } ;
ssResp < < filter ;
@ -522,7 +522,7 @@ static bool rest_block_filter(const std::any& context, HTTPRequest* req, const s
req - > WriteReply ( HTTP_OK , binaryResp ) ;
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
CDataStream ssResp { SER_NETWORK , PROTOCOL_VERSION } ;
ssResp < < filter ;
@ -531,7 +531,7 @@ static bool rest_block_filter(const std::any& context, HTTPRequest* req, const s
req - > WriteReply ( HTTP_OK , strHex ) ;
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue ret ( UniValue : : VOBJ ) ;
ret . pushKV ( " filter " , HexStr ( filter . GetEncodedFilter ( ) ) ) ;
std : : string strJSON = ret . write ( ) + " \n " ;
@ -553,10 +553,10 @@ static bool rest_chaininfo(const std::any& context, HTTPRequest* req, const std:
if ( ! CheckWarmup ( req ) )
return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
switch ( rf ) {
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
JSONRPCRequest jsonRequest ;
jsonRequest . context = context ;
jsonRequest . params = UniValue ( UniValue : : VARR ) ;
@ -579,10 +579,10 @@ static bool rest_mempool_info(const std::any& context, HTTPRequest* req, const s
const CTxMemPool * mempool = GetMemPool ( context , req ) ;
if ( ! mempool ) return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
switch ( rf ) {
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue mempoolInfoObject = MempoolInfoToJSON ( * mempool ) ;
std : : string strJSON = mempoolInfoObject . write ( ) + " \n " ;
@ -602,10 +602,10 @@ static bool rest_mempool_contents(const std::any& context, HTTPRequest* req, con
const CTxMemPool * mempool = GetMemPool ( context , req ) ;
if ( ! mempool ) return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
switch ( rf ) {
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue mempoolObject = MempoolToJSON ( * mempool , true ) ;
std : : string strJSON = mempoolObject . write ( ) + " \n " ;
@ -624,7 +624,7 @@ static bool rest_tx(const std::any& context, HTTPRequest* req, const std::string
if ( ! CheckWarmup ( req ) )
return false ;
std : : string hashStr ;
const R et Format rf = ParseDataFormat ( hashStr , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( hashStr , strURIPart ) ;
uint256 hash ;
if ( ! ParseHashStr ( hashStr , hash ) )
@ -643,7 +643,7 @@ static bool rest_tx(const std::any& context, HTTPRequest* req, const std::string
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
CDataStream ssTx ( SER_NETWORK , PROTOCOL_VERSION | RPCSerializationFlags ( ) ) ;
ssTx < < tx ;
@ -653,7 +653,7 @@ static bool rest_tx(const std::any& context, HTTPRequest* req, const std::string
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
CDataStream ssTx ( SER_NETWORK , PROTOCOL_VERSION | RPCSerializationFlags ( ) ) ;
ssTx < < tx ;
@ -663,7 +663,7 @@ static bool rest_tx(const std::any& context, HTTPRequest* req, const std::string
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue objTx ( UniValue : : VOBJ ) ;
TxToUniv ( * tx , hashBlock , objTx ) ;
std : : string strJSON = objTx . write ( ) + " \n " ;
@ -683,7 +683,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
if ( ! CheckWarmup ( req ) )
return false ;
std : : string param ;
const R et Format rf = ParseDataFormat ( param , strURIPart ) ;
const R ESTResponse Format rf = ParseDataFormat ( param , strURIPart ) ;
std : : vector < std : : string > uriParts ;
if ( param . length ( ) > 1 )
@ -730,14 +730,14 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
}
switch ( rf ) {
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
// convert hex to bin, continue then with bin part
std : : vector < unsigned char > strRequestV = ParseHex ( strRequestMutable ) ;
strRequestMutable . assign ( strRequestV . begin ( ) , strRequestV . end ( ) ) ;
[[fallthrough]] ;
}
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
try {
//deserialize only if user sent a request
if ( strRequestMutable . size ( ) > 0 )
@ -757,7 +757,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
break ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
if ( ! fInputParsed )
return RESTERR ( req , HTTP_BAD_REQUEST , " Error: empty request " ) ;
break ;
@ -811,7 +811,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
// serialize data
// use exact same output as mentioned in Bip64
CDataStream ssGetUTXOResponse ( SER_NETWORK , PROTOCOL_VERSION ) ;
@ -823,7 +823,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
CDataStream ssGetUTXOResponse ( SER_NETWORK , PROTOCOL_VERSION ) ;
ssGetUTXOResponse < < chainman . ActiveChain ( ) . Height ( ) < < chainman . ActiveChain ( ) . Tip ( ) - > GetBlockHash ( ) < < bitmap < < outs ;
std : : string strHex = HexStr ( ssGetUTXOResponse ) + " \n " ;
@ -833,7 +833,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
UniValue objGetUTXOResponse ( UniValue : : VOBJ ) ;
// pack in some essentials
@ -873,7 +873,7 @@ static bool rest_blockhash_by_height(const std::any& context, HTTPRequest* req,
{
if ( ! CheckWarmup ( req ) ) return false ;
std : : string height_str ;
const R et Format rf = ParseDataFormat ( height_str , str_uri_part ) ;
const R ESTResponse Format rf = ParseDataFormat ( height_str , str_uri_part ) ;
int32_t blockheight = - 1 ; // Initialization done only to prevent valgrind false positive, see https://github.com/bitcoin/bitcoin/pull/18785
if ( ! ParseInt32 ( height_str , & blockheight ) | | blockheight < 0 ) {
@ -893,19 +893,19 @@ static bool rest_blockhash_by_height(const std::any& context, HTTPRequest* req,
pblockindex = active_chain [ blockheight ] ;
}
switch ( rf ) {
case R et Format: : BINARY : {
case R ESTResponse Format: : BINARY : {
CDataStream ss_blockhash ( SER_NETWORK , PROTOCOL_VERSION ) ;
ss_blockhash < < pblockindex - > GetBlockHash ( ) ;
req - > WriteHeader ( " Content-Type " , " application/octet-stream " ) ;
req - > WriteReply ( HTTP_OK , ss_blockhash . str ( ) ) ;
return true ;
}
case R et Format: : HEX : {
case R ESTResponse Format: : HEX : {
req - > WriteHeader ( " Content-Type " , " text/plain " ) ;
req - > WriteReply ( HTTP_OK , pblockindex - > GetBlockHash ( ) . GetHex ( ) + " \n " ) ;
return true ;
}
case R et Format: : JSON : {
case R ESTResponse Format: : JSON : {
req - > WriteHeader ( " Content-Type " , " application/json " ) ;
UniValue resp = UniValue ( UniValue : : VOBJ ) ;
resp . pushKV ( " blockhash " , pblockindex - > GetBlockHash ( ) . GetHex ( ) ) ;