introduction to bitcoin for programmers

21
1 Bitcoin – Introduction for programmers Wojciech Langiewicz @ DRUG #58

Upload: wojciech-langiewicz

Post on 09-Jul-2015

1.076 views

Category:

Technology


1 download

DESCRIPTION

Introduction to Bitcoin for programmers presented at DRUG meetup 17.11.2014

TRANSCRIPT

Page 1: Introduction to Bitcoin for programmers

1

Bitcoin – Introduction for programmers

Wojciech Langiewicz @ DRUG #58

Page 2: Introduction to Bitcoin for programmers

2

Scope of this talk

● Introduction – What is Bitcoin, History

● Core concepts

– Keys, Addresses

– Wallet

– Clients

– Transaction

– Block

– Mining

– Blockchain

Page 3: Introduction to Bitcoin for programmers

3

What is Bitcoin

● Collection of concepts (and full “ecosystem” of tools)

● Decentralized peer-to-peer system

● Solves 2 main problems:

– Is that money authentic (not counterfeit)

– Is there only singe occurrence of this specific coin (double spends)

● Has much similarities to cash and gold

Page 4: Introduction to Bitcoin for programmers

4

Key elements of the ecosystem

● Decentralized peer-to-peer network (Bitcoin protocol)

● Public transaction ledger (Blockchain)

● Decentralized currency issuing algorithms (mining)

● Decentralized transaction verification (transaction scripts)

Page 5: Introduction to Bitcoin for programmers

5

Few words about history

● Introduced in 2009 by Satoshi Nakamoto

● https://bitcoin.org/bitcoin.pdf

● Combined concepts that existed before

● But have not been combined until then

● POW algorithm + Blockchain

Page 6: Introduction to Bitcoin for programmers

6

Bitcoin Address

● Something like this:1FzQW9CWpNBoqUmaLFKNMAYiBhj6ncJA7N

● Usually shown as QR code:

● Address is a Base58 encoded form of the public key

● Based on the address prefix, you can figure out what type of address it is.

● Types of addresses: Pubkey hash, script hash, private key

● Address reuse

● A word about HD Wallets

Page 7: Introduction to Bitcoin for programmers

7

Bitcoin Keys - ECDSA

● Private keys – numbers between 0 and 2^256

● Public key can be calculated from the private key

● Public key can be represented as Base58 encoding, HEX number, etc

● Private keys can also be encoded as Base58 – this is called WIF format – most common way to export/import keys between wallets

Page 8: Introduction to Bitcoin for programmers

8

Wallet

● Client software running on: server, desktop, phone, “in the cloud”, it manages keys, signs transactions, generates new keys, etc

● Bitcoin-qt

● Electrum, Armory, Multibit

● Blockchain.info

● Mobile wallets with intermediate server

● Other web wallets

Page 9: Introduction to Bitcoin for programmers

9

Full nodes

● Full nodes store full copy of the blockchain

● Currently over 40GB of data

● Usually need for server-side type of applications

● Provide JSON-RPC API

● Example: Satoshi client, btcd

Page 10: Introduction to Bitcoin for programmers

10

SPV nodes

● Lighweight nodes

● Use Simplified Payment Verification instead of ITV

● Suitable for desktops, phones

● Instead of downloading full blockchain

● Download transactions only for their addresses

● Security and privacy implications

● Example: bitcoinj

Page 11: Introduction to Bitcoin for programmers

11

Transaction

● Coinbase transaction

● Each transaction has 1 or more inputs and 1 or more outputs

● Transaction “moves money” - changes owner

● Transactions take inputs and translate it into outputs

● Those outputs can serve as inputs to the new transaction

Page 12: Introduction to Bitcoin for programmers

12

Spending a transaction - P2PH

● Example of transaction type “Pay to pubkey hash”

● ScriptPubKey:OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

● scriptSig: <sig> <pubKey>

● Script:<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

Page 13: Introduction to Bitcoin for programmers

13

Executing a script

Page 14: Introduction to Bitcoin for programmers

14

Advanced transaction types

● Multi signature (multisig)

● OP_RETURN

● Anyone can spend

● Pay to script hash

Page 15: Introduction to Bitcoin for programmers

15

Blocks

● Genesis block

● Mining – process of confirming a block

● Each block points to a previous one creating a blockchain

● Quite few similarities to git (instead you can't merge)

Page 16: Introduction to Bitcoin for programmers

16

Mining

● Merges transactions into blocks

● Finds nonce that “solves” the block

● Once the solution is found – block is published

● Published – appended to the blockchain

● Published blocks are verified by other nodes

● This sends coinbase transaction to the miner + all fees

● Proof of Work – 10 minutes per block

● Difficulty

Page 17: Introduction to Bitcoin for programmers

17

Mining pools

● Chance to find a solution to a block are small

● Small miners join in pools where they share a profit

● Instead of finding a block every year and getting 25BTC

● You will get 0.5 BTC per week.

● You have to trust the pool operator or use p2pool

Page 18: Introduction to Bitcoin for programmers

18

Blockchain

● “A chain of blocks”

● Clever approach to consensus problem

● Miners after finding a new block publish it on the network

● You base your security on a height of a transaction

● Ensures that there are no duplication

Page 19: Introduction to Bitcoin for programmers

19

Blockchain fork

● Situation when 2 blocks are found at the same time

● Bitcoin network is in the state of a fork

● 10 minutes later a new block is found that is based on one of the forks

● All Bitcoin nodes quickly switch to the longer branch

● Transactions from the shorter branch are orphaned and will be processed shortly after

Page 20: Introduction to Bitcoin for programmers

20

Few words about the 51% attack

● Theoretically possible even with 40-50% of power

● Can be used to destabilize network for some period of time

● Can help to create a double-spend

● In no case you'll be able to spend coins you don't have

● This attack is not practical

● Miners will make more BTC by being honest

Page 21: Introduction to Bitcoin for programmers

21

Next time

● More about Bitcoin clients

● Bitcoin-core / btcd API

● Bitcoinj

● Raw transactions

● Blockchain details

● Security

● Bitcoin flaws