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

チームスマコン・ブロックチェーン勉強会資料2回

mogiken
January 16, 2018

 チームスマコン・ブロックチェーン勉強会資料2回

ETH送金、ERC20解説です。

mogiken

January 16, 2018
Tweet

More Decks by mogiken

Other Decks in Technology

Transcript

  1. スケジュール ・第1回 12/20(水) 開発環境・スマートコントラクト入門 ・第2回 1/16 (火) Ether送金・独自トークン作成 ・第3回 1/30

    (火) MetaMask(ウォレット)の使い方になれる MetaMask からトークンを送信する ・第4回 2/13 (火) ICOを実装(Truffle・Zeppelinを使用予定) 2月にはICOのソースコードを理解して、 書けるようになることを目指す!!
  2. (前回の復習)用語解説 ・Ethereum Ethereumはスイスの非営利団体(Ethereum Fundation)によって開発されているオープンソースです。スマートコントラクト の多くはこのEthereumを使用して開発されています。 ・Coinbase(Etherbase) マイニングが成功したときに報酬を受け取るアカウントのことをCoinbaseと呼びます。なお、EthereumではEtherbaseと呼び ます。 ・Account =

    Address Ethereumには2種類のアカウントが存在します。一つはユーザーに付与されるアカウント、もう一つはスマートコントラクト に付与されるアカウントです。 ・Ether Ethereumの仮想通貨をEtherと呼びます。 ・Gas スマートコントラクトを実行する際はEtherを手数料として支払う必要があります。その手数料のことをGasと呼びます。 ・Gas Limit 支払ってもよいGasの最大値。Gasの高い順からマイニングされるため、Gas Limitが低いとマイニングされない可能性がある。 ・Transaction 個々の取引のことをTransactionと呼びます。Transactionはマイニングされることにより処理されます。 ・Mining 採掘(マイニング)とは新たなブロックを生成し、その報酬としてBitcoinやEtherを手に入れる行為のことです。
  3. コーディングエリアに下記のソースコードを入力してください。 pragma solidity ^0.4.16; contract testContract { // 無名関数としてpayableを指定することでEtherの受け取りが可能 function

    () payable public {} function getBalance(address _target) public constant returns (uint) { // 残高を返します return _target.balance; } function transfer(address _to, uint _amount) public { // 失敗すると例外が発生します _to.transfer(_amount); } } ソースコード入力
  4. ① Runを選択 ② EnvironmentをJavaScript VMに設定 ③ Gas limitを設定 (デフォルトは3000000) ④

    Createボタンを押してデプロイをする。 ⑤ デプロイ後、下側に結果が出る。 スマートコントラクトをデプロイ ① ② ③ ④ ⑤
  5. ① 送金先のアドレスを選択し、コピーボタンを押して コピーします。 ② transferボタン横の空欄に送金先のアドレスを貼り付 けて、送金する金額を入力します。単位はWeiです。 入力方法:【 ” 送金先アドレス ”

    , 送金する金額 】 ③ transferボタンを押します。 Etherを指定のアドレスへ送金 ① ② ③ getBalanceボタンを押して、残高が移動していることを 確認してください。
  6. ERC20について ERC20 というのは仮想通貨(以下トークンと呼びます)の仕様のことです。 ERC とは Ethereum Request for Comments の略で

    Ethereum に関連する技術仕様の 提案書のことです。 この提案が可決されると EIP(Ethereum Improvement Proposal) に追加され、正式な 仕様となります。 ERC20 【ERC20の仕様】 参考:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md 関数 意味 function name() constant returns (string name)                       トークン名を指定する function symbol() constant returns (string symbol) 単位を指定する function decimals() constant returns (uint8 decimals) 小数点以下を指定する function totalSupply() constant returns (uint256 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) 承認した際のログを追う
  7. トークン作成と各関数の実行フロー 下記事項を決定 総供給量 トークンネーム 単位 transfer トークンを送信 他人のトークンを引き出す(ICOなどで使用:他人=スマコン) approve(引き出し可能 な額を承認)

    transferFrom(他人か ら引き出す) burn トークンをバーン approve バーンの限度額指定 burnFrom balanceOf 残高確認 allowance 承認された額の残高確認 (注) ソースコードにはapproveAndCall関数が ありますが今回は使用しません。 tokenRecipientも。 この関数はapproveとtransferFromを1つの 関数で実行するものです。 ERC223では使用されていません。 (ERC223については別頁を参照) Zeppelinでも削除されている。
  8. ① Runを選択 ② EnvironmentをJavaScript VMに設定 ③ Gas limitを設定 (デフォルトは3000000) ④

    供給量、トークンネーム、単位を入力。 Createボタンを押す。 例:(10000,”SMACON”,”SMA”) ⑤ デプロイ後、下側に結果が出る。 独自トークン作成 ① ② ③ ④ ⑤
  9. ①送金元のアドレスを指定します。 ②送金先のアドレスに引き出し可能な限度額を指定し、 approveボタンを押します。※実行したアドレスが引き出しを許可したこ とになる。 例:(”送金先アドレス” ,1000) ③送金先のアドレスを指定します。 ③送金元アドレス、送金先アドレス、送るトークン量を指 定し、transferFromボタンを押します。※許可した金額以内だけ引き出せ ます。※トランザクションを投げるアカウントと送金元アドレスが一致しな

    いとエラーになります。 例:(“送金元アドレス”,”送金先アドレス” ,100) 送金先が送金元のトークンを引き出す ② ① ④ エスクロ(第三者)について。ICOなど ③ 【第三者(コントラクト)】 発行体 投資家 ①Ether ①トークン ②トークン ②Ether ①発行体がエスクロに対してトークンを、 投資家がエスクロに対してEtherを支払う。 ②条件を満たすと発行体はEtherを、投資家は トークンをエスクロから引き出せることが できる。 この時引き出す量がオーバーしないように 予め引き出せる量をapproveで設定しておく。
  10. ERC223について ERC20は、ユーザのアドレスではなく、コントラクトアドレスにトークンを誤って送っ てしまった場合でも、正常な動作として送れてしまうという問題がありました。 その問題を解消したのがERC223です。 しかし、現状ERC223の情報は少なく、ERC20を使用してICOをしているケースがほと んどです。 ERC223 【ERC223の仕様】 function name()

    constant returns (string name) function symbol() constant returns (string symbol) function decimals() constant returns (uint8 decimals) function totalSupply() constant returns (uint256 totalSupply) function balanceOf(address _owner) constant returns (uint256 balance) function transfer(address _to, uint256 _value) returns (bool) function transfer(address _to, uint _value, bytes _data) returns (bool) function tokenFallback(address _from, uint _value, bytes _data) event Transfer(address indexed _from, address indexed _to, uint256 indexed _value, bytes _data) 参考:https://github.com/Dexaran/ERC223-token-standard ※ERC20と比較して「approve、allowance、transferFrom」が削除、 「tokenFallback」が追加、「transfer」が2つあるのが特徴。