all pre-carrot txs work; Add support for return txs post-carrot.

This commit is contained in:
akildemir
2025-07-11 12:08:44 +03:00
parent 78232ff3a8
commit dd39f94ca6
27 changed files with 422 additions and 330 deletions

View File

@@ -198,14 +198,13 @@ cryptonote::transaction store_carrot_to_transaction_v1(const std::vector<CarrotE
const std::vector<cryptonote::tx_source_entry> &sources,
const rct::xmr_amount fee,
const cryptonote::transaction_type tx_type,
const size_t change_index,
const std::vector<uint8_t> change_masks,
const encrypted_payment_id_t encrypted_payment_id)
{
const size_t nins = key_images.size();
const size_t nouts = enotes.size();
CHECK_AND_ASSERT_THROW_MES(nins == sources.size(), "invalid inputs/sources size");
CHECK_AND_ASSERT_THROW_MES(change_masks.size() == nouts - 1, "invalid change masks size. Expected: " << nouts - 1 << " got: " << change_masks.size());
CHECK_AND_ASSERT_THROW_MES(change_masks.size() == nouts, "invalid change masks size. Expected: " << nouts - 1 << " got: " << change_masks.size());
cryptonote::transaction tx;
tx.pruned = true;
@@ -213,7 +212,7 @@ cryptonote::transaction store_carrot_to_transaction_v1(const std::vector<CarrotE
tx.unlock_time = 0;
tx.source_asset_type = "SAL1";
tx.destination_asset_type = "SAL1";
tx.type = tx_type;
tx.type = tx_type == cryptonote::transaction_type::RETURN ? cryptonote::transaction_type::TRANSFER : tx_type;
tx.return_address_change_mask.assign(change_masks.begin(), change_masks.end());
tx.vin.reserve(nins);
tx.vout.reserve(nouts);
@@ -242,7 +241,6 @@ cryptonote::transaction store_carrot_to_transaction_v1(const std::vector<CarrotE
}
//outputs
size_t i = 0;
for (const CarrotEnoteV1 &enote : enotes)
{
//K_o,vt,anchor_enc
@@ -261,12 +259,9 @@ cryptonote::transaction store_carrot_to_transaction_v1(const std::vector<CarrotE
tx.rct_signatures.outPk.push_back(rct::ctkey{rct::key{}, enote.amount_commitment});
//K_return
if (i != change_index) {
crypto::public_key K_return;
memcpy(K_return.data, enote.return_enc.bytes, sizeof(crypto::public_key));
tx.return_address_list.push_back(K_return);
}
i++;
crypto::public_key K_return;
memcpy(K_return.data, enote.return_enc.bytes, sizeof(crypto::public_key));
tx.return_address_list.push_back(K_return);
}
//ephemeral pubkeys: D_e