From 8ad1727ea75c4ec5b9f6f7a84a766be508afa38a Mon Sep 17 00:00:00 2001 From: jeffro256 Date: Mon, 28 Apr 2025 12:31:49 -0500 Subject: [PATCH] carrot_impl: merge make_carrot_transaction_proposal_v1_transfer functions --- src/carrot_impl/carrot_tx_builder_utils.cpp | 37 +++++--------------- src/carrot_impl/carrot_tx_builder_utils.h | 13 +------ tests/unit_tests/carrot_fcmp.cpp | 2 ++ tests/unit_tests/carrot_impl.cpp | 2 ++ tests/unit_tests/tx_construction_helpers.cpp | 2 ++ 5 files changed, 16 insertions(+), 40 deletions(-) diff --git a/src/carrot_impl/carrot_tx_builder_utils.cpp b/src/carrot_impl/carrot_tx_builder_utils.cpp index a872898f0..c951d1d5d 100644 --- a/src/carrot_impl/carrot_tx_builder_utils.cpp +++ b/src/carrot_impl/carrot_tx_builder_utils.cpp @@ -101,9 +101,9 @@ static void append_additional_payment_proposal_if_necessary( std::uint64_t get_carrot_default_tx_extra_size(const std::size_t n_outputs) { CHECK_AND_ASSERT_THROW_MES(n_outputs <= FCMP_PLUS_PLUS_MAX_OUTPUTS, - "get_carrot_default_tx_extra_size: n_outputs too high"); + "get_carrot_default_tx_extra_size: n_outputs too high: " << n_outputs); CHECK_AND_ASSERT_THROW_MES(n_outputs >= CARROT_MIN_TX_OUTPUTS, - "get_carrot_default_tx_extra_size: n_outputs too low"); + "get_carrot_default_tx_extra_size: n_outputs too low: " << n_outputs); static constexpr std::uint64_t enc_pid_extra_field_size = 8 /*pid*/ @@ -238,7 +238,7 @@ void make_carrot_transaction_proposal_v1(const std::vector &normal_payment_proposals, const std::vector &selfsend_payment_proposals_in, const rct::xmr_amount fee_per_weight, @@ -287,6 +287,12 @@ void make_carrot_transaction_proposal_v1_transfer_subtractable( std::vector &selfsend_payment_proposals ) { + // shadow subtractable_selfsend_payment_proposals and adjust for default case (no subtractable provided) + const auto &subtractable_selfsend_payment_proposals_ref = subtractable_selfsend_payment_proposals; + std::set subtractable_selfsend_payment_proposals = subtractable_selfsend_payment_proposals_ref; + if (subtractable_selfsend_payment_proposals.empty()) + subtractable_selfsend_payment_proposals.insert(selfsend_payment_proposals.size() - 1); + const bool has_subbable_normal = !subtractable_normal_payment_proposals.empty(); const bool has_subbable_selfsend = !subtractable_selfsend_payment_proposals.empty(); const size_t num_normal = normal_payment_proposals.size(); @@ -396,31 +402,6 @@ void make_carrot_transaction_proposal_v1_transfer_subtractable( tx_proposal_out); } //------------------------------------------------------------------------------------------------------------------- -void make_carrot_transaction_proposal_v1_transfer( - const std::vector &normal_payment_proposals, - const std::vector &selfsend_payment_proposals, - const rct::xmr_amount fee_per_weight, - const std::vector &extra, - select_inputs_func_t &&select_inputs, - const view_balance_secret_device *s_view_balance_dev, - const view_incoming_key_device *k_view_dev, - const crypto::public_key &account_spend_pubkey, - CarrotTransactionProposalV1 &tx_proposal_out) -{ - make_carrot_transaction_proposal_v1_transfer_subtractable( - normal_payment_proposals, - selfsend_payment_proposals, - fee_per_weight, - extra, - std::forward(select_inputs), - s_view_balance_dev, - k_view_dev, - account_spend_pubkey, - /*subtractable_normal_payment_proposals=*/{}, - /*subtractable_selfsend_payment_proposals=*/{selfsend_payment_proposals.size()}, - tx_proposal_out); -} -//------------------------------------------------------------------------------------------------------------------- void make_carrot_transaction_proposal_v1_sweep( const std::vector &normal_payment_proposals, const std::vector &selfsend_payment_proposals, diff --git a/src/carrot_impl/carrot_tx_builder_utils.h b/src/carrot_impl/carrot_tx_builder_utils.h index 32c8ab95b..159f69a5e 100644 --- a/src/carrot_impl/carrot_tx_builder_utils.h +++ b/src/carrot_impl/carrot_tx_builder_utils.h @@ -63,7 +63,7 @@ void make_carrot_transaction_proposal_v1(const std::vector &normal_payment_proposals, const std::vector &selfsend_payment_proposals, const rct::xmr_amount fee_per_weight, @@ -76,17 +76,6 @@ void make_carrot_transaction_proposal_v1_transfer_subtractable( const std::set &subtractable_selfsend_payment_proposals, CarrotTransactionProposalV1 &tx_proposal_out); -void make_carrot_transaction_proposal_v1_transfer( - const std::vector &normal_payment_proposals, - const std::vector &selfsend_payment_proposals, - const rct::xmr_amount fee_per_weight, - const std::vector &extra, - select_inputs_func_t &&select_inputs, - const view_balance_secret_device *s_view_balance_dev, - const view_incoming_key_device *k_view_dev, - const crypto::public_key &account_spend_pubkey, - CarrotTransactionProposalV1 &tx_proposal_out); - void make_carrot_transaction_proposal_v1_sweep( const std::vector &normal_payment_proposals, const std::vector &selfsend_payment_proposals, diff --git a/tests/unit_tests/carrot_fcmp.cpp b/tests/unit_tests/carrot_fcmp.cpp index beae75034..d7f0570cc 100644 --- a/tests/unit_tests/carrot_fcmp.cpp +++ b/tests/unit_tests/carrot_fcmp.cpp @@ -360,6 +360,8 @@ TEST(carrot_fcmp, receive_scan_spend_and_verify_serialized_carrot_tx) &alice.s_view_balance_dev, &alice.k_view_incoming_dev, alice.carrot_account_spend_pubkey, + {}, + {}, tx_proposal); ASSERT_EQ(n_outputs, tx_proposal.normal_payment_proposals.size() + tx_proposal.selfsend_payment_proposals.size()); diff --git a/tests/unit_tests/carrot_impl.cpp b/tests/unit_tests/carrot_impl.cpp index 8900a8c32..5c8816498 100644 --- a/tests/unit_tests/carrot_impl.cpp +++ b/tests/unit_tests/carrot_impl.cpp @@ -161,6 +161,8 @@ static void subtest_multi_account_transfer_over_transaction(const unittest_trans &ss_keys.s_view_balance_dev, &ss_keys.k_view_incoming_dev, ss_keys.carrot_account_spend_pubkey, + {}, + {}, tx_proposal); // make unsigned transaction diff --git a/tests/unit_tests/tx_construction_helpers.cpp b/tests/unit_tests/tx_construction_helpers.cpp index 1f28cac09..d76f0281d 100644 --- a/tests/unit_tests/tx_construction_helpers.cpp +++ b/tests/unit_tests/tx_construction_helpers.cpp @@ -429,6 +429,8 @@ cryptonote::transaction construct_carrot_pruned_transaction_fake_inputs( /*s_view_balance_dev=*/nullptr, &k_view_dev, acc_keys.m_account_address.m_spend_public_key, + {}, + {}, tx_proposal); cryptonote::transaction tx;