- 新しいプロジェクトを開始する
npm init
- hardhat をインストールする
npm install hardhat
- hardhat を初期化する
npx hardhat/npx hardhat init
- 依存関係をインストールする
npm install @openzeppelin/contracts
npm install @openzeppelin/contracts-upgradeable
npm install @chainlink/contracts
npm install dotenv
npm install @openzeppelin/hardhat-upgrades
npm install @nomiclabs/hardhat-ethers
npm install @openzeppelin/hardhat-defender
npm install @nomiclabs/hardhat-etherscan
npm install chai
npm install @openzeppelin/test-helpers
- hardhat.config.js を変更する
require("@nomicfoundation/hardhat-toolbox");
require('dotenv').config()
// require('@nomiclabs/hardhat-ethers');
// require('@openzeppelin/hardhat-upgrades');
// require("@openzeppelin/hardhat-defender");
// require("@nomiclabs/hardhat-etherscan");
module.exports = {
solidity: {
version: '0.8.19',
settings: {
optimizer: {
enabled: true,
runs: 200,
},
},
},
networks: {
sepolia: {
url: `https://eth-sepolia.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
accounts: [process.env.MNEMONIC]
},
},
// etherscan: {
// apiKey: process.env.etherscanKey,
// },
// defender: {
// apiKey: process.env.DEFENDER_TEAM_API_KEY,
// apiSecret: process.env.DEFENDER_TEAM_API_SECRET_KEY,
// },
};
- .env ファイルを作成して保存する
MNEMONIC=""
SEPOLIA_PRIVATE_KEY=""
SEPOLIA_PRIVATE_KEY=""
SEPOLIA_PRIVATE_KEY=""
ALCHEMY_API_KEY=""
- Wizard を使用して契約を開発する https://docs.openzeppelin.com/contracts/4.x/wizard
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/// @custom:security-contact [email protected]
contract DragonToken is ERC20, ERC20Burnable, Ownable {
constructor() ERC20("DragonToken", "DTK") {
_mint(msg.sender, 10000 * 10 ** decimals());
}
function mint(address to, uint256 amount) public onlyOwner {
_mint(to, amount);
}
}
- コンパイルする
npx hardhat compile
- デプロイスクリプト
async function main() {
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account:", deployer.address);
const DragonToken = await ethers.deployContract("DragonToken");
console.log("Token address:", await DragonToken.getAddress());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
- hardhat のローカルネットワークを起動する
npx hardhat node
- hardhat のローカルネットワークにデプロイする
npx hardhat run ./scripts/deploy.js
npx hardhat run ./scripts/deploy.js --network localhost
- sepolia ネットワークにデプロイする
npx hardhat run ./scripts/deploy.js --network sepolia
0xb02a44bB533DA6BeF058c66Dc5d0d7F2ca38C50a
- remix で対話する https://remix.ethereum.org/