跳到主要内容
AI教程

使用套利合约部署器从终端部署和管理 Solidity 合约

了解如何安装和配置套利合约部署器、编译 Solidity 文件、将合约部署到以太坊主网、调用读写函数、查看 Gas 成本、管理已保存的部署,并运行内存池流。

使用套利合约部署器从终端部署和管理 Solidity 合约

你将学到什么

Arbitrage Contract Deployer 是一个 Node.js 命令行工具包,可直接从终端编译、部署和交互使用 Solidity 合约。本教程将介绍如何安装它、将钱包连接到以太坊主网、部署合约、使用交互式菜单,以及监控受支持的内存池活动。

重要提示:此项目仅适用于以太坊主网。交易使用真实 ETH,可能产生实际费用。确认前请仔细检查每个合约、地址和交易。

主要功能

  • 按需使用 solc 编译 Solidity 合约,无需 Remix 或 Hardhat。
  • 从本地文件、node_modules、GitHub 以及兼容 npm 的 CDN 解析导入内容。
  • 通过 RPC 连接将合约部署到以太坊主网。
  • 将已部署地址、ABI 和日期保存到 deployments.json。
  • 提供基于方向键的界面,用于部署合约和调用函数。
  • 将合约函数分类为只读、写入或可支付操作。
  • 预览 Gas 估算、费用以及大致的 ETH 和美元成本。
  • 使用 Chainlink 预言机获取 ETH/USD 汇率,以估算费用。
  • 可运行独立的内存池流处理进程,并输出格式化的交易信息。

前置条件

你需要 Node.js 18 或更高版本,因为项目要求使用内置的 fetch 功能。README 还列出了 npm 9 或更高版本的要求。你需要一个以太坊主网 RPC 端点、一个钱包私钥,以及足够支付你确认的部署或写入交易的 ETH。

安装项目

1. 克隆仓库

克隆项目并进入其目录。请将仓库路径替换为你所使用的仓库位置。

git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>

你也可以将仓库下载为 ZIP 压缩包,然后解压到本地文件夹。

2. 安装依赖

安装 package.json 中声明的软件包:

npm install

这会安装两个主要依赖:

  • ethers:用于提供商、钱包、ABI 处理和交易。
  • solc:用于从 Node.js 编译 Solidity。

安装完成后,项目中应包含一个 node_modules 目录。如果没有,请检查 npm install 的输出,并在继续之前解决安装错误。

配置钱包和 RPC 连接

在项目根目录创建名为 .env 的文件。添加你的私钥和以太坊主网 RPC URL:

PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.com

README 列出了以下示例 RPC 端点:

  • https://ethereum-rpc.publicnode.com
  • https://eth.llamarpc.com
  • https://cloudflare-eth.com
  • https://mainnet.infura.io/v3/<KEY>
  • https://eth-mainnet.g.alchemy.com/v2/<KEY>

请妥善保管 .env,并确保它已包含在 .gitignore 中。该文件包含凭据,绝不能提交到公共仓库。

启动交互式部署工具

使用以下命令启动主界面:

node start

如果项目定义了 npm 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

使用方向键选择项目,按 Enter 确认选择;程序请求交易批准时,使用显示的 OK 或 Cancel 控件。按 Ctrl+C 退出。

编译并部署 Solidity 合约

1. 添加或选择 Solidity 文件

将 Solidity 文件放入项目目录,或通过部署菜单选择现有的 .sol 文件。编译器会根据文件名构建合约,并自动解析受支持的导入内容。

2. 查看编译和部署详情

从主菜单中选择 Deploy <file>.sol。应用会编译合约、准备部署交易,并在请求确认前预览其 Gas 需求。

3. 确认交易

查看 Gas 估算、当前费用、最高费用、钱包余额和合约详情。仅当这些数值及目标网络均正确时才确认。交易挖矿完成后,工具会显示已部署地址和 Etherscan 链接。

部署信息会保存在本地的 deployments.json 中。这样,之后重新打开已部署合约时,无需再次输入其地址和 ABI。

了解 Gas 预览

在部署和受支持的写入操作之前,工具会显示 Gas 预览。其计算流程遵循 README 中记录的过程:

  1. estimateGas 提供预计的 Gas 需求。
  2. Gas 限额按预计值加上 10% 缓冲计算。
  3. 每单位 Gas 的最高费用按基础费用的两倍加上优先费用计算。
  4. 界面会同时显示预计的当前区块费用和可能的最高费用。
  5. 使用 Chainlink ETH/USD 汇率估算美元费用。

预览可能包含预计 Gas 单位、Gas 上限、基础费用、优先费用、每单位 Gas 的最高费用、预计 ETH 成本、最高 ETH 成本和钱包余额等数值。请将最高费用视为上限估算,并确认余额足以支付该交易。

打开已保存的部署并调用函数

选择 Open deployed <name>,即可使用之前保存在 deployments.json 中的合约。界面会根据函数行为标注可用函数:

  • [read] 表示不会发送交易的 view 和 pure 函数。
  • [write] 表示需要交易的状态变更函数。
  • [payable] 表示可以接收 ETH 的函数。
  • [info] Contract balance 显示合约余额。
  • <- Back to main menu 返回主菜单。

只读调用可用于检查合约状态。写入和 payable 调用会经过 Gas 预览,并要求确认后才会发送交易。界面还提供 OK 操作,因此你可以取消操作,而不是提交操作。

运行内存池流

内存池流作为独立进程运行。使用以下命令手动启动:

node mempool.js

该流会格式化检测到的活动,并显示买方、路由器、ETH 数量、代币、方法、交易 ID 以及结果状态等详细信息。README 还展示了该流支持的工作流程中的交易和利润显示。

代币源文件是 erc20.json,其格式遵循来自 Sequence Token Directory 的 Uniswap Token List Schema。加载器支持直接使用代币数组,或使用包含 tokens 数组的对象。它会过滤无效地址和零地址,保留 chainId 等于 1 的代币,并提取每个代币的地址、符号和名称。

如果缺少 erc20.json,该流会回退到随机地址并显示警告。使用 Ctrl+C 停止该流,或者在交互界面出现停止选项时使用该选项。

使用 Solidity 导入

内置编译器支持多种导入方式:

  • GitHub URL,例如 import "https://github.com/Uniswap/v3-core/...";
  • npm 风格的 CDN 导入,例如 import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  • 本地 node_modules 中可用的软件包。
  • 相对本地导入,例如 import "./MyLib.sol";

使用 github.com/owner/repo/blob/branch/path 形式的 GitHub 链接会自动转换为对应的 raw.githubusercontent.com 链接。

项目结构

主要文件和目录的作用如下:

  • start.js 是 node start 的入口点。
  • deploy.js 包含部署逻辑和交互式菜单。
  • mempool.js 运行独立的内存池流。
  • erc20.json 包含该流使用的代币列表。
  • deployments.json 存储已保存的部署数据,并会自动创建。
  • lib/ui.js 管理颜色、菜单、框体和日志记录。
  • lib/env.js 处理环境变量、部署数据和区块浏览器链接。
  • lib/compile.js 处理编译和导入解析。
  • lib/chain.js 处理 Gas、收据和 ETH 价格。
  • lib/contract.js 处理部署、函数调用和流启动。

高级提示和操作检查

  • 确认 RPC 端点连接到 Ethereum 主网。应用要求链 ID 为 1,并拒绝其他网络。
  • 在确认部署或写入操作前检查钱包余额。
  • 将 deployments.json 作为本地部署数据使用,避免提交敏感信息或非预期的测试信息。
  • 提交交易前检查合约源代码、导入的依赖项、目标地址和 payable 数值。
  • 使用 node -e "console.log(require('solc').version())" 检查已安装的 Solidity 编译器版本。
  • 使用 ls node_modules | head 确认依赖项是否存在。
  • 请注意,根据当前路线图,项目不提供多签支持、导出为 TypeScript 类型的 ABI,也不提供 Tenderly 交易模拟。

安全检查清单

  1. 绝不公开或提交 PRIVATE_KEY。
  2. 将 .env 保留在 .gitignore 中。
  3. 使用仅包含本次操作所需资金的钱包。
  4. 选择 OK 前阅读每次 Gas 预览。
  5. 确认界面报告的网络为 Ethereum 主网,链 ID 为 1。
  6. 使用写入或 payable 函数前仔细检查合约和地址。

实用命令

npm install
node start
npm start
node mempool.js
node -e "console.log(require('solc').version())"
ls node_modules | head

结论

Arbitrage Contract Deployer 提供了基于终端的工作流程,用于编译 Solidity、将合约部署到 Ethereum 主网、重新打开已保存的部署、调用合约函数以及查看交易成本。配置好 Node.js、依赖项和安全的 .env 文件后,交互式菜单会引导你完成部署和合约操作,同时显示 Gas 和 ETH/USD 估算。由于所有主网交易都使用真实资金,请谨慎操作,并仅在检查交易详情后确认每笔交易。

该项目采用 MIT 许可证发布。提交贡献时应避免将凭据提交到版本库,并确保 deployments.json 仅包含适当的本地数据。