Programming Bitcoin Reading List and Projects
- 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
- WIP: please send suggestions to @eigenjoy or open a GitHub issue
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)