diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index 6cfc085d..d0630089 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -815,7 +815,7 @@ namespace currency boost::optional opt_amount_commitment; // + + + - (premultiplied by 1/8) boost::optional opt_asset_id; // - + + + boost::optional opt_descriptor; // + - - + - boost::optional opt_amount; // ? + + - (only for non-hidden supply) + boost::optional opt_amount; // ? ? ? - (only for non-hidden supply) boost::optional opt_asset_id_salt; // ? - - - (optional) std::vector etc; // (reserved for future use) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index d185466b..2910bc8e 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -197,17 +197,17 @@ namespace currency return true; } //-------------------------------------------------------------------------------- - bool generate_zc_outs_range_proof(const crypto::hash& context_hash, size_t out_index_start, const tx_generation_context& outs_gen_context, + bool generate_zc_outs_range_proof(const crypto::hash& context_hash, const tx_generation_context& outs_gen_context, const std::vector& vouts, zc_outs_range_proof& result) { size_t outs_count = outs_gen_context.amounts.size(); // TODO @#@# reconsider this check CHECK_AND_ASSERT_MES(gen_context.check_sizes(outs_count), false, ""); - CHECK_AND_ASSERT_MES(out_index_start + outs_count == vouts.size(), false, ""); + CHECK_AND_ASSERT_MES(outs_count == vouts.size(), false, ""); // prepare data for aggregation proof std::vector amount_commitments_for_rp_aggregation; // E' = amount * U + y' * G crypto::scalar_vec_t y_primes; // y' - for (size_t out_index = out_index_start, i = 0; i < outs_count; ++out_index, ++i) + for (size_t i = 0; i < outs_count; ++i) { crypto::scalar_t y_prime = crypto::scalar_t::random(); amount_commitments_for_rp_aggregation.emplace_back(outs_gen_context.amounts[i] * crypto::c_point_U + y_prime * crypto::c_point_G); // E'_j = e_j * U + y'_j * G @@ -564,7 +564,7 @@ namespace currency // range proofs currency::zc_outs_range_proof range_proofs{}; - r = generate_zc_outs_range_proof(tx_id, 0, tx_gen_context, tx.vout, range_proofs); + r = generate_zc_outs_range_proof(tx_id, tx_gen_context, tx.vout, range_proofs); CHECK_AND_ASSERT_MES(r, false, "Failed to generate zc_outs_range_proof()"); tx.proofs.emplace_back(std::move(range_proofs)); @@ -2632,7 +2632,6 @@ namespace currency // construct outputs uint64_t native_coins_output_sum = 0; size_t output_index = tx.vout.size(); // in case of append mode we need to start output indexing from the last one + 1 - uint64_t range_proof_start_index = 0; std::set existing_derivation_hints, new_derivation_hints; CHECK_AND_ASSERT_MES(copy_all_derivation_hints_from_tx_to_container(tx, existing_derivation_hints), false, "move_all_derivation_hints_from_tx_to_container failed"); for(size_t destination_index = 0; destination_index < shuffled_dsts.size(); ++destination_index, ++output_index) @@ -2774,7 +2773,7 @@ namespace currency // range proofs currency::zc_outs_range_proof range_proofs{}; - r = generate_zc_outs_range_proof(tx_prefix_hash, range_proof_start_index, gen_context, tx.vout, range_proofs); + r = generate_zc_outs_range_proof(tx_prefix_hash, gen_context, tx.vout, range_proofs); CHECK_AND_ASSERT_MES(r, false, "Failed to generate zc_outs_range_proof()"); tx.proofs.emplace_back(std::move(range_proofs)); diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index aaeba9a2..399a6d90 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -273,7 +273,7 @@ namespace currency bool generate_asset_surjection_proof(const crypto::hash& context_hash, bool has_non_zc_inputs, tx_generation_context& ogc, zc_asset_surjection_proof& result); bool verify_asset_surjection_proof(const transaction& tx, const crypto::hash& tx_id); bool generate_tx_balance_proof(const transaction &tx, const crypto::hash& tx_id, const tx_generation_context& ogc, uint64_t block_reward_for_miner_tx, zc_balance_proof& proof); - bool generate_zc_outs_range_proof(const crypto::hash& context_hash, size_t out_index_start, const tx_generation_context& outs_gen_context, + bool generate_zc_outs_range_proof(const crypto::hash& context_hash, const tx_generation_context& outs_gen_context, const std::vector& vouts, zc_outs_range_proof& result); bool check_tx_bare_balance(const transaction& tx, uint64_t additional_inputs_amount_and_fees_for_mining_tx = 0); bool check_tx_balance(const transaction& tx, const crypto::hash& tx_id, uint64_t additional_inputs_amount_and_fees_for_mining_tx = 0);