Blockchain Development Intro
using Bitcoin and Ethereum
Francesco @makevoid Canessa
Blockchain
Private
-
Hosting
-
Backups
-
Privacy
Public
-
Open access
-
Token based
-
Resilient
Blockchain
Bitcoin
-
First, specific for a monetary token
-
Token + OP RETURN
Ethereum
-
Full smart contract functionality
-
Quicker confirmations
Bitcoin
Bitcoin
Monetary Token
OP_RETURN
UI
Bitcoin
BTC - Monetary Token
Remittances
Money transmission - developing countries
ATM / POS / Exchange integration
Micro-Transactions
Donations (multiple-outputs transactions)
Pay-per-Second / Pay-per-View (payment channels)
Bitcoin
OP_RETURN
Immutable data
Generate one keypair (thus one address) for each user
Save and Query JSON assertions
Compute document hashes (images, PDFs)
Bitcoin
TOOLS
Blockcypher API (blockchain API)
bitcore-lib (JS library)
Block explorers (blockchain.info, blockr.io ...)
Bitcoin
bitcore-lib sample code
var bitcore = require('bitcore-lib') var privateKey = new bitcore.PrivateKey() var address = privateKey.toAddress()
Bitcoin
bitcore-lib sample code
var bitcore = require('bitcore-lib') // via browserify if (localStorage.privateKey) { console.log("Private key present in localStorage") console.log("Private key:") console.log(localStorage.privateKey) var address = new bitcore.PrivateKey(localStorage.privateKey.toAddress()) console.log("Address:", address.toString()) } else { var privateKey = new bitcore.PrivateKey() var privateKeyWif = privateKey.toWIF() localStorage.privateKey = privateKeyWif console.log("Private key saved successfully!") }
Bitcoin
blockcypher address API
curl https://api.blockcypher.com/v1/btc/main/addrs/1DEP8i3QJCsomS4BSMY2RpU1upv62aGvhD/full { "address": "1DEP8i3QJCsomS4BSMY2RpU1upv62aGvhD", "total_received": 4433416, "total_sent": 0, "balance": 4433416, "unconfirmed_balance": 0, "final_balance": 4433416, "n_tx": 7, "unconfirmed_n_tx": 0, "final_n_tx": 7, "txs": [ { "block_hash": "0000000000000000af64802c79...", "block_height": 292586, "hash": "b4735a0690dab16b8789fceaf81c511f...", "addresses": [ "18KXZzuC3xvz6upUMQpsZzXrBwNPWZjdSa", "1AAuRETEcHDqL4VM3R97aZHP8DSUHxpkFV", .......
OP_RETURN sample - Read
Query it
curl https://api.blockcypher.com/v1/btc/main/addrs/1NU2Eymu8R7JkTuNiNF35ESB3PLty1vMre/full?confirmations=0 | grep data_string
...
Ethereum
SimpleStorage
a simple ethereum contract
contract SimpleStorage { bytes32 data; function set(bytes32 _data) { data = _data; } function get() constant returns (bytes32 _data) { return data; } }
SimpleStorage
a simple ethereum contract
contract SimpleStorage { bytes32 public data; function set(bytes32 _data) { data = _data; } }
Eth-Lock contract
unlock contract based on third-party message
contract EthLock { uint lockedFundsAmount; address public owner = 0x1234; address public recipient = 0x12345; function unlockFunds() { if(msg.sender == owner) { recipient.send(lockedFundsAmount); } } }
Eth-Lock contract
configurable
contract EthLock { uint lockedFundsAmount; address public owner; address public recipient; function EthLock(address _recipient, address _owner) { recipient = _recipient; owner = _owner; } function unlockFunds() { if(msg.sender == owner) { recipient.send(lockedFundsAmount); } } }
Eth-Lock contract
configurable
// pragma solidity ^0.4.8 contract EthLock { uint lockedFundsAmount; address public owner = 0x6e57c3777d6ca24c26bde462d22b16e41e5fe5f2; address public recipient = 0x6e57c3777d6ca24c26bde462d22b16e41e5fe5f2; function unlockFunds() { if(msg.sender == owner) { recipient.send(lockedFundsAmount); } } } // 0xbe3741bc0ecc248cb15d778ecdf1aa59887fc6ef