- 开始一个新的工程
npm init
2. 安装 hardhat
npm install hardhat
3. 初始化 hardhat
npx hardhat/npx hardhat init
4. 安装依赖
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
5. 修改 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,
// },
};
6. 创建一个.env 文件存储
MNEMONIC=""
SEPOLIA_PRIVATE_KEY=""
SEPOLIA_PRIVATE_KEY=""
SEPOLIA_PRIVATE_KEY=""
ALCHEMY_API_KEY=""
7. 使用 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);
}
}
8. 编译
npx hardhat compile
9. 部署脚本
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);
});
10. 启动 hardhat 本地网络
npx hardhat node
11. 部署在 hardhat 本地网络上
npx hardhat run ./scripts/deploy.js
npx hardhat run ./scripts/deploy.js --network localhost
12. 部署 sepolia 网络
npx hardhat run ./scripts/deploy.js --network sepolia
0xb02a44bB533DA6BeF058c66Dc5d0d7F2ca38C50a
13. 在 remix 中交互 https://remix.ethereum.org/