lesson-2_Polygon上にコントラクトをデプロイしてみよう
🦉 Polygon に スマートコントラクトをデプロイする
このレッスンでは、プロジェクトをPolygonネットワークにコ ントラクトをデプロイする方法を紹介します。
手順はほかのイーサリアムのサイドチェーン(例:Plasma)とほぼ同じです。
まず、packages/contract
ディレクトリに向かい、下記を修正していきましょう。
1 . .env
ファイルを下記のように修正してください。
API_URL = ""
PRIVATE_KEY = "あなたの秘密鍵は、以前に貼り付けたものを保持してください。"
ETHERSCAN_API = ""
POLYGON_URL = ""
今回の実装では、API_URL
(Alchemy API)は必要ないので、空文字列""
を設定してください。
- ただし削除しないでください、設定ファイルが壊れてしまいます。
ETHERSCAN_API
とPOLYGON_URL
は現段階では、空文字列""
にしておきます。
2 . hardhat.config.js
を開き、コードを下記のように更新しましょう。
require("@nomicfoundation/hardhat-toolbox");
require("@nomiclabs/hardhat-etherscan");
require("dotenv").config();
const { API_URL, PRIVATE_KEY, ETHERSCAN_API, POLYGON_URL } = process.env;
module.exports = {
solidity: "0.8.17",
networks: {
amoy: {
url: POLYGON_URL,
accounts: [PRIVATE_KEY],
},
},
etherscan: {
apiKey: ETHERSCAN_API,
},
};
3 . 最後に、ターミナルで以下のコマンドを実行します。
yarn contract run:script
ターミナル上で、上記がエラーなく実行されれば、Polygonネットワークにコントラクトをデプロイする準備は完了です。
🧙♂️ テストを作成・実行する
ここまでの作業でコントラクトには基本機能として以下の機能が追加されました。
- NFTをmintする機能
- nftをコントラクト所有者にためにキープする機能
- コントラクトにETHを送金できる機能
これらの基本機能をテストスクリプトとして記述していきましょう。
ではpackages/contract/testにtest.js
という名前でファイルを作成して、以下のように記述しましょう。
const hre = require("hardhat");
const { expect } = require("chai");
describe("Generative-NFT", () => {
it("mint is successed", async () => {
// あなたのコレクションの Base Token URI(JSON の CID)に差し替えてください
const baseTokenURI =
"ipfs.io/ipfs/QmZbWNKJPAjxXuNFSEaksCJVd1M6DaKQViJBYPK2BdpDEP/";
// オーナー/デプロイヤーのウォレットアドレスを取得する
const [owner] = await hre.ethers.getSigners();
// デプロイしたいコントラクトを取得
const contractFactory = await hre.ethers.getContractFactory(
"NFTCollectible"
);
// 正しいコンストラクタ引数(baseTokenURI)でコントラクトをデプロイします。
const contract = await contractFactory.deploy(baseTokenURI);
// このトランザクションがマイナーに承認(mine)されるのを待つ
await contract.deployed();
// NFTを 10 点、コントラクト所有者のためにキープできているかチェック
let txn = await contract.reserveNFTs();
await txn.wait();
let tokens = await contract.tokensOfOwner(owner.address);
expect(tokens.length).to.equal(10);
// 0.03 ETH を送信して3つ NFT を mint できるかチェック
txn = await contract.mintNFTs(3, {
value: hre.ethers.utils.parseEther("0.03"),
});
await txn.wait();
tokens = await contract.tokensOfOwner(owner.address);
expect(tokens.length).to.equal(13);
});
});
では下のコマンドを実行することでコントラクトのテストをしていきましょう!
yarn test
下のような結果がでいれば成功です!
Compiled 17 Solidity files successfully
Generative-NFT
✔ mint is successed (1552ms)
1 passing (2s)
✨ Done in 5.30s.