Table of contents : 1. Introduction History of Bitcoin Bitcoin Uses, Users, and Their Stories Getting Started Choosing a Bitcoin Wallet Quick Start Recovery Codes Bitcoin addresses Receiving bitcoin Getting Your First Bitcoin Finding the Current Price of Bitcoin Sending and Receiving Bitcoin 2. How Bitcoin Works Bitcoin Overview Buying from an Online Store Bitcoin Transactions Transaction Inputs and Outputs Transaction Chains Making Change Coin selection Common Transaction Forms Constructing a Transaction Getting the Right Inputs Creating the Outputs Adding the Transaction to the Ledger Bitcoin Mining Mining Transactions in Blocks Spending the Transaction 3. Bitcoin Core: The Reference Implementation From Bitcoin to Bitcoin Core Bitcoin Development Environment Compiling Bitcoin Core from the Source Code Selecting a Bitcoin Core Release Configuring the Bitcoin Core Build Building the Bitcoin Core Executables Running a Bitcoin Core Node Configuring the Bitcoin Core Node Bitcoin Core Application Programming Interface (API) Getting Information on Bitcoin Core’s Status Exploring and Decoding Transactions Exploring Blocks Using Bitcoin Core’s Programmatic Interface Alternative Clients, Libraries, and Toolkits C/C++ JavaScript Java Python Go Rust C# 4. Keys and Addresses Public Key Cryptography Private Keys Elliptic Curve Cryptography Explained Public Keys ScriptPubKey and ScriptSig IP Addresses: The Original Address For Bitcoin (P2PK) Legacy Addresses for P2PKH Base58Check Encoding Decode from Base58Check Compressed public keys Legacy Pay-to-Script-Hash (P2SH) Bech32 addresses Problems with bech32 addresses Bech32m Private key formats Advanced Keys and Addresses Vanity Addresses Paper Wallets About the Authors