📑

ERC20 のトークンをAstarのテストネットにデプロイする。

2022/04/27に公開

前提

ドキュメント作成者の知識不足により、誤った用語や表現がある場合がありますが、そこは大目に見て頂けますと幸いです。

完成のコード

https://github.com/yhoi/shibuya-test-token

事前準備

  • Wallet (MetaMaskなど)の追加
  • Shibuya Networkの追加 (Astar Networkの詳細)

https://docs.astar.network/integration/network-details

使用技術

  • Hardhat
  • OpenZeppalin

Hardhat とは?

Hardhatは Ethereum ソフトウェアをコンパイル、デプロイ、テスト、およびデバッグするための開発環境です。この他だとTruffle Suiteなどがあります。
これを使用することにより、EVM互換性をもつチェーンを扱うことができます。

https://hardhat.org/

OpenZeppelinとは?

ERC20 ERC721 ERC1155などのコードを簡単に使うことができるパッケージです。

https://docs.openzeppelin.com/

環境構築

バージョン

  • 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ディレクトリの中にファイルを追加する。

https://docs.openzeppelin.com/contracts/4.x/wizard

contracts/TEST.sol
// 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);
    }
}

*全体の流れが知りたい人はパッケージのファイルを実際にみてみよう!

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.5.0/contracts/token/ERC20/ERC20.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.5.0/contracts/access/Ownable.sol

2. デプロイするコード作成

scripts/deploy.js
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の秘密鍵を環境変数に追加

.env
PRIVATE_KEY='あなたのWalletの秘密鍵'

※秘密鍵の扱いはとても慎重に行なってください、特に資産を保有しているWalletなのであれば開発用のWalletをもう一つ持つことをお勧めします。

4.hardhat.config.jsの設定

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を扱う。

https://docs.astar.network/integration/network-details

デプロイ

1. SBYトークンを取得する

ここまででコーディングは終わり、デプロイをしたいところなのですがスマートコントラクトを発行する上ではガス代が必要となります。
そこで、ShibuyaネットワークのSBYを取得しなければなりません。
下記が公式ドキュメントです。無事Wallet上で取得の確認が取れたら次に進んでください。

https://docs.astar.network/integration/testnet-faucet

2. スマコン発行

Solidityのコンパイル
$ npx hardhat compile

# スマコン発行 この時のアドレスはメモしておいてください
$ npx hardhat run --network shibuya scripts/deploy.js

実際にスマートコントラクトが発行できているかは、SubscanでネットワークをSibuyaにして検索することで確認することができます。

https://www.subscan.io/

3.デプロイ

npx hardhat console --network shibuya
> const ERC20 = await ethers.getContractFactory("TEST");
> const erc20 = await ERC20.attach( "発行したコントラクトアドレス" );
> await erc20.mint("あなたのウォレットアドレス", 発行したいトークンの数 );

# Ctrl + D でコンソールから退出

最後にWallet上でTESTトークンを確認することができたのであれば完成です!

最後に

この記事はデプロイを目的としたドキュメントです。
本来はローカルでテストを行ったのちにスマコンを発行する方が一般的です。
なのであくまでこの記事は参考程度にお使いください。

参考記事

https://realtakahashi-work.medium.com/hardhatを使う-astar-network-ee2b27563a3f

Discussion