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 - Write

Blockchain pen

blockchainpen.com

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

Metamask

Chrome extension

Ethereum browser connector

metamask.io

browser-solidity + metamask

Demo

Solidity documentation

solidity.readthedocs.io

other options

full nodes

Geth

go-ethereum

Parity

ethcore (rust)

Have fun!

@makevoid