Skip to content

Request Money

micgre edited this page Feb 2, 2018 · 1 revision

Goal

This feature offers users the ability to request funds from a specific user using an easily identifiable username.

A user selects another user from their list of friends (contact list) or via search and enters the amount of Divi they would like to receive. If the counterparty accepts the request and has enough funds to fulfill it, a transaction is initiated for the amount in question automatically. If the counterpart cannot accept the request then the request expires.

Background and strategic fit

Why? Divi users want to be able to receive payments from other businesses and remittances from trusted friends or untrusted counterparty via a secure mechanism.

Product Strategy: Easy payments and remittances.

  • Make requesting money (a remittance) from a friend easy and secure
  • Make requesting payment from a business easy and secure

Assumptions

  • Both users use the Divi wallet
  • Fiat currency is the default for exchange rates
  • This feature will be available on all wallet platforms
  • This feature will use a default secure mechanism of currency transfer between untrusted parties and an optional secure mechanism between trusted parties.

Requirements

  • Create Receive Request - As a recipient, I want to create a payment request for a specific user, date and amount, so that I can receive the correct payment amount on time.
  • Select sender from contacts list - As a recipient, I want to select any friend, relative or company from my contacts list as the sender in the payment request, so that I can quickly select the right counterparty and I don't have to select an alphanumeric address.
  • Select Sender from search results - As a recipient, I want to select any friend, relative or company, from search results, as the sender in the payment request, so that I can quickly select the right counterparty and I don't have to select an alphanumeric address.
  • Share/Send Request details - As a recipient, I want to share or send the request details to the counterparty/sender of the payment via a wallet to wallet notification, via IM or via email, so that the counterparty has the correct details to send the transaction on time.
  • Accept Request - As a sender, I want to be able to accept the request by the specified date, only if I have enough funds in my wallet so that I can let the recipient know that I will make the payment
  • Request Expires - As a recipient, I want the request to auto-expire if the sender does not accept it by the specified date so that I am not wasting time indefinitely to receive the payment.
  • Cancel Request - As a recipient, I want to be able to edit or cancel a request only before it has been accepted, so that I can change or cancel it if I change my mind.
  • Edit Request - As a recipient, I want to be able to edit the details of a request after I have submitted it but before it's been accepted so that I can change it if I change my mind or need to correct the amount or other details.
  • Receive Amount - As a recipient, I want to receive a notification with the correct amount from the specified user, by the specified date after they have accepted and sent the transaction so that I can be confident of receiving payments on time.
  • Support for receiving Divi and other Crypto denominated in Fiat - As a receiver of a payment in a transaction request, I want to receive payment in Divi or another crypto-currency, but denominated in my local fiat currency, so that I can understand clearly what amount I will receive in fiat terms but I can choose to receive it as a crypto currency.
  • Receive Request accepted notification - As a recipient, I want to have the option to receive a notification in app or via email when a request is accepted so that I know I will receive my payment soon.
  • Receive Payment notification As a recipient, I want to have the option to receive a notification in app or via email when I successfully receive my payment, so that I know I will receive my payment soon.

Non-functional Requirements

Support for Smart Contracts/Escrow - As a receiver of a payment in an transaction request I want to use an escrow-like contract between me and the other party to ensure that the other party meets the requirements set out in the transaction e.g. payment by a certain date and time of a certain amount, so that I know i will receive the correct payment by my need by date.

Support for HTLCs - As a receiver of a payment in an transaction request I want to use a hash time-locked contract between me and the other party to ensure that the other party meets the requirements set out in the transaction e.g. payment by a certain date and time of a certain amount, so that I know I will receive the correct payment by my need by date.

Clone this wiki locally