New Bitcoin Core subsite

This commit contains a large number of contributions from Saïvann
Carignan.
This commit is contained in:
David A. Harding 2015-09-01 21:21:51 -04:00
parent c4517a951e
commit 706c791e92
No known key found for this signature in database
GPG key ID: 4B29C30FF29EC4B7
85 changed files with 17420 additions and 88 deletions

View file

@ -0,0 +1,113 @@
---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
layout: base-core
lang: en
id: bitcoin-core-feature-overview
columns: 1
title: Features - Bitcoin Core
breadcrumbs:
- bitcoin
- bcc
- Features
end_of_page: |
<script>
start_slideshow($('#slidebox'));
</script>
---
# Bitcoin Core
{:.not-displayed}
<div id="slidebox">
<div class="slide-viewer">
<div class="slide-group">
<div class="slide slide-1">
<a href="#validation"><img src="/img/bitcoin-core/slider-validation.svg" alt="Full Validation: the best possible decentralized security" /></a>
</div>
<div class="slide slide-2">
<a href="#privacy"><img src="/img/bitcoin-core/slider-privacy.svg" alt="Strong privacy" /></a>
</div>
<div class="slide slide-3">
<a href="#requirements"><img src="/img/bitcoin-core/slider-warning.svg" alt="Requirements and warnings" /></a>
</div>
<div class="slide slide-4">
<a href="#user-interface"><img src="/img/bitcoin-core/slider-ui.svg" alt="User interface" /></a>
</div>
<div class="slide slide-5">
<a href="#network-support"><img src="/img/bitcoin-core/slider-network.svg" alt="Support the network" /></a>
</div>
</div>
</div>
<div class="slide-buttons"
><button type="image" class="slide-btn button-1" markdown="1"
><span class="fa fa-check-square-o"></span></button>
<button type="button" class="slide-btn button-2" markdown="1"
><span class="fa fa-shield"></span></button>
<button type="button" class="slide-btn button-3" markdown="1"
><span class="fa fa-bar-chart"></span></button>
<button type="button" class="slide-btn button-4" markdown="1"
><span class="fa fa-sign-in"></span></button>
<button type="button" class="slide-btn button-5" markdown="1"
><span class="fa fa-globe"></span></button
></div>
</div>
<br class="clear">
{% include bitcoin-core/download-bitcoin-core.html %}
## <span class="fa fa-check-square-o fa-lg"></span> Full Validation {#validation}
{:.no_gap}
Bitcoin Core ensures every block and transaction it accepts is valid,
increasing not only your security but also **helping prevent miners and
banks from taking control of Bitcoin.**
{:.right-hanger}
[Learn about full validation][bcc validation]
## <span class="fa fa-shield fa-lg"></span> Better Privacy {#privacy}
Bitcoin Core provides **exclusive privacy features** that can make it
hard for anyone to link you to your transactions.
{:.right-hanger}
[Discover the privacy advantages][bcc privacy]
## <span class="fa fa-bar-chart fa-lg"></span> Warning: Better Security Has Costs {#requirements}
Bitcoin Core uses more resources than other wallets, but it's still
convenient to run on most computers and Internet connections.
{:.right-hanger}
[System requirements & warnings][bcc requirements]
## <span class="fa fa-sign-in fa-lg"></span> A Better User Interface {#user-interface}
Bitcoin Core wallet has **features most other wallets don't have.** But
if you don't need them, you can use several other wallets on top of
Bitcoin Core without losing Bitcoin Core's [security][bcc validation] and
[privacy][bcc privacy] benefits.
{:.right-hanger}
[Tour the user interface][bcc user interface]
## <span class="fa fa-globe fa-lg"></span> Support The Network {#network-support}
Bitcoin Core helps support other peers. This isn't as useful as [helping
to keep Bitcoin decentralized](#validation), but it's **an easy way for
broadband users to contribute** to less well-connected users.
{:.right-hanger}
[Begin donating bandwidth][bcc network support]
<br>
{% include references.md %}

View file

@ -0,0 +1,59 @@
---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
id: bitcoin-core-donate-bandwidth
layout: base-core
lang: en
columns: 1
title: Support The Network - Bitcoin Core Features
breadcrumbs:
- bitcoin
- bcc
- bcc features
- Network Support
---
# Donate Bandwidth Using Bitcoin Core
{:.not-displayed}
![Support the network](/img/bitcoin-core/slider-network.svg)
{% include bitcoin-core/download-bitcoin-core.html %}
The Bitcoin peer-to-peer network serves both Bitcoin Core and many other
Bitcoin programs (mostly lightweight wallets). By contributing some of
your bandwidth---typically about 100 GB upload a month---you can help
support Bitcoin.
The [bandwidth sharing guide][] provides all of the details you need
to begin donating bandwidth.
## Don't Forget About Decentralization
The Bitcoin network needs more than bandwidth---it also needs people who
[actively secure][bcc validation do you validate] their bitcoins using Bitcoin Core. By
securing your bitcoins with a full node like Bitcoin Core, you [help
protect Bitcoin's decentralization][bcc validation decentralization] for
yourself and other Bitcoin users.
You can help protect decentralization instead of donating bandwidth by
simply using Bitcoin Core as your main wallet. Or, even better, you can
both donate bandwidth and protect decentralization at the same time by
using Bitcoin Core as your main wallet while also following the
instructions in the [bandwidth sharing guide][].
## Thank You
Whether you choose to donate bandwidth, protect decentralization, or
both, please know that your fellow Bitcoin users thank you. Without
volunteers like you, Bitcoin would never have come as far as it has.
<br class="clear big">
<div class="prevnext">
<span markdown="1">**Previous Feature**<br>[User interface][bcc user interface]</span>
<span markdown="1">**Next feature**<br>[Feature overview][bcc features]</span>
</div>
<br class="clear">
{% include references.md %}

View file

@ -0,0 +1,465 @@
---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
id: bitcoin-core-privacy
layout: base-core
lang: en
columns: 1
title: Privacy - Bitcoin Core Features
breadcrumbs:
- bitcoin
- bcc
- bcc features
- Privacy
third_party_privacy:
## Alphabetical order
- name: "Bitcoin Core"
css_class: bitcoin_core
group: default-show
tracks_real_names: "no"
knows_your_bitcoin_balance: "no"
susceptible_to_taint_analysis: "yes"
tracks_payments: "no"
tracks_amounts: "no"
tracks_ip_addresses: "no"
- name: "BitGo"
css_class: bitcoin_go
group: not-displayed
tracks_real_names: "no"
knows_your_bitcoin_balance: "yes"
susceptible_to_taint_analysis: "yes"
tracks_payments: "yes"
tracks_amounts: "yes"
tracks_ip_addresses: "yes"
- name: BitPay
css_class: bitpay
group: not-displayed
tracks_real_names: "yes"
knows_your_bitcoin_balance: "yes"
susceptible_to_taint_analysis: "no"
tracks_payments: "yes"
tracks_amounts: "yes"
tracks_ip_addresses: "yes"
- name: Blockchain.info
css_class: blockchain_info
group: not-displayed
tracks_real_names: "no"
knows_your_bitcoin_balance: "yes"
susceptible_to_taint_analysis: "yes"
tracks_payments: "yes"
tracks_amounts: "yes"
tracks_ip_addresses: "yes"
- name: Coinbase
css_class: coinbase
group: default-show
tracks_real_names: "yes"
knows_your_bitcoin_balance: "yes"
susceptible_to_taint_analysis: "no"
tracks_payments: "yes"
tracks_amounts: "yes"
tracks_ip_addresses: "yes"
- name: GreenAddress
css_class: greenaddress
group: not-displayed
tracks_real_names: "no"
knows_your_bitcoin_balance: "yes"
susceptible_to_taint_analysis: "yes"
tracks_payments: "yes"
tracks_amounts: "yes"
tracks_ip_addresses: "yes"
- name: Ninki
css_class: ninki
group: not-displayed
tracks_real_names: "no"
knows_your_bitcoin_balance: "yes"
susceptible_to_taint_analysis: "yes"
tracks_payments: "yes"
tracks_amounts: "yes"
tracks_ip_addresses: "yes"
---
# Bitcoin Core's Excellent Privacy
{:.not-displayed}
![Excellent privacy](/img/bitcoin-core/slider-privacy.svg)
{% include bitcoin-core/download-bitcoin-core.html %}
> What if every time you spent or received cash, all the transaction
> details were published to your Twitter or Facebook feed for all your
> friends to see? You probably wouldn't want to use cash any more.
Every confirmed Bitcoin transaction is published to the block chain
where anyone can see it. So **why do people still use Bitcoin?** And why
do many of them believe that Bitcoin is a private way of sending money?
One reason is that Bitcoin Core and some other Bitcoin software tries to
avoid associating your real-world identity with the transactions you
make. The difference looks like this:
![Privacy difference: pseudonymous transactions](/img/bitcoin-core/privacy-difference.svg)
The second type of transaction (a pseudonymous transaction) only provides
practical privacy if nobody can figure out that "5a35b" is really Alice.
It's up to your wallet to prevent anyone from making that connection.
See below for how Bitcoin Core's privacy compares to other wallets.
## No Sign-Up Required
Third-party Bitcoin services can both increase and decrease your
privacy. They can increase it by mixing your transactions with those of
other users; they can decrease it by tracking your activity and directly
associating it with your real name or other identifying information.
<p class="center">
Click an entry below to show it:<br>
{% for service in page.third_party_privacy %}
{% if service.name != 'Bitcoin Core' %}
<button
{% if service.group == "default-show" %}
class="js showcolumn active"
{% else %}
class="js showcolumn"
{% endif %}
id="{{service.css_class}}"
>{{service.name}}</button>
{% endif %}
{% endfor %}
</p>
<table class="privacy-comparison">
{% comment %}
<!-- Don't overdo it! Limit table to a total of seven content rows, with a
maximum of five content rows in each category. -->
{% endcomment %}
<tr>
<th markdown="span" colspan="99">Who knows your information? **Just you**{:.fggreen} or also a **service provider?**{:.fgred}</th>
</tr>
<tr>
<th></th>
{% for service in page.third_party_privacy %}
{% if service.name %}
<th class="{{service.css_class}} {{service.group}}">{{service.name}}</th>
{% else %}
{% die "Some service doesn't have a name" %}
{% endif %}
{% endfor %}
</tr>
<tr>
<td>Your real name</td>
{% for service in page.third_party_privacy %}
{% case service.tracks_real_names %}
{% when "yes" %}
<td class="bgred {{service.css_class}} {{service.group}}"></td>
{% when "no" %}
<td class="bggreen {{service.css_class}} {{service.group}}"></td>
{% when "maybe" %}
<td class="bgyellow {{service.css_class}} {{service.group}}"></td>
{% else %}
{% die "missing service information" %}
{% endcase %}
{% endfor %}
</tr>
<tr>
<td>Your bitcoin balance</td>
{% for service in page.third_party_privacy %}
{% case service.knows_your_bitcoin_balance %}
{% when "yes" %}
<td class="bgred {{service.css_class}} {{service.group}}"></td>
{% when "no" %}
<td class="bggreen {{service.css_class}} {{service.group}}"></td>
{% when "maybe" %}
<td class="bgyellow {{service.css_class}} {{service.group}}"></td>
{% else %}
{% die "missing service information" %}
{% endcase %}
{% endfor %}
</tr>
<tr>
<td>Who you pay, and/or who pays you (in some cases)</td>
{% for service in page.third_party_privacy %}
{% case service.tracks_payments %}
{% when "yes" %}
<td class="bgred {{service.css_class}} {{service.group}}"></td>
{% when "no" %}
<td class="bggreen {{service.css_class}} {{service.group}}"></td>
{% when "maybe" %}
<td class="bgyellow {{service.css_class}} {{service.group}}"></td>
{% else %}
{% die "missing service information" %}
{% endcase %}
{% endfor %}
</tr>
<tr>
<td>How much you spend and/or receive</td>
{% for service in page.third_party_privacy %}
{% case service.tracks_amounts %}
{% when "yes" %}
<td class="bgred {{service.css_class}} {{service.group}}"></td>
{% when "no" %}
<td class="bggreen {{service.css_class}} {{service.group}}"></td>
{% when "maybe" %}
<td class="bgyellow {{service.css_class}} {{service.group}}"></td>
{% else %}
{% die "missing service information" %}
{% endcase %}
{% endfor %}
</tr>
<tr>
<td>The IP address your connection came from</td>
{% for service in page.third_party_privacy %}
{% case service.tracks_ip_addresses %}
{% when "yes" %}
<td class="bgred {{service.css_class}} {{service.group}}"></td>
{% when "no" %}
<td class="bggreen {{service.css_class}} {{service.group}}"></td>
{% when "maybe" %}
<td class="bgyellow {{service.css_class}} {{service.group}}"></td>
{% else %}
{% die "missing service information" %}
{% endcase %}
{% endfor %}
</tr>
<tr class="empty"></tr>
<tr>
<th markdown="span" colspan="99">Who can guess your information? **Just you**{:.fggreen} or also **people
you trade with?**{:.fgred}</th>
</tr>
<tr>
<th></th>
{% for service in page.third_party_privacy %}
{% if service.name %}
<th class="{{service.css_class}} {{service.group}}">{{service.name}}</th>
{% else %}
{% die "Some service doesn't have a name" %}
{% endif %}
{% endfor %}
</tr>
<tr>
<td>Other transactions you made or received</td>
{% for service in page.third_party_privacy %}
{% case service.susceptible_to_taint_analysis %}
{% when "yes" %}
<td class="bgred {{service.css_class}} {{service.group}}"></td>
{% when "no" %}
<td class="bggreen {{service.css_class}} {{service.group}}"></td>
{% when "maybe" %}
<td class="bgyellow {{service.css_class}} {{service.group}}"></td>
{% else %}
{% die "missing service information" %}
{% endcase %}
{% endfor %}
</tr>
</table>
## Perfect Privacy for Received Transactions
There are {{site.text.total_tx_count_in_millions}} million transactions on the Bitcoin block
chain. How do you find which ones pay you? Here are some common
options:
<table class="received_transactions">
<tr>
<td class="center" markdown="span">**Ask bankers**{:.fgred}<br
>They'll monitor your every transaction<br><br
><button class="popup js" data-container="bitcoin_bank_receiving">Bitcoin banks</button></td>
<td class="center" markdown="span">**Ask random nodes**{:.fgred}<br
>Some of which sell your data<br><br
><button class="popup js" data-container="bloom_filter_receiving">P2P lightweight wallets</button></td>
</tr>
<tr>
<td class="center" markdown="span">**Ask a free service**{:.fgred}<br
>(Actually, some do care about privacy)<br><br
><button class="popup js" data-container="electrum_style_receiving">Client lightweight wallets</button></td>
<td class="center" markdown="span">**Get all {{site.text.total_tx_count_in_millions}} million transactions**{:.fggreen}<br
>For **perfect** receiving privacy<br><br
>**Bitcoin Core**</td>
</tr>
</table>
Bitcoin Core downloads all {{site.text.total_tx_count_in_millions}} million transactions on the Bitcoin block
chain and processes them to find which transactions pay you.
This currently takes about {{site.text.typical_ibd_time_in_hours}} hours the first time
you start Bitcoin Core and about {{site.text.typical_144_block_catchup_time_in_minutes}}
minutes a day to keep updated, but it gives you what scientists call
**<button class="popup js" data-container="information_theoretic_privacy">information-theoretic (perfect) privacy</button>**
against eavesdroppers for received transactions.
## Strong Privacy for Sent Transactions
To put a transaction on the block chain, you must send it publicly---but
how you send it can make a big difference.
![Sending privacy](/img/bitcoin-core/sending-privacy.svg)
**Can you guess who made which transactions?** Nearly all peer-to-peer
lightweight clients today make no attempt to obscure their sent
transactions. They simply send them to some or all of their peers.
Bitcoin Core does much better. By default, it relays transactions for
all of its peers---thousands of separate transactions a day under common
conditions---which allows it both [support the peer-to-peer network][bcc
network support] and confuse anti-privacy organizations that try to
track your transactions.
## Tor Compatible
The Tor anonymity network helps disassociate your online activity from
your IP address (which is often closely associated with your real name).
This significantly increases your ability to confound anti-privacy
organizations.
Once you [setup Tor][], using it with Bitcoin Core is [easy][bcc
tor]. If you also [setup a Tor hidden service][bcc tor hs], you will
be able to [connect mobile clients][bcc user interface lightweight]
to your Bitcoin Core full node for increased security and privacy
wherever you go.
{:.right-hanger}
[Start using Tor today <span class="fa fa-external-link-square"></span>][setup tor]
## Decentralized Peer Discovery
The first time any Bitcoin program connects to the peer-to-peer network,
it has to ask a centralized authority for a list of recommended peers.
Once the program gets on the network, it can ask its peers for more
recommendations in a fully decentralized way---but
<button class="popup js" data-container="spv_decentralized_peer">most</button>
lightweight wallets don't bother.
<table class="center_header">
<tr>
<th class="fgred">P2P Lightweight Wallets</th>
<th class="fggreen">Bitcoin Core</th>
</tr>
<tr>
<td>Asks the same centralized services every time program is
restarted. This can be faster.</td>
<td>Uses the peer-to-peer network to independently discover new
peers. Uses found peers on restart.</td>
</tr>
</table>
This allows the centralized authority to connect lightweight wallets to
dishonest peers that can **completely destroy lightweight transaction
privacy.** Those dishonest peers can work with dishonest miners to
**weaken lightweight security too.**
Bitcoin Core prefers decentralized peer discovery, so after the first
time it starts, it no longer has to trust the centralized authority.
Isn't that worth occasionally starting up a few seconds slower?
<br class="clear big">
<div class="prevnext">
<span markdown="1">**Previous Feature**<br>[Validation][bcc validation]</span>
<span markdown="1">**Next feature**<br>[Requirements][bcc requirements]</span>
</div>
<br class="clear">
<div class="not-displayed">
<div id="bitcoin_bank_receiving" title="Bitcoin Bank Receiving Privacy" markdown="block">
![Bitcoin Core receiving privacy features](/img/bitcoin-core/bank-receiving-privacy.svg)
When you receive bitcoins to a Bitcoin bank, the money is sent to one of
the bank's addresses---not your own---which can give you excellent
privacy against random strangers.
However, the bank knows you received the transaction and they can likely
also see any information you associate with the transaction, such as the
sender's name or another note you attach to the transaction.
The bank may also be required by law to disclose information about your
account. They can also sell your information or have a hacker steal your
information.
</div>
<div id="bloom_filter_receiving" title="Bloom Filter Privacy" markdown="block">
![Receiving privacy](/img/bitcoin-core/receiving-privacy.svg)
By only asking for payments related to your wallet, plus maybe a few
others as bloom filter camouflage, lightweight wallets may reveal who you
paid, who paid you, and what your current bitcoin balance is.
> A [2014 study of lightweight clients][study of SPV privacy over tor]
> said, "Our results show that bloom filters incur serious privacy
> leakage in existing SPV client implementations [...] such an
> information leakage might severely harm the privacy of users" **Nearly
> all lightweight clients are still vulnerable today.**
**Learn more:** ["Lying consistently is hard"][lying consistently is hard]
</div>
<div id="electrum_style_receiving" title="Client Lightweight Wallet Receiving Privacy" markdown="block">
![Electrum-style receiving privacy](/img/bitcoin-core/electrum-receiving-privacy.svg)
Some lightweight wallets don't connect to the Bitcoin peer-to-peer (P2P)
network. Instead, they make a (usually secure) connection to a single
server that provides block chain data.
The wallet tells the server all of its addresses, and the server replies
with all of the transactions that belong to the wallet. This explicitly
reveals all of your addresses, which is bad for your privacy---but it
only gives that information to one server, as long as you don't change
servers later.
The server can, of course, give away your information and further
reduce your privacy. However, as of
{{site.text.assertion_month | date: "%B %Y"}}, most of these types of
servers are run by volunteers who likely want to help protect your
privacy, so this model can be more private than bank wallets or P2P
lightweight wallets.
</div>
<div id="spv_decentralized_peer" title="P2P Decentralized Peer Discovery" markdown="block">
The following P2P lightweight wallets use decentralized peer discovery
by default.
- BreadWallet
If you know of another compliant lightweight wallet, please [tell us
about it][docs issue].
</div>
<div id="information_theoretic_privacy" title="Information-Theoretic Privacy" markdown="block">
Information-theoretic privacy means that the privacy can't be broken even
if an attacker has unlimited computing resources.
**Learn more:** [Information theoretic security][] (Wikipedia)
</div>
</div>
{% include references.md %}

View file

@ -0,0 +1,229 @@
---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
layout: base-core
lang: en
columns: 1
id: bitcoin-core-requirements
title: Requirements And Warnings - Bitcoin Core
breadcrumbs:
- bitcoin
- bcc
- bcc features
- Requirements
---
# Bitcoin Core Requirements And Warnings
{:.not-displayed}
![Bitcoin Core requirements and warnings](/img/bitcoin-core/slider-warning.svg)
{% include bitcoin-core/download-bitcoin-core.html %}
Bitcoin Core gives you increased [security][bcc validation] and
[privacy][bcc privacy] at a cost. You need to [take
responsibility](#wallet-responsibility-checklist) for the security of
your bitcoins, meet higher [minimum system
requirements](#system-requirements), and beware of some [possible
problems](#possible-problems).
![Warning icon](/img/icons/icon_warning.svg)
**No matter what Bitcoin software you use,** you should never
buy more bitcoins than you can afford to lose. Bitcoin is still an
experimental system and bitcoins remain a risky investment.
## Wallet Responsibility Checklist
Bitcoin Core puts you in charge of your wallet, which means your
bitcoins are at risk unless you complete certain tasks:
{% comment %}
<!-- Note: the short pop-ups below are a temporary measure. I (@harding) plan
to write a Bitcoin Core user guide for the site that will provide more
detailed instructions for at least some of these things. -->
{% endcomment %}
- <button class="popup js" data-container="backup_your_keys">Backup your keys</button>
- Make sure your <button class="popup js" data-container="secure_your_wallet">wallet is secure</button>
- Setup an <button class="popup js" data-container="offline_wallet">offline wallet</button>
(cold storage) for significant amounts of bitcoins
- Watch for [security notifications](/en/alerts)
- Allow your heirs to <button class="popup js" data-container="bitcoin_inheritance">receive your bitcoins</button>
if you die or become incapacitated
If you need help with any step, please ask for assistance in any of
Bitcoin's [friendly forums][bcc forums] or [live chatrooms][bcc live
help].
## System Requirements
{% assign DISK='<span class="fa fa-li fa-hdd-o fa-2x"></span> **Disk space**<br>' %}
{% assign DOWNLOAD='<span class="fa fa-li fa-download fa-2x"></span> **Download**<br>' %}
{% assign UPLOAD='<span class="fa fa-li fa-upload fa-2x"></span> **Upload**<br>' %}
{% assign MEMORY='<span class="fa fa-li fa-database fa-2x"></span> **Memory (RAM)**<br>' %}
{% assign SYSTEM='<span class="fa fa-li fa-desktop fa-2x"></span> **System**<br>' %}
{% assign OS='<span class="fa fa-li fa-windows fa-2x"></span> **Operating system**<br>' %}
{% assign FOOTNOTE='<b>*</b>' %}
{% capture INITIAL_DOWNLOAD %}<b>*</b> Plus a one-time {{site.text.chain_gb}} GB download the first time you start Bitcoin Core.{% endcapture %}
<div markdown="block" class="two-column-list" id="system-requirements-accordion">
### Bare Minimum (With Default Settings)
<div markdown="block">
{:.fa-ul}
- {{DISK}} {{site.text.bitcoin_datadir_gb}} GB
- {{DOWNLOAD}} 250 MB/day (8 GB/month){{FOOTNOTE}}
- {{UPLOAD}} 5 GB/day (150 GB/month)
- {{MEMORY}} 512 MB
- {{SYSTEM}} Desktop<br
>Laptop<br
>[Some ARM chipsets][wiki bitcoin core compatible devices arm] >1 GHz
- {{OS}} Windows 7/8.x<br
>Mac OS X<br
>Linux<br
>Some BSDs
<br class="clear">
{{INITIAL_DOWNLOAD}}
</div>
### Bare Minimum (With Custom Settings)
<div markdown="block">
{:.fa-ul}
- {{DISK}} {{site.text.bitcoin_datadir_gb_pruned}} GB
- {{DOWNLOAD}} 150 MB/day (5 GB/month){{FOOTNOTE}}
- {{UPLOAD}} 10 MB/day (300 MB/month)
- {{MEMORY}} 256 MB
- {{SYSTEM}} Desktop<br
>Laptop<br
>[Most ARM chipsets][wiki bitcoin core compatible devices arm]
- {{OS}} Windows 7/8.x<br
>Mac OS X<br
>Linux<br
>Some BSDs
<br class="clear">
{{INITIAL_DOWNLOAD}}
**Learn more:** [Bitcoin Core configuration options][bcc configuration]
</div>
### Minimum Recommended
<div markdown="block">
{:.fa-ul}
- {{DISK}} {{site.text.bitcoin_datadir_gb}} GB
- {{DOWNLOAD}} 500 MB/day (15 GB/month){{FOOTNOTE}}
- {{UPLOAD}} 5 GB/day (150 GB/month)
- {{MEMORY}} 1 GB
- {{SYSTEM}} Desktop<br
>Laptop<br
>[Some ARM chipsets][wiki bitcoin core compatible devices arm] >1 GHz
- {{OS}} Windows 7/8.x<br
>Mac OS X<br
>Linux
<br class="clear">
{{INITIAL_DOWNLOAD}}
</div>
</div>
## Possible Problems
{% include bitcoin-core/bitcoin-core-possible-problems.md %}
<div class="not-displayed">
<div id="backup_your_keys" title="Backup Your Keys" markdown="block">
By default, you need to backup Bitcoin Core after every 100
transactions. This includes both transactions you send as well as
payments you request (whether or not you actually received the payment).
For example, you need to backup after sending 33 payments and requesting
67 payments (even though you only received 60 payments).
Bitcoin Core can be configured to allow you to go more transactions
between backups. See the [`-keypool` setting][bcc configuration].
</div>
<div id="secure_your_wallet" title="Secure Your Wallet" markdown="block">
Anyone who gets access to your wallet can steal your bitcoins. The
first line of defense against this is encrypting your wallet, an option
from the File menu in the graphical interface.
However, encrypting may not be enough if your computer becomes infected
by malware. Learn about <button class="popup js" data-container="offline_wallet">offline wallets</button>
for security against this type of attack.
In addition to securing your wallet, you also need to keep your backups
secure. Anyone who gets access to them can also steal your bitcoins.
**Learn more:** [secure your wallet][]
</div>
<div id="offline_wallet" title="Offline Wallet" markdown="block">
Computers that connect to the Internet are frequently hacked or infected
with bitcoin-stealing malware. Computers that never connect to the
Internet are a much more secure location for your bitcoins.
Bitcoin Core can be run on an always-offline computer, creating an
offline wallet (also called a cold wallet). The offline wallet will
securely store the private keys, while a separate online Bitcoin Core
wallet will send and receive transactions.
**Learn more:** [Creating and signing offline transactions][offline transactions]
</div>
<div id="bitcoin_inheritance" title="Bitcoin Inheritance" markdown="block">
Your Bitcoin wallet isn't like a bank account---it won't automatically
go to your heirs if you die or become disabled.
You have to plan ahead and make sure there is a way for your heirs
to access your wallet backups when you're no longer available.
**Learn more:** [Estate planning: how can I ensure my bitcoins are inheritable?][inherit bitcoins]
</div>
</div>
<br class="clear big">
<div class="prevnext">
<span markdown="1">**Previous Feature**<br>[Privacy][bcc privacy]</span>
<span markdown="1">**Next feature**<br>[User interface][bcc user interface]</span>
</div>
<br class="clear">
{% include references.md %}

View file

@ -0,0 +1,367 @@
---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
id: bitcoin-core-user-interface
layout: base-core
lang: en
columns: 1
title: User Interface - Bitcoin Core Features
breadcrumbs:
- bitcoin
- bcc
- bcc features
- Interface
---
# Bitcoin Core's User Interface
{:.not-displayed}
![Bitcoin Core User Interface](/img/bitcoin-core/slider-ui.svg)
{% include bitcoin-core/download-bitcoin-core.html %}
Bitcoin Core has a built in wallet with [graphical](#graphical) and
[command line/API](#cli) modes. It can also simultaneously support multiple
lightweight wallets with similar [security][bcc validation] and
[privacy][bcc privacy] to its built-in wallet.
![Multiple wallet support](/img/bitcoin-core/multi-wallet-support.svg)
**Warning:** you only get the security and privacy benefits in supported
lightweight wallets if they make a secure and private connection to your
Bitcoin Core *every* time you use them. This usually requires special
configuration.
## Bitcoin Core Wallet GUI (Graphical) {#graphical}
{% comment %}<!-- Limit to a maximum of 10 features to avoid overwhelming the reader -->{% endcomment %}
<div markdown="block" class="two-column-list">
{:.fa-ul}
- <span class="fa fa-li fa-desktop fa-2x"></span> **<button class="popup js" data-container="gui_overview">Clear overview</button>**<br
>See your current balance and recent transactions
- <span class="fa fa-li fa-toggle-on fa-2x"></span> **<button class="popup js" data-container="gui_fee_slider">Fee slider</button>**<br
>Easily choose between low fees and fast confirmation
- <span class="fa fa-li fa-btc fa-2x"></span> **<button class="popup js" data-container="gui_coin_control">Coin control</button>**<br
>Enhance privacy or save money by choosing your inputs
- <span class="fa fa-li fa-qrcode fa-2x"></span> **<button class="popup js" data-container="gui_qr_codes">QR codes</button>**<br
>Generate QR codes to receive payment
- <span class="fa fa-li fa-file-text-o fa-2x"></span> **<button class="popup js" data-container="gui_unique_invoices">Unique invoices</button>**<br
>Easily track who paid you
- <span class="fa fa-li fa-shield fa-2x"></span> **<button class="popup js" data-container="gui_proxy_configuration">Proxy configuration</button>**<br
>Use Tor or a proxy for privacy
- <span class="fa fa-li fa-bar-chart fa-2x"></span> **<button class="popup js" data-container="gui_network_monitoring">Network monitoring</button>**<br
>Track how much bandwidth you use
- <span class="fa fa-li fa-power-off fa-2x"></span> **<button class="popup js" data-container="gui_watch_only">Watch-only support</button>**<br
>Track bitcoins stored safely offline
</div>
<br class="clear">
## Bitcoin Core Wallet RPC/REST (CLI) {#cli}
{% comment %}<!-- Limit to a maximum of 10 features to avoid overwhelming the reader -->{% endcomment %}
<div markdown="block" class="two-column-list">
{:.fa-ul}
- <span class="fa fa-li fa-plus-square-o fa-2x"></span> **<button class="popup js" data-container="rpc_getnewaddress">GetNewAddress</button>**<br
>Get a new address for receiving payment
- <span class="fa fa-li fa-area-chart fa-2x"></span> **<button class="popup js" data-container="rpc_getbalance">GetBalance</button>**<br
>Instantly see your available Bitcoin balance
- <span class="fa fa-li fa-arrows fa-2x"></span> **<button class="popup js" data-container="rpc_sendmany">SendMany</button>**<br
>Send a single payment to multiple addresses
- <span class="fa fa-li fa-list fa-2x"></span> **<button class="popup js" data-container="rpc_listunspent">ListUnspent</button>**<br
>See what received transactions you can spend
- <span class="fa fa-li fa-share-square-o fa-2x"></span> **<button class="popup js" data-container="rpc_rawtx">Create/Sign/Send</button>**<br
>Create and send raw transactions
- <span class="fa fa-li fa-bell-o fa-2x"></span> **<button class="popup js" data-container="notification">Notification</button>**<br
>Be notified of new blocks and transactions
</div>
<br class="clear">
**Learn more:** documentation for the [RPC][rpc] and [REST][rest] interfaces
## Lightweight Wallets Using Bitcoin Core {#lightweight}
Lightweight wallets usually connect to several random full nodes (like
Bitcoin Core) to send and receive all of their data. In the process they
[leak private data][bcc privacy data leaking] and make themselves more
[vulnerable to attacks][bcc validation protection].
![Non-private connection](/img/bitcoin-core/connection-types-p2p-spv.svg)
But it's also possible to connect certain lightweight wallets solely to
your own Bitcoin Core full node, called a trusted peer. If you do this
with a secure and private connection every time you use that
lightweight wallet, you'll get most of the security and privacy
benefits of a full node as well as [help protect decentralization][bcc
validation decentralization].
![Secure and private connection](/img/bitcoin-core/connection-types-trusted-peer.svg)
<br>
### Trusted Peer Support {#trusted-peer}
The following wallets can securely connect to a trusted peer.
<div markdown="block" class="wallet_accordion">
{% comment %}<!-- Put wallets in alphabetical order -->{% endcomment %}
### Armory
<div markdown="block">
![Armory screenshot](/img/screenshots/armory.png)
{% translate walletarmory choose-your-wallet %}
**No configuration necessary:** Armory uses a local Bitcoin Core full
node by default.
{% comment %}
<!-- TODO/Someday: move wallet yaml into _data directory so we can pull
URLs and other info from it -->
{% endcomment %}
{:.right-hanger}
[Get Armory <span class="fa fa-external-link-square"></span>](https://bitcoinarmory.com/)
</div>
### GreenBits
<div markdown="block">
![GreenBits screenshot](/img/screenshots/greenbits.png)
GreenBits is a fast and easy to use wallet. Enjoy improved security with
a minimal/zero trust approach, optional hardware wallets support,
multisignature based 2FA and spending limits functionality.
**Requires you setup a [Tor .onion address][bcc tor hs].**
1. Open the GreenBits app
2. Go to the configuration screen
3. Choose to *Enable SPV* (default) and tap *Only connect to a
trusted peer*.
4. Enter your .onion address in the *trusted peer* field.
5. Restart the app.
Note that GreenAddress will still be able to see your payments; however,
you'll have enhanced security as well as privacy from random peers on
the Bitcoin network.
{:.right-hanger}
[Get GreenBits <span class="fa fa-external-link-square"></span>](https://play.google.com/store/apps/details?id=com.greenaddress.greenbits_android_wallet)
</div>
### mSigna
<div markdown="block">
![mSigma screenshot](/img/screenshots/msigna.png)
{% translate walletmsigna choose-your-wallet %}
**No configuration necessary:** just install Bitcoin Core on the same
computer you plan to use mSigna, wait for Bitcoin Core to sync the block
chain, and then start mSigna---it will automatically connect to your
Bitcoin Core full node.
{:.right-hanger}
[Get mSigna <span class="fa fa-external-link-square"></span>](https://ciphrex.com/redirect/?referer=bitcoin.org)
</div>
</div>
<div class="not-displayed">
<div id="gui_overview" title="Wallet Overview" markdown="block">
![Clear overview](/img/bitcoin-core/clear-overview.png)
</div>
<div id="gui_fee_slider" title="Fee Slider" markdown="block">
![Fee slider](/img/bitcoin-core/fee-slider.png)
</div>
<div id="gui_coin_control" title="Coin Control" markdown="block">
![Coin control](/img/bitcoin-core/coin-control.png)
</div>
<div id="gui_qr_codes" title="QR Codes" markdown="block">
![QR codes](/img/bitcoin-core/qr-codes.png)
</div>
<div id="gui_unique_invoices" title="Unique Invoices" markdown="block">
![Unique invoice](/img/bitcoin-core/unique-invoice.png)
</div>
<div id="gui_proxy_configuration" title="Proxy Configuration" markdown="block">
![Proxy configuration](/img/bitcoin-core/proxy-configuration.png)
</div>
<div id="gui_network_monitoring" title="Network monitoring" markdown="block">
![Network monitoring](/img/bitcoin-core/network-monitoring.png)
</div>
<div id="gui_watch_only" title="Watching-only Wallets" markdown="block">
![Fee slider](/img/bitcoin-core/watching-only.png)
</div>
<div id="rpc_getnewaddress" title="GetNewAddress" markdown="block">
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet getnewaddress "doc test"
{% endhighlight %}
{% highlight text %}
mft61jjkmiEJwJ7Zw3r1h344D6aL1xwhma
{% endhighlight %}
</div>
</div>
<div id="rpc_getbalance" title="GetBalance" markdown="block">
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet getbalance
{% endhighlight %}
{% highlight json %}
1.99900000
{% endhighlight %}
</div>
</div>
<div id="rpc_sendmany" title="SendMany" markdown="block">
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet sendmany \
"test1" \
'''
{
"mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN": 0.1,
"mgnucj8nYqdrPFh2JfZSB1NmUThUGnmsqe": 0.2
} ''' \
6 \
"Example Transaction"
{% endhighlight %}
{% highlight text %}
ec259ab74ddff199e61caa67a26e29b13b5688dc60f509ce0df4d044e8f4d63d
{% endhighlight %}
</div>
</div>
<div id="rpc_listunspent" title="ListUnspent" markdown="block">
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet listunspent 6 99999999 '''
[
"mgnucj8nYqdrPFh2JfZSB1NmUThUGnmsqe"
]
'''
{% endhighlight %}
{% highlight json %}
[
{
"txid" : "d54994ece1d11b19785c7248868696250ab195605b469632b7bd68130e880c9a",
"vout" : 1,
"address" : "mgnucj8nYqdrPFh2JfZSB1NmUThUGnmsqe",
"account" : "test label",
"scriptPubKey" : "76a9140dfc8bafc8419853b34d5e072ad37d1a5159f58488ac",
"amount" : 0.00010000,
"confirmations" : 6210,
"spendable" : true
}
]
{% endhighlight %}
</div>
</div>
<div id="rpc_rawtx" title="Create/Sign/Spent Raw Transactions" markdown="block">
Create a raw transaction:
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet createrawtransaction '''
[
{
"txid": "1eb590cd06127f78bf38ab4140c4cdce56ad9eb8886999eb898ddf4d3b28a91d",
"vout" : 0
}
]''' '{ "mgnucj8nYqdrPFh2JfZSB1NmUThUGnmsqe": 0.13 }'
{% endhighlight %}
{% highlight text %}
01000000011da9283b4ddf8d89eb996988b89ead56cecdc44041ab38bf787f1206cd90b51e0000000000ffffffff01405dc600000000001976a9140dfc8bafc8419853b34d5e072ad37d1a5159f58488ac00000000
{% endhighlight %}
</div>
Sign the above raw transaction:
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet signrawtransaction 01000000011da9283b4ddf8d\
89eb996988b89ead56cecdc44041ab38bf787f1206cd90b51e0000000000ffff\
ffff01405dc600000000001976a9140dfc8bafc8419853b34d5e072ad37d1a51\
59f58488ac00000000
{% endhighlight %}
{% highlight json %}
{
"hex" : "01000000011da9283b4ddf8d89eb996988b89ead56cecdc44041ab38bf787f1206cd90b51e000000006a47304402200ebea9f630f3ee35fa467ffc234592c79538ecd6eb1c9199eb23c4a16a0485a20220172ecaf6975902584987d295b8dddf8f46ec32ca19122510e22405ba52d1f13201210256d16d76a49e6c8e2edc1c265d600ec1a64a45153d45c29a2fd0228c24c3a524ffffffff01405dc600000000001976a9140dfc8bafc8419853b34d5e072ad37d1a5159f58488ac00000000",
"complete" : true
}
{% endhighlight %}
</div>
Send the above signed raw transaction:
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoin-cli -testnet sendrawtransaction 01000000011da9283b4ddf8d\
89eb996988b89ead56cecdc44041ab38bf787f1206cd90b51e000000006a4730\
4402200ebea9f630f3ee35fa467ffc234592c79538ecd6eb1c9199eb23c4a16a\
0485a20220172ecaf6975902584987d295b8dddf8f46ec32ca19122510e22405\
ba52d1f13201210256d16d76a49e6c8e2edc1c265d600ec1a64a45153d45c29a\
2fd0228c24c3a524ffffffff01405dc600000000001976a9140dfc8bafc84198\
53b34d5e072ad37d1a5159f58488ac00000000
{% endhighlight %}
{% highlight text %}
f5a5ce5988cc72b9b90e8d1d6c910cda53c88d2175177357cc2f2cf0899fbaad
{% endhighlight %}
</div>
The returned value is the transaction's identifier (TXID).
</div>
<div id="notification" title="Programmable Notification" markdown="block">
<div class="multicode" markdown="block">
{% highlight bash %}
bitcoind -daemon -walletnotify=your_notification_command
{% endhighlight %}
</div>
</div>
</div>
<br class="clear big">
<div class="prevnext">
<span markdown="1">**Previous Feature**<br>[Requirements][bcc requirements]</span>
<span markdown="1">**Next feature**<br>[Network Support][bcc network support]</span>
</div>
<br class="clear">
{% include references.md %}

View file

@ -0,0 +1,477 @@
---
# This file is licensed under the MIT License (MIT) available on
# http://opensource.org/licenses/MIT.
layout: base-core
lang: en
columns: 1
id: bitcoin-core-validation
title: Validation - Bitcoin Core Features
breadcrumbs:
- bitcoin
- bcc
- bcc features
- Validation
---
# Bitcoin Core Validation
{:.not-displayed}
![Full validation](/img/bitcoin-core/slider-validation.svg)
{% include bitcoin-core/download-bitcoin-core.html %}
> Imagine a scientist reading about an experimental result and then
> repeating the experiment for herself. Doing so allows her to **trust
> the result without having to trust the original scientists.**
Bitcoin Core checks each block of transactions it receives to ensure
that everything in that block is fully valid---allowing it to trust the
block without trusting the miner who created it.
This prevents miners from tricking Bitcoin Core users into accepting
blocks that violate the 21 million bitcoin limit or which break other
important rules.
Users of other wallets don't get this level of security, so miners can
trick them into accepting fabricated transactions or hijacked block chains.
Why take that risk if you don't have to? Bitcoin Core provides
the **best possible security against dishonest miners** along
with additional security against other easier attacks (see below
for details).
## How Validation Protects Your Bitcoins
<button class="popup js" data-container="bitcoin_banks">Bitcoin banks</button>
and
<button class="popup js" data-container="spv_wallets">lightweight (SPV) wallets</button>
put your bitcoins at
increased risk of being stolen. That risk may be acceptable for small
values of bitcoin on mobile wallets, but is it what you want for your
real wallet?
*Click any row below for more details about that attack*
{:.center}
<table class="validation">
<tr>
<th>Attack</th>
<th markdown="span">Bank Wallet</th>
<th markdown="span">SPV Wallet</th>
<th>Bitcoin Core</th>
</tr>
<tr class="brief">
<td><span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-e"></span>Direct theft</td>
<td class="bgred"></td>
<td class="bggreen"></td>
<td class="bggreen"></td>
</tr>
<tr class="details">
<td colspan="4" markdown="block">
> Alice deposits 100 bitcoins to Bank.Example.com. The next day, the
> owners of the site disappear with Alice's money.
- **Bitcoin bank**{:.fgred} users are vulnerable to direct theft because
they don't control their own private keys.
- **Lightweight (SPV) wallet**{:.fggreen} users and **Bitcoin
Core**{:.fggreen} users are not vulnerable because they control their
own private keys.
<div class="callout" markdown="block">
Direct theft is likely the leading cause of stolen bitcoins so far.
</div>
### Real Example
Bitcoin exchange Mt Gox reportedly had 650,000 bitcoins (worth $347
million USD) stolen from their customer deposits and their own operating
funds. They declared bankruptcy on 28 February 2014.
Even when the bankruptcy proceeding is complete, customers are unlikely to
recover more than a small fraction of the bitcoins they had on deposit.
**Learn More:** [Collapse of Mt
Gox](https://en.bitcoin.it/wiki/Collapse_of_Mt._Gox)
</td>
</tr>
<tr class="brief">
<td><span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-e"></span>Bait and switch</td>
<td class="bgred"></td>
<td class="bgyellow"></td>
<td class="bggreen"></td>
</tr>
<tr class="details">
<td colspan="4" markdown="block">
> Alice installs Example Wallet, whose open source code has been
> audited. The next day, the authors of Example Wallet push new code to
> Alice's device and steal all her bitcoins.
- **Bitcoin bank**{:.fgred} users are vulnerable because they can only
spend their bitcoins when they use the bank's approved software.
- **Lightweight (SPV) wallet**{:.fgyellow} users are vulnerable with
most software because auditors can't easily verify the software you
run (the executable) is the same as the program source code, called a
deterministic build. However, some lightweight wallets are moving to
deterministic builds.
- **Bitcoin Core**{:.fggreen} is built deterministically. Cryptographic
signatures from build auditors---many of whom are well known to the
community---are [released publicly][gitian sigs].
<div class="callout" markdown="block">
Bitcoin.org's [Choose Your Wallet][] page tells you whether or not
wallet builds are audited in the *Transparency* score for each wallet.
</div>
### Real Example
In April 2013, the OzCoin mining pool was hacked. The thief stole 923
bitcoins (worth $135,000 USD), but online wallet StrongCoin modified
their wallet code to 'steal back' 569 of those bitcoins ($83,000)
from one their users who was suspected of the theft.
Although this attack was done with good intentions, it illustrated
that the operators of StrongCoin could steal bitcoins from their users
at any time even though the users supposedly controlled their own
private keys.
**Learn More:** [OzCoin Hacked, Stolen Funds Seized and Returned by StrongCoin](https://bitcoinmagazine.com/4273/ozcoin-hacked-stolen-funds-seized-and-returned-by-strongcoin/)
</td>
</tr>
<tr class="brief">
<td><span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-e"></span>Fabricated transactions</td>
<td class="bgred"></td>
<td class="bgred"></td>
<td class="bggreen"></td>
</tr>
<tr class="details">
<td colspan="4" markdown="block">
> Mallory creates a transaction giving Alice 1,000 bitcoins, so Alice
> gives Mallory some cash. Later Alice discovers the transaction Mallory
> created was fake.
- **Bitcoin bank**{:.fgred} users depend on the information reported by the
bank, so they can easily be fooled into accepting fabricated
transactions.
- **Lightweight (SPV) wallet**{:.fgred} users depend on full nodes and
miners to validate transactions for them. It costs nothing for
dishonest full nodes to send unconfirmed fabricated transactions to an
SPV wallet. Getting one or more confirmations of those fabricated
transactions is also possible with help from a dishonest miner.
- **Bitcoin Core**{:.fggreen} users don't have to worry about fabricated
transactions because Bitcoin Core validates every transaction before
displaying it.
<div class="callout" markdown="block">
Currently the best defense against fabricated transactions, besides
using Bitcoin Core, is to wait for as many confirmations as possible.
</div>
### Real Example
On 4 August 2015, web wallet BlockChain.info began indicating that a
transaction had spent the earliest mined 250 bitcoins, coins that some
people believed were owned by Bitcoin creator Satoshi Nakamoto.
It was soon discovered that the transaction was invalid. BlockChain.info
was not validating transactions with Bitcoin Core and that transaction
had been [created by a security researcher][fake satoshi transaction].
**Learn more:** [BitcoinJ documentation about pending transaction
safety][]
</td>
</tr>
<tr class="brief">
<td><span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-e"></span>Chain hijacking</td>
<td class="bgred"></td>
<td class="bgred"></td>
<td class="bggreen"></td>
</tr>
<tr class="details">
<td colspan="4" markdown="block">
> Alice believes that there should never be more than 21 million
> bitcoins---but one day she's tricked into buying "bitcoins" that
> are only valid on a block chain with permanent 10% inflation.
- **Bitcoin bank**{:.fgred} users have to use whatever block chain the
bank uses. Banks can even profit from switching their users to a new
chain and selling their users' bitcoins from the old chain.
- **Lightweight (SPV) wallet**{:.fgred} users accept the block chain
they know about with the most proof of work. This lets the hash rate
majority of miners force SPV wallet users off of Bitcoin.
- **Bitcoin Core**{:.fggreen} users don't have to worry about chain
hijacking because Bitcoin Core validates every block using *all* of
Bitcoin's consensus rules.
<div class="callout" markdown="block">
Preventing chain hijacking is one of Bitcoin Core's most important jobs.
The alternative is to allow miners to do whatever they want.
</div>
### Real Example
In July 2015, several large Bitcoin miners accidentally produced an
invalid block chain several blocks longer than the correct block chain.
Some bank wallets and many SPV wallets accepted this longer chain,
putting their users' bitcoins at risk.
Recent versions of Bitcoin Core never accepted any of the blocks from
the invalid chain and never put any bitcoins at risk.
It is believed that the miners at fault controlled more than 50% of the
network hash rate, so they could have continued to fool SPV wallets
indefinitely. It was only their desire to remain compatible with
Bitcoin Core users that forced them to abandon over $37,500 USD worth of
mining income.
**Learn more:** [July 2015 chain forks][]
</td>
</tr>
<tr class="brief">
<td><span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-e"></span>Transaction withholding</td>
<td class="bgred"></td>
<td class="bgred"></td>
<td class="bggreen"></td>
</tr>
<tr class="details">
<td colspan="4" markdown="block">
> Mallory shows Alice $1,000 USD that he will pay her if she sends him some
> bitcoins. Alice sends the bitcoins but the transaction never seems to
> confirm. After waiting a long time, Alice returns Mallory's cash. It
> turns out the transaction did confirm, so Alice gave away her bitcoins
> for nothing.
- **Bitcoin bank**{:.fgred} users only see the transactions the bank
choose to show them.
- **Lightweight (SPV) wallets**{:.fgred} users only see the
transactions their full node peers choose to send them, even if those
transactions were included in a block the SPV wallet knows about.
- **Bitcoin Core**{:.fggreen} users see all transactions included in
received blocks. If Bitcoin Core hasn't received a block for too long,
it displays a catching-up progress bar in the graphical [user
interface][bcc user interface] or a warning message in the CLI/API user
interface.
<div class="callout" markdown="block">
Unless you use Bitcoin Core, you can never be sure that your bitcoin balance
is correct according to the block chain.
</div>
### Real Example
In March 2015, spy nodes run by the company Chainalysis accidentally
prevented some users of the lightweight BreadWallet from connecting to
honest nodes. Since the spy nodes didn't relay transactions, BreadWallet
users stopped receiving notification of new transactions.
**Learn more:** [Chainalysis CEO Denies 'Sybil Attack' on Bitcoin's Network](http://www.coindesk.com/chainalysis-ceo-denies-launching-sybil-attack-on-bitcoin-network/)
</td>
</tr>
<tr class="brief">
<td><span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-e"></span>Chain rewrites</td>
<td class="bgred"></td>
<td class="bgred"></td>
<td class="bgred"></td>
</tr>
<tr class="details">
<td colspan="4" markdown="block">
> Mallory gives Alice 1,000 bitcoins. When Alice's wallet says the
> transaction is confirmed, Alice gives Mallory some cash. Later Alice
> discovers that Mallory has managed to steal back the bitcoins.
This attack applies to **all Bitcoin wallets.**{:.fgred}
The attack works because powerful miners have the ability to rewrite the
block chain and replace their own transactions, allowing them to take
back previous payments.
The cost of this attack depends on the percentage of total network hash
rate the attacking miner controls. The more centralized mining becomes,
the less expensive the attack for a powerful miner.
![The cost of a chain rewrite](/img/bitcoin-core/en-confirmed-double-spend-cost.svg)
### Real Example
In September 2013, someone used centralized mining pool GHash.io to
steal an estimated 1,000 bitcoins (worth $124,000 USD) from the gambling
site BetCoin.
The attacker would spend bitcoins to make a bet. If he won, he would
confirm the transaction. If he lost, he would create a transaction
returning the bitcoins to himself and confirm that, invalidating the
transaction that lost the bet.
By doing so, he gained bitcoins from his winning bets without losing
bitcoins on his losing bets.
Although this attack was performed on unconfirmed transactions, the
attacker had enough hash rate (about 30%) to have profited from
attacking transactions with one, two, or even more confirmations.
**Learn more:** [GHash.IO and double-spending against BetCoin
Dice][ghash betcoin double spend]
</td>
</tr>
</table>
Note that although all programs---including Bitcoin Core---are
vulnerable to chain rewrites, Bitcoin provides a defense mechanism: the
more confirmations your transactions have, the safer you are. *There is
no known decentralized defense better than that.*
## Help Protect Decentralization
{% comment %}<!-- 1231006505 is the time in block 0; 31558149 is the average number of seconds in a year -->{% endcomment %}
{% capture bitcoin_age %}{{ site.time | date: "%s" | minus: "1231006505" | divided_by: "31558149" }}{% endcapture %}
The bitcoin currency only works when people accept bitcoins in exchange
for other valuable things. That means it's the people accepting
bitcoins who give it value and who get to decide how Bitcoin should work.
When you accept bitcoins, you have the power to enforce Bitcoin's rules,
such as preventing confiscation of any person's bitcoins without access
to that person's private keys.
Unfortunately, **many users outsource their enforcement power**. This
leaves Bitcoin's decentralization in a weakened state where a handful of
miners can collude with a handful of banks and free services to change
Bitcoin's rules for all those non-verifying users who outsourced their power.
<table class="received_transactions center">
<tr>
<td class="center" markdown="span">*Users of Bitcoin banks*<br
>**Trust bankers**{:.fgred}</td>
<td class="center" markdown="span">*Users of P2P lightweight wallets*<br
>**Trust miners**{:.fgred}</td>
</tr>
<tr>
<td class="center" markdown="span">*Users of client lightweight wallets*<br
> **Trust "free" services**{:.fgred}</td>
<td class="center" markdown="span">*Users of Bitcoin Core*<br
>**Enforce the rules**{:.fggreen}</td>
</tr>
</table>
Unlike other wallets, **Bitcoin Core *does* enforce the rules**---so
if the miners and banks change the rules for their non-verifying
users, those users will be unable to pay full validation Bitcoin Core
users like you.
As long as there are many non-verifying users who want to be able to
pay Bitcoin Core users, miners and others know they can't effectively
change Bitcoin's rules.
But what if not enough non-verifying users care about paying Bitcoin
Core users? Then it becomes easy for miners and banks to take control of
Bitcoin, likely bringing to an end this {{bitcoin_age}} year experiment
in decentralized currency.
![History of Bitcoin](/img/bitcoin-core/history-of-bitcoin.svg)
If you think **Bitcoin should remain decentralized,** the best thing you
can do is [validate every payment you receive](#do-you-validate) using your own personal
full node such as Bitcoin Core.
We don't know how many full validation users and business are needed,
but it's possible that for each person or business who validates their
own transactions, Bitcoin can remain decentralized even if there are ten
or a hundred other non-verifying users. If this is the case, **your
small contribution can have a large impact** towards keeping Bitcoin
decentralized.
## Do You Validate Your Transactions? {#do-you-validate}
Some people confuse [supporting the network][bcc network support] with
helping to [protect Bitcoin's decentralization][bcc validation
decentralization].
To [improve your security][bcc validation protection] and help
protect decentralization, you must use a wallet that fully validates
received transactions. There are three ways to do that with Bitcoin
Core right now:
1. **Use the built-in wallet's graphical mode.** If you request payment
using the following screen in Bitcoin Core, your received
transactions will be fully validated.
![Bitcoin Core request payment](/img/bitcoin-core/unique-invoice.png)
2. **Use Bitcoin Core as a trusted peer for certain lightweight
wallets.** Learn more on the [user interface][bcc user interface
lightweight] page. If you use a secure connection to your personal
trusted peer *every time* you use the wallet, your received
transactions will be fully validated.
3. **Use the built-in wallet's CLI/API interface.** This is meant for
power users, businesses, and programmers. The [user interface][bcc
user interface] page provides an overview, the [installation
instructions][bandwidth sharing guide] can help you get started, and
the [RPC][]/[REST][] documentation can help you find specific
commands. If you're using [`getnewaddress`][rpc getnewaddress] to
create receiving addresses, your received transactions will be fully
validated.
If you have any questions, please ask on the [forums][bcc forums] or
[chatrooms][bcc live help].
<br class="clear big">
<div class="prevnext">
<span markdown="1">**Previous Feature**<br>[Feature Overview][bcc main]</span>
<span markdown="1">**Next feature**<br>[Privacy][bcc privacy]</span>
</div>
<br class="clear">
<div class="not-displayed">
<div id="bitcoin_banks" title="Bitcoin Banks" markdown="block">
**Bitcoin banks and exchanges** are organizations that control your
bitcoins on your behalf similar to the way traditional banks control
your fiat deposits on your behalf.
</div>
<div id="spv_wallets" title="SPV Wallets" markdown="block">
**Simplified Payment Verification (SPV)** wallets are lightweight
wallets that can verify whether or not a transaction is part of a block
without downloading the {{site.text.chain_gb}} GB block chain. However,
they cannot verify whether or not the transaction is actually valid.
(Only full validation nodes like Bitcoin Core can do that.)
Honest miners who only create blocks with valid transactions currently
receive a {{site.text.subsidy_in_decimal_bitcoins}} bitcoin subsidy.
Dishonest miners who create blocks with invalid transactions don't
receive that subsidy, but they might still attempt to trick SPV
wallets if they can steal more bitcoins than they would make honestly (or
steal any amount of bitcoins from people they don't like).
</div>
</div>
{% include references.md %}