テスト環境上でERC-20のトークンを作ってみました
最近、NFTのおかげでブロックチェーン界隈が一般的になりつつあるので、そろそろ本格的に勉強せねばと思い、とりあえずイーサリアムで多く使われている規格ERC-20のトークンを発行することにしました。
イーサリアムの公式のチュートリアルで紹介されていた YouTube 「Create your own Blockchain ERC20 Token」 をメイン教材に、分からないところはいろいろググって補足して、なんとかテストネットワーク上でのトークン発行までやってみました。
※YouTubeの内容とまったく同じではないです。
正直、1つ1つのコードやコマンド、手順の意味をほとんど理解しておらず、とりあえず手を動かしてみただけなのですが、せっかくですので、その手順を公開します。
1.環境
macOS Catalina
2.MetaMask
まずは、MetaMaskというイーサリアム系の仮想通貨ウォレットを、Google Chrome の拡張機能でゲットします。
3.テストネットワーク
テストネットワークとは、イーサリアム上で作成したDAppsなどをテストするのに利用する環境のことです。
テストするにはテスト用のイーサリアムが必要になります。
テストネットの種類は、Ropsten、 Kovan、 Rinkeby などがあります。
ここでは、Rinkebyにします。
※Ropsten, Kovanも試してみましたが、うまくいかなかったので、Rinkeby にします。
なお、テストネットが出ない場合は、[Show/hide]をクリックし
METAMASK のアドレスをコピーします。
(以下の画像のところをクリックすればコピーできます)
4.テスト用のイーサリアムをゲット
こちらのサイトを参考にしました。
[イーサリアム] テストネットワーク用ETHの入手方法
変わった方法なのですが、
自分のツイッターで MetaMask のアドレスをつぶやき、ツイートのURLを控えておきます。
MetaMaskで
[購入] > [ETH を取得]
こんなサイトにとびます。
左側の [Crypto Faucet] をクリック
さきほどのツイートのURL をペーストし、[Give me Ether]をクリックします。
自分の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 ずつ入っています。
scriptsフォルダに
deploy_token.py というファイルを作り、以下のコードを入力します。
ここでは、Tatsuyaというトークン(TTY)を1000000000000000000000TTY発行します。
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 ファイルを作成
dependencies:
- OpenZeppelin/[email protected]
compiler:
solc:
remappings:
- '@openzeppelin=OpenZeppelin/[email protected]'
dotenv: .env
wallets:
from_key: ${PRIVATE_KEY}
コンパイルします。
$ brownie compile
INFURA のアカウントを開設し、新規プロジェクトを作り、PROJECT_IDをひかえてきます。
MetaMaskの秘密鍵を控えておきます。
PRIVATE_KEYは、MetaMask アカウントの詳細 > 秘密鍵のエクスポート から取得できます。
※秘密鍵は絶対に公開してはいけません。
ETHERSCANからAPIトークンを取得し、控えておきます。
プロジェクトフォルダ直下に
.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で見ると、コントラクトができてます。
MetaMaskを開き、 [Import tokens]
さきほどのトークンコントラクトアドレスをペーストし、[add Custom Token]
以上です。
Author And Source
この問題について(テスト環境上でERC-20のトークンを作ってみました), 我々は、より多くの情報をここで見つけました https://qiita.com/tatsuya1970/items/ab28b2acad1ed9ef24ad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .