ERC20 のトークンをAstarのテストネットにデプロイする。
前提
ドキュメント作成者の知識不足により、誤った用語や表現がある場合がありますが、そこは大目に見て頂けますと幸いです。
完成のコード
事前準備
- Wallet (MetaMaskなど)の追加
- Shibuya Networkの追加 (Astar Networkの詳細)
使用技術
- Hardhat
- OpenZeppalin
Hardhat とは?
Hardhatは Ethereum ソフトウェアをコンパイル、デプロイ、テスト、およびデバッグするための開発環境です。この他だとTruffle Suiteなどがあります。
これを使用することにより、EVM互換性をもつチェーンを扱うことができます。
OpenZeppelinとは?
ERC20 ERC721 ERC1155などのコードを簡単に使うことができるパッケージです。
環境構築
バージョン
- Hardhat 2.9.3
- node v16.14.0
- npm v8.3.1
コマンド
# npmの初期化
$ npm init -y
# hardhatのinstall
# Create a basic sample projectを選択
# 残りは推奨されている方を選択
$ npx hardhat install
# 必要なパッケージのインストール
$ npm install @openzeppelin/contracts
$ npm install dotenv
# 不要なファイルの削除
$ rm contracts/Greeter.sol
$ rm scripts/sample-script.js
コーディング
1. トークンのコード作成
OpenZeppelinの下記リンクから必要な機能を追加してcontractsディレクトリの中にファイルを追加する。
// SPDX-License-Identifier: TEST
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract TEST is ERC20, Ownable {
constructor() ERC20("TEST", "TEST") {}
function mint(address to, uint256 amount) public onlyOwner {
_mint(to, amount);
}
}
*全体の流れが知りたい人はパッケージのファイルを実際にみてみよう!
2. デプロイするコード作成
const hre = require("hardhat");
async function main() {
// Hardhat always runs the compile task when running scripts with its command
// line interface.
//
// If this script is run directly using `node` you may want to call compile
// manually to make sure everything is compiled
// await hre.run('compile');
// We get the contract to deploy
const ERC20 = await hre.ethers.getContractFactory("TEST");
const erc20 = await ERC20.deploy();
await erc20.deployed();
console.log("ERC20 Token deployed to:", erc20.address);
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
3.Walletの秘密鍵を環境変数に追加
PRIVATE_KEY='あなたのWalletの秘密鍵'
※秘密鍵の扱いはとても慎重に行なってください、特に資産を保有しているWalletなのであれば開発用のWalletをもう一つ持つことをお勧めします。
4.hardhat.config.jsの設定
require("@nomiclabs/hardhat-waffle");
require('dotenv').config();
// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts", "Prints the list of accounts", async (taskArgs, hre) => {
const accounts = await hre.ethers.getSigners();
for (const account of accounts) {
console.log(account.address);
}
});
module.exports = {
solidity: "0.8.4",
networks:{
shibuya: {
url:"https://rpc.shibuya.astar.network:8545",
chainId:81,
accounts:[process.env.PRIVATE_KEY],
}
}
};
networksの設定を変更することで指定したEVMを保持するチェーンにスマートコントラクトを発行できる。
今回はAstarのテストネットのShibuyaを扱う。
デプロイ
1. SBYトークンを取得する
ここまででコーディングは終わり、デプロイをしたいところなのですがスマートコントラクトを発行する上ではガス代が必要となります。
そこで、ShibuyaネットワークのSBYを取得しなければなりません。
下記が公式ドキュメントです。無事Wallet上で取得の確認が取れたら次に進んでください。
2. スマコン発行
Solidityのコンパイル
$ npx hardhat compile
# スマコン発行 この時のアドレスはメモしておいてください
$ npx hardhat run --network shibuya scripts/deploy.js
実際にスマートコントラクトが発行できているかは、SubscanでネットワークをSibuyaにして検索することで確認することができます。
3.デプロイ
npx hardhat console --network shibuya
> const ERC20 = await ethers.getContractFactory("TEST");
> const erc20 = await ERC20.attach( "発行したコントラクトアドレス" );
> await erc20.mint("あなたのウォレットアドレス", 発行したいトークンの数 );
# Ctrl + D でコンソールから退出
最後にWallet上でTESTトークンを確認することができたのであれば完成です!
最後に
この記事はデプロイを目的としたドキュメントです。
本来はローカルでテストを行ったのちにスマコンを発行する方が一般的です。
なのであくまでこの記事は参考程度にお使いください。
参考記事
Discussion