mirror of
https://github.com/bitcoinbook/bitcoinbook
synced 2025-04-17 15:56:21 +00:00
363 lines
36 KiB
Plaintext
363 lines
36 KiB
Plaintext
[role="pagenumrestart"]
|
||
[[ch01_intro_cos'_è_bitcoin]]
|
||
== Introduzione
|
||
|
||
Bitcoin((("Bitcoin", "operational overview", id="bitcoin-operational-overview"))) è un insieme di concetti e tecnologie che formano le basi di un ecosistema di moneta digitale. Le unità di valuta chiamate bitcoin sono usate per conservare e trasmettere valore tra i partecipanti al network di Bitcoin. Gli utenti bitcoin comunicano tra di loro attraverso il protocollo Bitcoin principalmente via internet, anche se possono essere usate anche altre reti di trasporto. L'architettura a strati del protocollo Bitcoin, disponibile come software open source, è compatibile con una vasta gamma di dispositivi, dai laptop agli smartphone, rendendo la tecnologia facilmente accessibile a tutti.
|
||
|
||
[TIP]
|
||
====
|
||
In this book, the ((("bitcoins", "defined")))unit of currency is called "bitcoin" with a small _b_,
|
||
and the system is called "Bitcoin," with a capital _B_.
|
||
====
|
||
|
||
Gli utenti possono trasferire bitcoin sulla rete per fare praticamente tutto ciò che è possibile fare con le valute tradizionali, come acquistare e vendere beni, inviare denaro a persone o organizzazioni o concedere credito. I bitcoin possono essere acquistati, venduti e scambiati con altre valute presso appositi cambi di valuta, i cosiddetti exchange. Bitcoin è considerato da molti la forma di denaro perfetta per internet, poiché è veloce, sicuro e senza confini.
|
||
|
||
A differenza delle valute tradizionali, bitcoin è interamente virtuale. Non esistono monete fisiche né monete digitali individuali. Le monete sono implicite nelle transazioni che trasferiscono valore da chi spende a chi riceve. Gli utenti di Bitcoin controllano chiavi che permettono loro di dimostrare la proprietà di bitcoin nella rete Bitcoin. Con queste chiavi possono firmare transazioni per sbloccare il valore e spenderlo trasferendolo a un nuovo proprietario. Le chiavi sono spesso conservate in un portafoglio digitale sul computer o sullo smartphone dell’utente. Il possesso della chiave necessaria per firmare una transazione è l’unico requisito per spendere bitcoin, mettendo il controllo dei bitcoin interamente nelle mani di ogni utente.
|
||
|
||
Bitcoin è un sistema peer-to-peer distribuito. Pertanto, non esiste un server centrale o un punto di controllo. Le unità di bitcoin vengono create attraverso un processo((("bitcoins", "mining")))((("mining"))) chiamato "mining," che consiste nell'eseguire ripetutamente un'operazione computazionale che fa riferimento a un elenco di transazioni Bitcoin recenti. Qualsiasi partecipante alla rete Bitcoin può operare come miner, usando i propri dispositivi informatici per contribuire a garantire la sicurezza delle transazioni. In media, ogni 10 minuti, un miner di Bitcoin può aggiungere sicurezza alle transazioni precedenti e viene ricompensato sia con nuovi bitcoin sia con le commissioni pagate dalle transazioni recenti. In sostanza, il mining di Bitcoin decentralizza le funzioni di una banca centrale relative all'emissione di valuta e alla compensazione, e rende superflua la necessità di una banca centrale.
|
||
|
||
//-- Math for following paragraph --
|
||
//total_btc = 0
|
||
//for i in range(0, 10_000_000):
|
||
// total_btc += (50 / (2**int(i/210000)) )
|
||
// if total_btc / 21e6 > 0.99:
|
||
// print(i)
|
||
// break
|
||
|
||
Il protocollo Bitcoin include algoritmi integrati che regolano la funzione di mining in tutta la rete. La difficoltà del compito computazionale che i miner devono eseguire viene regolata dinamicamente, in modo che, in media, qualcuno riesca a completarlo ogni 10 minuti, indipendentemente dal numero di miner (e dalla potenza di calcolo) che stanno competendo in quel momento. Inoltre, il protocollo riduce periodicamente il numero di nuovi bitcoin creati, limitando il totale dei bitcoin che verranno mai emessi a una quantità fissa appena inferiore a 21 milioni di monete. Il risultato è che il numero di bitcoin in circolazione segue una curva facilmente prevedibile, in cui la metà dei bitcoin rimanenti viene aggiunta alla circolazione ogni quattro anni. Al blocco 1.411.200 circa, previsto intorno al 2035, sarà stato emesso il 99% di tutti i bitcoin che potranno mai esistere. A causa del tasso di emissione decrescente di Bitcoin, nel lungo termine la valuta Bitcoin è deflazionistica. Inoltre, nessuno può obbligarti ad accettare bitcoin creati in più rispetto a quelli previsti.
|
||
|
||
Dietro le quinte, Bitcoin è anche il nome del protocollo, di una rete peer-to-peer e di un'innovazione nel campo del calcolo distribuito. Bitcoin si basa su decenni di ricerche in crittografia e sistemi distribuiti e incorpora almeno quattro innovazioni chiave, unite in una combinazione unica e potente. Bitcoin si compone di:
|
||
|
||
* Una rete peer-to-peer decentralizzata (il protocollo Bitcoin)
|
||
* Un registro pubblico delle transazioni (la blockchain)
|
||
* Un insieme di regole per la validazione indipendente delle transazioni e l'emissione di valuta (regole di consenso)
|
||
* Un meccanismo per raggiungere un consenso decentralizzato globale sulla validità della blockchain (algoritmo di proof-of-work)
|
||
|
||
Come sviluppatore, vedo Bitcoin come una sorta di "denaro di internet", una rete per propagare valore e garantire la proprietà di beni digitali attraverso il calcolo distribuito. C'è molto di più in Bitcoin di quanto possa sembrare a ((("Bitcoin", "operational overview", startref="bitcoin-operational-overview"))) prima vista.
|
||
|
||
In questo capitolo inizieremo spiegando alcuni dei concetti e termini principali, ottenendo il software necessario e utilizzando Bitcoin per transazioni semplici. Nei capitoli seguenti, inizieremo a svelare gli strati di tecnologia che rendono possibile Bitcoin e vedremo come funzionano la rete e il protocollo Bitcoin.
|
||
|
||
.Monete Digitali Prima di Bitcoin
|
||
****
|
||
|
||
L'emergere ((("digital currencies, history of")))((("history", "of digital currencies", secondary-sortas="digital currencies")))((("cryptography"))) di una moneta digitale valida è strettamente legato agli sviluppi della crittografia. Questo non sorprende, se si considerano le sfide fondamentali legate alla rappresentazione digitale del valore scambiabile con beni e servizi
|
||
Tre domande essenziali che chiunque accetti denaro digitale deve porsi sono:
|
||
|
||
* Posso fidarmi che il denaro sia autentico e non contraffatto?
|
||
* Posso fidarmi che il denaro digitale possa essere speso una sola volta (il cosiddetto problema della “doppia spesa”)?
|
||
* Posso essere sicuro che nessun altro possa rivendicare questo denaro come proprio e non mio?
|
||
|
||
Gli emittenti di denaro cartaceo sono costantemente impegnati nella lotta alla contraffazione utilizzando carte e tecnologie di stampa sempre più sofisticate. Il denaro fisico risolve facilmente il problema della doppia spesa perché la stessa banconota non può essere in due posti contemporaneamente. Naturalmente, il denaro convenzionale viene spesso anche conservato e trasmesso digitalmente. In questi casi, i problemi di contraffazione e doppia spesa vengono risolti gestendo tutte le transazioni elettroniche tramite autorità centrali che hanno una visione globale della valuta in circolazione. Nel caso del denaro digitale, che non può sfruttare inchiostri speciali o strisce olografiche, è la crittografia a fornire la base per fidarsi della legittimità della rivendicazione di valore da parte di un utente. In particolare, le firme digitali crittografiche consentono a un utente di firmare un asset digitale o una transazione, dimostrando la proprietà di quell'asset. Con un'architettura appropriata, le firme digitali possono anche essere utilizzate per affrontare il problema della doppia spesa.
|
||
|
||
Quando la crittografia ha iniziato a diventare più accessibile e compresa verso la fine degli anni '80, molti ricercatori hanno iniziato a tentare di utilizzarla per creare valute digitali. Questi primi progetti di valute digitali emettevano denaro digitale, solitamente garantito da una valuta nazionale o da metalli preziosi come l'oro.
|
||
|
||
Sebbene queste prime valute digitali funzionassero, erano centralizzate e, di conseguenza, vulnerabili agli attacchi di governi e hacker. Le valute digitali iniziali utilizzavano un centro di smistamento centrale per regolare tutte le transazioni a intervalli regolari, proprio come un sistema bancario tradizionale. Sfortunatamente, nella maggior parte dei casi, queste nuove valute digitali furono prese di mira da governi preoccupati e alla fine eliminate attraverso procedimenti legali. Alcune fallirono in modo spettacolare quando la società madre fallì improvvisamente.
|
||
Per essere robuste contro l'intervento di antagonisti, siano essi governi legittimi o elementi criminali, era necessaria una valuta digitale decentralizzata, in grado di evitare un unico punto di attacco. Bitcoin è un sistema di questo tipo, decentralizzato per design, e privo di qualsiasi autorità centrale o punto di controllo che possa essere attaccato o corrotto.
|
||
|
||
****
|
||
|
||
=== Storia di Bitcoin
|
||
|
||
Bitcoin è stato((("Bitcoin", "history of")))((("history", "of Bitcoin", secondary-sortas="Bitcoin")))((("Nakamoto, Satoshi"))) descritto per la prima volta nel 2008 con la pubblicazione di un documento intitolato "Bitcoin: A Peer-to-Peer Electronic Cash System,"footnote:[https://oreil.ly/KUaBM["Bitcoin: A Peer-to-Peer Electronic Cash System"],Satoshi Nakamoto.] scritto sotto lo pseudonimo di Satoshi Nakamoto (vedi <<satoshi_whitepaper>>). Nakamoto ha combinato diverse invenzioni precedenti, come le firme digitali e Hashcash, per creare un sistema di moneta elettronica completamente decentralizzato che non dipende da un'autorità centrale per l'emissione di valuta, la validazione o la validazione delle transazioni. Un'innovazione chiave è stata l'uso di un sistema di calcolo distribuito (chiamato algoritmo di "proof-of-work") per condurre una sorta di lotteria globale ogni 10 minuti, in media, permettendo alla rete decentralizzata di raggiungere un _consenso_ sullo stato delle transazioni. Questo risolve elegantemente il problema della doppia spesa (double-spend), in cui un'unità di valuta può essere spesa due volte. In precedenza, il problema del double-spend era una debolezza delle valute digitali e veniva affrontato facendo passare tutte le transazioni attraverso un centro di smistamento centrale.
|
||
|
||
La rete Bitcoin è nata nel 2009, basandosi su un'implementazione iniziale pubblicata da Nakamoto e successivamente migliorata da numerosi programmatori. Nel tempo, il numero e la potenza delle macchine impegnate nel mining,((("proof-of-work algorithm", seealso="mining"))) l'algoritmo di proof-of-work che garantisce la sicurezza e la resilienza di Bitcoin, sono cresciuti in modo esponenziale. Oggi, la capacità computazionale complessiva di queste macchine supera quella di tutti i supercomputer più potenti del mondo messi insieme.
|
||
|
||
Satoshi Nakamoto si è ritirato dalla scena pubblica nell'aprile del 2011, affidando lo sviluppo del codice e della rete a una comunità di volontari attiva e dinamica. L'identità di Nakamoto, che potrebbe essere una singola persona o un gruppo, rimane ancora un mistero. Tuttavia, né lui né nessun altro ha il controllo esclusivo sul sistema Bitcoin, che si basa su principi matematici trasparenti, codice open source e il consenso dei partecipanti. Questa invenzione rivoluzionaria ha già dato vita a nuove discipline scientifiche nei campi del calcolo distribuito, dell'economia e dell'econometria.
|
||
|
||
.Una soluzione ad un problema di calcolo distribuito
|
||
****
|
||
L'invenzione di Satoshi Nakamoto ((("Byzantine Generals' Problem")))((("distributed computing problem")))rappresenta anche una soluzione pratica e innovativa ad un problema del calcolo distribuito noto come il "Problema dei Generali Bizantini". In breve, il problema consiste nel cercare di far concordare più partecipanti, privi di un leader, su una linea d'azione comune, scambiandosi informazioni attraverso una rete potenzialmente compromessa. La soluzione proposta da Satoshi Nakamoto, che utilizza il concetto di proof-of-work per raggiungere il consenso _senza un'autorità centrale fidata_, rappresenta un progresso rivoluzionario nel settore del calcolo distribuito.
|
||
****
|
||
|
||
=== Iniziare con Bitcoin
|
||
|
||
Bitcoin è((("Bitcoin", "wallets", see="wallets")))((("wallets", "explained"))) un protocollo che si può usare tramite un'app che lo supporta. Un "wallet Bitcoin" è l'interfaccia utente più comune per il sistema Bitcoin, proprio come un browser web è l'interfaccia più comune per il protocollo HTTP. Esistono molte implementazioni e marchi di wallet Bitcoin, proprio come esistono vari browser web (es. Chrome, Safari, Firefox). E proprio come abbiamo tutti i nostri browser preferiti, anche i wallet Bitcoin variano per qualità, prestazioni, sicurezza, privacy e affidabilità. Esiste anche un'implementazione di riferimento del protocollo Bitcoin, chiamata 'Bitcoin Core', che include un wallet ed è basata sull'originale creato da Satoshi Nakamoto.
|
||
|
||
==== Scegliere un Wallet Bitcoin
|
||
|
||
I wallet Bitcoin ((("wallets", "choosing")))((("selecting", "wallets")))((("choosing", see="selecting")))sono tra le applicazioni più attivamente sviluppate nell'ecosistema Bitcoin. C'è una forte competizione, e mentre probabilmente un nuovo wallet è in fase di sviluppo proprio ora, molti wallet creati l'anno scorso non sono più mantenuti attivamente. Molti wallet si concentrano su piattaforme o usi specifici, e alcuni sono più adatti per i principianti, mentre altri sono ricchi di funzionalità per utenti avanzati. La scelta di un wallet è molto soggettiva e dipende dall'uso e dall'esperienza dell'utente. Pertanto, sarebbe inutile consigliare un marchio o wallet specifico. Tuttavia, possiamo classificare i wallet Bitcoin in base alla piattaforma e alla funzione, fornendo maggiore chiarezza su tutti i tipi di wallet che esistono. È utile provare diversi wallet fino a trovare quello che meglio si adatta alle proprie esigenze.
|
||
|
||
===== Tipi di wallet Bitcoin
|
||
I wallet Bitcoin ((("wallets", "types of", id="wallet-type")))possono essere classificati come segue, in base alla piattaforma:
|
||
|
||
Wallet desktop:: I ((("desktop wallets")))wallet desktop sono stati i primi tipi di wallet Bitcoin creati come implementazione di riferimento. Molti utenti utilizzano wallet desktop per le funzionalità, l'autonomia e il controllo che offrono. Tuttavia, l'esecuzione su sistemi operativi di uso generale come Windows e macOS ha alcuni svantaggi di sicurezza, poiché queste piattaforme sono spesso insicure e mal configurate.
|
||
|
||
Wallet mobile:: I ((("mobile wallets")))wallet per mobile sono i wallet Bitcoin più comuni. Funzionando su sistemi operativi per smartphone come iOS di Apple e Android, questi wallet sono spesso una scelta eccellente per i nuovi utenti. Molti sono progettati per semplicità e facilità d'uso, ma esistono anche wallet mobili avanzati per utenti esperti. Per evitare di scaricare e memorizzare grandi quantità di dati, la maggior parte dei wallet recupera informazioni da server remoti, riducendo la privacy, poiché divulga a terzi informazioni sui tuoi indirizzi Bitcoin e sui saldi.
|
||
|
||
Wallet web:: I wallet web Web ((("web wallets")))sono accessibili tramite browser web e memorizzano il wallet dell'utente su un server di proprietà di una terza parte. Questo è simile alla webmail, in quanto dipende interamente da un server di terze parti. Alcuni di questi servizi operano utilizzando codice lato client che gira nel browser dell'utente, mantenendo il controllo delle chiavi Bitcoin in mano all'utente, sebbene la dipendenza dal server comprometta ancora la privacy. La maggior parte di questi wallet, tuttavia, prende il controllo delle chiavi Bitcoin dagli utenti in cambio di una maggiore facilità d'uso. Non è consigliabile memorizzare grandi quantità di bitcoin su sistemi di terze parti.
|
||
|
||
Dispositivi di firma hardware:: I dispositivi di firma hardware((("hardware signing devices"))) sono dispositivi che possono memorizzare le chiavi e firmare transazioni utilizzando hardware e firmware specializzati. Di solito si collegano a un wallet desktop, mobile o web tramite cavo USB, comunicazione a corto raggio (NFC) o una fotocamera con codici QR. Gestendo tutte le operazioni relative a Bitcoin sull'hardware specializzato, questi wallet sono meno vulnerabili a molti tipi di attacchi. I dispositivi di firma hardware sono spesso chiamati "hardware wallet",ma tale nome non è completamente giusto: per inviare e ricevere transazioni devono essere abbinati a un wallet completo,e la sicurezza e la privacy offerte dal wallet abbinato giocano un ruolo fondamentale nel determinare quanta sicurezza e privacy l'utente ottiene quando utilizza il dispositivo di firma hardware.
|
||
|
||
===== Client Full Node contro Client Leggero
|
||
Un altro modo per classificare i wallet Bitcoin è in base al loro grado di autonomia e a come interagiscono con la rete Bitcoin:
|
||
|
||
Client full node:: Un client full node ((("full nodes"))) un programma che convalida l'intera cronologia delle transazioni Bitcoin (ogni transazione mai fatta da ogni singolo utente). Facoltativamente, i full node possono anche memorizzare le transazioni precedentemente convalidate e fornire dati ad altri programmi Bitcoin, sia sullo stesso computer che tramite internet. Un full node richiede risorse informatiche sostanziali—più o meno come guardare un video in streaming di un'ora ogni giorno per tutte le transazioni Bitcoin—ma offre completa autonomia agli utenti.
|
||
|
||
Client leggero::
|
||
Un client leggero,((("lightweight clients")))((("simplified-payment-verification (SPV) clients")))((("SPV (simplified-payment-verification) clients"))) noto anche come client di verifica semplificata dei pagamenti (SPV), si collega a un full node o a un altro server remoto per ricevere e inviare informazioni sulle transazioni Bitcoin, ma memorizza il wallet dell'utente localmente, convalida parzialmente le transazioni ricevute e crea in modo indipendente le transazioni in uscita.
|
||
|
||
Client API di Terze Parti:: Un client API di terze parti ((("third-party API clients")))è un client che interagisce con Bitcoin tramite un sistema di API di terze parti, piuttosto che collegarsi direttamente alla rete Bitcoin. Il wallet può essere memorizzato dall'utente o su server di terze parti, ma il client si affida al server remoto per fornirgli informazioni accurate e proteggere la((("wallets", "types of", startref="wallet-type"))) privacy dell'utente.
|
||
|
||
[TIP]
|
||
====
|
||
Bitcoin ((("Bitcoin", "as peer-to-peer network", secondary-sortas="peer-to-peer network")))((("peer-to-peer networks, Bitcoin as")))((("peers")))((("clients")))is a peer-to-peer (P2P) network. Full nodes are the _peers:_
|
||
each peer individually validates every confirmed transaction and can
|
||
provide data to its user with complete authority. Lightweight wallets
|
||
and other software are _clients:_ each client depends on one or more peers
|
||
to provide it with valid data. Bitcoin clients can perform secondary
|
||
validation on some of the data they receive and make connections to
|
||
multiple peers to reduce their dependence on the integrity of a single
|
||
peer, but the security of a client ultimately relies on the integrity of
|
||
its peers.
|
||
====
|
||
|
||
===== Chi controlla le chiavi
|
||
Un aspetto ((("wallets", "key control")))((("keys, control of")))((("bitcoins", "key control"))) molto importante da considerare è _chi controlla le chiavi_. Come vedremo nei capitoli successivi, l'accesso ai bitcoin è gestito tramite "chiavi private," che possono essere paragonate a PIN molto lunghi. Se sei l’unico a controllare queste chiavi private, hai il pieno controllo sui tuoi bitcoin. Al contrario, se non hai il controllo delle chiavi private, i tuoi bitcoin sono gestiti da una terza parte che detiene i tuoi fondi per conto tuo. I software per la gestione delle chiavi si suddividono in due categorie principali: i _wallet_, in cui sei tu a controllare le chiavi private, e i conti presso custodi, dove una terza parte controlla le chiavi. Per sottolineare questo concetto, io (Andreas) ho coniato la frase: _Chiavi tue, monete tue. Chiavi non tue, monete non tue_.
|
||
|
||
Data questa categorizzazione, a loro volta i wallet Bitcoin possono essere raccolti in una manciata di gruppi principali. I tre più comuni sono: i wallet desktop full node (dove tu controlli le chiavi private), i wallet "leggeri" per smartphone (dove tu controlli le chiavi private) e i conti web gestiti da terze parti (dove tu non controlli le chiavi private). I confini tra queste categorie possono a volte essere sfumati, poiché il software può funzionare su più piattaforme e interagire con la rete in modi diversi.
|
||
|
||
==== Avvio rapido
|
||
Alice non è un’esperta di tecnologia e ha sentito parlare di Bitcoin solo di recente dal suo amico Joe. Durante una festa, Joe ha spiegato Bitcoin con entusiasmo a tutti i presenti, offrendo una dimostrazione pratica del suo utilizzo. Alice, incuriosita, gli ha chiesto come iniziare a usare Bitcoin. Joe le ha consigliato un wallet per smartphone, ideale per i principianti, suggerendole alcuni dei suoi preferiti. Alice ha scaricato uno dei wallet consigliati e lo ha installato sul suo telefono.
|
||
|
||
When Alice runs her wallet application for the first time, she chooses
|
||
the option to create a new Bitcoin wallet. Because the wallet she has
|
||
chosen is a ((("wallets", "noncustodial")))((("noncustodial wallets")))noncustodial wallet, Alice (and only Alice) will be in
|
||
control of her keys. Therefore, she bears responsibility for backing
|
||
them up, since losing the keys means she loses access to her bitcoins. To
|
||
facilitate this, her wallet produces a _recovery code_ that can be used
|
||
to restore her wallet.
|
||
|
||
[[recovery_code_intro]]
|
||
==== Recovery Codes
|
||
|
||
Most ((("wallets", "recovery codes", id="wallet-recovery")))((("recovery codes", id="recovery-code")))((("backing up", "recovery codes", see="recovery codes")))modern noncustodial Bitcoin wallets will provide a recovery
|
||
code for their user
|
||
to back up. The recovery code usually consists of numbers, letters, or words
|
||
selected randomly by the software, and is used as the basis for the keys
|
||
that are generated by the wallet. See <<recovery_code_sample>> for
|
||
examples.
|
||
|
||
++++
|
||
<table id="recovery_code_sample">
|
||
<caption>Sample recovery codes</caption>
|
||
<thead>
|
||
<tr>
|
||
<th>Wallet</th>
|
||
<th>Recovery code</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>BlueWallet</p></td>
|
||
<td><p>(1) media (2) suspect (3) effort (4) dish (5) album (6) shaft (7) price (8) junk (9) pizza (10) situate (11) oyster (12) rib</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td><p>Electrum</p></td>
|
||
<td><p>nephew dog crane clever quantum crazy purse traffic repeat fruit old clutch</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td><p>Muun</p></td>
|
||
<td><p>LAFV TZUN V27E NU4D WPF4 BRJ4 ELLP BNFL</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
++++
|
||
|
||
[TIP]
|
||
====
|
||
A recovery code is ((("mnemonic phrases", see="recovery codes")))((("seed phrases", see="recovery codes")))sometimes called a "mnemonic" or "mnemonic phrase,"
|
||
which implies you should memorize the phrase, but writing the phrase
|
||
down on paper takes less work and tends to be more reliable than most
|
||
people's memories. Another alternative name is "seed phrase" because
|
||
it provides the input ("seed") to the function that generates all of
|
||
a wallet's keys.
|
||
====
|
||
|
||
If something happens to Alice's wallet, she can download a new copy of
|
||
her wallet software and enter this recovery code to rebuild the wallet
|
||
database of all the onchain transactions she's ever sent or received.
|
||
However, recovering from the recovery code will not by itself restore any additional
|
||
data Alice entered into her wallet, such as the labels she associated
|
||
with particular addresses or transactions. Although losing access to
|
||
that metadata isn't as important as losing access to money, it can
|
||
still be important in its own way. Imagine you need to review an old
|
||
bank or credit card statement and the name of every entity you paid (or
|
||
who paid you) has been blanked out. To prevent losing metadata, many
|
||
wallets provide an additional backup feature beyond recovery codes.
|
||
|
||
For some wallets, that additional backup feature is even more important
|
||
today than it used to be. Many Bitcoin payments ((("offchain technology")))are now made using
|
||
_offchain_ technology, where not every payment is stored in the public blockchain. This reduces user's costs and improves privacy, among other
|
||
benefits, but it means that a mechanism like recovery codes that depends on
|
||
onchain data can't guarantee recovery of all of a user's bitcoins. For
|
||
applications with offchain support, it's important to make frequent
|
||
backups of the wallet database.
|
||
|
||
Of note, when receiving funds to a new mobile wallet for the first time,
|
||
many wallets will often re-verify that you have securely backed-up your
|
||
recovery code. This can range from a simple prompt to requiring the
|
||
user to manually re-enter the code.
|
||
|
||
[WARNING]
|
||
====
|
||
Although many legitimate wallets will prompt you to re-enter
|
||
your recovery code, there are also many malware applications that mimic the
|
||
design of a wallet, insist you enter your recovery code, and then
|
||
relay any entered code to the malware developer so they can steal
|
||
your funds. This is the equivalent of phishing websites that try to
|
||
trick you into giving them your bank passphrase. For most wallet
|
||
applications, the only times they will ask for your recovery code are during
|
||
the initial set up (before you have received any bitcoins) and during
|
||
recovery (after you lost access to your original wallet). If the application
|
||
asks for your recovery code any other time, consult with an expert to
|
||
ensure you aren't ((("wallets", "recovery codes", startref="wallet-recovery")))((("recovery codes", startref="recovery-code")))being phished.
|
||
====
|
||
|
||
==== Bitcoin Addresses
|
||
|
||
Alice is ((("addresses", "explained")))now ready to start using her new Bitcoin wallet. Her wallet application randomly generated a private key (described in more detail in <<private_keys>>) that will be used to derive Bitcoin addresses that direct to her wallet. At this point, her Bitcoin addresses are not known to the Bitcoin network or "registered" with any part of the Bitcoin system. Her Bitcoin addresses are simply numbers that correspond to her private key that she can use to control access to the funds. The addresses are generated independently by her wallet without reference or registration with any service.
|
||
|
||
[TIP]
|
||
====
|
||
There
|
||
are a variety ((("invoices")))of Bitcoin addresses and invoice formats. Addresses and
|
||
invoices can be shared with other Bitcoin users
|
||
who can use them to send bitcoins directly to your wallet. You can share
|
||
an address or invoice with other people without worrying about the
|
||
security of your bitcoins. Unlike a bank account number, nobody who
|
||
learns one of your Bitcoin addresses can withdraw money from your wallet--you
|
||
must initiate all spends. However, if you give two people the same
|
||
address, they will be able to see how many bitcoins the other person sent
|
||
you. If you post your address publicly, everyone will be able to see
|
||
how much bitcoin other people sent to that address. To protect your privacy, you
|
||
should generate a new invoice with a new address each time you request a
|
||
payment.
|
||
====
|
||
|
||
==== Receiving Bitcoin
|
||
|
||
Alice((("bitcoins", "receiving")))((("receiving bitcoins"))) uses the _Receive_ button, which displays a QR code, shown in <<wallet_receive>>.
|
||
|
||
[role="width-50"]
|
||
[[wallet_receive]]
|
||
.Alice uses the Receive screen on her mobile Bitcoin wallet and displays her address in a QR code format.
|
||
image::images/mbc3_0101.png["Wallet receive screen with QR code displayed. Image derived from Bitcoin Design Guide CC-BY"]
|
||
|
||
The QR code is the square with a pattern of black and white dots, serving as a form of barcode that contains the same information in a format that can be scanned by Joe's smartphone camera.
|
||
|
||
[WARNING]
|
||
====
|
||
Any funds sent to the addresses in this book will be lost. If you want
|
||
to test sending bitcoins, please consider donating it to a
|
||
bitcoin-accepting charity.
|
||
====
|
||
|
||
[[getting_first_bitcoin]]
|
||
==== Getting Your First Bitcoin
|
||
|
||
The((("bitcoins", "acquiring", id="bitcoin-acquire")))((("acquiring bitcoins", id="acquire-bitcoin"))) first task for new users is to acquire some bitcoin.
|
||
|
||
Bitcoin transactions are irreversible. Most electronic payment networks such as credit cards, debit cards, PayPal, and bank account transfers are reversible. For someone selling bitcoin, this difference introduces a very high risk that the buyer will reverse the electronic payment after they have received bitcoin, in effect defrauding the seller. To mitigate this risk, companies accepting traditional electronic payments in return for bitcoin usually require buyers to undergo identity verification and credit-worthiness checks, which may take several days or weeks. As a new user, this means you cannot buy bitcoin instantly with a credit card. With a bit of patience and creative thinking, however, you won't need to.
|
||
|
||
|
||
Here are some methods for acquiring bitcoin as a new user:
|
||
|
||
* Find a friend who has bitcoins and buy some from him or her directly. Many Bitcoin users start this way. This method is the least complicated. One way to meet people with bitcoins is to attend a local Bitcoin meetup listed at pass:[<a href="https://meetup.com" class="orm:hideurl">Meetup.com</a>].
|
||
* Earn bitcoin by selling a product or service for bitcoin. If you are a programmer, sell your programming skills. If you're a hairdresser, cut hair for bitcoins.
|
||
* Use a Bitcoin ATM in your city. A Bitcoin ATM is a machine that accepts cash and sends bitcoins to your smartphone Bitcoin wallet.
|
||
* Use((("bitcoins", "currency exchanges")))((("currency exchanges"))) a Bitcoin currency exchange linked to your bank account. Many countries now have currency exchanges that offer a market for buyers and sellers to swap bitcoins with local currency. Exchange-rate listing services, such as https://bitcoinaverage.com[BitcoinAverage], often show a list of Bitcoin exchanges for each currency.
|
||
|
||
[TIP]
|
||
====
|
||
One of the advantages of
|
||
Bitcoin over other payment systems is that, when used correctly, it
|
||
affords users much more privacy. Acquiring, holding, and spending
|
||
bitcoin does not require you to divulge sensitive and personally
|
||
identifiable information to third parties. However, where bitcoin
|
||
touches traditional systems, such as currency exchanges, national and
|
||
international regulations often apply. In order to exchange bitcoin for
|
||
your national currency, you will often be required to provide proof of
|
||
identity and banking information. Users should be aware that once a
|
||
Bitcoin address is attached to an identity, other associated Bitcoin
|
||
transactions may also become easy to identify and track--including
|
||
transactions made earlier. This is one reason
|
||
many users choose to maintain dedicated exchange accounts independent from
|
||
their wallets.
|
||
====
|
||
|
||
Alice was introduced to Bitcoin by a friend, so she has an easy way to acquire her first bitcoins. Next, we will look at how she buys bitcoins from her friend Joe and how Joe sends the bitcoins to her ((("bitcoins", "acquiring", startref="bitcoin-acquire")))((("acquiring bitcoins", startref="acquire-bitcoin")))wallet.
|
||
|
||
[[bitcoin_price]]
|
||
==== Finding the Current Price of Bitcoin
|
||
|
||
Before ((("bitcoins", "exchange rate", id="bitcoin-exchange-rate")))((("exchange rate", id="exchange-rate")))((("current price of bitcoins", id="current-price")))Alice can buy bitcoin from Joe, they have to agree on the _exchange rate_ between bitcoin and US dollars. This brings up a common question for those new to Bitcoin: "Who sets the price
|
||
of bitcoins?" The short answer is that the price is set by markets.
|
||
|
||
Bitcoin, like most other currencies, has a _floating exchange rate_. That means that the value of bitcoin fluctuates according to supply and demand in the various markets where it is traded. For example, the "price" of bitcoin in US dollars is calculated in each market based on the most recent trade of bitcoins and US dollars. As such, the price tends to fluctuate minutely several times per second. A pricing service will aggregate the prices from several markets and calculate a volume-weighted average representing the broad market exchange rate of a currency pair (e.g., BTC/USD).
|
||
|
||
There are hundreds of applications and websites that can provide the current market rate. Here are some of the most popular:
|
||
|
||
https://bitcoinaverage.com[Bitcoin Average]:: A site that provides a simple view of the volume-weighted average for each currency.
|
||
https://coincap.io[CoinCap]:: A service listing the market capitalization and exchange rates of hundreds of cryptocurrencies, including bitcoins.
|
||
https://oreil.ly/ACieC[Chicago Mercantile Exchange Bitcoin Reference Rate]:: A reference rate that can be used for institutional and contractual reference, provided as part of investment data feeds by the CME.
|
||
|
||
In addition to these various sites and applications, some Bitcoin
|
||
wallets will automatically convert amounts between bitcoin and other currencies.
|
||
|
||
[[sending_receiving]]
|
||
==== Sending and Receiving Bitcoin
|
||
|
||
Alice ((("bitcoins", "spending", id="bitcoin-send")))((("spending bitcoins", id="send-bitcoin")))((("bitcoins", "receiving", id="bitcoin-receive")))((("receiving bitcoins", id="receive-bitcoin")))has
|
||
decided to buy 0.001 bitcoins. After she and Joe check the exchange rate,
|
||
she gives Joe an appropriate amount of cash, opens her mobile wallet
|
||
application, and selects Receive. This
|
||
displays a QR code with Alice's first Bitcoin address.
|
||
|
||
Joe then selects Send on his smartphone wallet and opens the QR code
|
||
scanner. This allows Joe to scan the barcode with his smartphone camera
|
||
so that he doesn't have to type in Alice's Bitcoin address, which is
|
||
quite long.
|
||
|
||
Joe now has Alice's Bitcoin address set as the recipient. Joe enters the amount as 0.001 bitcoins (BTC); see <<wallet-send>>. Some wallets may
|
||
show the amount in a different denomination: 0.001 BTC is 1 millibitcoin
|
||
(mBTC) or 100,000 satoshis (sats).
|
||
|
||
Some wallets may also suggest Joe enter a label for this transaction; if
|
||
so, Joe enters "Alice". Weeks or months from now, this will help Joe
|
||
remember why he sent these 0.001 bitcoins. Some wallets may also prompt
|
||
Joe about fees. Depending on the wallet and how the transaction is
|
||
being sent, the wallet may ask Joe to either enter a transaction fee rate or
|
||
prompt him with a suggested fee (or fee rate). The higher the transaction fee, the
|
||
faster the transaction will be confirmed (see <<confirmations>>).
|
||
|
||
[[wallet-send]]
|
||
.Bitcoin wallet send screen.
|
||
image::images/mbc3_0102.png["Wallet send screen. Image derived from Bitcoin Design Guide CC-BY"]
|
||
|
||
Joe then carefully checks to make sure he has entered the correct
|
||
amount, because he is about to transmit money and mistakes will soon become
|
||
irreversible. After double-checking the address and amount, he presses
|
||
Send to transmit the transaction. Joe's mobile Bitcoin wallet constructs
|
||
a transaction that assigns 0.001 BTC to the address provided by Alice,
|
||
sourcing the funds from Joe's wallet, and signing the transaction with
|
||
Joe's private keys. This tells the Bitcoin network that Joe has
|
||
authorized a transfer of value to Alice's new address. As the
|
||
transaction is transmitted via the peer-to-peer protocol, it quickly
|
||
propagates across the Bitcoin network. After just a few seconds, most of
|
||
the well-connected nodes in the network receive the transaction and see
|
||
Alice's address for the first time.
|
||
|
||
Meanwhile, Alice's wallet is constantly "listening" for new
|
||
transactions on the Bitcoin network, looking for any that match the
|
||
addresses it contains. A few seconds after Joe's wallet transmits the
|
||
transaction, Alice's wallet will indicate that it is receiving
|
||
0.001 BTC.
|
||
|
||
[[confirmations]]
|
||
.Confirmations
|
||
****
|
||
At first, ((("bitcoins", "clearing transactions")))((("clearing transactions")))((("transactions", "clearing")))((("confirmations")))Alice's address will show the transaction from Joe as "Unconfirmed." This means that the transaction has been propagated to the network but has not yet been recorded in the Bitcoin transaction journal, known as the blockchain. To be confirmed, a transaction must be included in a block and added to the blockchain, which happens every 10 minutes, on average. In traditional financial terms this is known as _clearing_. For more details on propagation, validation, and clearing (confirmation) of bitcoin transactions, see <<mining>>.
|
||
****
|
||
|
||
Alice is now the proud owner of 0.001 BTC that she can spend. Over the next few days, Alice buys more bitcoin using an ATM and((("bitcoins", "spending", startref="bitcoin-send")))((("spending bitcoins", startref="send-bitcoin")))((("bitcoins", "receiving", startref="bitcoin-receive")))((("receiving bitcoins", startref="receive-bitcoin"))) an exchange. In the next chapter we will look at her first purchase with Bitcoin, and examine the underlying transaction and propagation technologies in more detail.
|