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
チームスマコン・ブロックチェーン勉強会資料2回
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mogiken
January 16, 2018
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
チームスマコン・ブロックチェーン勉強会資料2回
ETH送金、ERC20解説です。
mogiken
January 16, 2018
More Decks by mogiken
See All by mogiken
Ethereumをさわって実感するブロックチェーンハンズオン
mogiken
0
260
自己紹介LT
mogiken
0
570
JavaScript初心者のためのNode.jsで学ぶドローン制御プログラミング
mogiken
0
350
チームスマコン・ブロックチェーン勉強会資料3回
mogiken
0
420
チームスマコン・ブロックチェーン勉強会資料1回
mogiken
0
440
Ethereumをさわって実感するブロックチェーンハンズオン
mogiken
1
380
自己紹介
mogiken
0
260
Other Decks in Technology
See All in Technology
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
5k
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
390
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.7k
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
550
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
270
知らん間に、回ってる
ming_ayami
0
710
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
9
4k
Making sense of Google’s agentic dev tools
glaforge
1
280
発表と総括 / Presentations and Summary
ks91
PRO
0
140
はじめてのWDM
miyukichi_ospf
1
150
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
290
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
390
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Designing for humans not robots
tammielis
254
26k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Typedesign – Prime Four
hannesfritz
42
3.1k
Building AI with AI
inesmontani
PRO
1
1.1k
For a Future-Friendly Web
brad_frost
183
10k
Transcript
チーム・スマコン ~第2回 ~ Ether送金・独自トークンの作成 Copyright © 2018 Takemichi Hirai. All
rights reserved.
スケジュール ・第1回 12/20(水) 開発環境・スマートコントラクト入門 ・第2回 1/16 (火) Ether送金・独自トークン作成 ・第3回 1/30
(火) MetaMask(ウォレット)の使い方になれる MetaMask からトークンを送信する ・第4回 2/13 (火) ICOを実装(Truffle・Zeppelinを使用予定) 2月にはICOのソースコードを理解して、 書けるようになることを目指す!!
本日の目標 ① Etherを特定のアドレスに送金する。 ② 独自トークン(ERC20)を作成する。 ③ ERC20・ERC223・ERC721の違いを知る。
(前回の復習)用語解説 ・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を手に入れる行為のことです。
(前回の復習)Remix について Remixを使えば、スマートコントラクトの作成、デバック、デプロイまでを簡単に 操作できます。スマートコントラクト作成には広く一般的に使用されています。 https://remix.ethereum.org/#optimize=false&version=soljson-v0.4.19+commit.c4cbbb05.js 【Remix】
(前回の復習)Remix の画面構成 コーディングエリア デバックエリア ファイル操作 エリア コンパイル・ デプロイ エリア
・Create New File ボタンを押す ・ファイル名を入力してOKを押す。 新しいファイルが作成される。 Create New File Etherを特定のアドレスに送金する。
コーディングエリアに下記のソースコードを入力してください。 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); } } ソースコード入力
① Runを選択 ② EnvironmentをJavaScript VMに設定 ③ Gas limitを設定 (デフォルトは3000000) ④
Createボタンを押してデプロイをする。 ⑤ デプロイ後、下側に結果が出る。 スマートコントラクトをデプロイ ① ② ③ ④ ⑤
① コントラクト側に10Etherを送金します。 (Valueに10を入力、単位をether選択) ② fallbackボタンを押すことにより、Accountで 指定しているアドレスからコントラクトのアドレスへ Etherの送金が行われます。 スマートコントラクト側へEtherを送金 ① ②
① コピーボタンを押してコントラクトのアドレスを 取得します。 ② getBalanceボタン横の空欄にコントラクトアドレスを 貼り付けます。 この時、ダブルクォーテーション(“ “)でアドレスを 囲んでください。 ③
getBalanceボタンを押すと④に残高が表示されます。 単位はWeiです。 Etherの残高確認 ① ② ③ ④
① 送金先のアドレスを選択し、コピーボタンを押して コピーします。 ② transferボタン横の空欄に送金先のアドレスを貼り付 けて、送金する金額を入力します。単位はWeiです。 入力方法:【 ” 送金先アドレス ”
, 送金する金額 】 ③ transferボタンを押します。 Etherを指定のアドレスへ送金 ① ② ③ getBalanceボタンを押して、残高が移動していることを 確認してください。
仮想通貨とトークンについて ・仮想通貨とはBitcoinやEthereumのようにマイニングするタイプのもの を言います。(カレンシータイプ) ・トークンとはEthereumなどのブロックチェーン技術を使用して、 発行者が発行枚数などを決めることができるタイプのものを言います。 (アセットタイプ) ・ICOでは発行者がトークンを発行して、それを購入者に付与します。 また、そのトークンが取引所に上場すると売買が可能となります。
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) 承認した際のログを追う
下記アドレスからソースコードをダウンロードし、Remix上に貼り付けてください。 ソースコード入力 ソースコードの場所: https://drive.google.com/open?id=1OJB9SZq--rlbadcn3TRr8TEjCXfk4YBm
トークン作成と各関数の実行フロー 下記事項を決定 総供給量 トークンネーム 単位 transfer トークンを送信 他人のトークンを引き出す(ICOなどで使用:他人=スマコン) approve(引き出し可能 な額を承認)
transferFrom(他人か ら引き出す) burn トークンをバーン approve バーンの限度額指定 burnFrom balanceOf 残高確認 allowance 承認された額の残高確認 (注) ソースコードにはapproveAndCall関数が ありますが今回は使用しません。 tokenRecipientも。 この関数はapproveとtransferFromを1つの 関数で実行するものです。 ERC223では使用されていません。 (ERC223については別頁を参照) Zeppelinでも削除されている。
① Runを選択 ② EnvironmentをJavaScript VMに設定 ③ Gas limitを設定 (デフォルトは3000000) ④
供給量、トークンネーム、単位を入力。 Createボタンを押す。 例:(10000,”SMACON”,”SMA”) ⑤ デプロイ後、下側に結果が出る。 独自トークン作成 ① ② ③ ④ ⑤
① totalSupplyボタンを押すとコインの総量が表示されます。 ② symbolボタンを押すと単位が表示されます。 ③ nameボタンを押すとコイン名が表示されます。 ④ decimalsボタンを押すと小数点以下の桁数が表示されます。 初期設定を確認する ①
② ③ ④
①送金元アドレスを指定します。 ②送金先アドレス、送るトークン量を指定します。 例:(”アドレス” ,100) 特定のアドレスにトークンを送信 ② ① (重要) ソースコード内にある「internal」はコントラクト内部からのみ実行できるこ とを意味しています。
【送金後のデバック画面】 function _transfer(address _from, address _to, uint _value) internal
①balanceOfは指定したアドレスのトークン残高が 表示されます。 残高を確認する ①
①送金元のアドレスを指定します。 ②送金先のアドレスに引き出し可能な限度額を指定し、 approveボタンを押します。※実行したアドレスが引き出しを許可したこ とになる。 例:(”送金先アドレス” ,1000) ③送金先のアドレスを指定します。 ③送金元アドレス、送金先アドレス、送るトークン量を指 定し、transferFromボタンを押します。※許可した金額以内だけ引き出せ ます。※トランザクションを投げるアカウントと送金元アドレスが一致しな
いとエラーになります。 例:(“送金元アドレス”,”送金先アドレス” ,100) 送金先が送金元のトークンを引き出す ② ① ④ エスクロ(第三者)について。ICOなど ③ 【第三者(コントラクト)】 発行体 投資家 ①Ether ①トークン ②トークン ②Ether ①発行体がエスクロに対してトークンを、 投資家がエスクロに対してEtherを支払う。 ②条件を満たすと発行体はEtherを、投資家は トークンをエスクロから引き出せることが できる。 この時引き出す量がオーバーしないように 予め引き出せる量をapproveで設定しておく。
① allowanceはapproveで承認された額から残り使用可能 な額が表示されます。 例:(”承認者アドレス” , ”許可を受けたアドレス”) 残高を確認する ①
① バーンするアドレスを指定します。 ② バーンするトークン量を指定、burnボタンを押します。 例:(1000) ③ totalSupply、balanceOfボタンを押して、残高が減少 していることを確認します。 バーン(トークン破棄)をする ①
③ ② ③
①バーンするアドレスを指定します。 ②バーンするアドレスにバーン可能な限度額を指定し、 approveボタンを押します。 例:(”バーンするアドレス” ,1000) ③バーンするアドレス、バーンするトークン量を指定し、 burnFromボタンを押します。 例:(“バーンするアドレス”,1000) ④ totalSupply、balanceOfボタンを押して、残高が減少
していることを確認します。 バーン可能な限度額を設定してバーンする ② ④ ① ③ ④
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つあるのが特徴。
ERC721について ERC721は、ERC20との後方互換性を保ちつつ、 NFT(Non-Fungible Token、代替不可 能なトークン)という特徴があります。 ERC20では、通貨のような代替可能物をトークン化していました。しかしERC721では、 各トークンが所有者名などのメタデータを含むことができるようになり、代替不可能な ものをトークンとして扱うことができるようになりました。 ERC721の活用事例として、「Crypto Kitties(クリプトキティーズ)」があります。こ
れは、仮想空間上に自分だけのオリジナルの猫を育成するゲームです。 ERC721
次回予告 ・MetaMask(ウォレット)の使い方になれる ・MetaMask からトークンを送信する を予定しています。 日程は1月30日(火)を予定しています。 決まり次第Peatixでご案内します。