Hardhat学习笔记-环境变量管理

162 阅读2分钟

环境变量ChainID 与 DataFeed 地址获取指南


一、环境变量加密管理(env-enc

1. 安装与初始化

npm install @env-enc/cli --save-dev  # 安装工具
npx env-enc set-pw                   # 设置加密密码(首次使用)

• 生成 .env.enc 加密文件,密码存储在系统钥匙串中。 • 加密文件需提交到版本控制,明文 .env 文件需加入 .gitignore

2. 添加/编辑变量

npx env-enc set                      # 交互式添加变量(KEY=VALUE)
npx env-enc edit                     # 编辑已有变量

• 示例变量:

SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY
PRIVATE_KEY=0x...
ETHERSCAN_API_KEY=ABCD123

3. 代码中读取变量
在 JavaScript/TypeScript 中:

require('@env-enc/config'); // 引入加密环境变量
console.log(process.env.PRIVATE_KEY); 

二、环境变量明文管理(dotenv

1. 安装与配置

npm install dotenv --save-dev

在入口文件(如 hardhat.config.js)中加载:

require('dotenv').config({ path: __dirname + '/.env' }); // 指定路径

2. 框架差异

框架变量前缀访问方式
Hardhatprocess.env.KEY
Vite/ReactVITE_import.meta.env.VITE_KEY

三、ChainID 获取(chainlist.org

1. 主流网络 ChainID

网络名称ChainID类型
Ethereum1主网
Goerli5测试网
Sepolia11155111测试网
Polygon137主网
Mumbai80001测试网

2. 动态获取 ChainID
在代码中通过 Provider 获取:

const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL);
const network = await provider.getNetwork();
console.log(network.chainId); // 输出:11155111(Sepolia)

四、DataFeed 地址获取(Chainlink 官方文档)

image.png

1. 价格预言机地址查询
访问 Chainlink Data Feeds 选择网络和交易对。

2. 常用网络示例

网络交易对地址精度(小数位)
EthereumETH/USD0x5f4eC3Df9cbd43714FE2740f5E3616155c5b84198
SepoliaETH/USD0x694AA1769357215DE4FAC081bf1f309aDC3253068
PolygonMATIC/USD0xAB594600376Ec9fD91F8e885dADF0CE036862dE08

3. 合约中初始化预言机

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract FundMe {
    AggregatorV3Interface internal priceFeed;
    
    constructor() {
        priceFeed = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306);
    }
    
    function getPrice() public view returns (uint256) {
        (, int256 answer,,,) = priceFeed.latestRoundData();
        return uint256(answer * 1e10); // 转换为 18 位精度(ETH 单位)
    }
}

五、注意事项

  1. 加密环境变量
    • 提交 .env.enc 到仓库,但禁止提交明文 .env。 • 团队协作时通过安全渠道共享加密密码。

  2. DataFeed 精度处理
    • 根据返回值的精度(如 8 位)调整计算,例如:

    uint256 ethInUsd = (ethAmount * price) / 1e18; // 对齐单位
    
  3. 多网络配置
    hardhat.config.js 中动态设置网络:

    module.exports = {
      networks: {
        sepolia: {
          url: process.env.SEPOLIA_RPC_URL,
          accounts: [process.env.PRIVATE_KEY],
          chainId: 11155111
        }
      }
    };
    

通过以上步骤,可安全管理敏感信息并快速集成链上数据源。