The goal of this document is to provide a reading list for learning to program Bitcoin transactions. The theme of this document is practical and pragmatic instruction with the goal of writing code.
The document is split into two major sections: Content and Code
- The Content section contains a reading list which emphasizes programming Bitcoin transactions
- The Code section contains a list of open-source bitcoin projects ranging from modern popular tools to early historic implementations.
Content
Posts
- Programming Bitcoin Transaction Scripts (Kofler)
- Developer’s Introduction to Bitcoin (Buterin)
- How Bitcoin Works Under the Hood (Driscoll)
- Bitcoin Developer Guide
- Bitcoin Scripts (Koshy)
- Bitcoins the hard way: Using the raw Bitcoin protocol (Shirriff)
- Bitcoin mining the hard way: the algorithms, protocols, and bytes (Shirriff)
- Proving Your Bitcoin Reserves (Maxwell)
Tutorials
- The libbitcoin Tutorial (Taaki)
- How to Parse the Bitcoin Blockchain (Ratcliff)
- How to extract every single bitcoin transaction from the blockchain and save it to an ASCII comma separated text file (Ratcliff)
- How To Clone Scrypt Based Altcoins for Fun and Profit (shakezula)
- Signing Offline Transactions (Maxwell)
- 2 of 2 escrow example (Maxwell)
- 2 of 3 multisig example (Andresen)
- How to decrypt messages in the blockchain from btcmsg (ripper234)
Papers
- Original bitcoin paper (Satoshi)
- Annotated bitcoin paper (Satoshi / Rap Genius Community)
- Proof of Ownership (Fortin)
- Colored Coins (Rosenfeld)
Specifications
- BIP70: Payments Protocol (Andresen)
- Working with the Payments Protocol (Andresen)
- BIP32: Hierarchical Deterministic (HD) Wallets (Wuille)
- BIP32 Implementation: Money Tree HD Wallet (BitVault)
- Deterministic Wallet
- Technical background of version 1 Bitcoin addresses
- Transactions Reference
- Script Reference
- Raw Transactions API
- Colored Coins Protocol Specification (Flavien)
- The Mastercoin Protocol Specification (Gross)
- Counterparty: Financial Instruments (Announcement)
Discussion
- There Is No 'From' Address (iwilcox)
- Disentangling Crypto-Coin Mining: Timestamping, Proof-of-Publication, and Validation (Todd)
- Double-spending unconfirmed transactions is a lot easier than most people realise (Todd)
- Replace-by-fee scorched-earth without child-pays-for-parent (Todd / Anonymous)
Videos
- Programming Bitcoin Youtube Channel (Murray)
- How Bitcoin Works Under the Hood (Driscoll)
- Coding Multi-Signature Addresses (D'Angelo)
API Docs
Sidechains
- Tree-chains preliminary summary (Todd)
- Why do people think that side-chains are going to be secure? (Maxwell)
- Discussion on 2-way pegging: is there a way to do bitcoin-staging?
- Sidechains, Treechains, the TL;DR (Sanders)
- Sidechains Explained (Payne)
- Side Chains: The How, The Challenges and the Potential (Buterin)
- Sidechain Technical Feasibility Discussion (discussion)
- Alternative Chains / merged mining
Beyond Payments
- Timelock: time-release encryption incentivised by Bitcoins (Todd / Taaki)
- Decentralized digital asset exchange with honest pricing and market depth (Todd / Mizrahi)
Code
Core
- bitcoin
C++
(Satoshi) - bitcoinj: Java implementation of a Bitcoin client-only node
Java
(bitcoinj) - bitcoin-qt: Qt GUI for C++ Bitcoin client
C++
(laanwj) - bitcoinjs-lib: Bitcoin-related functions implemented in pure JavaScript
JavaScript
(bitcoinjs) - btcd: alternative full node bitcoin implementation written in Go
Go
(conformal) - bitcore: interface to the bitcoin network
Javascript
(BitPay) - cbitcoin low-level bitcoin library in standard C
C
(Mitchell) - btcwire: Implements the bitcoin wire protocol - core wire protocol package from btcd
Go
(conformal)
Tools
- pybitcointools: SImple, common-sense Bitcoin-themed Python ECC library
Python
(vbuterin) - bitcointools: Python-based tools for the Bitcoin cryptocurrency system
Python
(gavinandresen) - cryptocoin: Python module for working with cryptocurrencies
Python
(lyndsysimon) - bitcoin-ruby: bitcoin utils and protocol in ruby.
Ruby
(lian) - pycoin: Python-based Bitcoin utility library.
Python
(richardkiss) - bitcoin-testnet-box: Create a private, difficulty 1 bitcoin testnet
Shell
(freewil) - mastercoin-tools
Javascript
(grazcoin)
Non-currency Applications
- dissent: decentralized, transferable, and open software license system using the Bitcoin protocol
Python
(Lebo)
Beyond Payments
- paypub: Trustless payments for information publishing on Bitcoin
C++
(Taaki / Todd)
Miners
- poclbm: PyOpenCL bitcoin miner
Python
(m0mchil) - DiabloMiner: OpenCL miner for Bitcoin
Java
(Diablo-D3) - cpuminer: CPU miner for bitcoin
C
(jgarzik) - Open-Source-FPGA-Bitcoin-Miner: Bitcoin Miner for Altera FPGAs
Verilog
(progranism) - jsMiner: A Javascript Bitcoin miner
JavaScript
(jwhitehorn) - pyminer: Python miner for bitcoin
Python
(jgarzik) - Bitcoin-JavaScript-Miner: A Bitcoin miner implemented in JavaScript.
JavaScript
(progranism) - cellminer: Bitcoin miner for the Cell Broadband Engine Architecture
C
(verement) - oclminer: OpenCL bitcoin miner
C
(tcatm) - Phoenix-Miner: Modular, fast, efficient Bitcoin miner
Python
(jedi95) - tumen_miner: An experimental BitCoin miner, which uses WebCL
PHP
(temujin9) - Minimal-Bitcoin-Miner: CPU based Bitcoin Miner in C#
C#
(lithander)
Wallets
- coinpunk: self-hosted Bitcoin wallet service
Javascript
(kyledrake) - termcoin: A bitcoin wallet for your terminal
Javascript
(chjj) - pywallet: bitcoin wallet importer/exporter
Python
(joric) - Hive: Bitcoin wallet for OS X
Objective-C
(jsuder) - bitaddress.org: JavaScript Client-Side Bitcoin Wallet Generator
Javascript
(pointbiz) - Multibit: desktop bitcoin client, powered by bitcoinj
Java
(jim618) - bitcoin-wallet: A new kind of Bitcoin client
Python
(elis) - picocoin: A small bitcoin client
C
(jgarzik) - sx: sx - command line Bitcoin to empower the sysadmin
Python
(spesmilo) - Safebit: Chrome app wallet (elis)
- Bitcoin-akka: a client to btcwallet, written in Scala and built on akka (goldmar)
Clients
- libbitcoin: libbitcoin asynchronous C++ library for Bitcoin
C++
(spesmilo) - electrum: Bitcoin thin client
Python
(spesmilo) - BitcoinArmory: Python-Based Bitcoin Software
Python
(etotheipi) - bitcoin-js-remote: Javascript remote for bitcoind
JavaScript
(tcatm) - bitcoinjs-gui: Bitcoin client implementation in HTML5/JavaScript
JavaScript
(bitcoinjs) - bitcoin-php: Bitcoin library for PHP
PHP
(mikegogulski) - bitcoin-python: Friendly bitcoin API binding for Python
Python
(toomanysecrets0) - python-bitcoinrpc: Python interface to bitcoin's JSON-RPC API
Python
(jgarzik) - bitcoinjs: Bitcoin client library in JavaScript using Node.js / MongoDB
javascript
(justmoon) - caesure: Python Bitcoin Client
Python
(samrushing) - chrome-bitcoin: bitcoin client in chrome
JavaScript
(kiba) - node-bitcoin: Communicate with bitcoind via JSON-RPC
JavaScript
(freewil) - gocoin: Bitcoin client library for Go / golang
Go
(piotrnar) - python-bitcoinlib: Bitcoin library
Python
(petertodd) - cbitcoin: A low-level bitcoin library written in standard C.
C
(MatthewLM) - GoBit: A Golang implementation of Bitcoin
Go
(ThePiachu) - Protocoin: A pure Python Bitcoin protocol implementation
Python
(perone) - BitcoinLib: C# Bitcoin, Litecoin and Bitcoin-Clones Library & RPC Wrapper
C#
(GeorgeKimionis)
Mobile
- bitcoin-wallet: Bitcoin Wallet app for your Android device
Java
(schildbach) - bitcoinApp: bitcoin for iOS devices
Objective-C
(udibr) - bitcoin-android: Send and receive bitcoins from your Android phone
Java
(barmstrong) - bitcoin-mobile-android
Java
(Schaaf) - BitcoinDroid: A thin Android client for Bitcoin
Java
(opposablebrain) - CoreBitcoin: Well-documented Bitcoin implementation in Objective-C
C
(oleganza) - wallet: Mycelium Bitcoin Wallet for Android
Java
(mycelium-com) - BitcoinKit: Cocoa framework for creating Bitcoin wallet apps
C
(hivewallet) - BTCSquared: iOS framework for Bluetooth LE transactions
Objective C
(Gliph)
Exchanges
- buttercoin: Opensource Bitcoin Exchange
Javascript
(buttercoin) - QtBitcoinTrader: Secure Multi Trading Client
C++
(JulyIGHOR) - BitWasp: Open Source Bitcoin Marketplace Software
PHP
(Bit-Wasp) - bitcoin-central: Bitcoin Central
Ruby
(davout) - ZeroReserve: Friend 2 Friend Payment and Bitcoin exchange
C++
(zeroreserve) - benjamin: bitcoin trading bot & analytics platform
JavaScript
(mathisonian) - Dark-Exchange: Dark Exchange is a distributed p2p exchange for bitcoin.
Clojure
(macourtney) - btcnearme: Find Bitcoin traders near you... settle in cash
Ruby
(famulus) - bitrated: Bitrated.com - Bitcoin arbitration marketplace
CoffeeScript
(shesek) - intersango: bitcoin exchange
PHP
(dooglus) - bitwrk: A Bitcoin-friendly, Anonymous Marketplace for Computing Power
Go
(indyjo)
Merchant Tools
- BitPay: Bitcoin payment application
Java
(warpi) - bitcoin-wp-e-commerce: Bitcoin payment plugin for WP e-Commerce for WordPress
PHP
(mikegogulski) - Magento-Bitcoin-Payment-Module: Magento Payment Gateway Plugin for Bitcoin RPC API
PHP
(jalder) - bitcoin-virtuemart: Bitcoin payment plugin for VirtueMart shopping cart for Joomla!
PHP
(mikegogulski) - magento-bitcoin: Bitcoin payment module for Magento.
PHP
(ticean) - Zen-Cart-Bitcoin-Payment-Module: A payment modules to interact with bitcoind for zen cart.
PHP
(jalder) - MultiBitMerchant: A free and open source Bitcoin ecommerce platform, with several representative clients
Java
(gary-rowe)
Bots
- Bitcoin arbitrage: opportunity detector
Python
(maxme) - gekko: A bitcoin trading bot
Node.js
(askmike) - Redbit: Automated Bitcoin Trading Bot
Python
(hyppo) - ArBit: An automated Bitcoin arbitrage trading program.
Go
(goteppo) - cryptrade: Node.js Bitcoin bot for MtGox/Bitstamp/BTC-E/CEX.IO
CoffeeScript
(pulsecat) - btc-trader: Robot for Bitcoin trading on BTC-e
Ruby
(therussianphysicist) - ga-bitbot: Genetic algorithm trade system for bitcoin
Python
Block Exploration
- bitcoin-abe: Abe: block browser for Bitcoin and similar currencies
Python
(jtobey) - insight: A bitcoin blockchain API for web wallets
JavaScript
(bitpay) - node-bitcoin-explorer: A Block Explorer clone built using node-bitcoin-p2p
JavaScript
(bitcoinjs) - btcplex: BTCplex is an open source Bitcoin block chain browser written in Go, it allows you to search and navigate the block chain.
Go
(tsileo) - blockparser: Fast, quick and dirty bitcoin blockchain parser
C++
(znort987)
Pooling
- p2pool: Peer-to-peer Bitcoin mining pool
Python
(forrestv) - bitcoin-pool: early pooling server
C++
(doublec) - What is Pool Hopping? (Perry)
- bitHopper: A python based poolhopper for bitcoin
Python
(c00w) - Bitcoin-mining-proxy: Multi-pool, multi-worker proxy for Bitcoin miners
PHP
(cdhowie) - stratum-mining: Demo implementation of Bitcoin mining pool on Stratum protocol
Python
(slush0)
Sites
- petulant-lana: A one-time-payment filehosting site, using Bitcoin
Go
(bearbin) - bitstarter-leaderboard: Bitcoin-powered crowdfunder
Javascript
(Srinivasan) - feedopensource: Iteratively Fund Open Source Projects With Bitcoin
JavaScript
(dominictarr) - Bitcoin-Poker-Room: Sources for Bitcoin Poker Room.
Python
(hippich) - BitHub: pay Bitcoin for GitHub commits
Java
(WhisperSystems)