diff --git a/src/daemon/monero_daemon_model.cpp b/src/daemon/monero_daemon_model.cpp index f5f5c89..ad8999c 100644 --- a/src/daemon/monero_daemon_model.cpp +++ b/src/daemon/monero_daemon_model.cpp @@ -267,8 +267,8 @@ namespace monero { if (m_is_failed != boost::none) monero_utils::addJsonMember("isFailed", m_is_failed.get(), allocator, root); // set sub-arrays - if (!m_vins.empty()) root.AddMember("vins", monero_utils::to_rapidjson_val(allocator, m_vins), allocator); - if (!m_vouts.empty()) root.AddMember("vouts", monero_utils::to_rapidjson_val(allocator, m_vouts), allocator); + if (!m_inputs.empty()) root.AddMember("inputs", monero_utils::to_rapidjson_val(allocator, m_inputs), allocator); + if (!m_outputs.empty()) root.AddMember("outputs", monero_utils::to_rapidjson_val(allocator, m_outputs), allocator); if (!m_output_indices.empty()) root.AddMember("outputIndices", monero_utils::to_rapidjson_val(allocator, m_output_indices), allocator); if (!m_extra.empty()) root.AddMember("extra", monero_utils::to_rapidjson_val(allocator, m_extra), allocator); if (!m_signatures.empty()) root.AddMember("signatures", monero_utils::to_rapidjson_val(allocator, m_signatures), allocator); @@ -304,8 +304,8 @@ namespace monero { else if (key == string("prunableHash")) tx->m_prunable_hash = it->second.data(); else if (key == string("size")) throw runtime_error("size deserialization not implemented"); else if (key == string("weight")) throw runtime_error("weight deserialization not implemented"); - else if (key == string("vins")) throw runtime_error("vins deserializationn not implemented"); - else if (key == string("vouts")) throw runtime_error("vouts deserializationn not implemented"); + else if (key == string("inputs")) throw runtime_error("inputs deserializationn not implemented"); + else if (key == string("outputs")) throw runtime_error("outputs deserializationn not implemented"); else if (key == string("outputIndices")) throw runtime_error("m_output_indices deserialization not implemented"); else if (key == string("metadata")) tx->m_metadata = it->second.data(); else if (key == string("commonTxSets")) throw runtime_error("commonTxSets deserialization not implemented"); @@ -346,20 +346,20 @@ namespace monero { tgt->m_prunable_hash = src->m_prunable_hash; tgt->m_size = src->m_size; tgt->m_weight = src->m_weight; - if (!src->m_vins.empty()) { - tgt->m_vins = vector>(); - for (const shared_ptr& vin : src->m_vins) { - shared_ptr vinCopy = vin->copy(vin, make_shared()); - vinCopy->m_tx = tgt; - tgt->m_vins.push_back(vinCopy); + if (!src->m_inputs.empty()) { + tgt->m_inputs = vector>(); + for (const shared_ptr& input : src->m_inputs) { + shared_ptr input_copy = input->copy(input, make_shared()); + input_copy->m_tx = tgt; + tgt->m_inputs.push_back(input_copy); } } - if (!src->m_vouts.empty()) { - tgt->m_vouts = vector>(); - for (const shared_ptr& vout : src->m_vouts) { - shared_ptr voutCopy = vout->copy(vout, make_shared()); - voutCopy->m_tx = tgt; - tgt->m_vouts.push_back(voutCopy); + if (!src->m_outputs.empty()) { + tgt->m_outputs = vector>(); + for (const shared_ptr& output : src->m_outputs) { + shared_ptr output_copy = output->copy(output, make_shared()); + output_copy->m_tx = tgt; + tgt->m_outputs.push_back(output_copy); } } if (!src->m_output_indices.empty()) tgt->m_output_indices = vector(src->m_output_indices); @@ -436,89 +436,89 @@ namespace monero { m_unlock_time = gen_utils::reconcile(m_unlock_time, other->m_unlock_time, "m_unlock_time"); m_num_confirmations = gen_utils::reconcile(m_num_confirmations, other->m_num_confirmations, "m_num_confirmations"); - // merge vins - if (!other->m_vins.empty()) { - for (const shared_ptr& merger : other->m_vins) { + // merge inputs + if (!other->m_inputs.empty()) { + for (const shared_ptr& merger : other->m_inputs) { bool merged = false; merger->m_tx = self; - for (const shared_ptr& mergee : m_vins) { + for (const shared_ptr& mergee : m_inputs) { if ((*mergee->m_key_image)->m_hex == (*merger->m_key_image)->m_hex) { mergee->merge(mergee, merger); merged = true; break; } } - if (!merged) m_vins.push_back(merger); + if (!merged) m_inputs.push_back(merger); } } - // merge vouts - if (!other->m_vouts.empty()) { - for (const shared_ptr& vout : other->m_vouts) vout->m_tx = self; - if (m_vouts.empty()) m_vouts = other->m_vouts; + // merge outputs + if (!other->m_outputs.empty()) { + for (const shared_ptr& output : other->m_outputs) output->m_tx = self; + if (m_outputs.empty()) m_outputs = other->m_outputs; else { // validate output indices if present int num_indices = 0; - for (const shared_ptr& vout : this->m_vouts) if (vout->m_index != boost::none) num_indices++; - for (const shared_ptr& vout : other->m_vouts) if (vout->m_index != boost::none) num_indices++; - if (num_indices != 0 && this->m_vouts.size() + other->m_vouts.size() != num_indices) { - throw runtime_error("Some vouts have an output index and some do not"); + for (const shared_ptr& output : this->m_outputs) if (output->m_index != boost::none) num_indices++; + for (const shared_ptr& output : other->m_outputs) if (output->m_index != boost::none) num_indices++; + if (num_indices != 0 && this->m_outputs.size() + other->m_outputs.size() != num_indices) { + throw runtime_error("Some outputs have an output index and some do not"); } // merge by output indices if present if (num_indices > 0) { - for (const shared_ptr& merger : other->m_vouts) { + for (const shared_ptr& merger : other->m_outputs) { bool merged = false; merger->m_tx = self; - for (const shared_ptr& mergee : this->m_vouts) { + for (const shared_ptr& mergee : this->m_outputs) { if (mergee->m_index.get() == merger->m_index.get()) { mergee->merge(mergee, merger); merged = true; break; } } - if (!merged) this->m_vouts.push_back(merger); + if (!merged) this->m_outputs.push_back(merger); } } else { // determine if key images present int numKeyImages = 0; - for (const shared_ptr vout : m_vouts) { - if (vout->m_key_image != boost::none) { - if ((*vout->m_key_image)->m_hex == boost::none) throw runtime_error("Key image hex cannot be null"); + for (const shared_ptr output : m_outputs) { + if (output->m_key_image != boost::none) { + if ((*output->m_key_image)->m_hex == boost::none) throw runtime_error("Key image hex cannot be null"); numKeyImages++; } } - for (const shared_ptr& vout : other->m_vouts) { - if (vout->m_key_image != boost::none) { - if ((*vout->m_key_image)->m_hex == boost::none) throw runtime_error("Key image hex cannot be null"); + for (const shared_ptr& output : other->m_outputs) { + if (output->m_key_image != boost::none) { + if ((*output->m_key_image)->m_hex == boost::none) throw runtime_error("Key image hex cannot be null"); numKeyImages++; } } - if (numKeyImages != 0 && m_vouts.size() + other->m_vouts.size() != numKeyImages) throw runtime_error("Some vouts have a key image and some do not"); + if (numKeyImages != 0 && m_outputs.size() + other->m_outputs.size() != numKeyImages) throw runtime_error("Some outputs have a key image and some do not"); // merge by key images if (numKeyImages > 0) { - for (const shared_ptr& merger : other->m_vouts) { + for (const shared_ptr& merger : other->m_outputs) { bool merged = false; merger->m_tx = self; - for (const shared_ptr& mergee : m_vouts) { + for (const shared_ptr& mergee : m_outputs) { if ((*mergee->m_key_image)->m_hex == (*merger->m_key_image)->m_hex) { mergee->merge(mergee, merger); merged = true; break; } } - if (!merged) m_vouts.push_back(merger); + if (!merged) m_outputs.push_back(merger); } } // merge by position else { - if (m_vouts.size() != other->m_vouts.size()) throw runtime_error("Vout sizes are different"); - for (int i = 0; i < other->m_vouts.size(); i++) { - m_vouts.at(i)->merge(m_vouts.at(i), other->m_vouts.at(i)); + if (m_outputs.size() != other->m_outputs.size()) throw runtime_error("Vout sizes are different"); + for (int i = 0; i < other->m_outputs.size(); i++) { + m_outputs.at(i)->merge(m_outputs.at(i), other->m_outputs.at(i)); } } } diff --git a/src/daemon/monero_daemon_model.h b/src/daemon/monero_daemon_model.h index dc3e7ef..cb83d20 100644 --- a/src/daemon/monero_daemon_model.h +++ b/src/daemon/monero_daemon_model.h @@ -192,8 +192,8 @@ namespace monero { boost::optional m_prunable_hash; boost::optional m_size; boost::optional m_weight; - vector> m_vins; - vector> m_vouts; + vector> m_inputs; + vector> m_outputs; vector m_output_indices; boost::optional m_metadata; boost::optional m_common_tx_sets; diff --git a/src/utils/monero_utils.cpp b/src/utils/monero_utils.cpp index 3c4e884..a34110a 100644 --- a/src/utils/monero_utils.cpp +++ b/src/utils/monero_utils.cpp @@ -256,30 +256,30 @@ shared_ptr monero_utils::cn_tx_to_tx(const cryptonote::transaction& c tx->m_hash = epee::string_tools::pod_to_hex(cn_tx.hash); tx->m_extra = cn_tx.extra; - // init vins + // init inputs for (const txin_v& cnVin : cn_tx.vin) { if (cnVin.which() != 0 && cnVin.which() != 3) throw runtime_error("Unsupported variant type"); if (tx->m_is_miner_tx == boost::none) tx->m_is_miner_tx = cnVin.which() == 0; if (cnVin.which() != 3) continue; // only process txin_to_key of variant TODO: support other types, like 0 "gen" which is miner tx? - shared_ptr vin = init_as_tx_wallet ? make_shared() : make_shared(); - vin->m_tx = tx; - tx->m_vins.push_back(vin); + shared_ptr input = init_as_tx_wallet ? make_shared() : make_shared(); + input->m_tx = tx; + tx->m_inputs.push_back(input); const txin_to_key& txin = boost::get(cnVin); - vin->m_amount = txin.amount; - vin->m_ring_output_indices = txin.key_offsets; + input->m_amount = txin.amount; + input->m_ring_output_indices = txin.key_offsets; crypto::key_image cnKeyImage = txin.k_image; - vin->m_key_image = make_shared(); - vin->m_key_image.get()->m_hex = epee::string_tools::pod_to_hex(cnKeyImage); + input->m_key_image = make_shared(); + input->m_key_image.get()->m_hex = epee::string_tools::pod_to_hex(cnKeyImage); } - // init vouts + // init outputs for (const tx_out& cnVout : cn_tx.vout) { - shared_ptr vout = init_as_tx_wallet ? make_shared() : make_shared(); - vout->m_tx = tx; - tx->m_vouts.push_back(vout); - vout->m_amount = cnVout.amount; + shared_ptr output = init_as_tx_wallet ? make_shared() : make_shared(); + output->m_tx = tx; + tx->m_outputs.push_back(output); + output->m_amount = cnVout.amount; const crypto::public_key& cnStealthPublicKey = boost::get(cnVout.target).key; - vout->m_stealth_public_key = epee::string_tools::pod_to_hex(cnStealthPublicKey); + output->m_stealth_public_key = epee::string_tools::pod_to_hex(cnStealthPublicKey); } return tx; diff --git a/src/wallet/monero_wallet_core.cpp b/src/wallet/monero_wallet_core.cpp index 89d2569..8caddd3 100644 --- a/src/wallet/monero_wallet_core.cpp +++ b/src/wallet/monero_wallet_core.cpp @@ -336,19 +336,19 @@ namespace monero { tx->m_is_double_spend_seen = false; tx->m_is_locked = !m_w2.is_transfer_unlocked(td); - // construct vout - shared_ptr vout = make_shared(); - vout->m_tx = tx; - tx->m_vouts.push_back(vout); - vout->m_amount = td.amount(); - vout->m_index = td.m_global_output_index; - vout->m_account_index = td.m_subaddr_index.major; - vout->m_subaddress_index = td.m_subaddr_index.minor; - vout->m_is_spent = td.m_spent; - vout->m_is_frozen = td.m_frozen; + // construct output + shared_ptr output = make_shared(); + output->m_tx = tx; + tx->m_outputs.push_back(output); + output->m_amount = td.amount(); + output->m_index = td.m_global_output_index; + output->m_account_index = td.m_subaddr_index.major; + output->m_subaddress_index = td.m_subaddr_index.minor; + output->m_is_spent = td.m_spent; + output->m_is_frozen = td.m_frozen; if (td.m_key_image_known) { - vout->m_key_image = make_shared(); - vout->m_key_image.get()->m_hex = epee::string_tools::pod_to_hex(td.m_key_image); + output->m_key_image = make_shared(); + output->m_key_image.get()->m_hex = epee::string_tools::pod_to_hex(td.m_key_image); } // return pointer to new tx @@ -719,7 +719,7 @@ namespace monero { tx->m_hash = epee::string_tools::pod_to_hex(txid); tx->m_unlock_time = unlock_time; shared_ptr output = make_shared(); - tx->m_vouts.push_back(output); + tx->m_outputs.push_back(output); output->m_tx = tx; output->m_amount = amount; output->m_account_index = subaddr_index.major; @@ -743,7 +743,7 @@ namespace monero { tx->m_block = block; tx->m_hash = epee::string_tools::pod_to_hex(txid); shared_ptr output = make_shared(); - tx->m_vins.push_back(output); + tx->m_inputs.push_back(output); output->m_tx = tx; output->m_amount = amount; output->m_account_index = subaddr_index.major; @@ -1659,28 +1659,28 @@ namespace monero { sort(txs.begin(), txs.end(), tx_height_less_than); // filter and return outputs - vector> vouts; + vector> outputs; for (const shared_ptr& tx : txs) { // sort outputs - sort(tx->m_vouts.begin(), tx->m_vouts.end(), vout_before); + sort(tx->m_outputs.begin(), tx->m_outputs.end(), vout_before); // collect queried outputs, remove excluded outputs - vector>::iterator voutIter = tx->m_vouts.begin(); - while (voutIter != tx->m_vouts.end()) { + vector>::iterator voutIter = tx->m_outputs.begin(); + while (voutIter != tx->m_outputs.end()) { shared_ptr vout_wallet = static_pointer_cast(*voutIter); if (_query->meets_criteria(vout_wallet.get())) { - vouts.push_back(vout_wallet); + outputs.push_back(vout_wallet); voutIter++; } else { - voutIter = tx->m_vouts.erase(voutIter); // remove excluded vouts + voutIter = tx->m_outputs.erase(voutIter); // remove excluded outputs } } - // remove txs without vouts - if (tx->m_vouts.empty() && tx->m_block != boost::none) tx->m_block.get()->m_txs.erase(std::remove(tx->m_block.get()->m_txs.begin(), tx->m_block.get()->m_txs.end(), tx), tx->m_block.get()->m_txs.end()); // TODO, no way to use const_iterator? + // remove txs without outputs + if (tx->m_outputs.empty() && tx->m_block != boost::none) tx->m_block.get()->m_txs.erase(std::remove(tx->m_block.get()->m_txs.begin(), tx->m_block.get()->m_txs.end(), tx), tx->m_block.get()->m_txs.end()); // TODO, no way to use const_iterator? } - return vouts; + return outputs; } string monero_wallet_core::get_outputs_hex() const { diff --git a/src/wallet/monero_wallet_model.cpp b/src/wallet/monero_wallet_model.cpp index 08049b9..6121d6b 100644 --- a/src/wallet/monero_wallet_model.cpp +++ b/src/wallet/monero_wallet_model.cpp @@ -421,10 +421,10 @@ namespace monero { // at least one output must meet output query if defined if (m_output_query != boost::none && !m_output_query.get()->is_default()) { - if (tx->m_vouts.empty()) return false; + if (tx->m_outputs.empty()) return false; bool matchFound = false; - for (const shared_ptr& vout : tx->m_vouts) { - shared_ptr vout_wallet = static_pointer_cast(vout); + for (const shared_ptr& output : tx->m_outputs) { + shared_ptr vout_wallet = static_pointer_cast(output); if (m_output_query.get()->meets_criteria(vout_wallet.get())) { matchFound = true; break;