ERC20 Token
はじめに
Mastering EthereumのTokensを読んでいた際、ERC20 Tokenに関するソースコード(METoken)が古く、そのままでは動かなかったので、コードをアップデートした。
本記事はその際のメモ。2024/03時点のエコシステムで動くようにしている。
METoken
Launching Our Own ERC20 Tokenの部分に関して、以下リポジトリをCloneしてnpm install
すれば使えるはず。
package.json
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
ファイルに記述。
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完了後、EtherscanでcontractやTOKEN TRACKERを確認。
MetaMaskでもTokenをimport可能。
Alchemyでもリクエスト確認できた。
Discussion