Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2018.06 イーサリアム勉強会
Search
kotohata
June 16, 2018
74
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2018.06 イーサリアム勉強会
kotohata
June 16, 2018
More Decks by kotohata
See All by kotohata
金融 × ブロックチェーンプロジェクトの 現状・課題・将来
tkot
1
660
SecurityTokenAdvisors
tkot
1
370
20180116-bitcoin
tkot
0
190
tdd on rails
tkot
1
130
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
Mobile First: as difficult as doing things right
swwweet
225
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
How GitHub (no longer) Works
holman
316
150k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
930
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Ethics towards AI in product and experience design
skipperchong
2
340
Designing for humans not robots
tammielis
254
26k
Speed Design
sergeychernyshev
33
2k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
Transcript
イーサリアム勉強会 1 2018.06
©atcoin 本⽇の⽬的 2 イーサリアムとはなにか、なぜ重要か、本質的なユースケースは何か、実際の開発はどういうものか。 キーワード Solidity, Mainnet/Testnet(ROPSTEN), gas, ERC, 0x,
Fat Protocol
©atcoin イーサリアム 3 世界の状態を1つのステートと時系列のトランザクションで記録した、分散型のコンピュータネットワー ク。 State1 State2 State3 transaction transaction
©atcoin ブロック⽣成による合意形成 4 そのままではどのトランザクションをネットワーク全体で採⽤/不採⽤とするか統⼀できない ex. ⼆重⽀払い tx tx tx ブロック1
ブロック2 ブロック⽣成に膨⼤な 計算コストを課す ⼀定のブロック数で承 認されたものとみなす
©atcoin トランザクション 5 ユーザーがSolidityで書かれたスマートコントラクトの関数を叩くと発⽣。 ただしreadonlyな関数ではトランザクションは発⽣しない。 contract ERC20 { mapping(address =>
uint256) public balances; function transfer(address _to, uint256 _vaule) public returns (bool) { require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender] - _value; balances[_to] = balances[_to] + _value; return true; } } contractがstateを持っている stateを書き換える処理で トランザクションが発⽣
©atcoin イーサリアムのスペック 6 全ブロックチェーンのデータサイズは加速度的に増加、2018.5 ⽉時点で1TBを超えている。 トランザクションごとにコンピュータ資源の利⽤料としてgas が必要。 5~10TXpsが限界。トランザクションが殺到すると処理が遅延 する。
開発⾔語 Solidityについて 7
©atcoin ⾔語仕様 8 コントラクトというシングルトンオブジェクトが状態と⼿続きをセットに持っている。 コントラクトAからコントラクトBの関数を呼び出すことはできるが、コントラクトBの状態を直接書き換える ことはできない。 import “....”; contract ERC20
{ mapping(address => uint256) public balances; uint256 totalSupply_; string public name; string public decimals; function transfer(...) { } function getBalanceOf(...) { } } データ型はuint, address, bool, string, byte, array, mapping(keyvalue), Struct が存在。 mappingはiterableではなくkey⼀覧を 取得できない。 浮動⼩数点数がないので、最⼩単位を細 かくして表⽰側で桁数を削る。 importによる呼び出し、mixin的な機能 あり。
©atcoin コントラクトのデプロイ 9 作成したコントラクトはコントラクトを作るトランザクションをイーサリアムのネットワークに送ってデプロ イする。 localhost Mainnet ROPSTEN KOVAN ネットワークを選んで
デプロイ。 本番ネットワーク。市場に流通してい るETHがやりとりされる。 開発⽤ネットワーク1。ETHをやりと りする点は同じだがこのETHはタダで もらえる。 開発⽤ネットワーク2。
©atcoin コントラクトの更新 10 ⼀度デプロイしたコントラクトの実装を書き換えて更新することはできない。 コントラクトの作者のアドレスは記録されるが、作者限定の機能などは標準には存在しない。 contract CentralizedToken { address public
owner; mapping(address => uint256) public balances; constructor() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function updateBalance(address _target, uint256 _value) public onlyOwner { balances[_target] = _value; } }
©atcoin 代表的コントラクト規格・・・ERC20 11 イーサリアム上でトークンを表現するのに使⽤。 独⾃ブロックチェーンを作らずイーサリアムで⼿軽に価値の保存ができるので、ICOで広く利⽤されている。 ex) OmiseGO, Bancor, KyberNetwork, MakerDAO
https://www.bancor.network/discover https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
©atcoin コントラクトから別のコントラクトを利⽤する 12 import { ERC20 } from “....”; contract
BankContract { mapping(address => mapping(address => uint256)) public tokenBalances; function deposit(address _token, uint256 _value) public { ERC20 token = ERC20(_token); token.transferFrom(msg.sender, address(this), _value); //※ ここは厳密には動かないかも。 tokenBalances[_token][msg.sender] = tokenBalances[_token][msg.sender].add(_value); } function exit(address _token) public { // 条件を満たしたら引き出せる処理 require(tokenBalances[_token][msg.sender] > 0); ERC20 token = ERC20(_token); uint256 volume = tokenBalances[_token][msg.sender]; tokenBalances[_token][msg.sender] = 0; token.transfer(msg.sender, volume); } }
©atcoin 実際にどういうふうに利⽤する? 13 ブラウザ import abi from ʼ./path/to/BankAccount.abiʼ; onClick =
async () => { const address = ʻ0xasdfasdfasdfʼ; const tokenAddress = document.querySelector(ʻ#tokenʼ).value; const value = document.querySelector(ʻ#inputʼ).value; const bankContract =window.web3.eth.contract(abi).at(address); const result = await bankContract.deposit(tokenAddress, value); } metamask
0x, Fat Protocol 14
©atcoin 0x とは 15 ERC20トークンを交換するためのコントラクト。 AさんがトークンXをトークンYと交換したいとき、注⽂情報を出した上でトークンXを移動する認可を0xに 与える。 逆にトークンXが欲しいBさんは、注⽂情報を⾒た上で0xにトレード依頼を出す。 0xは依頼を受け、認可を得ているAさんのトークンをBさんに移動させ、BさんのトークンをAさんに送る。
©atcoin oxのフローについて 16 ①イーサリアムブロックチェーン上のMakerのアカウントが持 つトークンAに対し、0xコントラクトがアクセスできるように Makerが承認する ②Makerは⾃⾝が持つトークンAをトークンBに交換するための 取引を注⽂する。このとき、Makerの秘密鍵で署名が⾏われる ③Makerはこの取引注⽂をネットワークにブロードキャストす る
④Takerはその取引注⽂を受ける ⑤イーサリアムブロックチェーン上のTakerのアカウントが持 つトークンBに対し、0xがアクセスできるようにTakerが承認す る ⑥TakerはMakerの署名を0xに提⽰する ⑦0xがトークンAとトークンBの取引決済を⾏う
©atcoin Ethereum (onchain) 0xの世界観 17 ERC20 ERC721 ERC... 近々対応予定 Orderbook
(offchain) Frontend (offchain)
©atcoin Fat Protocol 18 いままでのインターネットはHTTPプロトコル上にサービスを展開し、データベースを独占することが富の源 泉(Fat Application)。ブロックチェーンのサービスは有⽤なプロトコルを作って開発者に使ってもらうことで、 プロトコル⾃体の価値を伸ばせる Fat Protocol
に。 MakerDAOはステーブルコイン(1DAI=1ドル)の開発チーム。 プロトコルの意思決定を⾏うガバナンストークンMKRをICOしている。
©atcoin In my opinion 19 • イーサリアムはクラウドコンピュータを直接的に代替するものではない。 • トラストレスに価値の媒介ができること、ERCのような規格やプロトコル(コントラクト) が層状に重なり、その上にアプリケーションが作られていくことが⾰新的。
• ⼈にお⾦を預けて、特定のコントラクトのみ利⽤許可を出すなどもできる → 担保、エス クロー、信託などと相性がいい。 • オープンソースプロジェクトでICOしてチームのモチベーションを作るのは新しいビジネ スモデル。 • ただしDEXやウォレットをコンシューマが直接扱うのは厳しい。価値の表現、プロトコル レイヤーが分散化して、その上のアプリケーションが中央集権的に運営されているビジョ ンが近い。 • 現在はゲームや分散型ストレージ、SNSなどをブロックチェーン化するプロジェクトが多 いが、本質的には⾦融や不動産、シェアリングエコノミーで使われると予想。