@@ -6532,25 +6532,71 @@ bool simple_wallet::transfer_main(const std::vector<std::string> &args_, bool ca
6532
6532
bool r = true ;
6533
6533
6534
6534
// check for a URI
6535
- std::string address_uri, payment_id_uri, tx_description, recipient_name , error;
6535
+ std::string payment_id_uri, tx_description, error;
6536
6536
std::vector<std::string> unknown_parameters;
6537
- uint64_t amount = 0 ;
6538
- bool has_uri = m_wallet->parse_uri (local_args[i], address_uri, payment_id_uri, amount, tx_description, recipient_name, unknown_parameters, error);
6537
+ std::vector<std::string> addresses;
6538
+ std::vector<uint64_t > amounts;
6539
+ std::vector<std::string> recipient_names;
6540
+ bool has_uri = m_wallet->parse_uri (local_args[i], addresses, amounts, recipient_names, payment_id_uri, tx_description, unknown_parameters, error);
6539
6541
if (has_uri)
6540
6542
{
6541
- r = cryptonote::get_account_address_from_str_or_url (info, m_wallet->nettype (), address_uri, oa_prompter);
6542
- if (payment_id_uri.size () == 16 )
6543
+ for (size_t j = 0 ; j < addresses.size (); j++)
6543
6544
{
6544
- if (!tools::wallet2::parse_short_payment_id (payment_id_uri, info.payment_id ))
6545
+ r = cryptonote::get_account_address_from_str_or_url (info, m_wallet->nettype (), addresses[j], oa_prompter);
6546
+ if (payment_id_uri.size () == 16 )
6545
6547
{
6546
- fail_msg_writer () << tr (" failed to parse short payment ID from URI" );
6548
+ if (!tools::wallet2::parse_short_payment_id (payment_id_uri, info.payment_id ))
6549
+ {
6550
+ fail_msg_writer () << tr (" failed to parse short payment ID from URI" );
6551
+ return false ;
6552
+ }
6553
+ info.has_payment_id = true ;
6554
+ }
6555
+ de.amount = amounts[j];
6556
+ de.original = addresses[j];
6557
+ if (!r)
6558
+ {
6559
+ fail_msg_writer () << tr (" failed to parse address" );
6547
6560
return false ;
6548
6561
}
6549
- info.has_payment_id = true ;
6562
+ de.addr = info.address ;
6563
+ de.is_subaddress = info.is_subaddress ;
6564
+ de.is_integrated = info.has_payment_id ;
6565
+
6566
+ if (info.has_payment_id || !payment_id_uri.empty ())
6567
+ {
6568
+ if (payment_id_seen)
6569
+ {
6570
+ fail_msg_writer () << tr (" a single transaction cannot use more than one payment id" );
6571
+ return false ;
6572
+ }
6573
+ crypto::hash payment_id;
6574
+ std::string extra_nonce;
6575
+ if (info.has_payment_id )
6576
+ {
6577
+ set_encrypted_payment_id_to_tx_extra_nonce (extra_nonce, info.payment_id );
6578
+ }
6579
+ else if (tools::wallet2::parse_payment_id (payment_id_uri, payment_id))
6580
+ {
6581
+ LONG_PAYMENT_ID_SUPPORT_CHECK ();
6582
+ }
6583
+ else
6584
+ {
6585
+ fail_msg_writer () << tr (" failed to parse payment id, though it was detected" );
6586
+ return false ;
6587
+ }
6588
+ bool r = add_extra_nonce_to_tx_extra (extra, extra_nonce);
6589
+ if (!r)
6590
+ {
6591
+ fail_msg_writer () << tr (" failed to set up payment id, though it was decoded correctly" );
6592
+ return false ;
6593
+ }
6594
+ payment_id_seen = true ;
6595
+ }
6596
+ dsts.push_back (de);
6550
6597
}
6551
- de.amount = amount;
6552
- de.original = local_args[i];
6553
- ++i;
6598
+ i++;
6599
+ break ;
6554
6600
}
6555
6601
else if (i + 1 < local_args.size ())
6556
6602
{
0 commit comments