2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-04-26

前提

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

完成のコード

事前準備

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

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);
    }
}

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

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

デプロイ

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トークンを確認することができたのであれば完成です!

最後に

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

参考記事

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?