⛓️

ERC20 Token

2024/03/07に公開

はじめに

Mastering EthereumTokensを読んでいた際、ERC20 Tokenに関するソースコード(METoken)が古く、そのままでは動かなかったので、コードをアップデートした。

本記事はその際のメモ。2024/03時点のエコシステムで動くようにしている。

METoken

Launching Our Own ERC20 Tokenの部分に関して、以下リポジトリをCloneしてnpm installすれば使えるはず。

https://github.com/Connie18/METoken/tree/main

package.json

https://github.com/Connie18/METoken/blob/main/package.json

truffle-config.js

https://github.com/Connie18/METoken/blob/main/truffle-config.js

Truffle

Install

公式サイトを参考にTruffleをインストール。

$ truffle version
Truffle v5.11.5 (core: 5.11.5)
Ganache v7.9.1
Solidity v0.5.16 (solc-js)
Node v18.3.0
Web3.js v1.10.0

Compile

$ truffle compile

Compiling your contracts...
===========================
> Compiling ./contracts/METoken.sol
> Compiling ./contracts/Migrations.sol
> Compiling @openzeppelin/contracts/token/ERC20/ERC20.sol
> Compiling @openzeppelin/contracts/token/ERC20/IERC20.sol
> Compiling @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol
> Compiling @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
> Compiling @openzeppelin/contracts/utils/Context.sol
> Artifacts written to /Users/yuichirokondo/Workspace/Web3/METoken/build/contracts
> Compiled successfully using:
   - solc: 0.8.0+commit.c7dfd78e.Emscripten.clang

Migrate

Ganache

まずは公式サイトからGanacheをインストール。

その後、「Ganache」を起動し、「NEW WORKSPACE」を選択し、「ADD PRPJECT」で先ほど編集した「truffle-config.js」を追加[1]

$ truffle migrate --network ganache実行以降は、基本的にLaunching Our Own ERC20 Tokenの通り。

balanceの確認時は、balance.toString()した方が見やすい。

truffle(ganache)> METoken.deployed().then(instance => instance.balanceOf(accounts[0]).then(balance => console.log(balance.toString())))
21000000000000000000000000

Sepolia

Sepoliaはアプリケーション開発に推奨されるデフォルトのテストネット[2]
Ropsten or Kovanはまだ現役っぽい?が、少し古めの模様。

Ethereumのテストトークン(Sepolia)の取得方法についてを参考に、とりあえずSepoliaのFaucetを取得。

Faucetを取得時にAlchemyを使ったので、その流れでHDWalletProviderでもAlchemyを使ってみた。
ALCHEMY_API_KEYはAlchemyのDashboardとかから適当に取得し、.envファイルに記述。
https://github.com/Connie18/METoken/blob/main/truffle-config.js#L21-L24

truffle migrate --network sepoliaを実行し、3分くらいでMigrateが完了した。

結果
$ truffle migrate --network sepolia

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


Starting migrations...
======================
> Network name:    'sepolia'
> Network id:      11155111
> Block gas limit: 30000000 (0x1c9c380)


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x3ac887a8125331bccb75152388a85267a07e6031b235433031fa2b1479b2351a
   > Blocks: 1            Seconds: 13
   > contract address:    0xa8A7E65e1f1C53077C39c1873a97D17F390bA67E
   > block number:        5435710
   > block timestamp:     1709821116
   > account:             0x896c426a8DA23a326572723129BB48db08148773
   > balance:             1.49945201396373136
   > gas used:            211294 (0x3395e)
   > gas price:           2.59347656 gwei
   > value sent:          0 ETH
   > total cost:          0.00054798603626864 ETH

   Pausing for 2 confirmations...

   -------------------------------
   > confirmation number: 1 (block: 5435711)
   > confirmation number: 2 (block: 5435712)
   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:     0.00054798603626864 ETH


2_deploy_contracts.js
=====================

   Deploying 'METoken'
   -------------------
   > transaction hash:    0x04559c71742273c8c8f382ad7d917cbe4b974b367f62473865ee8b946727ccb2
   > Blocks: 1            Seconds: 8
   > contract address:    0x0Cb0b2B649DFB6865712afC4d7C92D7F9bA7b007
   > block number:        5435714
   > block timestamp:     1709821164
   > account:             0x896c426a8DA23a326572723129BB48db08148773
   > balance:             1.497331896030986054
   > gas used:            772455 (0xbc967)
   > gas price:           2.591363254 gwei
   > value sent:          0 ETH
   > total cost:          0.00200171150236857 ETH

   Pausing for 2 confirmations...

   -------------------------------
   > confirmation number: 1 (block: 5435715)
   > confirmation number: 2 (block: 5435716)
   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:     0.00200171150236857 ETH

Summary
=======
> Total deployments:   2
> Final cost:          0.00254969753863721 ETH

Migrate完了後、EtherscancontractTOKEN TRACKERを確認。

MetaMaskでもTokenをimport可能。

Alchemyでもリクエスト確認できた。

Reference

脚注
  1. https://note.com/npaka/n/nb3682e5287d0#7dd5ced5-3899-4ea3-8238-95dfe26c6c83 ↩︎

  2. https://ethereum.org/ja/developers/docs/networks/#sepolia ↩︎

Discussion