Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
c0a5081
Create new principles folder and page
danielnordh Feb 12, 2021
18a7cbd
Update nav order of other top level pages
danielnordh Feb 12, 2021
c0b32c9
Internal page links, styling
danielnordh Feb 12, 2021
4744f22
Links, tweaks.
danielnordh Feb 12, 2021
e740e97
Delete principles page in PK chapter, clean up in PK chapter
danielnordh Feb 12, 2021
3ad7884
Remove Principles from PK chapter in Readme content list
danielnordh Feb 12, 2021
2a6caba
Add link to page from Readme content list
danielnordh Feb 12, 2021
60adf0b
Clean up use of principles word in Foundations description
danielnordh Feb 12, 2021
75387b3
Tweak sentence after feedback.
danielnordh Feb 12, 2021
9d4f8a9
Remove Principles section from Onboarding chapter intro page cc: @Con…
danielnordh Feb 12, 2021
17d7b45
Update page name to 'Bitcoin design principles'
danielnordh Feb 12, 2021
136f927
Styling
danielnordh Feb 12, 2021
c2ffe73
Link tweaks
danielnordh Feb 12, 2021
3b98813
Better sentences about decentralization and why an open financial sys…
danielnordh Feb 19, 2021
fdc0b4a
Update permalink
danielnordh Feb 19, 2021
7a7d5c2
Expand to mention other external services
danielnordh Feb 19, 2021
6fbc9ac
Add decentralization 'don't' for products that stop working if projec…
danielnordh Feb 19, 2021
57eaa26
Better wording
danielnordh Feb 19, 2021
6157b9f
Better wording
danielnordh Feb 19, 2021
c3c3910
Spelling
danielnordh Feb 19, 2021
264f896
Better wording
danielnordh Feb 19, 2021
f229e29
Better wording
danielnordh Feb 19, 2021
f29f2d7
Better wording
danielnordh Feb 19, 2021
6d5b928
Add link to glossary
danielnordh Feb 19, 2021
e2f8a80
Add link
danielnordh Feb 19, 2021
304bc12
Only link from [private keys]
danielnordh Feb 19, 2021
5e3906d
Tone down prediction.
danielnordh Feb 19, 2021
20d9515
Better wording
danielnordh Feb 19, 2021
256e0ae
Better wording
danielnordh Feb 19, 2021
0f557c7
Change back to 'Principles' in nav bar.
danielnordh Feb 19, 2021
6bf33a0
Add to Transparency 'Do's'
danielnordh Feb 19, 2021
7b8e2f3
Add sentence about the feeling of security.
danielnordh Feb 19, 2021
62d7a7a
Explain that the principles have ben identified by the Bitcoin design…
danielnordh Feb 19, 2021
df4d515
Reorganize 'one sentence' explainer for each principle. (Previously i…
danielnordh Feb 19, 2021
981f57c
Spelling
danielnordh Feb 19, 2021
8935f89
Tweaks to blockquotes
danielnordh Feb 19, 2021
f9bb124
Fix broken links.
danielnordh Feb 19, 2021
56488e0
Fix links, again
danielnordh Feb 19, 2021
9f2633e
Capital B
danielnordh Feb 19, 2021
8195bd2
Add Do about minimizing external code dependency
danielnordh Feb 19, 2021
38f21a8
Fix link
danielnordh Mar 5, 2021
032576d
Formatting
danielnordh Mar 5, 2021
9cefa33
Language
danielnordh Mar 5, 2021
0a90236
Cut duplicate
danielnordh Mar 5, 2021
edfcdda
Wording
danielnordh Mar 5, 2021
17035b9
Update guide/principles/principles.md
danielnordh Mar 12, 2021
fd349e1
Fix conflict with master in guide.md
danielnordh Mar 12, 2021
2817605
Fix conflicts with master in glossary.md
danielnordh Mar 12, 2021
012ecf3
Address maker, soften wording around running a node
danielnordh Mar 12, 2021
7e73385
Add Do around 'path to self custody'
danielnordh Mar 12, 2021
47bbe4c
Tweak Transparency pull-quote
danielnordh Mar 12, 2021
bbd6299
Shorten Security section
danielnordh Mar 12, 2021
ad37011
Update order or principles
danielnordh Mar 12, 2021
f885b19
Simplified wording
danielnordh Mar 12, 2021
661e72f
Simplify wording
danielnordh Mar 12, 2021
082816b
Simplify wording
danielnordh Mar 12, 2021
7cfbcba
Link to Onboarding
danielnordh Mar 12, 2021
7d0ef6e
Tweak privacy example.
danielnordh Mar 12, 2021
99a16a0
Remove political
danielnordh Mar 12, 2021
dce37ff
Move Principles page into Foundation
danielnordh Mar 12, 2021
0382cdb
Include blurb and link to Principles from Foundations/introduction page
danielnordh Mar 12, 2021
4463094
Move principle images to foundation folder
danielnordh Mar 12, 2021
c6355c9
Add header image to Principles page, move remaining images
danielnordh Mar 12, 2021
50c8752
Fix URL typo
danielnordh Mar 12, 2021
9186aaa
Format, line break
danielnordh Mar 12, 2021
09a0992
Update introduction.md
pavlenex Mar 15, 2021
3d421ac
Create principles.md
pavlenex Mar 15, 2021
aab900e
Merge remote-tracking branch 'upstream/master' into feature/principles
pavlenex Mar 15, 2021
952ee7d
Revert "Create principles.md"
pavlenex Mar 15, 2021
1dea556
Revert "Update introduction.md"
pavlenex Mar 15, 2021
d6f8b53
Move principles.md into foundations folder
danielnordh Mar 19, 2021
25315aa
Grammar
danielnordh Mar 19, 2021
f4bd573
Better alt text
danielnordh Mar 19, 2021
2b53904
Expand explanation.
danielnordh Mar 19, 2021
0b078aa
Extraneous word
danielnordh Mar 19, 2021
9f9b35a
Merge branch 'feature/principles' of https://github.com/BitcoinDesign…
danielnordh Mar 19, 2021
58b4940
Wording
danielnordh Mar 19, 2021
1a2ca12
Spelling
danielnordh Mar 19, 2021
672f50b
Spelling
danielnordh Mar 19, 2021
26f3ff9
Grammar
danielnordh Mar 19, 2021
7328c47
Grammar
danielnordh Mar 19, 2021
0a4abc2
Wording
danielnordh Mar 19, 2021
9c1f1a9
Missing word
danielnordh Mar 19, 2021
c5e0a14
Add divider line
danielnordh Mar 19, 2021
3851ffd
Merge branch 'feature/principles' of https://github.com/BitcoinDesign…
danielnordh Mar 19, 2021
a1fff44
Clarify self custody wording
danielnordh Mar 19, 2021
6634e7b
Further clarification to self custody
danielnordh Mar 19, 2021
e3c74d9
Improve Security text
danielnordh Mar 19, 2021
58b8268
Improve transparency text
danielnordh Mar 19, 2021
e5a8fae
grammar
danielnordh Mar 19, 2021
e74baba
Accept wording change
danielnordh Mar 24, 2021
1e9a95e
Accept suggested wording
danielnordh Mar 24, 2021
e963a06
Accept suggested wording
danielnordh Mar 24, 2021
0a81aa1
Accept suggest wording
danielnordh Mar 24, 2021
faa0b95
Accept suggested wording
danielnordh Mar 24, 2021
8eb2634
Accept suggested wording
danielnordh Mar 24, 2021
ab9cfbe
Accept suggested wording
danielnordh Mar 24, 2021
c632a21
Accept suggested wording
danielnordh Mar 24, 2021
9ee560b
Accept suggested wording
danielnordh Mar 24, 2021
971df46
Accept suggested wording
danielnordh Mar 24, 2021
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
2 changes: 1 addition & 1 deletion guide/contribute/contribute.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Contribute to guide
description: Additional material for both readers and writers of the guide.
nav_order: 9
nav_order: 8
has_children: true
permalink: /guide/contribute/
image: /assets/images/guide/contribute/contribute-preview.jpg
Expand Down
2 changes: 1 addition & 1 deletion guide/foundations/foundations.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Foundations
description: Basics for designing great Bitcoin products.
nav_order: 5
nav_order: 6
has_children: true
permalink: /guide/foundations/
image: /assets/images/guide/foundations/foundations-preview.jpg
Expand Down
2 changes: 1 addition & 1 deletion guide/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Glossary
permalink: /guide/glossary/
nav_order: 6
nav_order: 7
---

# Glossary
Expand Down
2 changes: 1 addition & 1 deletion guide/onboarding/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Onboarding
description: An overview of some of the concepts to consider when building onboarding experiences.
nav_order: 2
nav_order: 3
permalink: /guide/onboarding/introduction/
main_classes: -no-top-padding
image: /assets/images/guide/onboarding/onboarding.png
Expand Down
2 changes: 1 addition & 1 deletion guide/payments/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Payments
description: Diving into the user experience of moving Bitcoin
nav_order: 4
nav_order: 5
has_children: false
permalink: /guide/payments/
main_classes: -no-top-padding
Expand Down
169 changes: 169 additions & 0 deletions guide/principles/principles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
---
layout: guide
title: Principles
description: The key principles to follow when designing Bitcoin products.
nav_order: 2
has_children: false
permalink: /guide/principles/principles/
main_classes: -no-top-padding
---

<!--

Editor's notes

The key principles of designing for Bitcoin

-->

# Bitcoin Design Principles

As a new technology, Bitcoin offers the opportunity of an open financial system without intermediaries. To make this a reality, we encourage everyone that is working on products to deliberately support the core principles of designing for Bitcoin. Some of these come from the technology itself, and others from the behaviour and ethos of the community. Although every use case and product is different, all applications should strive to follow these principles. Diverging from them should only be done with very good reason.


- [Decentralization](#decentralization)
- [Inclusion](#inclusion)
- [Transparency](#transparency)
- [Self-custody](#self-custody)
- [Security](#security)
- [Privacy](#privacy)
- [Interoperability](#interoperability)

---

## Decentralization

Unlike traditional banking systems, the Bitcoin economy does not require new users to seek permission from anyone. Bitcoin has no central point of control. No one person or entity is in charge. Connecting to any node on the network gives you the same rights and responsibilities, which also ensures that there is no single point of failure.

*Build products that are permissive in terms of what users can do with Bitcoin.*

*Have fall-back options for connections to the network.*

**Do**
- Manage your own private keys
- Run a full Bitcoin node when possible
- Alternatively, use a light client with the p2p network [BIP157]({{ 'https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki'}}) using compact block filters [BIP158]({{ 'https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki'}})
- Offer the user choice of what node to connect to

**Don't**
- Introduce a single point of failure between the user and the Bitcoin network

---

## Inclusion

There are no background checks, credit checks, or gatekeepers to Bitcoin. A Kenyan farmer has the same access to Bitcoin as a Wall Street trader.

And while Bitcoin is already widely used by a large number of people, it pales in comparison with the billions that will use it in the future. Without dumbing down or reducing the possibilities we need to design products that are prepared for people that are new to Bitcoin. This means using plain and ordinary language, explaining things in the context where they are needed, not overwhelming people with technical detail, and more.

*Provide equal and direct access to the Bitcoin network, without middlemen and exclusive requirements.*

*Design Bitcoin products that are usable by the widest range of people possible.*

**Do**
- Use plain language that people new to Bitcoin can understand regardless of prior knowledge
- Use more languages than just english
- Educate in place, when people are presented with a new concept
- Treat users with impairments, or who rely on assistive technologies, as first-class citizens

**Don't**
- Introduce requirements that might exclude many people, for example by building only for high-end hardware, requiring US KYC (Know-your-customer) information etc
- Avoid technical detail that is not required knowledge, or technical terms like seed phrase XPUBs, mnemonics etc.
- Do not put all education up front and expect people to read and remember it

---

## Transparency

While an open and decentralized financial system that lets people connect directly with it is great, it does put a lot of burden on the users to pick a product they trust, and that works for them. We can make this easier by freely sharing information about how our products work, what technologies they use and rely on and so forth. Let people verify that your claims are true. It is also very important to be open about what risks the user might be taking on with self-custody, under which scenarios they might lose access to their funds and best practices for avoiding this.

*Be open and transparent with how your product works.*

*Explain what risks the user is taking on, and how best to mitigate them.*

**Do**
- Build your product as open source when possible
- Let people verify, without having to trust
- Be clear about what risk the user is taking on, and how they can lose access to their funds

**Don't**
- Make claims that are not explained or verifiable

---

## Self-custody

Our existing mental models of access to digital services are usernames and passwords, controlled by a company that has custody of your funds and data. With everyone having direct access to the Bitcoin network without middlemen, there is no longer a need for people to delegate control of their funds. While it comes with greater responsibility, it is self-custody that really enables the open financial system of peer-to-peer transactions.

*Give end users full control of their funds.*

**Do**
- Let users control their private keys, and funds directly

**Don't**
- Custody funds for your users

---

## Security

Self-custody means that the end user is ultimately responsible for keeping their funds and private keys safe. They can only do that if we provide them with good, appropriate tools and awareness of good practice. It is therefore our responsibility as designers and makers to really take their security seriously and make Bitcoin products that are as secure as possible by default. We should strive for no loss of funds, regardless of whether this happens through negligence or theft.

Security is especially important when onboarding people new to Bitcoin where solutions that might be fine for advanced users might backfire for beginners. New users are likely to start by storing small amounts until they get comfortable with self-custody. A scheme suited for storing large amounts of funds is likely overkill and scary to a beginner, so the concept of progressive security is a good idea. This could let a user upgrade their security and private key management scheme as their savings grow.

A big part of security is also education and awareness, protecting users from bad actors and potentially their own bad behavior. Bad actors may already know what most users don’t, and be aware of new vulnerabilities. It is unrealistic to expect beginners to take onboard all the knowledge acquired by advanced users of several years in one go, for example while onboarding to a product. We should therefore consider how to continuously educate and level up user awareness of best practices and risks.


*Provide appropriate and progressive security for all types of users.*

**Do**
- Take safeguarding of users funds seriously
Copy link
Contributor

Choose a reason for hiding this comment

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

  • Provide suitable private key management schemes for beginners

I feel like this one was already mentioned in the paragraphs above. Maybe you had something different in mind, what do you mean when you say sustainable PKM?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The do's and don'ts sometimes repeat information from the paragraph in bullet points, I think that's OK.

Sustainable -> Suitable (meaning appropriate for beginners)

- Provide suitable private key management schemes for beginners
- Offer progressive security and upgrade paths
- Build with bad actors in mind
- Minimize risk of self-inflicted loss from user negligence
- Continuously educate users on best practice and risks


**Don't**
- Blame the user for losing funds
- Expect beginners to implement best practice backup strategies

---

## Privacy

A common misconception of Bitcoin is that it provides complete anonymity and privacy of transactions. Since the blockchain is an unchangeable ledger of all transactions ever made, it is in fact very hard to not have your complete transaction history visible once even a single one of your addresses is connected to you. If Bitcoin is to become viable for a wider audience and daily use we ought to take privacy seriously. This is certainly not to enable or encourage illicit activity, but to protect individual financial privacy. We would not accept our bank to publish our financial transactions publicly.

The Bitcoin network doesn’t need to know your name for you to use it. Strive to collect as little personal information as possible about your users. When it is absolutely required to provide the product services, collect only the bare minimum and consider if and when this can be discarded when no longer necessary. If you do collect personal information, be transparent about why and how you will use and store it.

*Minimize collection of personal information.*

*Maximize financial transaction privacy.*

**Do**
- Minimize the personal information you collect
- Avoid address reuse
- Embrace privacy-preserving options when relevant (running a full node, compact block filters, Tor, Lightning Network, coin selection, schnorr signatures, payjoin, coinswap, etc.)

**Don't**
- Collect and store personal information not required for the functionality of your product

---

## Interoperability

Bitcoin is an open-source protocol, operated in a decentralized manner. This has led to a number of standards being developed for products building on the protocol to be compatible. It should be easy to switch and move your Bitcoin wallet to a different application, should you wish. Making sure that your product supports as many of these standards as possible is best practice and builds trust. More on [wallet interoperability]({{ '/guide/foundations/wallet-interoperability/' | relative_url }}).

*No lock-in, users should be able to port wallets and data.*

*Maximum compatibility with open standards.*

**Do**
- Support import and export of wallets
- Support as many relevant BIPs as possible
- Be transparent with which ones you do and don’t support


**Don't**
- Implement proprietary solutions when open standards exist
2 changes: 1 addition & 1 deletion guide/private-key-management/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Private key management
description: An overview of private key management schemes, including descriptions of available approaches, some advice and best practices.
nav_order: 3
nav_order: 4
has_children: true
permalink: /guide/private-key-management/introduction/
main_classes: -no-top-padding
Expand Down