2
Help us understand the problem. What are the problem?

posted at

updated at

ERC20開発ハンズオン2(EOAへapproveしてtransferFromを行う編)

はじめに

↑こちらの記事の続編になります

上記の記事を読まなくてもこの記事だけでERC20発行から行えます。

ERC20開発

ERC20発行

ERC20発行したことある方は復習で、ない方は上記「はじめに」の記事も参考にしつつ、MetamaskとRemixを連携させて、Ropstenでトークンを発行してみましょう。

こちらの便利ツールを使います。

スクリーンショット 2022-04-03 12.28.41.png

SETTINGSNameSymbolに任意のトークン名を入力、

Premintに任意の発行枚数を入力します。

コードをコピーして、Remixで作成したあたらしい.solファイルににペーストします。

スクリーンショット 2022-04-03 12.31.35.png

SakeToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract SakeToken is ERC20 {
    constructor() ERC20("SakeToken", "SAKE") {
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }
}

スクリーンショット 2022-04-03 12.35.49.png

MetamaskのTestnet、例えばRopstenに接続し、Contractは作成したファイルを選択し、デプロイします。

デプロイできました。

デプロイできたら、decimals, Name, Symbol, totalSupplyボタンを押してみましょう。

これらは関数で、Ethereumネットワーク上にあるデプロイしたコントラクトの状態を調べることができます。

スクリーンショット 2022-04-03 12.38.00.png

スクリーンショット 2022-04-03 12.40.15.png

デプロイに使ったアカウント(以下、アリスとする)をbalanceOfの入力欄に入れ、callボタンを押してみましょう。

21,000,000 * 10**18発行されています。10の18乗はデフォルトの設定になります。

ERC20転送

スクリーンショット 2022-04-03 12.42.46.png

別のアドレス(以下、ボブとする)を用意し、balanceOfの入力欄に入れ、callボタンを押してみましょう。

デプロイしたアカウントにしかトークンは存在しないので、それ以外のアカウントは当然ながらゼロです。

スクリーンショット 2022-04-03 12.44.27.png

このアカウントに対して、任意の額(この記事の見本では600万SAKE)を送ってみましょう。

転送できました。

スクリーンショット 2022-04-03 12.46.55.png

再度、balanceOfを見てみると、受け取った額が表示されています。

ERC20の委任

approve

approve, transferFrom関数を使うと、キャロルがSAKEを持っていなくても、ボブがキャロルにトークンの転送を委任することができます。

Remixに接続するアカウントをボブに切り替えます。

スクリーンショット 2022-04-03 12.51.09.png

キャロル役のアカウントを用意し、approve関数のspenderにキャロルのアカウントを、amountに委任する任意の額(ここでは300万SAKE)を入力し、transactボタンを押します。

実行結果がこちら

スクリーンショット 2022-04-03 12.55.35.png

allownanceownerにボブのアカウント、spenderにキャロルのアカウントを入力し、callを押すと、委任した額が表示されていることを確認できます。

transferFrom

これまでとは別のアカウント(以下、デビットとする)を用意します。

transferFromfromにボブのアカウント、toにデビットのアカウント、amountはボブがキャロルに委任した額の範囲内で入力し、キャロルのアカウントで実行します。

スクリーンショット 2022-04-03 14.15.41.png

キャロルが実行し、ボブからデビットへ250万SAKE移動したことがわかります。

今回は、人が操作するEOA(Externally Owned Account)に対して、委任を行いましたが、

↓次回はコントラクトへの委任を行います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
2
Help us understand the problem. What are the problem?