Skip to content

Design UX concepts for contact list #134

@rabbitholiness

Description

@rabbitholiness

This issue outlines the scope and specs for the contact list feature, which should integrate and replace the address book functionality currently implemented in QT.

Address book in QT

The address book feature in Bitcoin Core QT allows users to:

  • save a bitcoin addresses and associate it with a label, before actually using it for a payment.
  • add a label to bitcoin addresses that they have already sent a payment to

While this feature can be useful for some cases, the current feature has some drawbacks from a UX perspective:

  • It only accounts for send addresses.
  • It's based on individual addresses, which means that I have to create two entries with the same label, if I send two payments to the same person.
  • The address book is on a per wallet basis. This means that if I switch to from “Spending wallet” to “Savings wallet”, I loose access to the contacts/address book from “Spending wallet”.

Contacts

For the Bitcoin Core App, we would like to rethink the address book and expand it to work in a more human-centered way, based around contacts. Contacts are a useful tool when it comes to social and financial transactions. We primarily think about contacts in terms of people and companies, not addresses and labels.

The contact list should be a global feature throughout the app, not based on individual wallets. So, users should have the option to use contacts across all wallets. One technical question is how and where to store the contact data.

A contact can have the following pieces of information associated:

Contact details

  • First name, last name
  • Note

Payment information

  • Silent payment address(s)
  • Bitcoin address(es)
  • Maybe also XPUB(s)?

Payment history

  • Transactions (incoming & outgoing)
  • Payment requests

Basic user flows

There are many different possible entry points for users to create, edit, or access contacts.

Create new contact:

  • From scratch: the user starts in the contact list to create a new contact. He manually adds (mostly pastes) an address or an XPUB.
  • From an incoming payment: the user clicks on the contacts icon and can create a new contact, if there is no matching contact already in the contact list.
  • From an outgoing payment: while sending a payment, the user can associate the payment with an existing contact or create a new one.

Adding to an existing contact

  • From an incoming payment: the user clicks on the “contacts” icon to associate a specific payment with a contact.
  • From an outgoing payment: users can select the contact
  • From an outgoing payment request: when creating an invoice

Edit contact:

  • From the contact details

Contact list actions

Users can initiate different workflows directly from the contact details.

  • make a payment
  • request a payment
  • view payment history
  • edit/delete contact
  • Other actions: share, merge contacts, etc.

Related functionality

Introducing contacts can have impact on other sections of the application. We might need or want to introduce features across different places to increase the usefulness of contacts. These could be:

Activity screen:

  • Filter the activity screen by contacts

Payment details screen:

  • Display contact
  • Let users add or remove a contact from the payment
  • Select a different contact

Error handling & special cases

  • Incompatible payment information: It is possible that users try to add or import payment information that the Bitcoin Core App does not support (e.g. BOLT12 offers).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions