Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2018.06 イーサリアム勉強会

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for kotohata kotohata
June 16, 2018
66

2018.06 イーサリアム勉強会

Avatar for kotohata

kotohata

June 16, 2018
Tweet

Transcript

  1. ©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を書き換える処理で トランザクションが発⽣
  2. ©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的な機能 あり。
  3. ©atcoin コントラクトのデプロイ 9 作成したコントラクトはコントラクトを作るトランザクションをイーサリアムのネットワークに送ってデプロ イする。 localhost Mainnet ROPSTEN KOVAN ネットワークを選んで

    デプロイ。 本番ネットワーク。市場に流通してい るETHがやりとりされる。 開発⽤ネットワーク1。ETHをやりと りする点は同じだがこのETHはタダで もらえる。 開発⽤ネットワーク2。
  4. ©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; } }
  5. ©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); } }
  6. ©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
  7. ©atcoin oxのフローについて 16 ①イーサリアムブロックチェーン上のMakerのアカウントが持 つトークンAに対し、0xコントラクトがアクセスできるように Makerが承認する ②Makerは⾃⾝が持つトークンAをトークンBに交換するための 取引を注⽂する。このとき、Makerの秘密鍵で署名が⾏われる ③Makerはこの取引注⽂をネットワークにブロードキャストす る

    ④Takerはその取引注⽂を受ける ⑤イーサリアムブロックチェーン上のTakerのアカウントが持 つトークンBに対し、0xがアクセスできるようにTakerが承認す る ⑥TakerはMakerの署名を0xに提⽰する ⑦0xがトークンAとトークンBの取引決済を⾏う
  8. ©atcoin In my opinion 19 • イーサリアムはクラウドコンピュータを直接的に代替するものではない。 • トラストレスに価値の媒介ができること、ERCのような規格やプロトコル(コントラクト) が層状に重なり、その上にアプリケーションが作られていくことが⾰新的。

    • ⼈にお⾦を預けて、特定のコントラクトのみ利⽤許可を出すなどもできる → 担保、エス クロー、信託などと相性がいい。 • オープンソースプロジェクトでICOしてチームのモチベーションを作るのは新しいビジネ スモデル。 • ただしDEXやウォレットをコンシューマが直接扱うのは厳しい。価値の表現、プロトコル レイヤーが分散化して、その上のアプリケーションが中央集権的に運営されているビジョ ンが近い。 • 現在はゲームや分散型ストレージ、SNSなどをブロックチェーン化するプロジェクトが多 いが、本質的には⾦融や不動産、シェアリングエコノミーで使われると予想。