hardhat学习笔记-hardhat的搭建和部署

198 阅读2分钟

一、环境配置与项目初始化

  1. Node.js环境
    要求Node.js ≥14.0(推荐v20.12.0 LTS),安装完成后验证版本:

    node -v && npm -v
    
  2. Hardhat核心安装
    通过npm初始化项目并安装核心依赖:

    npm init -y
    npm install --save-dev hardhat @nomicfoundation/hardhat-ethers ethers hardhat-deploy hardhat-deploy-ethers --legacy-peer-deps
    

    若遇到依赖冲突,使用--force强制安装

  3. 项目初始化
    运行交互式配置向导创建基础结构:

    npx hardhat init
    

    选择TypeScript模板以获得更好的类型支持。


二、网络配置与私钥管理

  1. 多网络配置方案
    hardhat.config.ts中定义开发与测试网络:

    import { HardhatUserConfig } from "hardhat/config";
    import "@nomicfoundation/hardhat-ethers";
    import "hardhat-deploy";
    
    const config: HardhatUserConfig = {
      solidity: "0.8.28",
      networks: {
        hardhat: { chainId: 31337 },  // 本地开发链
        sepolia: {
          url: "https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY",
          chainId: 11155111,
          accounts: [process.env.PRIVATE_KEY!]
        }
      },
      etherscan: {
        apiKey: process.env.ETHERSCAN_API_KEY
      }
    };
    export default config;
    
  2. 私钥安全存储
    使用dotenv加载环境变量:

    npm install dotenv
    

    创建.env文件:

    PRIVATE_KEY=你的钱包私钥
    ALCHEMY_API_KEY=你的Alchemy密钥
    ETHERSCAN_API_KEY=你的Etherscan密钥
    

三、合约部署与验证优化

  1. 部署脚本编写
    创建deploy/01_deploy_fundme.ts

    import { HardhatRuntimeEnvironment } from "hardhat/types";
    import { DeployFunction } from "hardhat-deploy/types";
    
    const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => {
      const { deploy } = hre.deployments;
      const [deployer] = await hre.ethers.getSigners();
      
      await deploy("FundMe", {
        from: deployer.address,
        args: [1000],  // 构造函数参数
        log: true,
      });
    };
    export default func;
    
  2. 多网络部署命令
    • 本地链部署:npx hardhat deploy --network hardhat • 测试网部署:npx hardhat deploy --network sepolia --reset
    --reset参数强制重新部署

  3. 合约验证与超时处理
    安装undici提升HTTP性能:

    npm install undici --save-dev
    

    在配置中添加超时设置:

    // hardhat.config.ts
    import { Agent } from 'undici';
    
    export default {
      networks: {
        sepolia: {
          httpHeaders: {
            'User-Agent': 'Hardhat'
          },
          timeout: 120000,  // 120秒超时
          httpAgent: new Agent({
            keepAliveTimeout: 30000,
            keepAliveMaxTimeout: 60000
          })
        }
      }
    }
    

    验证合约:

    npx hardhat verify --network sepolia 0xContractAddress 1000
    

四、调试与监控工具

  1. 区块链浏览器
    • Sepolia测试网:sepolia.etherscan.io/ • 主网浏览器:etherscan.io/

  2. RPC节点管理
    访问Chainlist快速获取节点配置:chainlist.org/
    搜索"Sepolia"获取最新RPC端点。


五、最佳实践建议

  1. 网络稳定性
    部署期间避免切换VPN,建议使用固定IP的节点服务(如Alchemy)

  2. 版本控制
    package.json中锁定依赖版本防止兼容性问题:

    "resolutions": {
      "@nomicfoundation/hardhat-ethers": "3.0.4",
      "ethers": "6.11.0"
    }
    
  3. 自动化测试
    配置CI/CD流水线实现自动化部署验证,参考Hardhat官方文档的GitHub Actions模板。

通过以上配置,开发者可构建高效的Solidity开发工作流,结合undici优化网络请求,显著降低部署过程中的超时风险。建议定期检查Hardhat GitHub仓库获取最新插件更新。