@ -50,22 +50,22 @@
* Parts of this file are originally copyright ( c ) 2012 - 2013 The Cryptonote developers
*/
# include " mo nero_daemon_model.h"
# include " wow nero_daemon_model.h"
# include "utils/gen_utils.h"
# include "utils/ mo nero_utils.h"
# include "utils/ wow nero_utils.h"
# include "include_base_utils.h"
# include "common/util.h"
/**
* Public library interface .
*/
namespace mo nero {
namespace wow nero {
// ----------------------- UNDECLARED PRIVATE HELPERS -----------------------
void merge_tx ( std : : vector < std : : shared_ptr < mo nero_tx> > & txs , const std : : shared_ptr < mo nero_tx> & tx ) {
for ( const std : : shared_ptr < mo nero_tx> & aTx : txs ) {
void merge_tx ( std : : vector < std : : shared_ptr < wow nero_tx> > & txs , const std : : shared_ptr < wow nero_tx> & tx ) {
for ( const std : : shared_ptr < wow nero_tx> & aTx : txs ) {
if ( aTx - > m_hash . get ( ) = = tx - > m_hash . get ( ) ) {
aTx - > merge ( aTx , tx ) ;
return ;
@ -76,7 +76,7 @@ namespace monero {
// ------------------------- INITIALIZE CONSTANTS ---------------------------
const std : : string mo nero_tx: : DEFAULT_PAYMENT_ID = std : : string ( " 0000000000000000 " ) ;
const std : : string wow nero_tx: : DEFAULT_PAYMENT_ID = std : : string ( " 0000000000000000 " ) ;
// ------------------------- SERIALIZABLE STRUCT ----------------------------
@ -85,22 +85,22 @@ namespace monero {
doc . SetObject ( ) ;
rapidjson : : Value val = to_rapidjson_val ( doc . GetAllocator ( ) ) ;
val . Swap ( doc ) ;
return mo nero_utils: : serialize ( doc ) ;
return wow nero_utils: : serialize ( doc ) ;
}
// ----------------------------- MONERO VERSION -----------------------------
rapidjson : : Value mo nero_version: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_version: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// create root
rapidjson : : Value root ( rapidjson : : kObjectType ) ;
// set num values
rapidjson : : Value value_num ( rapidjson : : kNumberType ) ;
if ( m_number ! = boost : : none ) mo nero_utils: : add_json_member ( " number " , m_number . get ( ) , allocator , root , value_num ) ;
if ( m_number ! = boost : : none ) wow nero_utils: : add_json_member ( " number " , m_number . get ( ) , allocator , root , value_num ) ;
// set bool values
if ( m_is_release ! = boost : : none ) mo nero_utils: : add_json_member ( " isRelease " , m_is_release . get ( ) , allocator , root ) ;
if ( m_is_release ! = boost : : none ) wow nero_utils: : add_json_member ( " isRelease " , m_is_release . get ( ) , allocator , root ) ;
// return root
return root ;
@ -108,23 +108,23 @@ namespace monero {
// --------------------------- MONERO RPC VERSION ---------------------------
rapidjson : : Value mo nero_rpc_connection: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_rpc_connection: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// create root
rapidjson : : Value root ( rapidjson : : kObjectType ) ;
// set string values
rapidjson : : Value value_str ( rapidjson : : kStringType ) ;
if ( m_uri ! = boost : : none ) mo nero_utils: : add_json_member ( " uri " , m_uri . get ( ) , allocator , root , value_str ) ;
if ( m_username ! = boost : : none ) mo nero_utils: : add_json_member ( " username " , m_username . get ( ) , allocator , root , value_str ) ;
if ( m_password ! = boost : : none ) mo nero_utils: : add_json_member ( " password " , m_password . get ( ) , allocator , root , value_str ) ;
if ( m_uri ! = boost : : none ) wow nero_utils: : add_json_member ( " uri " , m_uri . get ( ) , allocator , root , value_str ) ;
if ( m_username ! = boost : : none ) wow nero_utils: : add_json_member ( " username " , m_username . get ( ) , allocator , root , value_str ) ;
if ( m_password ! = boost : : none ) wow nero_utils: : add_json_member ( " password " , m_password . get ( ) , allocator , root , value_str ) ;
// return root
return root ;
}
monero_rpc_connection mo nero_rpc_connection: : from_property_tree ( const boost : : property_tree : : ptree & node ) {
mo nero_rpc_connection connection ;
wownero_rpc_connection wow nero_rpc_connection: : from_property_tree ( const boost : : property_tree : : ptree & node ) {
wow nero_rpc_connection connection ;
for ( boost : : property_tree : : ptree : : const_iterator it = node . begin ( ) ; it ! = node . end ( ) ; + + it ) {
std : : string key = it - > first ;
if ( key = = std : : string ( " uri " ) ) connection . m_uri = it - > second . data ( ) ;
@ -136,42 +136,42 @@ namespace monero {
// ------------------------- MONERO BLOCK HEADER ----------------------------
rapidjson : : Value mo nero_block_header: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_block_header: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// create root
rapidjson : : Value root ( rapidjson : : kObjectType ) ;
// set num values
rapidjson : : Value value_num ( rapidjson : : kNumberType ) ;
if ( m_height ! = boost : : none ) mo nero_utils: : add_json_member ( " height " , m_height . get ( ) , allocator , root , value_num ) ;
if ( m_timestamp ! = boost : : none ) mo nero_utils: : add_json_member ( " timestamp " , m_timestamp . get ( ) , allocator , root , value_num ) ;
if ( m_size ! = boost : : none ) mo nero_utils: : add_json_member ( " size " , m_size . get ( ) , allocator , root , value_num ) ;
if ( m_weight ! = boost : : none ) mo nero_utils: : add_json_member ( " weight " , m_weight . get ( ) , allocator , root , value_num ) ;
if ( m_long_term_weight ! = boost : : none ) mo nero_utils: : add_json_member ( " longTermWeight " , m_long_term_weight . get ( ) , allocator , root , value_num ) ;
if ( m_depth ! = boost : : none ) mo nero_utils: : add_json_member ( " depth " , m_depth . get ( ) , allocator , root , value_num ) ;
if ( m_difficulty ! = boost : : none ) mo nero_utils: : add_json_member ( " difficulty " , m_difficulty . get ( ) , allocator , root , value_num ) ;
if ( m_cumulative_difficulty ! = boost : : none ) mo nero_utils: : add_json_member ( " cumulativeDifficulty " , m_cumulative_difficulty . get ( ) , allocator , root , value_num ) ;
if ( m_major_version ! = boost : : none ) mo nero_utils: : add_json_member ( " majorVersion " , m_major_version . get ( ) , allocator , root , value_num ) ;
if ( m_minor_version ! = boost : : none ) mo nero_utils: : add_json_member ( " minorVersion " , m_minor_version . get ( ) , allocator , root , value_num ) ;
if ( m_nonce ! = boost : : none ) mo nero_utils: : add_json_member ( " nonce " , m_nonce . get ( ) , allocator , root , value_num ) ;
if ( m_miner_tx_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " minerTxHash " , m_miner_tx_hash . get ( ) , allocator , root , value_num ) ;
if ( m_num_txs ! = boost : : none ) mo nero_utils: : add_json_member ( " numTxs " , m_num_txs . get ( ) , allocator , root , value_num ) ;
if ( m_reward ! = boost : : none ) mo nero_utils: : add_json_member ( " reward " , m_reward . get ( ) , allocator , root , value_num ) ;
if ( m_height ! = boost : : none ) wow nero_utils: : add_json_member ( " height " , m_height . get ( ) , allocator , root , value_num ) ;
if ( m_timestamp ! = boost : : none ) wow nero_utils: : add_json_member ( " timestamp " , m_timestamp . get ( ) , allocator , root , value_num ) ;
if ( m_size ! = boost : : none ) wow nero_utils: : add_json_member ( " size " , m_size . get ( ) , allocator , root , value_num ) ;
if ( m_weight ! = boost : : none ) wow nero_utils: : add_json_member ( " weight " , m_weight . get ( ) , allocator , root , value_num ) ;
if ( m_long_term_weight ! = boost : : none ) wow nero_utils: : add_json_member ( " longTermWeight " , m_long_term_weight . get ( ) , allocator , root , value_num ) ;
if ( m_depth ! = boost : : none ) wow nero_utils: : add_json_member ( " depth " , m_depth . get ( ) , allocator , root , value_num ) ;
if ( m_difficulty ! = boost : : none ) wow nero_utils: : add_json_member ( " difficulty " , m_difficulty . get ( ) , allocator , root , value_num ) ;
if ( m_cumulative_difficulty ! = boost : : none ) wow nero_utils: : add_json_member ( " cumulativeDifficulty " , m_cumulative_difficulty . get ( ) , allocator , root , value_num ) ;
if ( m_major_version ! = boost : : none ) wow nero_utils: : add_json_member ( " majorVersion " , m_major_version . get ( ) , allocator , root , value_num ) ;
if ( m_minor_version ! = boost : : none ) wow nero_utils: : add_json_member ( " minorVersion " , m_minor_version . get ( ) , allocator , root , value_num ) ;
if ( m_nonce ! = boost : : none ) wow nero_utils: : add_json_member ( " nonce " , m_nonce . get ( ) , allocator , root , value_num ) ;
if ( m_miner_tx_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " minerTxHash " , m_miner_tx_hash . get ( ) , allocator , root , value_num ) ;
if ( m_num_txs ! = boost : : none ) wow nero_utils: : add_json_member ( " numTxs " , m_num_txs . get ( ) , allocator , root , value_num ) ;
if ( m_reward ! = boost : : none ) wow nero_utils: : add_json_member ( " reward " , m_reward . get ( ) , allocator , root , value_num ) ;
// set string values
rapidjson : : Value value_str ( rapidjson : : kStringType ) ;
if ( m_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " hash " , m_hash . get ( ) , allocator , root , value_str ) ;
if ( m_prev_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " prevHash " , m_prev_hash . get ( ) , allocator , root , value_str ) ;
if ( m_pow_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " powHash " , m_pow_hash . get ( ) , allocator , root , value_str ) ;
if ( m_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " hash " , m_hash . get ( ) , allocator , root , value_str ) ;
if ( m_prev_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " prevHash " , m_prev_hash . get ( ) , allocator , root , value_str ) ;
if ( m_pow_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " powHash " , m_pow_hash . get ( ) , allocator , root , value_str ) ;
// set bool values
if ( m_orphan_status ! = boost : : none ) mo nero_utils: : add_json_member ( " orphanStatus " , m_orphan_status . get ( ) , allocator , root ) ;
if ( m_orphan_status ! = boost : : none ) wow nero_utils: : add_json_member ( " orphanStatus " , m_orphan_status . get ( ) , allocator , root ) ;
// return root
return root ;
}
std : : shared_ptr < monero_block_header> mo nero_block_header: : copy ( const std : : shared_ptr < mo nero_block_header> & src , const std : : shared_ptr < mo nero_block_header> & tgt ) const {
std : : shared_ptr < wownero_block_header> wow nero_block_header: : copy ( const std : : shared_ptr < wow nero_block_header> & src , const std : : shared_ptr < wow nero_block_header> & tgt ) const {
if ( this ! = src . get ( ) ) throw std : : runtime_error ( " this block header != src " ) ;
tgt - > m_hash = src - > m_hash ;
tgt - > m_height = src - > m_height ;
@ -195,7 +195,7 @@ namespace monero {
return tgt ;
}
void mo nero_block_header: : merge ( const std : : shared_ptr < mo nero_block_header> & self , const std : : shared_ptr < mo nero_block_header> & other ) {
void wow nero_block_header: : merge ( const std : : shared_ptr < wow nero_block_header> & self , const std : : shared_ptr < wow nero_block_header> & other ) {
if ( this ! = self . get ( ) ) throw std : : runtime_error ( " this != self " ) ;
if ( self = = other ) return ;
m_hash = gen_utils : : reconcile ( m_hash , other - > m_hash , " block header m_hash " ) ;
@ -220,18 +220,18 @@ namespace monero {
// ----------------------------- MONERO BLOCK -------------------------------
rapidjson : : Value mo nero_block: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_block: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// serialize root from superclass
rapidjson : : Value root = mo nero_block_header: : to_rapidjson_val ( allocator ) ;
rapidjson : : Value root = wow nero_block_header: : to_rapidjson_val ( allocator ) ;
// set string values
rapidjson : : Value value_str ( rapidjson : : kStringType ) ;
if ( m_hex ! = boost : : none ) mo nero_utils: : add_json_member ( " hex " , m_hex . get ( ) , allocator , root , value_str ) ;
if ( m_hex ! = boost : : none ) wow nero_utils: : add_json_member ( " hex " , m_hex . get ( ) , allocator , root , value_str ) ;
// set sub-arrays
if ( ! m_txs . empty ( ) ) root . AddMember ( " txs " , mo nero_utils: : to_rapidjson_val ( allocator , m_txs ) , allocator ) ;
if ( ! m_tx_hashes . empty ( ) ) root . AddMember ( " txHashes " , mo nero_utils: : to_rapidjson_val ( allocator , m_tx_hashes ) , allocator ) ;
if ( ! m_txs . empty ( ) ) root . AddMember ( " txs " , wow nero_utils: : to_rapidjson_val ( allocator , m_txs ) , allocator ) ;
if ( ! m_tx_hashes . empty ( ) ) root . AddMember ( " txHashes " , wow nero_utils: : to_rapidjson_val ( allocator , m_tx_hashes ) , allocator ) ;
// set sub-objects
if ( m_miner_tx ! = boost : : none ) root . AddMember ( " minerTx " , m_miner_tx . get ( ) - > to_rapidjson_val ( allocator ) , allocator ) ;
@ -240,25 +240,25 @@ namespace monero {
return root ;
}
std : : shared_ptr < monero_block> mo nero_block: : copy ( const std : : shared_ptr < mo nero_block> & src , const std : : shared_ptr < mo nero_block> & tgt ) const {
std : : shared_ptr < wownero_block> wow nero_block: : copy ( const std : : shared_ptr < wow nero_block> & src , const std : : shared_ptr < wow nero_block> & tgt ) const {
if ( this ! = src . get ( ) ) throw std : : runtime_error ( " this block != src " ) ;
mo nero_block_header: : copy ( std : : static_pointer_cast < mo nero_block_header> ( src ) , std : : static_pointer_cast < mo nero_block_header> ( tgt ) ) ;
wow nero_block_header: : copy ( std : : static_pointer_cast < wow nero_block_header> ( src ) , std : : static_pointer_cast < wow nero_block_header> ( tgt ) ) ;
tgt - > m_hex = src - > m_hex ;
if ( src - > m_miner_tx ) {
tgt - > m_miner_tx = src - > m_miner_tx . get ( ) - > copy ( src - > m_miner_tx . get ( ) , std : : make_shared < mo nero_tx> ( ) ) ;
tgt - > m_miner_tx = src - > m_miner_tx . get ( ) - > copy ( src - > m_miner_tx . get ( ) , std : : make_shared < wow nero_tx> ( ) ) ;
tgt - > m_miner_tx . get ( ) - > m_block = tgt ;
}
if ( ! src - > m_txs . empty ( ) ) {
bool use_wallet_types = std : : dynamic_pointer_cast < mo nero_tx_wallet> ( src - > m_txs [ 0 ] ) ! = 0 ;
tgt - > m_txs = std : : vector < std : : shared_ptr < mo nero_tx> > ( ) ;
bool use_wallet_types = std : : dynamic_pointer_cast < wow nero_tx_wallet> ( src - > m_txs [ 0 ] ) ! = 0 ;
tgt - > m_txs = std : : vector < std : : shared_ptr < wow nero_tx> > ( ) ;
for ( const auto & tx : src - > m_txs ) {
if ( use_wallet_types ) {
std : : shared_ptr < mo nero_tx_wallet> tx_wallet = std : : static_pointer_cast < mo nero_tx_wallet> ( tx ) ;
std : : shared_ptr < mo nero_tx_wallet> tx_copy = tx_wallet - > copy ( tx_wallet , std : : make_shared < mo nero_tx_wallet> ( ) ) ;
std : : shared_ptr < wow nero_tx_wallet> tx_wallet = std : : static_pointer_cast < wow nero_tx_wallet> ( tx ) ;
std : : shared_ptr < wow nero_tx_wallet> tx_copy = tx_wallet - > copy ( tx_wallet , std : : make_shared < wow nero_tx_wallet> ( ) ) ;
tx_copy - > m_block = tgt ;
tgt - > m_txs . push_back ( tx_copy ) ;
} else {
std : : shared_ptr < mo nero_tx> tx_copy = tx - > copy ( tx , std : : make_shared < mo nero_tx> ( ) ) ;
std : : shared_ptr < wow nero_tx> tx_copy = tx - > copy ( tx , std : : make_shared < wow nero_tx> ( ) ) ;
tx_copy - > m_block = tgt ;
tgt - > m_txs . push_back ( tx_copy ) ;
}
@ -268,16 +268,16 @@ namespace monero {
return tgt ;
}
void mo nero_block: : merge ( const std : : shared_ptr < mo nero_block_header> & self , const std : : shared_ptr < mo nero_block_header> & other ) {
merge ( std : : static_pointer_cast < mo nero_block> ( self ) , std : : static_pointer_cast < mo nero_block> ( other ) ) ;
void wow nero_block: : merge ( const std : : shared_ptr < wow nero_block_header> & self , const std : : shared_ptr < wow nero_block_header> & other ) {
merge ( std : : static_pointer_cast < wow nero_block> ( self ) , std : : static_pointer_cast < wow nero_block> ( other ) ) ;
}
void mo nero_block: : merge ( const std : : shared_ptr < mo nero_block> & self , const std : : shared_ptr < mo nero_block> & other ) {
void wow nero_block: : merge ( const std : : shared_ptr < wow nero_block> & self , const std : : shared_ptr < wow nero_block> & other ) {
if ( this ! = self . get ( ) ) throw std : : runtime_error ( " this != self " ) ;
if ( self = = other ) return ;
// merge header fields
mo nero_block_header: : merge ( self , other ) ;
wow nero_block_header: : merge ( self , other ) ;
// merge reconcilable block extensions
m_hex = gen_utils : : reconcile ( m_hex , other - > m_hex , " block m_hex " ) ;
@ -292,7 +292,7 @@ namespace monero {
// merge non-miner txs
if ( ! other - > m_txs . empty ( ) ) {
for ( const std : : shared_ptr < mo nero_tx> otherTx : other - > m_txs ) { // NOTE: not using reference so std::shared_ptr is not deleted when block is dereferenced
for ( const std : : shared_ptr < wow nero_tx> otherTx : other - > m_txs ) { // NOTE: not using reference so std::shared_ptr is not deleted when block is dereferenced
otherTx - > m_block = self ;
merge_tx ( self - > m_txs , otherTx ) ;
}
@ -301,63 +301,63 @@ namespace monero {
// ------------------------------- MONERO TX --------------------------------
rapidjson : : Value mo nero_tx: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_tx: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// create root
rapidjson : : Value root ( rapidjson : : kObjectType ) ;
// set num values
rapidjson : : Value value_num ( rapidjson : : kNumberType ) ;
if ( m_version ! = boost : : none ) mo nero_utils: : add_json_member ( " version " , m_version . get ( ) , allocator , root , value_num ) ;
if ( m_fee ! = boost : : none ) mo nero_utils: : add_json_member ( " fee " , m_fee . get ( ) , allocator , root , value_num ) ;
if ( m_ring_size ! = boost : : none ) mo nero_utils: : add_json_member ( " ringSize " , m_ring_size . get ( ) , allocator , root , value_num ) ;
if ( m_num_confirmations ! = boost : : none ) mo nero_utils: : add_json_member ( " numConfirmations " , m_num_confirmations . get ( ) , allocator , root , value_num ) ;
if ( m_unlock_time ! = boost : : none ) mo nero_utils: : add_json_member ( " unlockTime " , m_unlock_time . get ( ) , allocator , root , value_num ) ;
if ( m_last_relayed_timestamp ! = boost : : none ) mo nero_utils: : add_json_member ( " lastRelayedTimestamp " , m_last_relayed_timestamp . get ( ) , allocator , root , value_num ) ;
if ( m_received_timestamp ! = boost : : none ) mo nero_utils: : add_json_member ( " receivedTimestamp " , m_received_timestamp . get ( ) , allocator , root , value_num ) ;
if ( m_size ! = boost : : none ) mo nero_utils: : add_json_member ( " size " , m_size . get ( ) , allocator , root , value_num ) ;
if ( m_weight ! = boost : : none ) mo nero_utils: : add_json_member ( " weight " , m_weight . get ( ) , allocator , root , value_num ) ;
if ( m_last_failed_height ! = boost : : none ) mo nero_utils: : add_json_member ( " lastFailedHeight " , m_last_failed_height . get ( ) , allocator , root , value_num ) ;
if ( m_max_used_block_height ! = boost : : none ) mo nero_utils: : add_json_member ( " maxUsedBlockHeight " , m_max_used_block_height . get ( ) , allocator , root , value_num ) ;
if ( m_version ! = boost : : none ) wow nero_utils: : add_json_member ( " version " , m_version . get ( ) , allocator , root , value_num ) ;
if ( m_fee ! = boost : : none ) wow nero_utils: : add_json_member ( " fee " , m_fee . get ( ) , allocator , root , value_num ) ;
if ( m_ring_size ! = boost : : none ) wow nero_utils: : add_json_member ( " ringSize " , m_ring_size . get ( ) , allocator , root , value_num ) ;
if ( m_num_confirmations ! = boost : : none ) wow nero_utils: : add_json_member ( " numConfirmations " , m_num_confirmations . get ( ) , allocator , root , value_num ) ;
if ( m_unlock_time ! = boost : : none ) wow nero_utils: : add_json_member ( " unlockTime " , m_unlock_time . get ( ) , allocator , root , value_num ) ;
if ( m_last_relayed_timestamp ! = boost : : none ) wow nero_utils: : add_json_member ( " lastRelayedTimestamp " , m_last_relayed_timestamp . get ( ) , allocator , root , value_num ) ;
if ( m_received_timestamp ! = boost : : none ) wow nero_utils: : add_json_member ( " receivedTimestamp " , m_received_timestamp . get ( ) , allocator , root , value_num ) ;
if ( m_size ! = boost : : none ) wow nero_utils: : add_json_member ( " size " , m_size . get ( ) , allocator , root , value_num ) ;
if ( m_weight ! = boost : : none ) wow nero_utils: : add_json_member ( " weight " , m_weight . get ( ) , allocator , root , value_num ) ;
if ( m_last_failed_height ! = boost : : none ) wow nero_utils: : add_json_member ( " lastFailedHeight " , m_last_failed_height . get ( ) , allocator , root , value_num ) ;
if ( m_max_used_block_height ! = boost : : none ) wow nero_utils: : add_json_member ( " maxUsedBlockHeight " , m_max_used_block_height . get ( ) , allocator , root , value_num ) ;
// set string values
rapidjson : : Value value_str ( rapidjson : : kStringType ) ;
if ( m_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " hash " , m_hash . get ( ) , allocator , root , value_str ) ;
if ( m_payment_id ! = boost : : none ) mo nero_utils: : add_json_member ( " paymentId " , m_payment_id . get ( ) , allocator , root , value_str ) ;
if ( m_key ! = boost : : none ) mo nero_utils: : add_json_member ( " key " , m_key . get ( ) , allocator , root , value_str ) ;
if ( m_full_hex ! = boost : : none ) mo nero_utils: : add_json_member ( " fullHex " , m_full_hex . get ( ) , allocator , root , value_str ) ;
if ( m_pruned_hex ! = boost : : none ) mo nero_utils: : add_json_member ( " prunedHex " , m_pruned_hex . get ( ) , allocator , root , value_str ) ;
if ( m_prunable_hex ! = boost : : none ) mo nero_utils: : add_json_member ( " prunableHex " , m_prunable_hex . get ( ) , allocator , root , value_str ) ;
if ( m_prunable_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " prunableHash " , m_prunable_hash . get ( ) , allocator , root , value_str ) ;
if ( m_metadata ! = boost : : none ) mo nero_utils: : add_json_member ( " metadata " , m_metadata . get ( ) , allocator , root , value_str ) ;
if ( m_common_tx_sets ! = boost : : none ) mo nero_utils: : add_json_member ( " commonTxSets " , m_common_tx_sets . get ( ) , allocator , root , value_str ) ;
if ( m_rct_signatures ! = boost : : none ) mo nero_utils: : add_json_member ( " rctSignatures " , m_rct_signatures . get ( ) , allocator , root , value_str ) ;
if ( m_rct_sig_prunable ! = boost : : none ) mo nero_utils: : add_json_member ( " rctSigPrunable " , m_rct_sig_prunable . get ( ) , allocator , root , value_str ) ;
if ( m_last_failed_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " lastFailedHash " , m_last_failed_hash . get ( ) , allocator , root , value_str ) ;
if ( m_max_used_block_hash ! = boost : : none ) mo nero_utils: : add_json_member ( " maxUsedBlockHash " , m_max_used_block_hash . get ( ) , allocator , root , value_str ) ;
if ( m_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " hash " , m_hash . get ( ) , allocator , root , value_str ) ;
if ( m_payment_id ! = boost : : none ) wow nero_utils: : add_json_member ( " paymentId " , m_payment_id . get ( ) , allocator , root , value_str ) ;
if ( m_key ! = boost : : none ) wow nero_utils: : add_json_member ( " key " , m_key . get ( ) , allocator , root , value_str ) ;
if ( m_full_hex ! = boost : : none ) wow nero_utils: : add_json_member ( " fullHex " , m_full_hex . get ( ) , allocator , root , value_str ) ;
if ( m_pruned_hex ! = boost : : none ) wow nero_utils: : add_json_member ( " prunedHex " , m_pruned_hex . get ( ) , allocator , root , value_str ) ;
if ( m_prunable_hex ! = boost : : none ) wow nero_utils: : add_json_member ( " prunableHex " , m_prunable_hex . get ( ) , allocator , root , value_str ) ;
if ( m_prunable_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " prunableHash " , m_prunable_hash . get ( ) , allocator , root , value_str ) ;
if ( m_metadata ! = boost : : none ) wow nero_utils: : add_json_member ( " metadata " , m_metadata . get ( ) , allocator , root , value_str ) ;
if ( m_common_tx_sets ! = boost : : none ) wow nero_utils: : add_json_member ( " commonTxSets " , m_common_tx_sets . get ( ) , allocator , root , value_str ) ;
if ( m_rct_signatures ! = boost : : none ) wow nero_utils: : add_json_member ( " rctSignatures " , m_rct_signatures . get ( ) , allocator , root , value_str ) ;
if ( m_rct_sig_prunable ! = boost : : none ) wow nero_utils: : add_json_member ( " rctSigPrunable " , m_rct_sig_prunable . get ( ) , allocator , root , value_str ) ;
if ( m_last_failed_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " lastFailedHash " , m_last_failed_hash . get ( ) , allocator , root , value_str ) ;
if ( m_max_used_block_hash ! = boost : : none ) wow nero_utils: : add_json_member ( " maxUsedBlockHash " , m_max_used_block_hash . get ( ) , allocator , root , value_str ) ;
// set bool values
if ( m_is_miner_tx ! = boost : : none ) mo nero_utils: : add_json_member ( " isMinerTx " , m_is_miner_tx . get ( ) , allocator , root ) ;
if ( m_relay ! = boost : : none ) mo nero_utils: : add_json_member ( " relay " , m_relay . get ( ) , allocator , root ) ;
if ( m_is_relayed ! = boost : : none ) mo nero_utils: : add_json_member ( " isRelayed " , m_is_relayed . get ( ) , allocator , root ) ;
if ( m_is_confirmed ! = boost : : none ) mo nero_utils: : add_json_member ( " isConfirmed " , m_is_confirmed . get ( ) , allocator , root ) ;
if ( m_in_tx_pool ! = boost : : none ) mo nero_utils: : add_json_member ( " inTxPool " , m_in_tx_pool . get ( ) , allocator , root ) ;
if ( m_is_double_spend_seen ! = boost : : none ) mo nero_utils: : add_json_member ( " isDoubleSpendSeen " , m_is_double_spend_seen . get ( ) , allocator , root ) ;
if ( m_is_kept_by_block ! = boost : : none ) mo nero_utils: : add_json_member ( " isKeptByBlock " , m_is_kept_by_block . get ( ) , allocator , root ) ;
if ( m_is_failed ! = boost : : none ) mo nero_utils: : add_json_member ( " isFailed " , m_is_failed . get ( ) , allocator , root ) ;
if ( m_is_miner_tx ! = boost : : none ) wow nero_utils: : add_json_member ( " isMinerTx " , m_is_miner_tx . get ( ) , allocator , root ) ;
if ( m_relay ! = boost : : none ) wow nero_utils: : add_json_member ( " relay " , m_relay . get ( ) , allocator , root ) ;
if ( m_is_relayed ! = boost : : none ) wow nero_utils: : add_json_member ( " isRelayed " , m_is_relayed . get ( ) , allocator , root ) ;
if ( m_is_confirmed ! = boost : : none ) wow nero_utils: : add_json_member ( " isConfirmed " , m_is_confirmed . get ( ) , allocator , root ) ;
if ( m_in_tx_pool ! = boost : : none ) wow nero_utils: : add_json_member ( " inTxPool " , m_in_tx_pool . get ( ) , allocator , root ) ;
if ( m_is_double_spend_seen ! = boost : : none ) wow nero_utils: : add_json_member ( " isDoubleSpendSeen " , m_is_double_spend_seen . get ( ) , allocator , root ) ;
if ( m_is_kept_by_block ! = boost : : none ) wow nero_utils: : add_json_member ( " isKeptByBlock " , m_is_kept_by_block . get ( ) , allocator , root ) ;
if ( m_is_failed ! = boost : : none ) wow nero_utils: : add_json_member ( " isFailed " , m_is_failed . get ( ) , allocator , root ) ;
// set sub-arrays
if ( ! m_inputs . empty ( ) ) root . AddMember ( " inputs " , mo nero_utils: : to_rapidjson_val ( allocator , m_inputs ) , allocator ) ;
if ( ! m_outputs . empty ( ) ) root . AddMember ( " outputs " , mo nero_utils: : to_rapidjson_val ( allocator , m_outputs ) , allocator ) ;
if ( ! m_output_indices . empty ( ) ) root . AddMember ( " outputIndices " , mo nero_utils: : to_rapidjson_val ( allocator , m_output_indices ) , allocator ) ;
if ( ! m_extra . empty ( ) ) root . AddMember ( " extra " , mo nero_utils: : to_rapidjson_val ( allocator , m_extra ) , allocator ) ;
if ( ! m_signatures . empty ( ) ) root . AddMember ( " signatures " , mo nero_utils: : to_rapidjson_val ( allocator , m_signatures ) , allocator ) ;
if ( ! m_inputs . empty ( ) ) root . AddMember ( " inputs " , wow nero_utils: : to_rapidjson_val ( allocator , m_inputs ) , allocator ) ;
if ( ! m_outputs . empty ( ) ) root . AddMember ( " outputs " , wow nero_utils: : to_rapidjson_val ( allocator , m_outputs ) , allocator ) ;
if ( ! m_output_indices . empty ( ) ) root . AddMember ( " outputIndices " , wow nero_utils: : to_rapidjson_val ( allocator , m_output_indices ) , allocator ) ;
if ( ! m_extra . empty ( ) ) root . AddMember ( " extra " , wow nero_utils: : to_rapidjson_val ( allocator , m_extra ) , allocator ) ;
if ( ! m_signatures . empty ( ) ) root . AddMember ( " signatures " , wow nero_utils: : to_rapidjson_val ( allocator , m_signatures ) , allocator ) ;
// return root
return root ;
}
void mo nero_tx: : from_property_tree ( const boost : : property_tree : : ptree & node , std : : shared_ptr < mo nero_tx> tx ) {
void wow nero_tx: : from_property_tree ( const boost : : property_tree : : ptree & node , std : : shared_ptr < wow nero_tx> tx ) {
// initialize tx from node
for ( boost : : property_tree : : ptree : : const_iterator it = node . begin ( ) ; it ! = node . end ( ) ; + + it ) {
@ -402,8 +402,8 @@ namespace monero {
}
}
std : : shared_ptr < monero_tx> mo nero_tx: : copy ( const std : : shared_ptr < mo nero_tx> & src , const std : : shared_ptr < mo nero_tx> & tgt ) const {
MTRACE ( " monero_tx::copy(const std::shared_ptr<monero_tx>& src, const std::shared_ptr<mo nero_tx>& tgt)" ) ;
std : : shared_ptr < wownero_tx> wow nero_tx: : copy ( const std : : shared_ptr < wow nero_tx> & src , const std : : shared_ptr < wow nero_tx> & tgt ) const {
MTRACE ( " wownero_tx::copy(const std::shared_ptr<wownero_tx>& src, const std::shared_ptr<wow nero_tx>& tgt)" ) ;
tgt - > m_hash = src - > m_hash ;
tgt - > m_version = src - > m_version ;
tgt - > m_is_miner_tx = src - > m_is_miner_tx ;
@ -427,17 +427,17 @@ namespace monero {
tgt - > m_size = src - > m_size ;
tgt - > m_weight = src - > m_weight ;
if ( ! src - > m_inputs . empty ( ) ) {
tgt - > m_inputs = std : : vector < std : : shared_ptr < mo nero_output> > ( ) ;
for ( const std : : shared_ptr < mo nero_output> & input : src - > m_inputs ) {
std : : shared_ptr < mo nero_output> input_copy = input - > copy ( input , std : : make_shared < mo nero_output> ( ) ) ;
tgt - > m_inputs = std : : vector < std : : shared_ptr < wow nero_output> > ( ) ;
for ( const std : : shared_ptr < wow nero_output> & input : src - > m_inputs ) {
std : : shared_ptr < wow nero_output> input_copy = input - > copy ( input , std : : make_shared < wow nero_output> ( ) ) ;
input_copy - > m_tx = tgt ;
tgt - > m_inputs . push_back ( input_copy ) ;
}
}
if ( ! src - > m_outputs . empty ( ) ) {
tgt - > m_outputs = std : : vector < std : : shared_ptr < mo nero_output> > ( ) ;
for ( const std : : shared_ptr < mo nero_output> & output : src - > m_outputs ) {
std : : shared_ptr < mo nero_output> output_copy = output - > copy ( output , std : : make_shared < mo nero_output> ( ) ) ;
tgt - > m_outputs = std : : vector < std : : shared_ptr < wow nero_output> > ( ) ;
for ( const std : : shared_ptr < wow nero_output> & output : src - > m_outputs ) {
std : : shared_ptr < wow nero_output> output_copy = output - > copy ( output , std : : make_shared < wow nero_output> ( ) ) ;
output_copy - > m_tx = tgt ;
tgt - > m_outputs . push_back ( output_copy ) ;
}
@ -458,12 +458,12 @@ namespace monero {
return tgt ;
}
boost : : optional < uint64_t > mo nero_tx: : get_height ( ) const {
boost : : optional < uint64_t > wow nero_tx: : get_height ( ) const {
if ( m_block = = boost : : none ) return boost : : none ;
return * ( ( * m_block ) - > m_height ) ;
}
void mo nero_tx: : merge ( const std : : shared_ptr < mo nero_tx> & self , const std : : shared_ptr < mo nero_tx> & other ) {
void wow nero_tx: : merge ( const std : : shared_ptr < wow nero_tx> & self , const std : : shared_ptr < wow nero_tx> & other ) {
if ( this ! = self . get ( ) ) throw std : : runtime_error ( " this != self " ) ;
if ( self = = other ) return ;
@ -514,10 +514,10 @@ namespace monero {
// merge inputs
if ( ! other - > m_inputs . empty ( ) ) {
for ( const std : : shared_ptr < mo nero_output> & merger : other - > m_inputs ) {
for ( const std : : shared_ptr < wow nero_output> & merger : other - > m_inputs ) {
bool merged = false ;
merger - > m_tx = self ;
for ( const std : : shared_ptr < mo nero_output> & mergee : m_inputs ) {
for ( const std : : shared_ptr < wow nero_output> & mergee : m_inputs ) {
if ( ( * mergee - > m_key_image ) - > m_hex = = ( * merger - > m_key_image ) - > m_hex ) {
mergee - > merge ( mergee , merger ) ;
merged = true ;
@ -530,15 +530,15 @@ namespace monero {
// merge outputs
if ( ! other - > m_outputs . empty ( ) ) {
for ( const std : : shared_ptr < mo nero_output> & output : other - > m_outputs ) output - > m_tx = self ;
for ( const std : : shared_ptr < wow nero_output> & output : other - > m_outputs ) output - > m_tx = self ;
if ( m_outputs . empty ( ) ) m_outputs = other - > m_outputs ;
else {
// merge outputs if key image or stealth public key present, otherwise append
for ( const std : : shared_ptr < mo nero_output> & merger : other - > m_outputs ) {
for ( const std : : shared_ptr < wow nero_output> & merger : other - > m_outputs ) {
bool merged = false ;
merger - > m_tx = self ;
for ( const std : : shared_ptr < mo nero_output> & mergee : m_outputs ) {
for ( const std : : shared_ptr < wow nero_output> & mergee : m_outputs ) {
if ( ( merger - > m_key_image ! = boost : : none & & ( * mergee - > m_key_image ) - > m_hex = = ( * merger - > m_key_image ) - > m_hex ) | |
( merger - > m_stealth_public_key ! = boost : : none & & * mergee - > m_stealth_public_key = = * merger - > m_stealth_public_key ) ) {
mergee - > merge ( mergee , merger ) ;
@ -565,21 +565,21 @@ namespace monero {
// --------------------------- MONERO KEY IMAGE -----------------------------
rapidjson : : Value mo nero_key_image: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_key_image: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// create root
rapidjson : : Value root ( rapidjson : : kObjectType ) ;
// set string values
rapidjson : : Value value_str ( rapidjson : : kStringType ) ;
if ( m_hex ! = boost : : none ) mo nero_utils: : add_json_member ( " hex " , m_hex . get ( ) , allocator , root , value_str ) ;
if ( m_signature ! = boost : : none ) mo nero_utils: : add_json_member ( " signature " , m_signature . get ( ) , allocator , root , value_str ) ;
if ( m_hex ! = boost : : none ) wow nero_utils: : add_json_member ( " hex " , m_hex . get ( ) , allocator , root , value_str ) ;
if ( m_signature ! = boost : : none ) wow nero_utils: : add_json_member ( " signature " , m_signature . get ( ) , allocator , root , value_str ) ;
// return root
return root ;
}
void mo nero_key_image: : from_property_tree ( const boost : : property_tree : : ptree & node , const std : : shared_ptr < mo nero_key_image> & key_image ) {
void wow nero_key_image: : from_property_tree ( const boost : : property_tree : : ptree & node , const std : : shared_ptr < wow nero_key_image> & key_image ) {
// initialize key image from node
for ( boost : : property_tree : : ptree : : const_iterator it = node . begin ( ) ; it ! = node . end ( ) ; + + it ) {
@ -589,7 +589,7 @@ namespace monero {
}
}
std : : vector < std : : shared_ptr < monero_key_image> > mo nero_key_image: : deserialize_key_images ( const std : : string & key_images_json ) {
std : : vector < std : : shared_ptr < wownero_key_image> > wow nero_key_image: : deserialize_key_images ( const std : : string & key_images_json ) {
// deserialize json to property node
std : : istringstream iss = key_images_json . empty ( ) ? std : : istringstream ( ) : std : : istringstream ( key_images_json ) ;
@ -597,13 +597,13 @@ namespace monero {
boost : : property_tree : : read_json ( iss , node ) ;
// convert property tree to key images
std : : vector < std : : shared_ptr < mo nero_key_image> > key_images ;
std : : vector < std : : shared_ptr < wow nero_key_image> > key_images ;
for ( boost : : property_tree : : ptree : : const_iterator it = node . begin ( ) ; it ! = node . end ( ) ; + + it ) {
std : : string key = it - > first ;
if ( key = = std : : string ( " keyImages " ) ) {
for ( boost : : property_tree : : ptree : : const_iterator it2 = it - > second . begin ( ) ; it2 ! = it - > second . end ( ) ; + + it2 ) {
std : : shared_ptr < mo nero_key_image> key_image = std : : make_shared < mo nero_key_image> ( ) ;
mo nero_key_image: : from_property_tree ( it2 - > second , key_image ) ;
std : : shared_ptr < wow nero_key_image> key_image = std : : make_shared < wow nero_key_image> ( ) ;
wow nero_key_image: : from_property_tree ( it2 - > second , key_image ) ;
key_images . push_back ( key_image ) ;
}
}
@ -612,15 +612,15 @@ namespace monero {
return key_images ;
}
std : : shared_ptr < monero_key_image> mo nero_key_image: : copy ( const std : : shared_ptr < mo nero_key_image> & src , const std : : shared_ptr < mo nero_key_image> & tgt ) const {
std : : shared_ptr < wownero_key_image> wow nero_key_image: : copy ( const std : : shared_ptr < wow nero_key_image> & src , const std : : shared_ptr < wow nero_key_image> & tgt ) const {
if ( this ! = src . get ( ) ) throw std : : runtime_error ( " this != src " ) ;
tgt - > m_hex = src - > m_hex ;
tgt - > m_signature = src - > m_signature ;
return tgt ;
}
void mo nero_key_image: : merge ( const std : : shared_ptr < mo nero_key_image> & self , const std : : shared_ptr < mo nero_key_image> & other ) {
MTRACE ( " mo nero_key_image::merge(self, other)" ) ;
void wow nero_key_image: : merge ( const std : : shared_ptr < wow nero_key_image> & self , const std : : shared_ptr < wow nero_key_image> & other ) {
MTRACE ( " wow nero_key_image::merge(self, other)" ) ;
if ( this ! = self . get ( ) ) throw std : : runtime_error ( " this != self " ) ;
if ( self = = other ) return ;
m_hex = gen_utils : : reconcile ( m_hex , other - > m_hex , " key image m_hex " ) ;
@ -629,19 +629,19 @@ namespace monero {
// ------------------------------ MONERO OUTPUT -----------------------------
rapidjson : : Value mo nero_output: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
rapidjson : : Value wow nero_output: : to_rapidjson_val ( rapidjson : : Document : : AllocatorType & allocator ) const {
// create root
rapidjson : : Value root ( rapidjson : : kObjectType ) ;
// set num values
rapidjson : : Value value_num ( rapidjson : : kNumberType ) ;
if ( m_amount ! = boost : : none ) mo nero_utils: : add_json_member ( " amount " , m_amount . get ( ) , allocator , root , value_num ) ;
if ( m_index ! = boost : : none ) mo nero_utils: : add_json_member ( " index " , m_index . get ( ) , allocator , root , value_num ) ;
if ( m_stealth_public_key ! = boost : : none ) mo nero_utils: : add_json_member ( " stealthPublicKey " , m_stealth_public_key . get ( ) , allocator , root , value_num ) ;
if ( m_amount ! = boost : : none ) wow nero_utils: : add_json_member ( " amount " , m_amount . get ( ) , allocator , root , value_num ) ;
if ( m_index ! = boost : : none ) wow nero_utils: : add_json_member ( " index " , m_index . get ( ) , allocator , root , value_num ) ;
if ( m_stealth_public_key ! = boost : : none ) wow nero_utils: : add_json_member ( " stealthPublicKey " , m_stealth_public_key . get ( ) , allocator , root , value_num ) ;
// set sub-arrays
if ( ! m_ring_output_indices . empty ( ) ) root . AddMember ( " ringOutputIndices " , mo nero_utils: : to_rapidjson_val ( allocator , m_ring_output_indices ) , allocator ) ;
if ( ! m_ring_output_indices . empty ( ) ) root . AddMember ( " ringOutputIndices " , wow nero_utils: : to_rapidjson_val ( allocator , m_ring_output_indices ) , allocator ) ;
// set sub-objects
if ( m_key_image ! = boost : : none ) root . AddMember ( " keyImage " , m_key_image . get ( ) - > to_rapidjson_val ( allocator ) , allocator ) ;
@ -650,14 +650,14 @@ namespace monero {
return root ;
}
void mo nero_output: : from_property_tree ( const boost : : property_tree : : ptree & node , const std : : shared_ptr < mo nero_output> & output ) {
void wow nero_output: : from_property_tree ( const boost : : property_tree : : ptree & node , const std : : shared_ptr < wow nero_output> & output ) {
// initialize output from node
for ( boost : : property_tree : : ptree : : const_iterator it = node . begin ( ) ; it ! = node . end ( ) ; + + it ) {
std : : string key = it - > first ;
if ( key = = std : : string ( " keyImage " ) ) {
output - > m_key_image = std : : make_shared < mo nero_key_image> ( ) ;
mo nero_key_image: : from_property_tree ( it - > second , output - > m_key_image . get ( ) ) ;
output - > m_key_image = std : : make_shared < wow nero_key_image> ( ) ;
wow nero_key_image: : from_property_tree ( it - > second , output - > m_key_image . get ( ) ) ;
}
else if ( key = = std : : string ( " amount " ) ) output - > m_amount = it - > second . get_value < uint64_t > ( ) ;
else if ( key = = std : : string ( " index " ) ) output - > m_index = it - > second . get_value < uint32_t > ( ) ;
@ -666,10 +666,10 @@ namespace monero {
}
}
std : : shared_ptr < monero_output> mo nero_output: : copy ( const std : : shared_ptr < mo nero_output> & src , const std : : shared_ptr < mo nero_output> & tgt ) const {
std : : shared_ptr < wownero_output> wow nero_output: : copy ( const std : : shared_ptr < wow nero_output> & src , const std : : shared_ptr < wow nero_output> & tgt ) const {
if ( this ! = src . get ( ) ) throw std : : runtime_error ( " this != src " ) ;
tgt - > m_tx = src - > m_tx ; // reference same parent tx by default
if ( src - > m_key_image ! = boost : : none ) tgt - > m_key_image = src - > m_key_image . get ( ) - > copy ( src - > m_key_image . get ( ) , std : : make_shared < mo nero_key_image> ( ) ) ;
if ( src - > m_key_image ! = boost : : none ) tgt - > m_key_image = src - > m_key_image . get ( ) - > copy ( src - > m_key_image . get ( ) , std : : make_shared < wow nero_key_image> ( ) ) ;
tgt - > m_amount = src - > m_amount ;
tgt - > m_index = src - > m_index ;
if ( ! src - > m_ring_output_indices . empty ( ) ) tgt - > m_ring_output_indices = std : : vector < uint64_t > ( src - > m_ring_output_indices ) ;
@ -677,7 +677,7 @@ namespace monero {
return tgt ;
}
void mo nero_output: : merge ( const std : : shared_ptr < mo nero_output> & self , const std : : shared_ptr < mo nero_output> & other ) {
void wow nero_output: : merge ( const std : : shared_ptr < wow nero_output> & self , const std : : shared_ptr < wow nero_output> & other ) {
if ( this ! = self . get ( ) ) throw std : : runtime_error ( " this != self " ) ;
if ( self = = other ) return ;