2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

テスト環境上でERC-20のトークンを作ってみました

Last updated at Posted at 2022-01-15

最近、NFTのおかげでブロックチェーン界隈が一般的になりつつあるので、そろそろ本格的に勉強せねばと思い、とりあえずイーサリアムで多く使われている規格ERC-20のトークンを発行することにしました。

イーサリアムの公式のチュートリアルで紹介されていた YouTube 「[Create your own Blockchain ERC20 Token] (https://www.youtube.com/watch?v=8rpir_ZSK1g)」 をメイン教材に、分からないところはいろいろググって補足して、なんとかテストネットワーク上でのトークン発行までやってみました。

※YouTubeの内容とまったく同じではないです。

正直、1つ1つのコードやコマンド、手順の意味をほとんど理解しておらず、とりあえず手を動かしてみただけなのですが、せっかくですので、その手順を公開します。

1.環境

macOS Catalina

2.MetaMask

まずは、MetaMaskというイーサリアム系の仮想通貨ウォレットを、Google Chrome の拡張機能でゲットします。

Image from Gyazo

3.テストネットワーク

テストネットワークとは、イーサリアム上で作成したDAppsなどをテストするのに利用する環境のことです。
テストするにはテスト用のイーサリアムが必要になります。
テストネットの種類は、Ropsten、 Kovan、 Rinkeby などがあります。

ここでは、Rinkebyにします。
※Ropsten, Kovanも試してみましたが、うまくいかなかったので、Rinkeby にします。

MetaMask を開き、下画像のところをクリック
Image from Gyazo

Rinkebyテストネットワークを選択
Image from Gyazo

なお、テストネットが出ない場合は、[Show/hide]をクリックし
Image from Gyazo

Show test networks を「オン」にします。
Image from Gyazo

METAMASK のアドレスをコピーします。
(以下の画像のところをクリックすればコピーできます)
Image from Gyazo

4.テスト用のイーサリアムをゲット

こちらのサイトを参考にしました。
[イーサリアム] テストネットワーク用ETHの入手方法

変わった方法なのですが、
自分のツイッターで MetaMask のアドレスをつぶやき、ツイートのURLを控えておきます。

MetaMaskで
[購入] > [ETH を取得]

こんなサイトにとびます。
左側の [Crypto Faucet] をクリック
Image from Gyazo

さきほどのツイートのURL をペーストし、[Give me Ether]をクリックします。
Image from Gyazo

自分のMetaMaskにテスト用のイーサリアムが入金されます。

5.環境構築

公式サイトを見ながらやりました。
https://eth-brownie.readthedocs.io/en/stable/install.html

まずpipxをインストール

$ pip install --user pipx
$ pipx ensurepath

これでだめなら、

$ python3 -m pip install --user pipx
$ python3 -m pipx ensurepath

一度、exit でターミナルを閉じます。

再度ターミナルを開き、
pipxを使ってBrownieをインストールします。

$ pipx install eth-brownie

イーサリアムのエミュレーター ganache-cliをインストールします。

npm install -g ganache-cli

トークン作成へ

まずは、brownieのプロジェクトを作成します。

brownie init

以下のフォルダができます。

build           
contracts       
interfaces      
reports         
scripts         
tests

contractsフォルダに
TokenERC20.sol というファイルを作ります。

コードはこちらのをコピペします。
https://github.com/PatrickAlphaC/erc20-brownie/tree/main/contracts

コンパイルします。

$ brownie compile

エミュレーターganache-cli を起動します。

$ ganache-cli

10個のアカウントができていて100ETH ずつ入っています。
スクリーンショット 2022-01-14 22.55.29.png

scriptsフォルダに
deploy_token.py というファイルを作り、以下のコードを入力します。
ここでは、Tatsuyaというトークン(TTY)を1000000000000000000000TTY発行します。

deploy_token.py
from brownie import accounts, config, TokenERC20

initial_supply = 1000000000000000000000  # 1000
token_name = "Tatsuya"
token_symbol = "TTY"

def main():
    account = accounts.add(config["wallets"]["from_key"])
    erc20 = TokenERC20.deploy(
        initial_supply, token_name, token_symbol, {"from": account} , publish_source=True 
    )

プロジェクトフォルダ直下に
brownie-config.yaml ファイルを作成

brownie-config.yaml
dependencies:
  - OpenZeppelin/openzeppelin-contracts@3.4.0
compiler:
  solc:
    remappings:
      - '@openzeppelin=OpenZeppelin/openzeppelin-contracts@3.4.0'
    dotenv: .env
    wallets:
      from_key: ${PRIVATE_KEY}

コンパイルします。

$ brownie compile

INFURA のアカウントを開設し、新規プロジェクトを作り、PROJECT_IDをひかえてきます。
スクリーンショット 2022-01-14 23.00.53.png

MetaMaskの秘密鍵を控えておきます。
PRIVATE_KEYは、MetaMask アカウントの詳細 > 秘密鍵のエクスポート から取得できます。
※秘密鍵は絶対に公開してはいけません。
Image from Gyazo

ETHERSCANからAPIトークンを取得し、控えておきます。

 

プロジェクトフォルダ直下に
.envファイル を作り、さきほど控えたものをペーストします。

.env
export WEB3_INFURA_PROJECT_ID='INFURAのPROJECT ID'
export PRIVATE_KEY='MetaMaskの秘密鍵'
export ETHERSCAN_TOKEN='ETHERSCANのApi-Key Token'

実行!!

今回のテストネットワークはRinkebyなので --network rinkeby を末尾につけます。

$ brownie run scripts/deploy_token.py --network rinkeby


Brownie v1.17.2 - Python development framework for Ethereum

Erc20TestProject is the active project.

Running 'scripts/deploy_token.py::main'...
Transaction sent: 0x583378041cbf99ab9b27229c5090b662510f4de0bd665a8ad6dfcdf62d393ae8
  Gas price: 1.000000012 gwei   Gas limit: 743694   Nonce: 10
  TokenERC20.constructor confirmed   Block: 9991995   Gas used: 676086 (90.91%)
  TokenERC20 deployed at: 0xAf844d4886118e0e8068D1d5DD4263012a41fd75

Waiting for https://api-rinkeby.etherscan.io/api to process contract...
Verification submitted successfully. Waiting for result...
Verification pending...
Verification complete. Result: Pass - Verified

やったー、とおった!!

Etherscanで見ると、コントラクトができてます。
Image from Gyazo

MetaMaskを開き、 [Import tokens]

Image from Gyazo

さきほどのトークンコントラクトアドレスをペーストし、[add Custom Token]
Image from Gyazo

Import Token
Image from Gyazo

MetaMask に入りました。
Image from Gyazo

Image from Gyazo


以上です。
2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?