使用 Hardhat
npx hardhat init
// 注意用 npm 源 + proxy
安装 vscode solidity 插件
安装依赖
pnpm i hardhat ethers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-toolbox
直接编译
npx hardhat compile
// npm script
"compile": "hardhat compile",
部署到 testnet
- 添加 network 到
hardhat.config.ts
networks: {
testnet: {
url: `<rpc>`,
accounts: [
"<private key>",
],
},
},
- 添加 deploy script
"deploy": "hardhat ignition deploy ./ignition/modules/Lock.ts --network testnet"
运行 npm run deploy
验证合约
- 添加 sourcify 到
hardhat.config.ts
sourcify: {
enabled: true,
apiUrl: "...",
browserUrl: "...",
},
etherscan: {
enabled: false,
// apiKey: "..."
}
- 验证命令
npx hardhat verify --network testnet 0x...
// npm script
"verify": "hardhat verify --network testnet 0x..."
如果多次部署同一个合约,需要设置具体文件
"verify": "hardhat verify --network testnet --contract contracts/xxx.sol:xxx 0x..."
更新代码
solidity 代码不可直接升级,升级只能通过预先设计 proxy
更新代码 => 编译 => 写部署文件 .ts => 更新+运行部署 script
新增部署 ts 文件
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules'
const Test01Module = buildModule('<any-module-name>', m => {
const contract = m.contract('<contract-name>', [])
// const contract2 = m.contract("<contract-name-2>", []);
return { contract }
})
export default Test01Module