Skip to content
Merged
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
20 changes: 20 additions & 0 deletions _compress_images_cache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -373,3 +373,23 @@ assets/images/guide/getting-started/hardware/[email protected]: [email protected]
assets/images/guide/getting-started/hardware/atm.jpg: atm.jpg
assets/images/guide/getting-started/hardware/atm-mobile.jpg: atm-mobile.jpg
assets/images/guide/getting-started/hardware/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/qr-code.jpg: qr-code.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/transaction-file.jpg: transaction-file.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/payment-links.jpg: payment-links.jpg
assets/images/guide/wallet-interoperability/user-data-import-export.jpg: user-data-import-export.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/key-import-export.jpg: key-import-export.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/multi-signature.jpg: multi-signature.jpg
assets/images/guide/wallet-interoperability/node-options.jpg: node-options.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/integrations.jpg: integrations.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
assets/images/guide/wallet-interoperability/wallet-interoperability.jpg: wallet-interoperability.jpg
assets/images/guide/wallet-interoperability/wallet-interoperability-mobile.jpg: wallet-interoperability-mobile.jpg
assets/images/guide/wallet-interoperability/[email protected]: [email protected]
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.
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.
198 changes: 198 additions & 0 deletions guide/resources/wallet-interoperability.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
---
layout: guide
title: Wallet interoperability
description: Writing tips for authors of the Bitcoin Design Guide.
nav_order: 10
parent: Resources
permalink: /guide/resources/wallet-interoperability/
main_classes: -no-top-padding
image: /assets/images/guide/resources/wallet-interoperability-preview.jpg
---

<!--

Editor's notes

An overview of important interaction points between different Bitcoin and other applications.

Designers should think beyond the software they are working on and strongly consider these
areas, as it is extremely likely that users interact with multiple applications over time.

Illustration sources

https://www.figma.com/file/qzvCvqhSRx3Jq8aywaSjlr/Bitcoin-Design-Guide-Illustrations-CO?node-id=1024%3A6795

-->

{% include picture.html
image = "/assets/images/guide/wallet-interoperability/wallet-interoperability.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
mobile = "/assets/images/guide/wallet-interoperability/wallet-interoperability-mobile.jpg"
mobileRetina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Several devices exchanging data"
width = 1600
height = 700
layout = "full-width"
%}

# Wallet interoperability

Diverse applications with different philosophies, feature sets and approaches are fantastic for Bitcoin. It allows many different users around the world to choose the applications that best fit their needs. For this to be practical, a minimum of interoperability should be worked towards, for smoother interactions with fewer mistakes.

Here are some common scenarios:
- Using different wallets for desktop and mobile
- Paying someone who uses different software
- Migrating to a different device, operating system or application
- Multi-signature wallets that require multiple devices and applications to exchange data
- Using your own [node]({{ 'guide/getting-started/software/#nodes' | relative_url }})

Each of these requires that applications are designed and developed to be open, ideally relying on standardized formats.

So here are some ways to allow users to more seamlessly navigate different software configurations.

## Wallet import and export

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/key-import-export.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Transfer of wallet data between applications"
width = 400
height = 300
layout = "float-right-desktop"
%}

Allow for wallets generated in one application to be easily restored in another application. Over the years, Bitcoin applications have implemented various technical details in different ways, partly because standards take time to evolve. See [Wallets Recovery](https://walletsrecovery.org) as an illustration of the problem.
Copy link
Contributor

Choose a reason for hiding this comment

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

This is extremely important section. Should we maybe expand it a bit and add that following BIP's that are widely adopted helps solve this? I am so glad you included that link to walletsrecovery.org it's a great resource, but we may want to emphasize some of their points in this section?

I mean we provided a problem here but not a concrete solution is what I'm thinking.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point. I added a bit more info, recommending that wallets should put extra effort to empower users with all the info they need to recover wallets in the future. Big topic. Daniel had mentioned he is thinking of creating a dedicated page for wallet recovery, this would be a good spot to link there.

Copy link
Contributor

Choose a reason for hiding this comment

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

Excellent idea, I think a dedicated wallet recovery page is needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@danielnordh two votes here for your idea for a page about wallet recovery.


To prevent issues, wallets should make it convenient for users to back up all relevant information they may need for recovery with other applications. One solution is, for example, to provide a downloadable PDF with the wallet name, software name and version, address type, derivation paths, and other non-standard information.

</div>

## Payment links

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/payment-links.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Click a link to launch Bitcoin software"
width = 400
height = 300
layout = "float-right-desktop"
%}

Avoid copying & pasting payment data by providing clickable links with the right information embedded. Bitcoin applications can respond to such link clicks by automatically navigating to the payment screen and prefilling the provided form fields. Payment links as defined in [BIP 21](https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki) can contain contain address, amount, label and other details.

Example link:
```
bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz
```

</div>

## QR codes

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/qr-code.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "A smartphone camera scanning a QR code"
width = 400
height = 400
layout = "float-right-desktop"
%}

QR codes are visual representations of data. Since most devices today feature cameras with built-in support for reading QR codes, this technique has become a convenient method to transfer data from one device to another, even if those devices are offline. Common use cases include reading payment invoices (such as the payment links described above), or importing wallet keys from a backup.

Static QR codes can only contain small amounts of information. Animated QR codes address this problem by splitting up the data over multiple static QR codes. Reading animated QR codes is not a standard feature yet.
Copy link
Contributor

Choose a reason for hiding this comment

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

Speaking of data in QR codes, this is an excellent read.

This also shows how interoperability in QR codes is also important. Also shows how people don't follow BIP entirely. Unsure if and how we can fit it in, but wanted to share.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Just added this info.


Although QR codes are a well-established and standardized format, there are details to consider. It is, for example, [more efficient](https://bitcoinops.org/en/bech32-sending-support/#creating-more-efficient-qr-codes-with-bech32-addresses) to encode uppercase characters, resulting in simpler QR codes that are easier to scan. So it is recommended to uppercase data that is not case sensitive. However, [not all wallets](https://github.com/btcpayserver/btcpayserver/issues/2110) can properly interpret this capitalized data, which can cause issues for users.

</div>

## User data import and export

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/user-data-import-export.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Transfer of user data between applications"
width = 400
height = 300
layout = "float-right-desktop"
%}

Transaction data is stored on the Bitcoin block chain and available in any wallet a user has set up. As is, this transaction data does not contain any useful information about the reasons why transactions were made, who owns each address, etc. To better understand and organize their finances, users typically enrich transaction data by assigning contacts, notes, labels, and other useful information. This data should be stored in standardized, open formats and easily synced between applications. This is especially useful for users who rely on multiple devices.
Copy link
Contributor

Choose a reason for hiding this comment

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

Are there any standards for this we can reference to?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Just researched a little and come across some standards that are overly complicated like ISO 20022, OFX and QIF. They are meant for the exchange of financial data, but more on an enterprise/bank level. I wish there was something more lean and JSON-based available.

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks for looking into it.. For example, I know that Electrum has labels, but it's unclear to me how they can work and can be exported. One day it'll be essential to have a standard in Bitcoin for this sort of data, as ideally nobody wants to loose precious data when switching wallets.


</div>

## Transaction files

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/transaction-file.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Transfer of transaction files between applications"
width = 400
height = 300
layout = "float-right-desktop"
%}

Also known as the [Partially Signed Bitcoin Transaction Format](https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki), this type of file allows for storage and transfer of transactions that are not finalized. Common use cases are in multi signature wallets where one application prepares a transaction and sends it to another wallet for an additional signature. It also allows signing wallets to be offline, as the transaction data can be transferred via USB drives or animated QR codes.

</div>

## Multi signature wallets

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/multi-signature.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Cosigner wallets interacting with a multi signature wallet"
width = 400
height = 300
layout = "float-right-desktop"
%}

Per definition, multi signature wallets require interaction between all cosigners and therefore interoperability between their software (or hardware) of choice. Especially when there are multiple cosigners (rather than one owner using multiple signing devices), there should be strong design considerations to how the cosigners exchange keystores and transaction data.

</div>

## Self-hosted nodes

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/node-options.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Node options"
width = 400
height = 300
layout = "float-right-desktop"
%}

While it is extremely convenient when applications provide their own node connections, it is recommended to allow users to have a choice, and potentially even encourage them to set up their own node. This results in better decentralization, and also has privacy and security benefits.
Copy link
Contributor

Choose a reason for hiding this comment

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

Important point 👏

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Would be a good spot to link to a "Principles" or "Values" section.


</div>

## Integrations

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

{% include image.html
image = "/assets/images/guide/wallet-interoperability/integrations.jpg"
retina = "/assets/images/guide/wallet-interoperability/[email protected]"
alt-text = "Application reliance on external data and services"
width = 400
height = 300
layout = "float-right-desktop"
%}

Most Bitcoin applications rely on external data sources (like currency conversion data) and may also have integrations with third parties (like linking to an external [block explorer]({{ 'guide/getting-started/software/#block-explorers' | relative_url }})). Whenever possible, it should be easy for users to learn about these dependencies and choose alternatives.

</div>