Learn Ethereum development

with the smart contract gathered

$35M in 30 secs

CTO of Starbase

Yu Yamanaka

July 18, 2017, at Yahoo! LODGE

What's the motivation to read this presentation?

  • A new business idea with Ethereum and Smart Contract may come up 
  • You may debut in a Crowdsale/ICO as an investor or fundraiser

About me

Full-stack Developer / Entrepreneur / Crypto Investor

 

Programmer

& DevOps Engineer

2007

2017

CTO

Co-founder & CTO

Full-stack Engineer

& Agile PM

Infrastructure Architect

  • 10 years of experiences in enterprise and web technologies
     
  • Maintained large scale and rapid growing services (800 servers, 15M users, etc.)
     
  • Dived into this Blockchain world in Oct. 2016

Starbase

"Skyrocket your idea"

Kickstarter by Crypto-Currency

Make raising funds by "Token" a common way of finance.

Starbase

Team

Market Cap

= Amout x Price

Market Cap of US stocks

the financial crisis

-42%

(2012~2013)  +29%

Market Cap of Bitcoin

Increased 200% for a year!

Market Cap of Altcoins/Tokens

Increased 1300% for a year!!

Market Cap Ranking (Top 5)

Market Cap Ranking (~ 50)

They were just listed in last May, June

Even though they have no products,

Aragon

Bancor

(Kickstarter as a reference)

$20M

$13M

$12M

What is "ICO"?

Traditional IPO = Listing of Stock

Initial Coin Offering = Listing of Cryptocurrency on private exchange(s)

Today's

Main Topic

Learn Ethereum development

with the smart contract gathered

$35M in 30 secs

Market Cap Ranking (~ 50)

Raised $35M

in 30 secs

Basic Attention Token

Basic Attention Token

OKAY, BUT HOW THEY RASED?

They gathered the funds by a Smart Contract

You can see the source code here

3 steps to understand the mechanism

  1. Understand Ethereum & Smart Contract
  2. Technologies support ICO
  3. Learn with BAT's smart contract

1. Understand

Ethereum & Smart Contract

They were issued on Ethereum!

They were just listed last spring

Ethereum: the World Computer

Ethereum: the World Computer

World-Wide Distributed

Application Platform

  • Working by miners like Bitcoin
  • Everyone can use by paying Ether
  • Connectable with traditional apps
  • Infrastructure for Smart Contracts

Smart Contract

A program executes the terms

of a contract

  1. Define terms by programming
  2. Deploy the program on Ethereum
  3. A user or app calls a function of the program with Ether
  4. The program runs according to the terms 

Ether

A fuel to run DApps on Ethereum /

A virtual currency like Bitcoin

  • Ether(ETH) = Fuel of DApps = Fee
  • Required to run a function on a smart contract
  • Works as a "currency" like Bitcoin  since it has a market price

2. Technologies support "ICO"

"BIG" IDEA

(fundraiser)

ICO

Market Trade

Build the product with the raised funds

Crowdsale

Make smart contracts, whitepaper,  website, prototype, etc...

Find team members, advisers, angel investors

ICO process (1~2years)

Crowdsale

Crowdfunding

by Crypto-Currency

  • Raise funds from the world's  investors in major cryptocurrencies (like BTC/ETH)
  • The investors get certain tokens according to the investment
  • The investors can sell the tokens once it is listed on an exchange
  • Usually, it has a cap and period

Token

Token

Crypto-Currency

  • Token is a Crypto-Currency
  • Token has market cap, and it is transferable like Bitcoin
  • Token holders have special rights
    (e.g. revenue share)

ERC20: A standard for Ethereum Tokens

 1 contract ERC20 {
 2     function totalSupply() constant returns (uint totalSupply);
 3     function balanceOf(address _owner) constant returns (uint balance);
 4     function transfer(address _to, uint _value) returns (bool success);
 5     function transferFrom(address _from, address _to, uint _value) returns (bool success);
 6     function approve(address _spender, uint _value) returns (bool success);
 7     function allowance(address _owner, address _spender) constant returns (uint remaining);
 8     event Transfer(address indexed _from, address indexed _to, uint _value);
 9     event Approval(address indexed _owner, address indexed _spender, uint _value);
10 }

ERC20 token standard makes DApps, wallets, and exchanges easier to handle tokens issued on Ethereum.

Are you ready?

Let's see the code!!

3. Learn with BAT's contract

BAT's smart contract

You can see the source code here

Just 175 lines!!

Solidity / SafeMath

pragma solidity ^0.4.10;

/* taking ideas from FirstBlood token */
contract SafeMath {

    /* function assert(bool assertion) internal { */
    /*   if (!assertion) { */
    /*     throw; */
    /*   } */
    /* }      // assert no longer needed once solidity is on 0.4.10 */

    function safeAdd(uint256 x, uint256 y) internal returns(uint256) {
      uint256 z = x + y;
      assert((z >= x) && (z >= y));
      return z;
    }

A programming language to write smart contract

  • Library functions to do arithmetic operations "securely"
  • Smart Contract cannot be modified once it has been deployed
  • OpenZeppelin library provides several secure functions

Abstract Contract / Event / Inheritence

contract Token {
    uint256 public totalSupply;
    function balanceOf(address _owner) constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
    function approve(address _spender, uint256 _value) returns (bool success);
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}


/*  ERC 20 token */
contract StandardToken is Token {

    function transfer(address _to, uint256 _value) returns (bool success) {
        ...
    }

Abstract Contract: a contract lacks implementations

 

An ERC20 compatible token needs to implement the ERC20 interfaces

Event: a kind of log. Useful for event driven processing too. (e.g. notify someone when a transfer made)

Function

function transfer(address _to, uint256 _value) returns (bool success) {
  if (balances[msg.sender] >= _value && _value > 0) {
    balances[msg.sender] -= _value;
    balances[_to] += _value;
    Transfer(msg.sender, _to, _value);
    return true;
  } else {
    return false;
  }
}

...

function balanceOf(address _owner) constant returns (uint256 balance) {
  return balances[_owner];
}

...

mapping (address => uint256) balances;

Executable function, a function without `constant` qualifier,  can write data on a smart contract but requires "gas"(Ether) to run  

Callable function, a function with `constant` qualifier, can read data from storages on a smart contract and it does not require "gas"(Ether) to run

Make an event

`mapping` is a kind of HashMap. This is a storage  persisted on the contract

Constant

contract BAToken is StandardToken, SafeMath {

    // metadata
    string public constant name = "Basic Attention Token";
    string public constant symbol = "BAT";
    uint256 public constant decimals = 18;
    string public version = "1.0";

    // contracts
    address public ethFundDeposit;  // deposit address for ETH for Brave International
    address public batFundDeposit;  // deposit address for Brave International use and BAT User Fund

    // crowdsale parameters
    bool public isFinalized;        // switched to true in operational state
    uint256 public fundingStartBlock;
    uint256 public fundingEndBlock;
    uint256 public constant batFund = 500 * (10**6) * 10**decimals;   // 500m BAT reserved for Brave Intl use
    uint256 public constant tokenExchangeRate = 6400; // 6400 BAT tokens per 1 ETH
    uint256 public constant tokenCreationCap =  1500 * (10**6) * 10**decimals;
    uint256 public constant tokenCreationMin =  675 * (10**6) * 10**decimals;

Metadata are used by external services like Etherscan

Money Flow

Investors

This smart contract

Brave's fund

Create Tokens

/// @dev Accepts ether and creates new BAT tokens.
function createTokens() payable external {
  if (isFinalized) throw;
  if (block.number < fundingStartBlock) throw;
  if (block.number > fundingEndBlock) throw;
  if (msg.value == 0) throw;

  // check that we're not over totals
  uint256 tokens = safeMult(msg.value, tokenExchangeRate);
  uint256 checkedSupply = safeAdd(totalSupply, tokens);

  // return money if something goes wrong
  if (tokenCreationCap < checkedSupply) throw;  // odd fractions won't be found

  totalSupply = checkedSupply;
  balances[msg.sender] += tokens;  // safeAdd not needed; bad semantics to use here
  CreateBAT(msg.sender, tokens);  // logs token creation
}

`payable`: accepts Ether

`external`: executable or callable from outside of the contract

Money Flow

Investors

This smart contract

Brave's fund

Issue new BAT tokens and allocate them to the sender(investor)'s address

Finalize

/// @dev Ends the funding period and sends the ETH home
function finalize() external {
  if (isFinalized) throw;
  if (msg.sender != ethFundDeposit) throw; // locks finalize to the ultimate ETH owner
  if(totalSupply < tokenCreationMin) throw;      // have to sell minimum to move to operational
  if(block.number <= fundingEndBlock && totalSupply != tokenCreationCap) throw;
  // move to operational
  isFinalized = true;
  if(!ethFundDeposit.send(this.balance)) throw;  // send the eth to Brave International
}

/// @dev Allows contributors to recover their ether in the case of a failed funding campaign.
function refund() external {
  ...
}

Money Flow

Investors

This smart contract

Brave's fund

How to deploy Smart Contract on Ethereum

Ethereum Mainnet

Geth (Ethreum Node)

Smart Contract

(run on your machine)

Build & Deploy

Sync to other nodes

How to integrate with Ethereum

Ethereum Mainnet

Geth (Ethreum Node)

Off-chain applications

write data

read data

sync data

by Web3 lib

Conclusion

ICO =

Listing of Cryptocurrency on private exchange(s)

Crowdsale =

Crowdfunding

by Crypto-Currency before ICO

Technologies support Crowdsale/ICO

Ethereum, Ether, Smart Contract, ERC20 Token Standard

Tools and libs to write/deploy smart contract

Solidity, OpenZeppelin, Truffle, Web3, Geth

BAT's Smart Contract

Starbase is a platform to support innovators to do a Crowdsale and ICO

"Risk comes from not knowing what you're doing."

- Warren Buffett

(Understand the mechanism, then invest smart)

Thank you!

CTO of Starbase

Yu Yamanaka

July 18, 2017, at Yahoo! LODGE

Learn Ethereum development with the smart contract gathered $35M in 30 secs

By Yu Yamanaka

Learn Ethereum development with the smart contract gathered $35M in 30 secs

  • 2,640