Upload
blockchainexe
View
968
Download
2
Embed Size (px)
Citation preview
Development Tools
& Technologies in Ethereum
Comps Co., Ltd. & Pte. Ltd. CEO
Y. Nishimura 2017.11.15
Blockchain EXE [#6]
顧客が期待するモノ
Ethereum Network
Smart Contract
Web App (UI)
Mobile App
HTTP
deploy contract
call function
send transaction
HTTP
最初に与えられるモノ
Ethereum Network
Geth Console
deploy/call
send transaction
8
そんな装備で大丈夫か?
E ひのきのぼうE 布の服
そうび
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
本当に欲しかったモノ
Ethereum Network
Mobile App
Web App (UI)
Parity Browser
Geth Console
Hosted Client
e.g. Infura,
Metamask,
MyEtherWallet,
etcJSON RPC
(web3.js)
Geth/Parity
Geth
• Ethereum Foundation によるオフィシャル・クライアント
• Go 言語により書かれているため “G”eth
• 下記のコンポーネントからなる:• Client Daemon
“node” とよばれる client 本体。他の node と P2P 通信を行う。
Blockchain データの更新、トランザクションの送信、マイニングを行う。
RPC 通信を行うサーバとしても機能する。
• Geth ConsoleClient Daemon と通信を行うための窓口(コマンドラインツール)
アカウントの作成、トランザクションの署名・送信を指示できる。
Geth Console Client Daemon
(node)
Parity
• Parity Inc. による Ethereum クライアント
• Rust 言語により書かれている
• Yellowpaper に従っているため、Geth とも通信できる
• Geth よりも “軽い” と言われている
• マルチシグウォレットのバグにより• 7月20日に34億円相当が盗まれた
• 11月7日に316億円相当が凍結された
※救済措置 EIP-156 を発動することにより、凍結された資金を取り戻すことができる。要ハードフォーク。今回は Tools & Technologies の話題なので深く突っ込まない。次のハードフォーク Metropolis Pt.2 での実装の可能性あり。
Testrpc
• Ethereum ネットワークおよびクライアントのシミュレータ
• 実際に PoWすることなく、node の挙動をシミュレートする
• でインストール$ npm install ethereumjs-testrpc
13
Browser-solidity
• Web ブラウザ上で動作する Solidity 用 IDE(旧 Remix)
• Solidity のコーディング、コンパイル、デプロイが可能
• デプロイ後、コントラクト上の関数呼び出しも可能
• Geth コンソールから行うよりも遥かに開発しやすい
• geth 1.6 以降、Geth コンソールからのコンパイルができなくなったため、browser-solidity の恩恵は大きい
最近 UI が変わった…
Etherscan.io
• Ethereum のアドレスやトランザクション情報を確認するためのエクスプローラ
• コントラクトに向けて送信したトランザクションの状況確認などのデバッグ用に使う
• コントラクトのソースコードを Verify & Publish することが可能
コントラクトの Solidity コードを登録
実際にデプロイされたバイトコードと一致していれば “Verified” が付く
Web3.js
• Client と RPC 通信を行うための Javascriptライブラリ
• Javascriptで書かれているためWeb アプリ内で使用可
• でインストール
Geth Client
(node)Web App (UI)
web3.js
※ iOSや Android アプリ内でも React Native 経由で使用できることを確認済み
$ npm install web3
Metamask
• Client と RPC 通信を行うための Chrome Extension
• web3.js がWeb ページに inject される
• 接続先の node は Metamask 社がホスティングしている
• Wallet としての機能も備えており、Ether の送信や ERC20
トークンの送信も行える
Geth Client
(node)Web App
with MetamaskMetamask社が
ホスティングしている
Dapp 内でトランザクションの送信が行われるタイミングで確認ダイアログが開く
17
MyEtherWallet
• Web ブラウザ上で動作する Ethereum ウォレット
• Ether だけでなく ERC20 トークンも扱える
• github上のモノをローカルで動かすのが安全
• https://www.myetherwallet.com/を使ってもよい
• コントラクトの関数を実行することも可能
ABI を入力する必要がある
定義された関数を選択可能
18
ENS
• Ethereum Name Service
• Ethereum の世界における DNS
• アドレスに blockchainexe.eth のような別名を紐付けられる
• 早いもの勝ち+オークション形式(寄付)
• 6億円の価値が付いたドメインも…
IPFS
• Interplanetary File System
• P2P 分散型ファイルシステム
• コントラクト内に保持できない大きめなデータの格納
• Dapp のホスティングが真骨頂
Web App (UI)
Hosted Ethereum node
Hosted IPFS node
Ethereum Network
IPFS Network
Dapp
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
Oraclize
• コントラクト内から外部のデータは参照できない(箱庭)
• Oraclize コントラクトに外部データの取得を依頼
• Oraclize が結果を取得し callback してくれる
Ethereum Network
Web API
Blockchain API
WolframAlpha
IPFS
実行外部情報の取得を依頼
callback で実行結果を通知
Internet
スマートコントラクト
実行結果
Oraclize
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
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
Zeppelin
• OpenZeppelin/zeppelin-solidity
• セキュアなコントラクトを書くための Library
• 主要な ICO 案件がこぞって使っている• Omise Go, Augur, Storj, ALIS, etc
• 新しいトークンコントラクトやトークンセールコントラクトを作る場合には使わない手はない
25
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 格納 外部参照
Tachyon Wallet(開発中)
HD Wallet 対応 QRコードで新規トークン追加 アイコンの IPFS 取得
• React Native on iOS with web3.js
• Supports Mainnet, Ropsten, Rinkby, Kovan Network
• ERC20, HD Wallet, Flash Payment™