- 首先需要一个科学上网的工具,6 元一个月嘎嘎好用
https://mxwljsq.com/user/shop - 安装 WSL,WSL 是 Linux 的 Windows 子系统,使用管理员权限打开 powershell,一步到位.
wsl --install
- 安装写代码的工具 vscode,安装插件,点击左下角小图标,连接到 WSL。
- 安装 curl,curl 是一个命令行下工作的文件传输工具
mkdir folder
cd folder
sudo apt-get install curl
- 安装 nvm,nvm 可用来 nodejs 的版本控制
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
- 安装 nodejs,nodejs 是 JavaScript 的环境
nvm install --lts
如果使用 hardhat 或者要在 vscode 中编辑 solidity 文件,需要安装插件,黄颜色的支持 hardhat
solidity
选择开发工具。目前主流的开发工具分别是:Remix,Truffle,Hardhat,Foundry
Remix:最最简单的开发工具,非常适合初学者使用,他有着完善的 GUI 功能,可以减少很大的代码量。
Truffle:最古老的开发工具,相比与 Remix,安装到本地,不需要网络支持,同时也有着 GUI
Hardhat:是目前最主流的开发框架,同样安装到本地,没有 GUI,相比于 Truffle,灵活性更好
Foundry:是一款新兴的开发框架, 用于最好的灵活性,对于初学者来说,如果只关注合约本身,不需要学习 JavaScript,只需要学习 solidity 语言即可。
使用 hardhat 步骤
- 初始化一个项目
npm init
- 安装 hardhat(旧版本的交互和部署合约的方法可能已经失效)
npm install hardhat
- 初始化 hardhat 项目
npx hardhat init
- 安装依赖
@openzeppelin/contracts erc20,erc21 的标准等
@openzeppelin/contracts-upgradeable 可升级的 erc20,erc721 等
@chainlink/contracts 用于随机数请求,合约自动化执行等
dotenv 存储重要信息
@nomiclabs/hardhat-ethers 可用于部署合约
@openzeppelin/hardhat-upgrades 用于部署代理合约
@openzeppelin/hardhat-defender 用于合约安全防护
@nomiclabs/hardhat-etherscan 部署合约后自动在区块链浏览器上自动验证
chai 合约测试
@openzeppelin/test-helpers openzeppelin 团队的合约测试
npm install @openzeppelin/contracts
npm install @openzeppelin/contracts-upgradeable
npm install @chainlink/contracts
npm install dotenv
npm install @nomicfoundation/hardhat-toolbox
npm install @nomiclabs/hardhat-ethers
npm install @openzeppelin/hardhat-upgrades
npm install @openzeppelin/hardhat-defender
npm install @nomiclabs/hardhat-etherscan
npm install chai
npm install @openzeppelin/test-helpers
- 创建一个 .env 文件去存储关键信息
MNEMONIC=""
ALCHEMY_API_KEY=""
etherscanKey=""
DEFENDER_TEAM_API_KEY=""
DEFENDER_TEAM_API_SECRET_KEY=""
- 修改 hardhat.config.js
require('dotenv').config()
require("@nomicfoundation/hardhat-toolbox");
require('@nomiclabs/hardhat-ethers');
require('@openzeppelin/hardhat-upgrades');
require("@openzeppelin/hardhat-defender");
require("@nomiclabs/hardhat-etherscan");
module.exports = {
solidity: {
version: '0.8.17',
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,
},
};
- 使用 Wizard 开发合约 https://docs.openzeppelin.com/contracts/4.x/wizard
- 编译合约
npx hardhat compile
- 部署合约脚本(ethers6.0 可能不适用)
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 --network localhost
- 部署到 sepolia 测试网
npx hardhat run ./scripts/deploy.js --network sepolia