Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bitcoin Protocol for Developers

Paradigma
March 05, 2014

Bitcoin Protocol for Developers

Introducción de Alberto Gómez al protocolo de Bitcoin y al lenguaje Bitcoin Scripting, el cual permite desarrollar características y comportamiento sobre el dinero y las transferencias de valor.

Paradigma

March 05, 2014
Tweet

More Decks by Paradigma

Other Decks in Business

Transcript

  1. Alberto Gómez Toribio ( @gotoalberto )
    Bitcoin protocol for developers
    Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/
    c_b_n_a
    Leganés
    6 Febrero 2013

    View Slide

  2. Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/
    c_b_n_a
    Leganés
    6 Febrero 2013
    Alberto Gómez @gotoalberto
    Alvaro Polo @apolovald
    “Software development enthusiast and aviation geek. Give me a
    higher-order function and I shall move the world.”
    “Vocational coder since childhood, he will annoy you with concepts
    like "monad" and "actor model" but gets the work done.”
    “Theoretical computer science believer by night, pragmatic ship-it developer by day.
    My brain runs on glucose, caffeine, general abstract nonsense and type theory.”
    “OpenData and Bitcoin Developer on fire.
    Great coders are today’s rock stars. That’s it!”
    Coinffeine.com
    Sebastián Ortega @_sortega
    Ximo Guanter
    A P2P Bitcoin exchange

    View Slide

  3. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    What is the Bitcoin Protocol?
    ● Network protocol
    ● Transactions Mechanics
    ○ Blockchain mining
    ○ Fees and commitment rules
    ○ Sharing protocol: Gossip, Bittorrent, Gnutella...
    ○ Validations of the money source
    ○ Protocol to spend the money
    ○ Bitcoin Scripting

    View Slide

  4. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Network protocol
    ● Blockchain
    ○ The Blockchain is a distributed ledger book
    ○ Create a Block in chain require a proof of work
    dc7047be… = SHA256(new_block_hash)
    ○ Forks are discarded, the most complex chain wins.

    View Slide

  5. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Network protocol
    ● Other services:
    ○ The Blockchain is used to storage
    usernames.
    ○ Tweets are shared between users using a DHT protocol.
    ○ The older messages are discarded.
    ○ Incentive to generate blocks on Blockchain:
    Sponsored messages.

    View Slide

  6. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Network protocol
    ● Colored Coins:
    ○ The Blockchain is used to storage key-value strings,
    as internet web domains / IP.
    ○ You can register a domain spending Namecoins.
    ○ The fee by register a name is decreased in time.

    View Slide

  7. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}

    View Slide

  8. { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    Transaction Id, changes when a field is changed or tx is signed.

    View Slide

  9. { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    Locktime, Block or Time up to which this tx cannot be broadcasted.

    View Slide

  10. { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    TXid reference output for this input.

    View Slide

  11. { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    Output number reference in previous tx

    View Slide

  12. { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    ScriptSig which unlock the
    connected OutputScript

    View Slide

  13. { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    Value to transfer. The difference with the
    summatory of inputs values is the fee.

    View Slide

  14. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Number of sigs required to broadcast this
    transaction. The signers are included in the
    “addresses” array.

    View Slide

  15. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}
    Script. It defines how the money can be spent and by whom.

    View Slide

  16. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Transactions Mechanic
    ● Transaction anatomy
    { txid : 5c084b… ,
    locktime : 0,
    vin : [
    {
    txid : feff4b…
    vout : 0
    scriptSig {
    asm : d8f67a…
    …}
    …}
    …]
    vout : [
    {
    value : 2.52
    reqsigs : 1
    scriptPubKey {
    asm : OP_DUP OP_HASH160 cb1f48…
    OP_EQUALSVERIFY OP_CHECKSIG
    …}
    addresses : [ 172D5w7C… ]
    …}
    …]
    …}

    View Slide

  17. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Bitcoin Script
    ● It Allows to define how an output will be spent
    and by whom.
    ● Is a non Turing-Complete language which is
    evaluated as a Stack, from left to right.
    ● It just allows to write pure functions
    (without context)
    ● Is a non Turing-Complete language which is
    evaluated with a stack machine.

    View Slide

  18. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  19. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    bbba3f5… 172D5w7C…
    (Public Key)
    (Signature) (Public Key Hash)

    View Slide

  20. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    bbba3f5… 172D5w7C…
    (Public Key)
    (Signature) (Public Key Hash)

    View Slide

  21. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    bbba3f5… 172D5w7C…
    (Public Key)
    (Signature) (Public Key Hash)

    View Slide

  22. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    (Signature)
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    172D5w7C…
    (Public Key) (Public Key Hash)

    View Slide

  23. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    (Signature) bbba3f5…
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    172D5w7C…
    (Public Key) (Public Key Hash)

    View Slide

  24. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Signature)
    (Public Key)
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  25. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Signature)
    (Public Key)
    OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  26. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    172D5w7C…
    (Public Key)
    OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  27. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    172D5w7C…
    (Public Key)
    OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  28. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    cb1f48…
    (Public Key Hash)
    cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  29. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    cb1f48…
    (Public Key Hash)
    cb1f48… OP_EQUALVERIFY OP_CHECKSIG
    (Public Key Hash)

    View Slide

  30. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    cb1f48…
    (Public Key Hash)
    cb1f48…
    (Public Key Hash)
    OP_EQUALVERIFY OP_CHECKSIG

    View Slide

  31. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    cb1f48…
    (Public Key Hash)
    cb1f48…
    (Public Key Hash)
    OP_EQUALVERIFY OP_CHECKSIG

    View Slide

  32. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    OP_CHECKSIG

    View Slide

  33. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    bbba3f5…
    172D5w7C…
    (Public Key)
    (Signature)
    OP_CHECKSIG

    View Slide

  34. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    How Bitcoin Script works?
    Stack
    (EMPTY)
    (EMPTY)
    SUCCESS!

    View Slide

  35. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    <7bb> <5aa> OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  36. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    @_sortega
    Random
    diversion!
    <7bb> <5aa> OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  37. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <7bb> <5aa> OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  38. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack

    <7bb> <5aa> OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  39. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack


    <7bb> <5aa> OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  40. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <7bb>


    <5aa> OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  41. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <5aa>
    <7bb>

    OP_2DUP OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  42. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <7bb>
    <5aa>

    <5aa>
    <7bb>
    OP_HASH160 OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  43. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <7bb>
    <5aa>


    <7bb>
    OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  44. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <5aa>
    <7bb>


    <7bb>

    OP_EQUALVERIFY OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  45. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <5aa>
    <7bb>

    <7bb>
    OP_SWAP
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  46. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_HASH160 OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <7bb>
    <5aa>

    <7bb>

    View Slide

  47. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    <5aa>

    <7bb>

    View Slide

  48. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    <5aa>

    <7bb>


    View Slide

  49. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <5aa>

    <7bb>

    View Slide

  50. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <5aa>

    <7bb>

    <1>

    View Slide

  51. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_SWAP <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <5>

    <7bb>

    View Slide

  52. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    <1> OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <7bb>

    <5>

    View Slide

  53. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_LEFT OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <7bb>

    <5>

    <1>

    View Slide

  54. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack
    OP_ADD <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF
    <7>

    <5>

    View Slide

  55. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack

    <12>

    <2>
    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  56. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack

    <2>
    <12>

    OP_SWAP OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  57. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack

    <12>
    <2>

    OP_MOD
    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  58. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack

    <0>

    OP_IF
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ELSE
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
    OP_ENDIF

    View Slide

  59. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    Stack


    (Standard Script)
    OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

    View Slide

  60. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    The sky is the limit! (Odd/Even Bet)
    ● Possible real use:
    ○ Random user to pay the transaction fees.
    ○ Help to define asymmetric scenario (secrets)

    View Slide

  61. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● The oracle contract allow define how the money
    is spent including external state.
    ○ Allow to pay, only if an external condition is true, for
    example the result of a search in google, or the API SEUR
    response.
    ○ Allows to make reversible transactions.

    View Slide

  62. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Example of a reversible payment using a Oracle
    ○ First you generate (in private) a multisig transaction as
    this:
    TX1
    in { 1 BTC BOB }
    out { 1 BTC MULTISIGVERIFY BOB SAM }
    ○ Then you must obtain signed from counterpart:

    OP_HASH160 OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY }
    TX3
    in { TX1[0] }
    out { 1 BTC

    OP_HASH160 OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY }
    TX2
    in { TX1[0] }
    out { 1 BTC

    View Slide

  63. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution

    OP_HASH160
    OP_EQUALSVERIFY
    2
    OP_CHECKMULTISIGVERIFY }
    TX2
    in { TX1[0] }
    out { 1 BTC

    View Slide

  64. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution

    OP_HASH160 OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY
    Stack

    View Slide

  65. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution

    OP_HASH160 OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY
    Stack

    View Slide

  66. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution

    OP_HASH160 OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY
    Stack


    View Slide

  67. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution
    OP_HASH160 OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY
    Stack



    View Slide

  68. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution
    OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY
    Stack



    View Slide

  69. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution
    OP_EQUALSVERIFY
    2 OP_CHECKMULTISIGVERIFY
    Stack




    View Slide

  70. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution
    2 OP_CHECKMULTISIGVERIFY
    Stack


    View Slide

  71. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Context: Oracles
    ● Execution
    Stack
    SUCCESS!

    View Slide

  72. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Fees? Micro Payment Channels!
    ● Transactions from a checkpoint without
    broadcast
    ● Allows commit money safely
    ● Allows to pay on demand by the second
    ● For example: decentralized WiFi Hotspots or
    subcontracting services in third world countries.

    View Slide

  73. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }

    View Slide

  74. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2

    View Slide

  75. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2

    View Slide

  76. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2

    View Slide

  77. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2
    IN {TX1[0] 1 BTC }
    OUT {0: 0,9 BTC BOB
    0,1 BTC SAM }

    View Slide

  78. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2
    IN {TX1[0] 1 BTC }
    OUT {0: 0,8 BTC BOB
    0,2 BTC SAM }

    View Slide

  79. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2
    IN {TX1[0] 1 BTC }
    OUT {0: 0,7 BTC BOB
    0,3 BTC SAM }

    View Slide

  80. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2
    IN {TX1[0] 1 BTC }
    OUT {0: 0,6 BTC BOB
    0,4 BTC SAM }
    BREAK!

    View Slide

  81. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    Micro Payment Channels Mechanic
    TX1
    IN {0: 1 BTC }
    OUT {0: 1 BTC MULTISIG BOB SAM }
    IN {TX1[0]: 1 BTC }
    OUT { 0 : 1 BTC BOB }
    LOCKTIME : 18
    TX2
    IN {TX1[0] 1 BTC }
    OUT {0: 0,6 BTC BOB
    0,4 BTC SAM }

    View Slide

  82. Bitcoin Protocol for Developers #BitcoinT3F
    Leganés
    6 Febrero 2013
    THANKS!
    ● BigData is the current wave, P2P is the next.
    ● APIs and P2P are the next challenge on finantial world.
    ● Bitcoin technology and protocol is here to stay.

    View Slide