ERC20トークンを作成する方法
この記事では、イーサリアムプロトコルを用いた自作の暗号資産(ERC20トークン)の作り方を紹介します。
ERC20とは”Ethereum Request for Comments: Token Standard #20”の略称で、2015年11月に提案されたイーサリアムでトークンを発行するための規格のことです。
そのERC20を用いて開発されたトークンの総称をERC20トークンといいます。
ここではMETAMASKを準備しているものとして話を進めるので、必ずブラウザ拡張機能としてインストールしてください。
メインネットで暗号資産を作るとなると、送金手数料といった費用がかかるので、ここではテストネットを使います。
メインネットで作る事を考える場合、3. プログラミングをする へそのまま進んでください。
1 テストネット環境にする
MERAMASKを起動したら、赤い四角で囲んだ部分をクリックしてください。
すると、以下の画面が表示されます。そうしたら「Ropstenテストネットワーク」をクリックします。
すると、以下の画面になります。
これで「Ropstenテストネットワーク」になっていることになります。
2. テスト用のイーサを手に入れる
以下のURLより、テスト用イーサを手に入れます。
このURLに入ったら、以下の画面になります。
そうしたら「request 1 ether from faucet」をクリックしてください。
そうすると、以下の画面が出ますので、「Contact」をクリックしてください。
もう一度、「Contact」をクリックしてください。
数十秒待つと、1イーサもらえます。
3. プログラミングをする
ここではイーサリアム用プログラミング言語(solidity(ソリディティー))を書くことができるツールであるRimixを使っていきます。そこで、以下のURLをクリックしてください。
アクセスしたらまず Environmentsで「SOLIDITY」選択してください。
その後、左端のファイルアイコンを選択してください。
次は「+」ボタンで新規のファイルを作成します。
すると名前がつけれられます。
ここではとりあえずerc20.sol という名前をつけます。
(名前自体はなんでもいいですが〇〇.solと必ず .sol をつけてください)
そして「OK」をクリックします。
ここから、プログラミングをしていきます。
以下のコードをコピーしてください。
pragma solidity ^0.6.0;
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes calldata _extraData) external; }
contract TokenERC20 {
string public name;
string public symbol;
uint8 public decimals = 18;
uint256 public totalSupply;
mapping (address => uint256) public balanceOf;
mapping (address => mapping (address => uint256)) public allowance;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event Burn(address indexed from, uint256 value);
constructor(
uint256 initialSupply,
string memory tokenName,
string memory tokenSymbol
) public {
totalSupply = initialSupply * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
name = tokenName;
symbol = tokenSymbol;
}
function _transfer(address _from, address _to, uint _value) internal {
require(_to != address(0));
require(balanceOf[_from] >= _value);
require(balanceOf[_to] + _value >= balanceOf[_to]);
uint previousBalances = balanceOf[_from] + balanceOf[_to];
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
emit Transfer(_from, _to, _value);
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}
function transfer(address _to, uint256 _value) public returns (bool success) {
_transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]); // Check allowance
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public
returns (bool success) {
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function approveAndCall(address _spender, uint256 _value, bytes memory _extraData)
public
returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
spender.receiveApproval(msg.sender, _value, address(this), _extraData);
return true;
}
}
function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value);
balanceOf[msg.sender] -= _value;
totalSupply -= _value;
emit Burn(msg.sender, _value);
return true;
}
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value);
require(_value <= allowance[_from][msg.sender]);
balanceOf[_from] -= _value;
allowance[_from][msg.sender] -= _value;
totalSupply -= _value;
emit Burn(_from, _value);
return true;
}
}
以上のコードを空白部分に貼り付けます(ペーストします)。
貼り付けると・・・
そうしたら、画面左側にあるSolidityマークをクリックします。
「Compile erc20.sol」をクリックします。
その後、画面左のEthereumマークをクリックします。
「Environment」の項目を「Injected Web3」に変更します。
ここがテストネットを利用している場合「Ropsten」になっていないならば、MetaMaskの設定をRopstenに変更してください。
またメインネットを利用している場合「mainnet」になっています
次に「Deploy」の右端「 v 」をクリックします。
すると、以下のようなものが出ます。
ここで、供給量、トークン名、ティッカーシンボルを設定します。
InitialSupply
トークンの初期発行量(例. 2000)
発行したい枚数を半角数字で書くこと
tokenName
トークンの名前(例. YUTON)
好きなトークンの名前を英語で書くこと
tokenSymbol入力したら、「transact」をクリックし、登録します。
トークンのティッカーシンボル
自分でつけたトークンの短縮表記を書きます。(例. YTN)
数分後、登録が完了すると、画面左下「Deployed Contracts」に表示されます。
これで、自作の暗号資産が誕生です!!
ここで、赤く四角で囲んだ所をクリックしてください。
ここをクリックすると、トークンコンタラクトアドレスを言われるものをコピーでき、METAMASKに発行したトークンを表示できるようになります。
自作の暗号資産を送金する
次に、METAMASKを起動し、赤い四角で囲んだ部分をクリックしてください。
すると、以下のようになります。
「トークンを追加」をクリックします。
①カスタムトークンと書かれている所をクリックします。
②トークンコンタラクトアドレスを貼り付ける
そうすると、トークンシンボルと小数点数が自動的に追加されます。
そしたら、「次へ」をクリックしてください。
「トークン を追加」をクリックします。
「送信」をクリックすると、トークンを送信できます。
ここで送信先のアドレスを入力してください。
そしたら、送金したい金額と送金手数料を設定できます。
設定したら、「次へ」をクリックしてください。
「確認」をクリックして、送金が完了です。
参考資料
誰でも簡単!オリジナル仮想通貨を発行する方法(https://note.com/toshitoissho/n/n93eadf07fd47)
「初心者向け」プログラミング未経験からERC20トークンを発行する方法(https://magazine.blockchaincodecamp.jp/erc20-no2/)