22
Development Tools & Technologies in Ethereum Comps Co., Ltd. & Pte. Ltd. CEO Y. Nishimura 2017.11.15 Blockchain EXE [#6]

EXE #6:Development Tools & Technologies in Ethereum

Embed Size (px)

Citation preview

Page 1: EXE #6:Development Tools & Technologies in Ethereum

Development Tools

& Technologies in Ethereum

Comps Co., Ltd. & Pte. Ltd. CEO

Y. Nishimura 2017.11.15

Blockchain EXE [#6]

Page 2: EXE #6:Development Tools & Technologies in Ethereum

顧客が期待するモノ

Ethereum Network

Smart Contract

Web App (UI)

Mobile App

HTTP

deploy contract

call function

send transaction

HTTP

Page 3: EXE #6:Development Tools & Technologies in Ethereum

最初に与えられるモノ

Ethereum Network

Geth Console

deploy/call

send transaction

8

そんな装備で大丈夫か?

E ひのきのぼうE 布の服

そうび

Page 4: EXE #6:Development Tools & Technologies in Ethereum

Tools & Technologies

• Geth

• Parity

• Testrpc

• Web3.js

• Browser-solidity

• Etherscan.io

• Truffle

• BlockApps

• Ether.camp

• Metamask

• MyEtherWallet

• Status.im

• ENS

• IPFS

• Swarm

• Oraclize

• ERC20

• HD Wallet (BIP32)

• Zeppelin

Page 5: EXE #6:Development Tools & Technologies in Ethereum

本当に欲しかったモノ

Ethereum Network

Mobile App

Web App (UI)

Parity Browser

Geth Console

Hosted Client

e.g. Infura,

Metamask,

MyEtherWallet,

etcJSON RPC

(web3.js)

Geth/Parity

Page 6: EXE #6:Development Tools & Technologies in Ethereum

Geth

• Ethereum Foundation によるオフィシャル・クライアント

• Go 言語により書かれているため “G”eth

• 下記のコンポーネントからなる:• Client Daemon

“node” とよばれる client 本体。他の node と P2P 通信を行う。

Blockchain データの更新、トランザクションの送信、マイニングを行う。

RPC 通信を行うサーバとしても機能する。

• Geth ConsoleClient Daemon と通信を行うための窓口(コマンドラインツール)

アカウントの作成、トランザクションの署名・送信を指示できる。

Geth Console Client Daemon

(node)

Page 7: EXE #6:Development Tools & Technologies in Ethereum

Parity

• Parity Inc. による Ethereum クライアント

• Rust 言語により書かれている

• Yellowpaper に従っているため、Geth とも通信できる

• Geth よりも “軽い” と言われている

• マルチシグウォレットのバグにより• 7月20日に34億円相当が盗まれた

• 11月7日に316億円相当が凍結された

※救済措置 EIP-156 を発動することにより、凍結された資金を取り戻すことができる。要ハードフォーク。今回は Tools & Technologies の話題なので深く突っ込まない。次のハードフォーク Metropolis Pt.2 での実装の可能性あり。

Page 8: EXE #6:Development Tools & Technologies in Ethereum

Testrpc

• Ethereum ネットワークおよびクライアントのシミュレータ

• 実際に PoWすることなく、node の挙動をシミュレートする

• でインストール$ npm install ethereumjs-testrpc

13

Page 9: EXE #6:Development Tools & Technologies in Ethereum

Browser-solidity

• Web ブラウザ上で動作する Solidity 用 IDE(旧 Remix)

• Solidity のコーディング、コンパイル、デプロイが可能

• デプロイ後、コントラクト上の関数呼び出しも可能

• Geth コンソールから行うよりも遥かに開発しやすい

• geth 1.6 以降、Geth コンソールからのコンパイルができなくなったため、browser-solidity の恩恵は大きい

最近 UI が変わった…

Page 10: EXE #6:Development Tools & Technologies in Ethereum

Etherscan.io

• Ethereum のアドレスやトランザクション情報を確認するためのエクスプローラ

• コントラクトに向けて送信したトランザクションの状況確認などのデバッグ用に使う

• コントラクトのソースコードを Verify & Publish することが可能

コントラクトの Solidity コードを登録

実際にデプロイされたバイトコードと一致していれば “Verified” が付く

Page 11: EXE #6:Development Tools & Technologies in Ethereum

Web3.js

• Client と RPC 通信を行うための Javascriptライブラリ

• Javascriptで書かれているためWeb アプリ内で使用可

• でインストール

Geth Client

(node)Web App (UI)

web3.js

※ iOSや Android アプリ内でも React Native 経由で使用できることを確認済み

$ npm install web3

Page 12: EXE #6:Development Tools & Technologies in Ethereum

Metamask

• Client と RPC 通信を行うための Chrome Extension

• web3.js がWeb ページに inject される

• 接続先の node は Metamask 社がホスティングしている

• Wallet としての機能も備えており、Ether の送信や ERC20

トークンの送信も行える

Geth Client

(node)Web App

with MetamaskMetamask社が

ホスティングしている

Dapp 内でトランザクションの送信が行われるタイミングで確認ダイアログが開く

17

Page 13: EXE #6:Development Tools & Technologies in Ethereum

MyEtherWallet

• Web ブラウザ上で動作する Ethereum ウォレット

• Ether だけでなく ERC20 トークンも扱える

• github上のモノをローカルで動かすのが安全

• https://www.myetherwallet.com/を使ってもよい

• コントラクトの関数を実行することも可能

ABI を入力する必要がある

定義された関数を選択可能

18

Page 14: EXE #6:Development Tools & Technologies in Ethereum

ENS

• Ethereum Name Service

• Ethereum の世界における DNS

• アドレスに blockchainexe.eth のような別名を紐付けられる

• 早いもの勝ち+オークション形式(寄付)

• 6億円の価値が付いたドメインも…

Page 15: EXE #6:Development Tools & Technologies in Ethereum

IPFS

• Interplanetary File System

• P2P 分散型ファイルシステム

• コントラクト内に保持できない大きめなデータの格納

• Dapp のホスティングが真骨頂

Web App (UI)

Hosted Ethereum node

Hosted IPFS node

Ethereum Network

IPFS Network

Dapp

Page 16: EXE #6:Development Tools & Technologies in Ethereum

Swarm

• P2P 分散型ファイルシステム(IPFS 同様)

• コントラクト内に保持できない大きめなデータの格納

• コントラクトの ABI を Swarm 上に格納できる

Ethereum Network

Swarm Networksolc

Solidity

Source Code

Compile

Deploy

Upload

Swarm hash

Swarm hash

Pointing to

metadata

metadata

metadata

※この手法は一般的にあまり知られていない

$ solc --metadata

Page 17: EXE #6:Development Tools & Technologies in Ethereum

Oraclize

• コントラクト内から外部のデータは参照できない(箱庭)

• Oraclize コントラクトに外部データの取得を依頼

• Oraclize が結果を取得し callback してくれる

Ethereum Network

Web API

Blockchain API

WolframAlpha

IPFS

実行外部情報の取得を依頼

callback で実行結果を通知

Internet

スマートコントラクト

実行結果

Oraclize

Page 18: EXE #6:Development Tools & Technologies in Ethereum

ERC20

• 通貨の持つべき機能を定義した規格• 総発行量・各自の保有量が確認できること

• 保有者間で保有量を限度として交換(送受信)ができること

contract ERC20 {

function totalSupply() constant returns (uint totalSupply);

function balanceOf(address _owner) constant returns (uint balance);

function transfer(address _to, uint _value) returns (bool success);

function transferFrom(address _from, address _to, uint _value) returns (bool success);

function approve(address _spender, uint _value) returns (bool success);

function allowance(address _owner, address _spender) constant returns (uint remaining);

event Transfer(address indexed _from, address indexed _to, uint _value);

event Approval(address indexed _owner, address indexed _spender, uint _value);

}

https://theethereum.wiki/w/index.php/ERC20_Token_Standard23

Page 19: EXE #6:Development Tools & Technologies in Ethereum

HD Wallet (BIP32)

• Hierarchical Deterministic Wallet

• BIP32/44 で定義されている実装

• 単語集合を seed としツリー状に key を生成

• 決定的に無数の address を発行することが可能

phoenix suffer generate grand

mask mark cat plum rubber

wallet phone tissue envelope

24

Page 20: EXE #6:Development Tools & Technologies in Ethereum

Zeppelin

• OpenZeppelin/zeppelin-solidity

• セキュアなコントラクトを書くための Library

• 主要な ICO 案件がこぞって使っている• Omise Go, Augur, Storj, ALIS, etc

• 新しいトークンコントラクトやトークンセールコントラクトを作る場合には使わない手はない

25

Page 21: EXE #6:Development Tools & Technologies in Ethereum

Ethereum Ecosystem

Ethereum NetworkMobile App

Web App (UI)

Parity Browser

Geth Console

Hosted Client

e.g. Infura,

Metamask,

MyEtherWallet,

etc

JSON RPC

(web3.js)

Geth/Parity

MyEtherWallet

アドレス解決 ABI 参照

Oraclize

Dapp 格納 外部参照

Page 22: EXE #6:Development Tools & Technologies in Ethereum

Tachyon Wallet(開発中)

HD Wallet 対応 QRコードで新規トークン追加 アイコンの IPFS 取得

• React Native on iOS with web3.js

• Supports Mainnet, Ropsten, Rinkby, Kovan Network

• ERC20, HD Wallet, Flash Payment™