mirror of
https://github.com/monero-project/monero.git
synced 2024-12-23 12:09:54 +00:00
core: include a dummy encrypted payment id when no payment is used
For better transaction uniformity, even though this wastes space.
This commit is contained in:
parent
b7441c4a32
commit
c6d387184e
2 changed files with 58 additions and 14 deletions
|
@ -226,13 +226,15 @@ namespace cryptonote
|
||||||
std::vector<tx_extra_field> tx_extra_fields;
|
std::vector<tx_extra_field> tx_extra_fields;
|
||||||
if (parse_tx_extra(tx.extra, tx_extra_fields))
|
if (parse_tx_extra(tx.extra, tx_extra_fields))
|
||||||
{
|
{
|
||||||
|
bool add_dummy_payment_id = true;
|
||||||
tx_extra_nonce extra_nonce;
|
tx_extra_nonce extra_nonce;
|
||||||
if (find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
|
if (find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
|
||||||
{
|
{
|
||||||
crypto::hash8 payment_id = null_hash8;
|
crypto::hash payment_id = null_hash;
|
||||||
if (get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
|
crypto::hash8 payment_id8 = null_hash8;
|
||||||
|
if (get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
|
||||||
{
|
{
|
||||||
LOG_PRINT_L2("Encrypting payment id " << payment_id);
|
LOG_PRINT_L2("Encrypting payment id " << payment_id8);
|
||||||
crypto::public_key view_key_pub = get_destination_view_key_pub(destinations, change_addr);
|
crypto::public_key view_key_pub = get_destination_view_key_pub(destinations, change_addr);
|
||||||
if (view_key_pub == null_pkey)
|
if (view_key_pub == null_pkey)
|
||||||
{
|
{
|
||||||
|
@ -240,21 +242,53 @@ namespace cryptonote
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hwdev.encrypt_payment_id(payment_id, view_key_pub, tx_key))
|
if (!hwdev.encrypt_payment_id(payment_id8, view_key_pub, tx_key))
|
||||||
{
|
{
|
||||||
LOG_ERROR("Failed to encrypt payment id");
|
LOG_ERROR("Failed to encrypt payment id");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string extra_nonce;
|
std::string extra_nonce;
|
||||||
set_encrypted_payment_id_to_tx_extra_nonce(extra_nonce, payment_id);
|
set_encrypted_payment_id_to_tx_extra_nonce(extra_nonce, payment_id8);
|
||||||
remove_field_from_tx_extra(tx.extra, typeid(tx_extra_nonce));
|
remove_field_from_tx_extra(tx.extra, typeid(tx_extra_nonce));
|
||||||
if (!add_extra_nonce_to_tx_extra(tx.extra, extra_nonce))
|
if (!add_extra_nonce_to_tx_extra(tx.extra, extra_nonce))
|
||||||
{
|
{
|
||||||
LOG_ERROR("Failed to add encrypted payment id to tx extra");
|
LOG_ERROR("Failed to add encrypted payment id to tx extra");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LOG_PRINT_L1("Encrypted payment ID: " << payment_id);
|
LOG_PRINT_L1("Encrypted payment ID: " << payment_id8);
|
||||||
|
add_dummy_payment_id = false;
|
||||||
|
}
|
||||||
|
else if (get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
|
||||||
|
{
|
||||||
|
add_dummy_payment_id = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we don't add one if we've got more than the usual 1 destination plus change
|
||||||
|
if (destinations.size() > 2)
|
||||||
|
add_dummy_payment_id = false;
|
||||||
|
|
||||||
|
if (add_dummy_payment_id)
|
||||||
|
{
|
||||||
|
// if we have neither long nor short payment id, add a dummy short one,
|
||||||
|
// this should end up being the vast majority of txes as time goes on
|
||||||
|
std::string extra_nonce;
|
||||||
|
crypto::hash8 payment_id8 = null_hash8;
|
||||||
|
crypto::public_key view_key_pub = get_destination_view_key_pub(destinations, change_addr);
|
||||||
|
if (view_key_pub == null_pkey)
|
||||||
|
{
|
||||||
|
LOG_ERROR("Failed to get key to encrypt dummy payment id with");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hwdev.encrypt_payment_id(payment_id8, view_key_pub, tx_key);
|
||||||
|
set_encrypted_payment_id_to_tx_extra_nonce(extra_nonce, payment_id8);
|
||||||
|
if (!add_extra_nonce_to_tx_extra(tx.extra, extra_nonce))
|
||||||
|
{
|
||||||
|
LOG_ERROR("Failed to add dummy encrypted payment id to tx extra");
|
||||||
|
// continue anyway
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4624,12 +4624,8 @@ void simple_wallet::on_money_received(uint64_t height, const crypto::hash &txid,
|
||||||
tx_extra_nonce extra_nonce;
|
tx_extra_nonce extra_nonce;
|
||||||
if (find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
|
if (find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
|
||||||
{
|
{
|
||||||
crypto::hash8 payment_id8 = crypto::null_hash8;
|
|
||||||
crypto::hash payment_id = crypto::null_hash;
|
crypto::hash payment_id = crypto::null_hash;
|
||||||
if (get_encrypted_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id8))
|
if (get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
|
||||||
message_writer() <<
|
|
||||||
tr("NOTE: this transaction uses an encrypted payment ID: consider using subaddresses instead");
|
|
||||||
else if (get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
|
|
||||||
message_writer(console_color_red, false) <<
|
message_writer(console_color_red, false) <<
|
||||||
(m_long_payment_id_support ? tr("WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.") : tr("WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead."));
|
(m_long_payment_id_support ? tr("WARNING: this transaction uses an unencrypted payment ID: consider using subaddresses instead.") : tr("WARNING: this transaction uses an unencrypted payment ID: these are obsolete. Support will be withdrawn in the future. Use subaddresses instead."));
|
||||||
}
|
}
|
||||||
|
@ -6513,14 +6509,28 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
|
||||||
{
|
{
|
||||||
if (!payment_id_string.empty())
|
if (!payment_id_string.empty())
|
||||||
payment_id_string += ", ";
|
payment_id_string += ", ";
|
||||||
payment_id_string = std::string("encrypted payment ID ") + epee::string_tools::pod_to_hex(payment_id8);
|
|
||||||
has_encrypted_payment_id = true;
|
// if none of the addresses are integrated addresses, it's a dummy one
|
||||||
|
bool is_dummy = true;
|
||||||
|
for (const auto &e: cd.dests)
|
||||||
|
if (e.is_integrated)
|
||||||
|
is_dummy = false;
|
||||||
|
|
||||||
|
if (is_dummy)
|
||||||
|
{
|
||||||
|
payment_id_string += std::string("dummy encrypted payment ID");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
payment_id_string += std::string("encrypted payment ID ") + epee::string_tools::pod_to_hex(payment_id8);
|
||||||
|
has_encrypted_payment_id = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
|
else if (get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
|
||||||
{
|
{
|
||||||
if (!payment_id_string.empty())
|
if (!payment_id_string.empty())
|
||||||
payment_id_string += ", ";
|
payment_id_string += ", ";
|
||||||
payment_id_string = std::string("unencrypted payment ID ") + epee::string_tools::pod_to_hex(payment_id);
|
payment_id_string += std::string("unencrypted payment ID ") + epee::string_tools::pod_to_hex(payment_id);
|
||||||
payment_id_string += " (OBSOLETE)";
|
payment_id_string += " (OBSOLETE)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue