MetaMaskとRemixで始めるお手軽トークン発行
# 目次
# この記事で得られるもの
- MetaMaskの使い方
- Remixの使い方
- イーサリアム開発の入門
- Solidityの基礎
- スマートコントラクトの公開方法
# MetaMaskのセットアップ
# MetaMaskとは何か
イーサリアムでイーサやトークンの送金などを行うためのウォレットです.
Ethereum上のアプリ(=Dapps)は通常Google Chromeなどのブラウザからアクセスします.
そのDappsではEthereumのアカウントと送金処理が必要になります.
それを裏で行ってくれるのがMetaMaskです.
RemixでもMetaMaskを使用します.
# MetaMaskのインストール方法
公式ページにアクセスして下さい.
Chrome、FirefoxまたはOpera用があります.
ここではChromeを例に説明します.
「GET CHROME EXTENSION」をクリック.

「ADD TO CHROME」をクリック.

「Add extension」をクリック.

Chromeの右上にキツネマークが追加されます.
キツネマークをクリック.

MetaMaskがまだ開発途中のベータ版であることが表示されます.
「Accept」をクリック.

MetaMaskの利用規約が表示されます.
一番下までスクロールダウンして下さい.
「Accept」が有効になります.

「Accept」をクリック.

パスワードを2箇所に入力して「CREATE」をクリック.

12単語からなる英文が表示されます.
ニーモニックといい、ウォレットの鍵を開けるのに必要な大切なものです.
MetaMaskを再インストールする時にも入力するとウォレットを復元できます.
「SAVE SEED FILE AS FILE」をクリックしてダウンロード.
誰にも見せないように大切に保管して下さい.
誰かに知られることはEtherをあげてしまうことと同じです.

「I’VE COPIED IT SOMEWHERE ELSE」をクリック.

インストール作業は以上で完了です.
# ネットワークの切り替え
イーサリアムには通貨やトークンが売買されているMainnet以外にも多くのネットワークが存在します.
ここではRopstenという開発テスト用ネットワークに切り替えてみます.
現在のネットワーク名の右側にある「▼」をクリック.

ネットワーク一覧が表示されます.
「Ropsten Test Network」をクリック.

これで切り替えは完了です.
# 開発用通貨の入手
MainnetのEtherは取引所などで本当のお金と引き換えに買う必要があります.
一方で開発テスト用Etherは無料で配られています.
ここではRopsten用のEtherをもらってみます.
「BUY」をクリック.

「ROPSTEN TEST FAUCET」をクリック.
FAUCETとは水道の蛇口のことですね.

「request 1 ether from faucet」をクリック.

画面下にトランザクションが追加されたらOKです.

開発テスト用Etherの受取りはこれで以上です.
# アカウントをもう1つ作成
発行するトークンの送金テスト用にアカウントをもう1つ作成します.
MetaMaskのウォレット内に複数のアカウントを作成できます.
右上の人形マークをクリック.

アカウント一覧が表示されます.
既に存在するアカウントをクリックすると切り替わります.
新規アカウントを作成するには「Create Account」をクリック.

アカウントの作成は以上です.
重要: Account 2の作成後、再びAccount 1に切り替えてください.
# Remixでトークンの実装と公開
# Remixとは
Remixはブラウザ上で動作するSolidityの統合開発環境(IDE)です.
コーディング、コンパイル、デバッグ、デプロイのみならず、
<span class"u">デプロイ後の動作確認まで可能です.
# トークン用のスマートコントラクトを入力
まずはRemixを開いて下さい.
下のようなUIです.

開くとデフォルトのファイルが存在するので消してしまいましょう.
ファイルタブ右上の「✕」をクリック.

新規ファイルを作成しましょう.
画面左上の「+」をクリック.

発行したいトークン名をファイル名につけましょう.
末尾に.sol
を付けて下さい.
ここではShunCoin.solとします.
「OK」をクリック.

トークンとなるソースコードを入力しましょう.
トークンを始めとするスマートコントラクトは、Solidity(ソリディティ)という言語で書かれます.
以下のソースコードをShunCoin.solにコピー&ペーストして下さい.
<span class"u">5行目と7行目のShunCoin
はあなたのトークン名に変えてください.
<span class"u">8行目のSHN
はあなたのトークンの単位を自由に考えて変更して下さい.
pragma solidity ^0.5.4;
import "github.com/shunsukehondo/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
contract ShunCoin is ERC20 {
// トークン名
string public name = "ShunCoin";
// 通貨単位
string public symbol = "SHN";
// 小数点移動の数
uint8 public decimals = 18;
// 初期発行量
uint256 public initialSupply = 10000 * (10 ** uint256(decimals));
constructor() public {
// 最初は発行者にすべてを振り込む
_mint(msg.sender, initialSupply);
}
}
重要: 入力が終わったら一度ページをリロードして下さい.
# コードをコンパイルし公開する
Solidityで書いたスマートコントラクトをコンパイルし公開していきます.
Remixでは、Runがスマートコントラクトの公開・呼び出しを意味しています.
Runタブに移動しましょう.
「Run」をクリック.

スマートコントラクトを公開します.
「Environment」は公開されるネットワークです.
MetaMaskで選択されているネットワークが自動で入力されます.
Ropstenとは、世界中の開発者が参加しているイーサリアム開発用ネットワークです.
ETHが売買されているメインネットと同じような条件でテストが出来ます.
(本物のETHを使わずに!)
重要: Ropsten以外(Mainなど)になっている場合はMetaMaskを開いてネットワークをRopstenに切り替えて下さい.
イーサリアムではスマートコントラクトの公開・呼び出し、送金などに都度手数料としてETHを支払います.
そのため残高が必要です.
ここでは6.157 ... ether
となっています.
重要: この残高がの場合はMetaMaskからアカウントに対して開発用ETHを補充して下さい.

以上が確認出来たら公開しましょう.
「Deploy」をクリック.

MetaMaskが自動で開かれます.
公開するかキャンセルするかを選びます.
公開しましょう.
「SUBMIT」をクリック.

# トランザクションの確認
ShunCoinを公開するトランザクションが発行されました.
これが世界中のマイナーによってマイニングされると公開が完了します.
トランザクション発行後はRemixの画面下のコンソールにURLが表示されます.
Etherscanというウェブサイトですべてのトランザクションの状態を見ることが出来ます.
発行したトランザクションを実際に見てみましょう.
URLをクリック.

TxReceipt Statusが完了しているかどうかです.
Pendingは未完了、Successは完了済みです.
他にもFromはトランザクション発行者のアドレス、Toが公開したスマートコントラクトのアドレスなど様々なパラメータが確認出来ます.

完了するとコンソールに結果が表示されます.
(そのため普段はEtherscanへ見に行く必要はありません.)

# 発行したトークンを確認する
トークンが本当に発行されたのか確認しましょう.
MetaMaskではETHだけでなく、トークンも管理できます.
以下のページでMetaMaskへのトークンの追加方法を確認してください.
トークン追加にはトークン(スマートコントラクト)のアドレスが必要です.
Remix画面右にアドレスをクリップボードにコピーするためのボタンがあります.
それをクリック.

MetaMaskでトークンを追加しましょう.
MetaMaskを開いてトークンタブから「ADD TOKEN」をクリック.
「Token Contract Address」にアドレスを貼り付けて下さい.
「Add」をクリック.

確かにShunCoinが10000 SHN
作られていることが確認できました.

# トークンを送金してみる
トークンが正しく機能することを確認するために、トークンを送金してみましょう.
MetaMaskのAccount1には10000SHN
残高があり、Account2は0SHN
です.
Account1からAccount2へ1SHN送ってみましょう.
Account2のアドレスが必要になるのでコピーしましょう.
MetaMaskを開き、Account2に切り替えて「・・・」をクリック.

「Copy Address To Clipboard」をクリック.

送金してみましょう.
Remixに戻ります.
Remixでは公開後のスマートコントラクトの操作をすることもできます.
先ほど実行した「Deploy」の下に呼び出し可能なメソッドが一覧されます.
送金はtransferです.
transferの右側のボタンをクリック.

transferを呼び出すために必要なパラメータが表示されます.
_to
: 送金先_value
: 送金額(単位に注意)
_to
にコピーしたAccount2のアドレスを貼り付け.
_value
に1000000000000000000000
を入力.
1000SHN送金しますが、小数点以下が18桁なので0が3+18で21個です.
(イーサリアムは小数を扱えません.整数で表現するのです。)
「transact」をクリック.

MetaMaskが自動で開かれ、確認ダイアログが表示されます.
「SUBMIT」をクリック.

デプロイ時と同様に画面下のコンソールにEtherscanへのURLが表示されます.
送金が完了すると追加のメッセージが表示されます.
MetaMaskでAccount2のSHN残高を確認しましょう.
1000SHN
振り込まれていますね.

Account1を見てみると9000SHN
に減少しているのが確認できます.
# トークンを本番に公開するには?
先ほどMetaMaskでRopstenネットワークに切り替えましたが、それをMainネットワークに切り替えて同じ手順(デプロイ)を実行するだけです.
MetaMaskのAccount0に残高が無い場合はBit FlyerやZaifで購入してMetaMaskのアドレスに対して送金することで入手出来ます.