SlideShare a Scribd company logo
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
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
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
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.
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.
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.
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… ]
…}
…]
…}
{ 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.
{ 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.
{ 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.
{ 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
{ 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
{ 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.
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.
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.
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… ]
…}
…]
…}
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.
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)
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
How Bitcoin Script works?
OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIGbbba3f5… 172D5w7C…
(Public Key)(Signature) (Public Key Hash)
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
How Bitcoin Script works?
Stack
OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIGbbba3f5… 172D5w7C…
(Public Key)(Signature) (Public Key Hash)
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
How Bitcoin Script works?
Stack
OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIGbbba3f5… 172D5w7C…
(Public Key)(Signature) (Public Key Hash)
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_CHECKSIG172D5w7C…
(Public Key) (Public Key Hash)
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_CHECKSIG172D5w7C…
(Public Key) (Public Key Hash)
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)
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)
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)
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)
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)
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)
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
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
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
How Bitcoin Script works?
Stack
bbba3f5…
172D5w7C…(Public Key)
(Signature)
OP_CHECKSIG
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
How Bitcoin Script works?
Stack
bbba3f5…
172D5w7C…(Public Key)
(Signature)
OP_CHECKSIG
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
How Bitcoin Script works?
Stack
(EMPTY)
(EMPTY)
SUCCESS!
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
<Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
@_sortega
Random
diversion!
<Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<Sig>
<PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<PubKey>
<Sig>
<7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<7bb>
<PubKey>
<Sig>
<5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<5aa>
<7bb>
<PubKeyB>
OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<7bb>
<5aa>
<PubKeyB>
<5aa>
<7bb>
OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<7bb>
<5aa>
<PubKeyB>
<aHash>
<7bb>
<aHash> OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<5aa>
<7bb>
<PubKeyB>
<aHash>
<7bb>
<aHash>
OP_EQUALVERIFY OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<5aa>
<7bb>
<PubKeyB>
<7bb>
OP_SWAP
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<7bb>
<5aa>
<PubKeyB>
<7bb>
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<bHash>
<5aa>
<PubKeyB>
<7bb>
<Sig>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<bHash>
<5aa>
<PubKeyB>
<7bb>
<bHash>
<Sig>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<5aa>
<PubKeyB>
<7bb>
<Sig>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<5aa>
<PubKeyB>
<7bb>
<Sig>
<1>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<5>
<PubKeyB>
<7bb>
<Sig>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<7bb>
<PubKeyB>
<5>
<Sig>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<7bb>
<PubKeyB>
<5>
<Sig>
<1>
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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
<7>
<PubKeyB>
<5>
<Sig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<PubKeyB>
<12>
<Sig>
<2>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<PubKeyB>
<2>
<12>
<Sig>
OP_SWAP OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<PubKeyB>
<12>
<2>
<Sig>
OP_MOD
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<PubKeyB>
<0>
<Sig>
OP_IF
OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
The sky is the limit! (Odd/Even Bet)
Stack
<PubKeyB>
<Sig>
(Standard Script)
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
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)
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.
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:
<SeurAPI(trackID) == ‘DELIVERED’>
OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <BobPubKey> 2 OP_CHECKMULTISIGVERIFY }
TX3
in { TX1[0] }
out { 1 BTC
<SeurAPI(trackID) == ‘RETURNED’>
OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY }
TX2
in { TX1[0] }
out { 1 BTC
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
<SeurAPI(trackID) == ‘RETURNED’>
OP_HASH160 <ExternalScriptHash>
OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2
OP_CHECKMULTISIGVERIFY }
TX2
in { TX1[0] }
out { 1 BTC
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
<OracleSig> <SamSig> <SeurAPI(trackID) == ‘RETURNED’>
OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
<SamSig> <SeurAPI(trackID) == ‘RETURNED’>
OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
<OracleSig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
<SeurAPI(trackID) == ‘RETURNED’>
OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
<SamSig>
<OracleSig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
<SeurAPI(trackID) == ‘RETURNED’>
<SamSig>
<OracleSig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
<ExternalScriptHash> OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
<ScriptHash>
<SamSig>
<OacleSig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
OP_EQUALSVERIFY
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
<ScriptHash>
<ExternalScriptHash>
<SamSig>
<OracleSig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
<OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY
Stack
<SamSig>
<OracleSig>
Bitcoin Protocol for Developers #BitcoinT3F
Leganés
6 Febrero 2013
Context: Oracles
● Execution
Stack
SUCCESS!
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.
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 }
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
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
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
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 }
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 }
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 }
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!
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 }
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.

More Related Content

PDF
Bitcoin protocol for developerBitcoin Protocol for Developers
PPTX
The bitcoin blockchain
PPTX
Presentation_Topalidis_Giorgos
PDF
Through the looking glass (of the blockchain)
PDF
HES2011 - Gabriel Gonzalez - Man In Remote PKCS11 for fun and non profit
PDF
DEFCON 23 - Eijah - crypto for hackers
PDF
Protocol buffers and Microservices
PPTX
Blockchain Cryptography for Developers (Nakov @ BGWebSummit 2018)
Bitcoin protocol for developerBitcoin Protocol for Developers
The bitcoin blockchain
Presentation_Topalidis_Giorgos
Through the looking glass (of the blockchain)
HES2011 - Gabriel Gonzalez - Man In Remote PKCS11 for fun and non profit
DEFCON 23 - Eijah - crypto for hackers
Protocol buffers and Microservices
Blockchain Cryptography for Developers (Nakov @ BGWebSummit 2018)

What's hot (15)

PPTX
Cryptography 101 for Java developers
PDF
Testable Code
PDF
Cryptographic algorithms diversity: Russian (GOST) crypto algorithms
PDF
Ethereum Smart Contracts on Hyperledger Fabric
PPTX
Cryptography for Absolute Beginners (May 2019)
PDF
Android binder introduction
PDF
Common Browser Hijacking Methods
PPTX
JWTs and JOSE in a flash
PDF
Reutov, yunusov, nagibin random numbers take ii
PPTX
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
PDF
BalCCon2k18 - Towards the perfect cryptocurrency wallet
PDF
Seguridad en microservicios via micro profile jwt
PDF
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
PDF
Linux seccomp(2) vs OpenBSD pledge(2)
PDF
The Ring programming language version 1.6 book - Part 188 of 189
Cryptography 101 for Java developers
Testable Code
Cryptographic algorithms diversity: Russian (GOST) crypto algorithms
Ethereum Smart Contracts on Hyperledger Fabric
Cryptography for Absolute Beginners (May 2019)
Android binder introduction
Common Browser Hijacking Methods
JWTs and JOSE in a flash
Reutov, yunusov, nagibin random numbers take ii
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
BalCCon2k18 - Towards the perfect cryptocurrency wallet
Seguridad en microservicios via micro profile jwt
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Linux seccomp(2) vs OpenBSD pledge(2)
The Ring programming language version 1.6 book - Part 188 of 189
Ad

Viewers also liked (17)

PPTX
Content Marketing: Get Trained Up!
PPSX
Lançamento novas marcas Cabergs Saúde
PDF
Herramienta rss
PPS
Jugos curativos
PDF
ANALISIS STRATEGI PEMASARAN DI SEKOLAH TINGGI ILMU EKONOMI LEMBAH DEMPO PAGAR...
PDF
Living Landscapes in South Dakota: A Guide to Native Plantscaping
PDF
Fundiciones
DOC
Boletín InfoSACU 35/2016
PDF
Ecolabel affiche generique-a4
PPTX
Going Local - techconkona.11.2.13
PPTX
Mediakittravelblogprojectspaceelenapaschinger 01072015
PDF
II Congreso Internacional Barcelona Inclusiva
PDF
AcademicTranscriptions
PPS
Effective Strategic Planning
PDF
Hackers heroes of the computer revolution
PDF
Vietnamese traditional craft and innovation in applied arts
PDF
“Pintxo” de poivrons de piquillos farcis au thon blanc avec anchois cantabriq...
Content Marketing: Get Trained Up!
Lançamento novas marcas Cabergs Saúde
Herramienta rss
Jugos curativos
ANALISIS STRATEGI PEMASARAN DI SEKOLAH TINGGI ILMU EKONOMI LEMBAH DEMPO PAGAR...
Living Landscapes in South Dakota: A Guide to Native Plantscaping
Fundiciones
Boletín InfoSACU 35/2016
Ecolabel affiche generique-a4
Going Local - techconkona.11.2.13
Mediakittravelblogprojectspaceelenapaschinger 01072015
II Congreso Internacional Barcelona Inclusiva
AcademicTranscriptions
Effective Strategic Planning
Hackers heroes of the computer revolution
Vietnamese traditional craft and innovation in applied arts
“Pintxo” de poivrons de piquillos farcis au thon blanc avec anchois cantabriq...
Ad

Similar to Bitcoin protocol for developers at techfest (20)

PPTX
Bitcoin Technology Presentation No.1.pptx
PDF
Ethereum VM and DSLs for Smart Contracts (updated on May 12th 2015)
PDF
Bitcoin Blockchain - Under the Hood
PPTX
Bitcoin and it's security related to transaction.pptx
PPTX
Bitcoin developer guide
PDF
Bitcoin’s blockchain - from hashes to Escrow and beyond
PDF
Bitcoin - Beyond the basics
PDF
"Programming Smart Contracts on Ethereum" by Anatoly Ressin from AssistUnion ...
PPTX
Blockchain and Bitcoin
PPTX
以比特幣為例的區塊鏈技術介紹 ( Intro to Blockchain using Bitcoin as an example)
PPTX
Presentation topalidis giorgos
ODP
Blockchan For Developers
PDF
BCHGraz - Meetup #8 - Intro & Ethereum
PPTX
bitcoin_presentation
PDF
Bitcoin.pdf
PDF
Blockchain For Developers
PPTX
“Technical Intro to Blockhain” by Yurijs Pimenovs from Paybis at CryptoCurren...
PDF
Bitcoin, Banking and the Blockchain
PPTX
A research-oriented introduction to the cryptographic currencies (starting wi...
PPTX
Blockchain, Ethereum and Business Applications
Bitcoin Technology Presentation No.1.pptx
Ethereum VM and DSLs for Smart Contracts (updated on May 12th 2015)
Bitcoin Blockchain - Under the Hood
Bitcoin and it's security related to transaction.pptx
Bitcoin developer guide
Bitcoin’s blockchain - from hashes to Escrow and beyond
Bitcoin - Beyond the basics
"Programming Smart Contracts on Ethereum" by Anatoly Ressin from AssistUnion ...
Blockchain and Bitcoin
以比特幣為例的區塊鏈技術介紹 ( Intro to Blockchain using Bitcoin as an example)
Presentation topalidis giorgos
Blockchan For Developers
BCHGraz - Meetup #8 - Intro & Ethereum
bitcoin_presentation
Bitcoin.pdf
Blockchain For Developers
“Technical Intro to Blockhain” by Yurijs Pimenovs from Paybis at CryptoCurren...
Bitcoin, Banking and the Blockchain
A research-oriented introduction to the cryptographic currencies (starting wi...
Blockchain, Ethereum and Business Applications

More from Alberto Gomez Toribio (6)

PDF
Bitcoin introduction, El Corte Inglés
PDF
Bitcoin Development - Desarrollo con Bitcoin
PPT
Agile at Work
PPTX
PPTX
Alcazar Open Government
Bitcoin introduction, El Corte Inglés
Bitcoin Development - Desarrollo con Bitcoin
Agile at Work
Alcazar Open Government

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Spectroscopy.pptx food analysis technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Encapsulation theory and applications.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Machine Learning_overview_presentation.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
cuic standard and advanced reporting.pdf
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Approach and Philosophy of On baking technology
PPTX
Big Data Technologies - Introduction.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Cloud computing and distributed systems.
NewMind AI Weekly Chronicles - August'25-Week II
Spectroscopy.pptx food analysis technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Encapsulation theory and applications.pdf
Unlocking AI with Model Context Protocol (MCP)
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Machine Learning_overview_presentation.pptx
Encapsulation_ Review paper, used for researhc scholars
cuic standard and advanced reporting.pdf
A comparative analysis of optical character recognition models for extracting...
Approach and Philosophy of On baking technology
Big Data Technologies - Introduction.pptx
sap open course for s4hana steps from ECC to s4
Per capita expenditure prediction using model stacking based on satellite ima...
MYSQL Presentation for SQL database connectivity
Assigned Numbers - 2025 - Bluetooth® Document
Diabetes mellitus diagnosis method based random forest with bat algorithm
Network Security Unit 5.pdf for BCA BBA.
Cloud computing and distributed systems.

Bitcoin protocol for developers at techfest

  • 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
  • 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
  • 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
  • 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.
  • 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.
  • 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.
  • 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… ] …} …] …}
  • 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.
  • 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.
  • 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.
  • 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
  • 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
  • 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.
  • 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.
  • 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.
  • 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… ] …} …] …}
  • 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.
  • 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)
  • 19. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 How Bitcoin Script works? OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIGbbba3f5… 172D5w7C… (Public Key)(Signature) (Public Key Hash)
  • 20. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 How Bitcoin Script works? Stack OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIGbbba3f5… 172D5w7C… (Public Key)(Signature) (Public Key Hash)
  • 21. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 How Bitcoin Script works? Stack OP_DUP OP_HASH160 cb1f48… OP_EQUALVERIFY OP_CHECKSIGbbba3f5… 172D5w7C… (Public Key)(Signature) (Public Key Hash)
  • 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_CHECKSIG172D5w7C… (Public Key) (Public Key Hash)
  • 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_CHECKSIG172D5w7C… (Public Key) (Public Key Hash)
  • 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)
  • 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)
  • 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)
  • 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)
  • 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)
  • 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)
  • 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
  • 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
  • 32. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 How Bitcoin Script works? Stack bbba3f5… 172D5w7C…(Public Key) (Signature) OP_CHECKSIG
  • 33. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 How Bitcoin Script works? Stack bbba3f5… 172D5w7C…(Public Key) (Signature) OP_CHECKSIG
  • 34. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 How Bitcoin Script works? Stack (EMPTY) (EMPTY) SUCCESS!
  • 35. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) <Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 36. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) @_sortega Random diversion! <Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 37. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 38. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <Sig> <PubKeyB> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 39. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <PubKey> <Sig> <7bb> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 40. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <7bb> <PubKey> <Sig> <5aa> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 41. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <5aa> <7bb> <PubKeyB> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <Sig>
  • 42. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <7bb> <5aa> <PubKeyB> <5aa> <7bb> OP_HASH160 <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <Sig>
  • 43. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <7bb> <5aa> <PubKeyB> <aHash> <7bb> <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <Sig>
  • 44. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <5aa> <7bb> <PubKeyB> <aHash> <7bb> <aHash> OP_EQUALVERIFY OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <Sig>
  • 45. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <5aa> <7bb> <PubKeyB> <7bb> OP_SWAP OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <Sig>
  • 46. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack OP_HASH160 <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <7bb> <5aa> <PubKeyB> <7bb> <Sig>
  • 47. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <bHash> OP_EQUALVERIFY <1> OP_LEFT OP_SWAP <1> OP_LEFT OP_ADD <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <bHash> <5aa> <PubKeyB> <7bb> <Sig>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <bHash> <5aa> <PubKeyB> <7bb> <bHash> <Sig>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <5aa> <PubKeyB> <7bb> <Sig>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <5aa> <PubKeyB> <7bb> <Sig> <1>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <5> <PubKeyB> <7bb> <Sig>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <7bb> <PubKeyB> <5> <Sig>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <7bb> <PubKeyB> <5> <Sig> <1>
  • 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 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF <7> <PubKeyB> <5> <Sig>
  • 55. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <PubKeyB> <12> <Sig> <2> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 56. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <PubKeyB> <2> <12> <Sig> OP_SWAP OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 57. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <PubKeyB> <12> <2> <Sig> OP_MOD OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 58. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <PubKeyB> <0> <Sig> OP_IF OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG OP_ELSE OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF
  • 59. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 The sky is the limit! (Odd/Even Bet) Stack <PubKeyB> <Sig> (Standard Script) OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
  • 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)
  • 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.
  • 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: <SeurAPI(trackID) == ‘DELIVERED’> OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <BobPubKey> 2 OP_CHECKMULTISIGVERIFY } TX3 in { TX1[0] } out { 1 BTC <SeurAPI(trackID) == ‘RETURNED’> OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY } TX2 in { TX1[0] } out { 1 BTC
  • 63. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution <SeurAPI(trackID) == ‘RETURNED’> OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY } TX2 in { TX1[0] } out { 1 BTC
  • 64. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution <OracleSig> <SamSig> <SeurAPI(trackID) == ‘RETURNED’> OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack
  • 65. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution <SamSig> <SeurAPI(trackID) == ‘RETURNED’> OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack <OracleSig>
  • 66. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution <SeurAPI(trackID) == ‘RETURNED’> OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack <SamSig> <OracleSig>
  • 67. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution OP_HASH160 <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack <SeurAPI(trackID) == ‘RETURNED’> <SamSig> <OracleSig>
  • 68. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution <ExternalScriptHash> OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack <ScriptHash> <SamSig> <OacleSig>
  • 69. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution OP_EQUALSVERIFY <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack <ScriptHash> <ExternalScriptHash> <SamSig> <OracleSig>
  • 70. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution <OraclePubKey> <SamPubKey> 2 OP_CHECKMULTISIGVERIFY Stack <SamSig> <OracleSig>
  • 71. Bitcoin Protocol for Developers #BitcoinT3F Leganés 6 Febrero 2013 Context: Oracles ● Execution Stack SUCCESS!
  • 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.
  • 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 }
  • 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
  • 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
  • 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
  • 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 }
  • 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 }
  • 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 }
  • 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!
  • 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 }
  • 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.