33
1 Bitcoin – Introduction for programmers Wojciech Langiewicz @ DRUG #61

Bitcoin for programmers - part 1 version 2

Embed Size (px)

Citation preview

Page 1: Bitcoin for programmers - part 1 version 2

1

Bitcoin – Introduction for programmers

Wojciech Langiewicz @ DRUG #61

Page 2: Bitcoin for programmers - part 1 version 2

2

Live Demo before we start

● Connect to WIFI or make sure you have cellphone reception

● Install Wallets

– Android (Mycelium testnet):

– Online:

● http://testnetwallet.com/

● Create payment requests for 0.01 BTC / 10mBTC

● Tweet them @xwlk

Page 3: Bitcoin for programmers - part 1 version 2

3

Scope of this talk

● Introduction – What is Bitcoin, History

● Core concepts

– Keys, Addresses

– Wallet

– Clients

– Transaction

– Block

– Mining

– Blockchain

Page 4: Bitcoin for programmers - part 1 version 2

4

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 5: Bitcoin for programmers - part 1 version 2

5

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 6: Bitcoin for programmers - part 1 version 2

6Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 7: Bitcoin for programmers - part 1 version 2

7

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 8: Bitcoin for programmers - part 1 version 2

8

Bitcoin Address

● Something like this:19wQhQEF3ANe6Dsiiahq3BFkdzb4K8XZUf

● 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 9: Bitcoin for programmers - part 1 version 2

9

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 10: Bitcoin for programmers - part 1 version 2

10

Wallet

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

● Paper Wallets

● Bitcoin-qt

● Hardware wallets (Trezor)

● Electrum, Armory, Multibit

● Blockchain.info

● Mobile wallets with intermediate server

● Other web wallets

Page 11: Bitcoin for programmers - part 1 version 2

11

Wallet vs HD Wallet

Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Standard Wallet HD Wallet

Page 12: Bitcoin for programmers - part 1 version 2

12

Trezor

Page 13: Bitcoin for programmers - part 1 version 2

13

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 14: Bitcoin for programmers - part 1 version 2

14

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 15: Bitcoin for programmers - part 1 version 2

15

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 16: Bitcoin for programmers - part 1 version 2

16Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 17: Bitcoin for programmers - part 1 version 2

17

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 18: Bitcoin for programmers - part 1 version 2

18

Page 19: Bitcoin for programmers - part 1 version 2

19

Executing a script

Page 20: Bitcoin for programmers - part 1 version 2

20

Advanced transaction types

● Multi signature (multisig)

● OP_RETURN

● Anyone can spend

● Pay to script hash

Page 21: Bitcoin for programmers - part 1 version 2

21

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 22: Bitcoin for programmers - part 1 version 2

22

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 23: Bitcoin for programmers - part 1 version 2

23

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 24: Bitcoin for programmers - part 1 version 2

24

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 25: Bitcoin for programmers - part 1 version 2

25

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

● Next slides: Fork example

Page 26: Bitcoin for programmers - part 1 version 2

26Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 27: Bitcoin for programmers - part 1 version 2

27Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 28: Bitcoin for programmers - part 1 version 2

28Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 29: Bitcoin for programmers - part 1 version 2

29Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 30: Bitcoin for programmers - part 1 version 2

30Images from book “Mastering Bitcoin” by Andreas M. AntonopoulosLicensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Page 31: Bitcoin for programmers - part 1 version 2

31

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 32: Bitcoin for programmers - part 1 version 2

32

Please return testnet coins

Page 33: Bitcoin for programmers - part 1 version 2

33

Next time

● More about Bitcoin clients

● Bitcoin-core JSON-RPC API

● Bitcoinj

● Raw transactions

● Blockchain details

● Security

● Bitcoin flaws