0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

 ERC-20トークンを自作して使う

Last updated at Posted at 2023-09-20

はじめに

トークンとは一体何者なのか?という疑問が浮かんだのでまずは自分で作って使ってみようということになりました。

ということで、ERC-20トークンを実装しデプロイしてMETAMSKで送金するまでの一連の流れをまとめました。

今回自作したERC-20トークン「tJPY」を送金した様子

ERC-20トークンの要件

今回以下の要件を満たすERC-20トークンを作ります。

  • 名前は"Test Japanese Yen"
  • トークンのシンボルは"tJPY"
  • 総発行量は1億トークン
  • デプロイ先ネットーワーク(チェーン)はEthereumのGoerli Testnet

EthereumのGoerli Testnet
テストネットワークの一つ。メインネット(Ethereum)で正式に稼働させる前に、事前にテストをするためのネットワークになります。web2で例えるとステージング環境のような位置付けです。
そのため通貨もETHではなくGoerliETHであり実際のお金の価値はありません。
以下公式で紹介されているFausetと呼ばれるサイトから無料で入手することができます。
https://ethereum.org/en/developers/docs/networks/#goerli

作る

ライブラリを使えば5分でデプロイまでできてしまいます。
では始めます。

1. スマートコントラクトを実装

ライブラリをベースに実装することが一般的なようです。
ということでOpenZeppelinのContracts Wizardでコントラクトのソースコードを作成します。
Screenshot 2023-09-20 at 11.48.36.png
要件通り、Nameに"Test Japanese Yen"、Synbolに"tJPY" 、Premintに"100000000"(1億)を設定します。

作成したソースコード

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

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

contract TestJapaneseYen is ERC20 {
    constructor() ERC20("Test Japanese Yen", "tJPY") {
        _mint(msg.sender, 100000000 * 10 ** decimals());
    }
}

2. デプロイ

EthereumのGoerli Testnetに先ほどのコントラクトをデプロイしていきます。

2.1. 開発環境Remixを起動

先ほどのContracts Wizardの「Open in Remix」ボタンをクリックしてRemixを立ち上げます。
すると先ほど作成したソースコードが用意された状態で立ち上がります。
Screenshot 2023-09-20 at 12.03.09.png

2.2. コンパイル

起動した状態ですでにコンパイル画面になっていると思います。そうでない場合は画面左端のSolidityアイコンをクリックしてください。
「Compile ****」ボタンをクリックしてコンパイルします。
Screenshot 2023-09-20 at 12.03.09.png
コンパイルできました。画面左端のアイコンに、コンパイルが成功したことを示す緑色のチェックアイコンが表示されています。
Screenshot 2023-09-20 at 12.07.23.png

2.3. デプロイ

コンパイルしたものをGoerli Testnetにデプロイします。
画面左端のSolidityアイコンの一つ下のアイコンをクリックしてデプロイ画面を表示させます。
Screenshot 2023-09-20 at 12.12.17.png

この後デプロイする時にMETAMASKを通してEthereum Goerli Testnetにデプロすることになります。なので先にMETAMASKのネットワークをEthereum Goerli Testnetに変更しておきます。

併せて、デプロイ時に必要なガス代(GoerliETH)を調達します。以下のEtherum公式で紹介されているFausetsから好きなものを選び自分のアドレスにGoerliETHを入金してください。上のスクショのように金額が表示されたらOKです。

それではRemixに戻ってデプロイしていきます。
ENVIRONMENT欄で「Injected Provider - MetaMask」を選択します。METAMSKが立ち上がるのでOKしてください。

デプロイミスしないための確認

  • 下側に小さく「Goerli」(デプロイ先のネットワーク)と表示されていること
  • METAMASKで複数アカウントを管理している場合はACCOUNTの値が期待したアカウントのアドレスであること

Screenshot 2023-09-20 at 12.53.18.png
「Deploy」ボタンをクリックします。するとMETAMASKが起動してGoerli Testnetにこのコントラクトをデプロイしてよいか承認を求められるので承認(Confirmをクリック)してください。

しばらくすると、Remix画面下側のターミナルにデプロイが正常に完了した旨が表示されます。
また、画面左下の「Deployed Contracts」には先ほどデプロイしたコントラクトが表示されます。ちなみに、ここからコントラクトとやりとりして送金することもできますが今回はMETAMASKを使いたいので割愛します。
Screenshot 2023-09-20 at 13.07.05.png
これでGoerli Testnetへのデプロイ完了です!

2.4. Etherscanで確認

Etherscan(Goerli)で先ほどデプロイしたtJPYを確認しましょう。

Etherscan(Goerli)でコントラクトアドレスを検索します。

コントラクトアドレスはどこ?
先ほどの画面左下の「Deployed Contracts」のクリップボードボタンでコントラクトのアドレスを取得できます。

期待通りtJPYトークンがデプロイされていることが確認できます。
ついでにトークンの詳細も確認します。TOKEN TRACKERのリンクをクリックしてください。
Screenshot 2023-09-20 at 14.57.45.png
するとスマートコントラクトで設定した通りに名前、シンボル、発行数量が設定されています。これでバッチリです。
Screenshot 2023-09-20 at 15.01.06.png

トークンを"作る"パートはこれで以上です。

使う

最後に、先ほどデプロイしたトークンtJPYをMETAMASKを使って送金したいと思います。

と、当たり前のように言っていますが、なぜこれが可能かというと、METAMASKがERC-20トークに対応していて、かつ今回のコントラクトもERC-20に従って実装したからです。
なのでMETAMSKに限らずERC-20トークンに対応しているアプリケーションであれば同様に扱うことができます。

では続けます。

1. METAMASKにtJPYを認識させる

METAMSKで先ほどのコントラクトアドレスを入力してtJPYをインポートします。

2. 送金する

:construction_worker_tone1:Dev1 - Unsafe」から「:construction_worker_tone5:Dev2 - Unsafe」へtJPYを送金しようと思います。
ということで「Send」ボタンをタップして送金相手を選択します。

1000tJPY送金しようと思うのでAmount欄に「1000」を入力して「Next」をタップし、内容に誤りがないことを確認したら「Confirm」をタップして送金を実行します。

結果、「:construction_worker_tone1:Dev1 - Unsafe」から1000tJPY差し引かれ、「:construction_worker_tone5:Dev2 - Unsafe」に1000tJPY入金されました。
(事前に:construction_worker_tone5:Dev2 - UnsafeアカウントにもtJPYを認識させています)

3. Etherscanで送金履歴を確認する

コントラクトを確認します。
:construction_worker_tone1:Dev1 - Unsafe」がコントラクトを呼び出しているのが分かります。
これで分かるのは、「:construction_worker_tone1:Dev1 - Unsafe」が直接「:construction_worker_tone5:Dev2 - Unsafe」に送金しているのではなく、
:construction_worker_tone1:Dev1 - Unsafe」に呼び出されたコントラクトが「:construction_worker_tone5:Dev2 - Unsafe」へ送金する仕組みになっているということです。
Screenshot 2023-09-20 at 15.45.04.png

ということでその詳細をTOKER TRAKERページで確認します。
すると確かに「:construction_worker_tone1:Dev1 - Unsafe」が「:construction_worker_tone5:Dev2 - Unsafe」に1000tJPY送金していることが確認できます。
Screenshot 2023-09-20 at 15.41.49.png

トークンを"使う"パートもこれで以上です。

まとめ

ERC-20トークンを実装しテストネットワークにデプロイしてMETAMASKで送金するという一連の流れを体験しました。
当たり前のようにtJPYがMETAMSKで認識され、当たり前のように送金することができましたが、これが規格(今回でいうERC-20)による恩恵なんだなぁだと感じました。

EtherscanでのコントラクトのVerifyも扱う予定でしたが、今回のソースコードはOpenZeppelinの外部ライブラリを使っているために一工夫必要で説明が難しくなりそうだったので今回割愛しました。気になった方は調べてみてください。

thirdweb

今回は自作しましたが、thirdwebを使えばブラウザ上のボタンクリックだけでスマートコントラクトをデプロイ&管理することができます。一般的な機能が欲しいだけであればこういったツールを使った方が早く安く確実だと思います。非常に簡単にできるので使うと驚くと思います。
一方、特有の機能や条件を組み込みたいのであれば自作する必要があります。なので適材適所だと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?