- 開始一個新的工程
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
13. 在 remix 中交互 https://remix.ethereum.org/