Skip to content

Support multi-recipient Monero payment URIs - #1459

Open
waozixyz wants to merge 1 commit into
cypherstack:stagingfrom
waozixyz:monero-multi-recipient-uri
Open

waozixyz wants to merge 1 commit into
cypherstack:stagingfrom
waozixyz:monero-multi-recipient-uri

Conversation

@waozixyz

@waozixyz waozixyz commented Oct 2, 2026

Copy link
Copy Markdown

Monero payment URIs can request payment to several recipients at once, e.g. monero:A;B?tx_amount=1;2&recipient_name=x;y (used by split-tip pages such as XMRChat). Stack Wallet currently can't parse these, so scanning one leaves an invalid address and no amount.

  • AddressUtils.parsePaymentUri splits the ;-separated addresses, amounts and names into PaymentUriData.recipients, requiring one amount (and, if given, one name) per address. Callers opt in with allowMultipleRecipients, so screens that take a single address reject these URIs instead of dropping recipients.
  • Mobile and desktop send: a scanned, pasted or typed multi-recipient URI replaces the address field with a read-only recipient list, locks the amount to the total, and builds one transaction with an output per recipient. Clear restores the normal form.
  • The confirmation screen lists every recipient with its amount.
  • confirm_transaction_view.dart is also run through dart format for the changed-files format check.

Tested with new unit and widget tests, and on Android by scanning a two-recipient QR code (recipient list, locked total, Clear). Not yet tested with a funded wallet through to broadcast.

Monero payment URIs can list several recipients, e.g.
`monero:A;B?tx_amount=1;2&recipient_name=x;y`. Parse these into
PaymentUriData.recipients, requiring one amount (and, when given, one
name) per address. Callers must opt in with allowMultipleRecipients, so
screens that handle a single address never drop recipients silently.

On the mobile and desktop send screens, a scanned, pasted, or typed
multi-recipient URI replaces the address field with a read-only list of
recipients, locks the amount to their total, and builds one transaction
with an output per recipient. Clear returns to the normal form. The
confirmation screen lists every recipient with its amount.

confirm_transaction_view.dart is also run through dart format, as the
changed-files format check requires.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant