Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inheritance wallet - Chapter 2 - Cosigner onboarding #1100

Open
wants to merge 18 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
116 changes: 6 additions & 110 deletions guide/inheritance-wallet/landing-page.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,142 +50,38 @@ All of this is done without compromising your financial privacy. You don't want

### [Overview]({{ '/guide/inheritance-wallet/overview/' | relative_url }})

<div class="center" markdown="1">

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-introduction.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/introduction/"
%}

Before we dive into the details, we will introduce you to the Jones family. We are also going to look at how they plan to set up their family savings in general.

</div>

---

### [Wallet creation]({{ '/guide/inheritance-wallet/wallet-creation/' | relative_url }})

<div class="center" markdown="1">
Our application lets users create flexible multi-key wallets with timelocked recovery paths to help them recover funds while they are still alive. On top of that, users can create and manage dedicated inheritance keys that are held by their heirs.

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-wallet-creation.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/wallet-creation/"
%}
---

Our application lets users create flexible multi-key wallets with timelocked recovery paths to help them recover funds while they are still alive. On top of that, users can create and manage dedicated inheritance keys that are held by their heirs.
### [Onboarding cosigners]({{ '/guide/inheritance-wallet/onboarding-cosigners/' | relative_url }})

</div>
After a multi-key wallet has been created, the cosigners need to be onboarded so that they can sign transactions. Our app let's them import the wallet to their phone and then enable their hardware signing device.

---

### Wallet backup (coming soon)

<div class="center" markdown="1">

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-backup.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/backup/"
%}

When backing up multi-key wallets, there are more moving parts to consider than with single-key wallets. Our application helps users with that.

</div>

---

### Testing (coming soon)

<div class="center" markdown="1">

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-testing.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/testing/"
%}

To help users make sure that their wallet works as intended, the app offers features that let them test their setup, before they move all of their savings to their newly created wallet.

</div>

---

### Operational phase (coming soon)

<div class="center" markdown="1">

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-operations.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/regular-use/"
%}

Involving the potential heirs early on is great, but it also has implications for privacy and security. Our application combines built-in features with social processes to mitigate this risk. It also helps to prevent premature activation of the inheritance keys.

</div>

---

### Managing change (coming soon)

<div class="center" markdown="1">

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-changing.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/managing-change/"
%}
### Making changes (coming soon)

Over time, it might become necessary for users to make changes to their savings wallet because someone lost a key or they want to make changes to the overall wallet configuration. Our app helps users make such changes and update the backup and inheritance documentation.

</div>

---

### Recovery & inheritance (coming soon)

<div class="center" markdown="1">

{% include image.html
image = "assets/images/guide/inheritance-wallet/icon-recovery.png"
retina = "assets/images/guide/inheritance-wallet/[email protected]"
alt-text = ""
width = 80
height = 80
layout = "float-left"
link-url = "/guide/inheritance-wallet/wallet-recovery/"
%}
### Succession (coming soon)

When it's time for the heirs to claim their inheritance, the Jones' children can use their own signing devices to recover their funds.

</div>

---

**Resources**
Expand Down
149 changes: 149 additions & 0 deletions guide/inheritance-wallet/onboarding-cosigners.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
---
layout: guide
title: Onboarding cosigners
description: This page describes how Alice sets up the wallet in her app and activates it on her signing device.
nav_order: 3
parent: Inheritance wallet
permalink: /guide/inheritance-wallet/onboarding-cosigners/
main_classes: -no-top-padding
image_base: /assets/images/guide/inheritance-wallet/onboarding-cosigners/
images_bob-export-config:
- file: bob-export-config/onboard-alice-home
alt: Home screen showing three tasks that are associated with the wallet for the user to complete.
caption: A contextual task list helps users to complete all the necessary steps to safely use their new wallet.
- file: bob-export-config/onboard-alice-dialog
alt: Sharing dialog showing a QR code and sharing options.
caption: Bob exports the wallet configuration, so that Alice can set up the wallet on her phone.
- file: bob-export-config/onboard-alice-mark-complete
alt: Home screen showing three tasks that are associated with the wallet for the user to complete.
caption: After Alice has successfully set up the wallet on her end, Bob checks off the task.
- file: bob-export-config/onboard-alice-completion-dialog
alt: Screen showing a confirmation dialog.
caption: Bob confirms that all cosigners have been onboarded. In our use case, Bob and Alice are the only cosigners.
- file: bob-export-config/onboard-alice-done
alt: Home screen showing two tasks associated with the wallet.
caption: The cosigner onboarding task is gone from the list and Bob can continue with the the next task.
images_alice-import-config:
- file: alice-import-config/app-home-initial
alt: Screen showing an empty app home screen.
caption: Alice taps the plus button to start adding the wallet.
- file: alice-import-config/add-wallet-sheet
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
alt: Screen showing different options for adding a wallet.
caption: She selects "Recover an existing wallet"
- file: alice-import-config/alice-import-config-options
alt: Screen showing different options for importing the wallet configuration.
caption: The easiest way to import the configuration is to scan the QR code from Bob's screen.
- file: alice-import-config/alice-scan-config
alt: Screen showing an open QR code scanner.
caption: Alice scans the QR code.
- file: alice-import-config/alice-review-wallet
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
alt: Screen showing the final wallet configuration, with an option to review the details of the signing keys.
caption: Alice reviews the wallet configuration and finishes the import.
- file: alice-import-config/alice-wallet-success
alt: Screen showing a success message and the option to download a wallet backup kit.
caption: On the success screen the app prompts Alice to download the wallet backup kit. She will do that later.
- file: alice-import-config/app-home-done
alt: App home screen showing the newly created wallet.
caption: Back on the home screen, Alice sees that she should download the backup kit and enable her signing device.
images_alice-enable-device:
- file: alice-enable-device/enable-alice-home
alt: Home screen showing the wallet with two tasks associated.
caption: Alice is ready to enable her BitBox to sign transactions for the wallet.
- file: alice-enable-device/enable-alice-dialog
alt: Scren showing an informational dialog about enabling signing devices.
caption: The app tells her what this step is about and how it works.
- file: alice-enable-device/enable-alice-wallet-export
alt: Screen showing different options to export the wallet configuration.
caption: Alice connects her BitBox via USB-C to export the wallet configuration.
- file: alice-enable-device/enable-alice-device-flow
alt: Placholder screen representing the device-specific wallet activation flow.
caption: The app guides her throught the import flow on her BitBox.
- file: alice-enable-device/enable-alice-success
alt: Success screen showing the option activate another device or go to the home screen.
caption: On the success screen, the app shows the option to enable another signing device.
- file: alice-enable-device/enable-alice-completion
alt: Home screen showing the wallet with two tasks associated.
caption: On the home screen, Alice checks off the task.
- file: alice-enable-device/enable-alice-completion-dialog
alt: Screen showing a confirmation dialog.
caption: The app asks whether she has enabled all signing devices.
- file: alice-enable-device/enable-alice-done
alt: Home screen showing the wallet with only one task associated.
caption: The last thing to do is to download the wallet backup kit.
---

<!--

Editor's notes

This page covers how Alice imports the savings wallet to her own app and enables her signing device to create and sign transactions.

Illustration sources

https://www.figma.com/file/h5GP5v5dYfpXXfEUXf6nvC/Family-inheritance-wallet?type=design&node-id=5542%3A2119&mode=design&t=sBtcvrDzb8MPtWaK-1

-->

# Cosigner onboarding
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
{: .no_toc }

---

<div class="glossary-toc" markdown="1">
* Table of contents
{:toc}
</div>

---

[So far]({{ '/guide/inheritance-wallet/wallet-creation/' | relative_url }}), the wallet has been created on Bob's app. The next step is to get Alice set up as a cosigner and to enable her to sign transactions. To do this Alice needs to:
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

1. Import the wallet configuration to her app.
2. Enable her BitBox to sign transactions.

### Wallet onboarding
The first step is to add the family savings wallet on Alice's app.
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

#### Bob shares the wallet configuration
Bob shares the wallet configuration with Alice by tapping on the "onboard cosigner" task. Just like during wallet creation, this displays a QR code that Alice can scan to import the configuration. Alternatively, Bob can share the configuration over a secure channel.
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

{% include image-gallery.html pages = page.images_bob-export-config %}

The app also shows an option to view the [wallet descriptor](https://bitcoin.design/guide/glossary/#output-script-descriptor). The wallet descriptor is a small piece of text that contains all the information that a wallet application needs to recover a multi-key wallet. We will cover this topic in more detail in the chapter about the wallet backup.

After Alice has successfully set up the wallet on her end, Bob checks off the task. For our application, this is a manual step, because it does not run a server that coordinates activity between the users. This adds a bit more friction to the user experience but minimizes reliance on the wallet provider.
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

#### Alice sets up the wallet on her app
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

Alice will scan the QR code from Bob's phone to import the wallet into her app. She reviews the final wallet configuration and hits "add wallet".

{% include image-gallery.html pages = page.images_alice-import-config %}

On the home screen, the app shows the wallet, along with a task list that reminds her to:
- Save the wallet backup kit.
- Enable her BitBox to sign transactions.
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

### Enabling the signing devices
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alice already connected her signing device previously when she created the key. Could the application just automatically make that connection between the newly added wallet and the previously created key?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if that would work. During the wallet creation flow Alice's device has never seen the final wallet descriptor, which it needs to enable transaction signing. It has only seen the wallet configuration template and the role of its key in that configuration.


Bob and Alice's signing devices need to be enabled to sign transactions for the family savings wallet. This is done by importing the wallet configuration to each device.
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved

#### Bob did it during wallet creation
rabbitholiness marked this conversation as resolved.
Show resolved Hide resolved
Bob has already completed this step during the creation of the wallet. When he imported the keys from his Trezor and the shared ColdCard, he did so using a wired connection. During that process the wallet was automatically activated on the devices. If Bob had used an airgapped method (e.g. via QR code or SD card) he would also need to explicitly import the wallet to these two devices.

#### Alice enables her BitBox

What is left to do is for Alice to activate the wallet on her BitBox, so that she can sign transactions with it.

{% include image-gallery.html pages = page.images_alice-enable-device %}

That's it. The family savings wallet is now fully functional. Alice and Bob can now use their signing devices to create transactions and spend bitcoin. On the next page we will look into how the couple backs up the wallet.


---

{% include next-previous.html
previousUrl = "/guide/inheritance-wallet/wallet-creation"
previousName = "Wallet creation"
nextUrl = "/guide/upgradeable-wallet"
nextName = "Upgradeable wallet"
%}
4 changes: 2 additions & 2 deletions guide/inheritance-wallet/wallet-creation.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,6 @@ The homescreen shows the newly created wallet. In addition, the app shows a coup
{% include next-previous.html
previousUrl = "/guide/inheritance-wallet/overview"
previousName = "Overview"
nextUrl = "/guide/upgradeable-wallet/"
nextName = "Upgradeable wallet"
nextUrl = "/guide/inheritance-wallet/onboarding-cosigners"
nextName = "Onboarding cosigners"
%}
4 changes: 2 additions & 2 deletions guide/upgradeable-wallet.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ The screens below show how this architecture allows users to get onboarded quick
---

{% include next-previous.html
previousUrl = "/guide/inheritance-wallet/wallet-creation/"
previousName = "Wallet creation"
previousUrl = "/guide/inheritance-wallet/onboarding-cosigners/"
previousName = "Onbarding cosigners "
nextUrl = "/guide/shared-wallet/"
nextName = "Shared wallet"
%}