第一章:环境搭建——Node.js与Hardhat框架安装、节点配置、钱包管理、本地测试链部署
说实话,每次带新人入行,我最怕的就是环境搭建这一步。明明代码逻辑都懂,结果卡在装环境上,一卡就是半天。我自己早期也踩过不少坑,所以这一章,咱们把基础打扎实。
套利机器人说白了,就是一段程序在链上找差价。但程序跑在哪?怎么跟链交互?私钥放哪才安全?这些就是本章要解决的问题。
本章核心目标:在你的电脑上,搭建一套完整的开发环境。从Node.js开始,到能本地部署一条测试链,并成功连接钱包。
1.1 Node.js:一切的基础
Node.js 是 JavaScript 的运行环境。我们的套利脚本、Hardhat 框架,全都跑在它上面。没有 Node.js,后面什么都干不了。
安装步骤:
- 去 nodejs.org 下载 LTS 版本(长期支持版)。我个人习惯用 LTS,稳定,省心。
- 双击安装,一路 Next 就行。记得勾选「Add to PATH」。
- 打开终端(CMD 或 PowerShell),验证安装:
node -v
npm -v
能看到版本号,就说明装好了。如果报错,大概率是 PATH 没配好。重启终端试试,不行就手动加一下环境变量。
小技巧:我建议用 nvm(Node Version Manager)来管理 Node.js 版本。尤其是你同时做多个项目时,不同项目可能依赖不同版本的 Node。nvm 可以随时切换,非常方便。
1.2 Hardhat:智能合约开发框架
Hardhat 是目前最流行的 Solidity 开发框架之一。它集成了编译、测试、部署、调试等功能。说白了,你写合约、跑测试、部署到链上,全在 Hardhat 里完成。
安装 Hardhat:
mkdir arbitrage-bot
cd arbitrage-bot
npm init -y
npm install --save-dev hardhat
然后初始化一个 Hardhat 项目:
npx hardhat init
选「Create an empty hardhat.config.js」。这样会生成一个最干净的项目结构。我个人喜欢从零开始搭,这样每个配置都心里有数。
项目结构大概是这样:
arbitrage-bot/
├── contracts/ # 存放 Solidity 合约
├── scripts/ # 部署脚本
├── test/ # 测试文件
├── hardhat.config.js # 核心配置文件
└── package.json
1.3 Infura / Alchemy:连接以太坊的桥梁
你的机器人怎么跟以太坊主网交互?总不能自己跑一个全节点吧?那太费资源了。Infura 和 Alchemy 就是干这个的——它们提供远程节点服务,你通过 API 就能发送交易、查询链上数据。
配置步骤:
- 去 infura.io 或 alchemy.com 注册账号。
- 创建一个新项目,选择以太坊主网或 Sepolia 测试网。
- 复制你的 API Key 或 HTTPS 端点地址。
然后在 hardhat.config.js 里配置:
require("@nomicfoundation/hardhat-toolbox");
module.exports = {
solidity: "0.8.19",
networks: {
sepolia: {
url: "https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID",
accounts: ["你的私钥"]
}
}
};
警告:千万不要把私钥直接写在代码里!尤其是你要把代码上传到 GitHub 的时候。我见过太多人因为这个丢币了。正确的做法是用环境变量,或者用 Hardhat 的 hardhat-wallet 插件。
我个人习惯用 .env 文件来管理敏感信息:
npm install dotenv
然后在 hardhat.config.js 里:
require("dotenv").config();
module.exports = {
networks: {
sepolia: {
url: process.env.SEPOLIA_URL,
accounts: [process.env.PRIVATE_KEY]
}
}
};
1.4 MetaMask 钱包与私钥安全管理
MetaMask 是你跟链上交互的「手」。但私钥一旦泄露,资产就没了。所以这一节,咱们重点讲安全。
创建钱包:
- 安装 MetaMask 浏览器插件。
- 创建新钱包,记好助记词。最好手写下来,别存电脑里。
- 切换到 Sepolia 测试网。
导出私钥:
- 在 MetaMask 里点击账户详情。
- 点击「导出私钥」,输入密码。
- 复制私钥,粘贴到
.env文件里。
我曾经犯过的错:有一次我把私钥直接写在了代码里,然后 push 到了 GitHub 公开仓库。不到 10 分钟,钱包里的测试币就被转走了。虽然只是测试币,但也够闹心的。从那以后,我所有项目都强制用 .env 管理私钥。
安全建议:
- 永远不要将私钥上传到任何代码仓库。
- 使用硬件钱包(如 Ledger)存储大额资产。
- 测试网用单独的私钥,不要跟主网混用。
- 定期更换私钥,尤其是你怀疑环境不安全时。
1.5 Ganache:本地测试链
Ganache 是一个本地模拟的以太坊区块链。你可以在上面随意部署合约、发送交易,不用花真金白银。而且它跑得飞快,非常适合开发调试。
安装 Ganache:
npm install -g ganache
启动:
ganache
默认会创建 10 个账户,每个账户有 1000 ETH(假的)。还会自动生成一个 RPC 地址:http://127.0.0.1:8545。
在 hardhat.config.js 里添加本地网络:
networks: {
localhost: {
url: "http://127.0.0.1:8545"
}
}
小技巧:Ganache 启动后,你可以用 ganache --fork https://mainnet.infura.io/v3/YOUR_KEY 来分叉主网。这样你可以在本地模拟主网的状态,比如 Uniswap 的流动性池。这对套利机器人的测试来说,简直是神器。
1.6 验证环境:跑一个简单的测试
环境搭好了,咱们验证一下能不能正常工作。
写一个最简单的合约 contracts/Test.sol:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract Test {
function hello() public pure returns (string memory) {
return "Hello, Arbitrage!";
}
}
写一个部署脚本 scripts/deploy.js:
const hre = require("hardhat");
async function main() {
const Test = await hre.ethers.getContractFactory("Test");
const test = await Test.deploy();
await test.deployed();
console.log("合约部署地址:", test.address);
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
在终端运行:
npx hardhat run scripts/deploy.js --network localhost
如果看到合约地址打印出来,恭喜你,环境搭建成功了!
总结一下:这一章我们装了 Node.js、Hardhat、配置了 Infura/Alchemy、管理了 MetaMask 私钥、启动了 Ganache 本地链。每一步都是后面实战的基础。别嫌麻烦,基础打牢了,后面写套利逻辑的时候才能心无旁骛。
个人经验:我刚开始做套利机器人时,总觉得环境搭建浪费时间,恨不得直接写核心逻辑。结果每次调试都花大量时间在「为什么连不上链?」「为什么私钥不对?」这种问题上。后来我学乖了,花半天时间把环境彻底配好,后面写代码的效率反而高了好几倍。