Electric-Coin-Company / zashi

Issue Tracking and common resources for the Zashi Zcash Wallets
MIT License
3 stars 3 forks source link

Support generation & sharing of ZIP 321 Payment Requests #46

Closed pacu closed 1 week ago

pacu commented 3 years ago

The request ZEC flow consists of two steps

  1. Request ZEC form that the user has to fill in
  2. Share ZEC Request Screen where the user is shown the request created and offered ways to share that request URI

https://xd.adobe.com/view/5eb728b7-cb5e-46d0-ac4d-5f3369faa82f-0be4/

The goal of this flow is to create a ZIP-321 compliant ZEC payment request that can be either shared through the OS's share action sheet or via shielded memo in a shielded transaction.

The Request form contains many input fields

Who is the request for the first one is the "payor" field. This is used to indicate a recipient for this request that could be found in the address book or by scanning or pasting a known shielded address.

This screen should read the general clipboard looking for valid shielded recipients either in UAs or Sapling addresses and show a "address in buffer" notice when a recipient is found.

Note: There is another Request Creation scenario where the user wants to request ZEC and not send it through a shielded memo. In this case the this textfield does not provide any useful information

How much is being requested

this is the second input. a numeric field that accepts inputs expressed either in ZEC or in fiat interchangeable. The user can opt the expression of that value by actioning a ZEC to Fiat control to the right of the textfield. When the user opts of a Mean of exchange to express that value, any value that was input into the textfield must be switched automatically to the corresponding conversion value.

Message This is a textview that can contain freeform text. There are a couple of things to consider here. The first one is that the Memo field has a limit of 512 UTF-8 characters. The second one is that ZIP-321 specifies two fields to include text information: Memo and Label (see "query keys" https://zips.z.cash/zip-0321)

label Label for an address (e.g. name of receiver). If a label is present at a paramindex, a client rendering a payment for inspection by the user SHOULD display this label (if possible) as well as the associated address. If the label is displayed, it MUST be identifiable as distinct from the address. address Zcash address string (shielded or transparent) memo Contents for the Zcash shielded memo field, encoded as base64url without = padding. The decoded memo contents MUST NOT exceed 512 bytes, and if shorter, will be filled with trailing zeros to 512 bytes. Parsers MUST consider the entire URI invalid if the address associated with the same paramindex is not a valid shielded address. message Message that clients can display for the purpose of presenting descriptive information about the payment at the associated paramindex to the user.

@geffenz is the "message" textfield in the UI referring to the Message field or the memo field?

Sent-to check button The last element of the form is a checkbox that allows the user to send the payment request to the referred shielded receiver (UA w/ shielded receiver or Sapling Address)

This UI component appears when the user has input some receiver where this ZEC payment request can be sent to. <---- @geffenz could you validate this?

There are many questions here: How can the user tell the UI that there's no known address to send the ZEC request to? When there's an address is the share action sheet shown anyway in a later step? what does the "sent-to" mean?