环境变量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. 框架差异
| 框架 | 变量前缀 | 访问方式 |
|---|---|---|
| Hardhat | 无 | process.env.KEY |
| Vite/React | VITE_ | import.meta.env.VITE_KEY |
三、ChainID 获取(chainlist.org)
1. 主流网络 ChainID
| 网络名称 | ChainID | 类型 |
|---|---|---|
| Ethereum | 1 | 主网 |
| Goerli | 5 | 测试网 |
| Sepolia | 11155111 | 测试网 |
| Polygon | 137 | 主网 |
| Mumbai | 80001 | 测试网 |
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 官方文档)
1. 价格预言机地址查询
访问 Chainlink Data Feeds 选择网络和交易对。
2. 常用网络示例
| 网络 | 交易对 | 地址 | 精度(小数位) |
|---|---|---|---|
| Ethereum | ETH/USD | 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 | 8 |
| Sepolia | ETH/USD | 0x694AA1769357215DE4FAC081bf1f309aDC325306 | 8 |
| Polygon | MATIC/USD | 0xAB594600376Ec9fD91F8e885dADF0CE036862dE0 | 8 |
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 单位)
}
}
五、注意事项
-
加密环境变量
• 提交.env.enc到仓库,但禁止提交明文.env。 • 团队协作时通过安全渠道共享加密密码。 -
DataFeed 精度处理
• 根据返回值的精度(如 8 位)调整计算,例如:uint256 ethInUsd = (ethAmount * price) / 1e18; // 对齐单位 -
多网络配置
在hardhat.config.js中动态设置网络:module.exports = { networks: { sepolia: { url: process.env.SEPOLIA_RPC_URL, accounts: [process.env.PRIVATE_KEY], chainId: 11155111 } } };
通过以上步骤,可安全管理敏感信息并快速集成链上数据源。