在区块链应用开发中,尤其是涉及到去中心化交易(DEX)等复杂场景时,0x协议(0x Protocol)作为一个开源的、去中心化的点对点交易协议框架,扮演着重要角色,在将0x合约部署到主网之前,充分的测试是必不可少的,而测试网(如Ropsten, Kovan, Goerli, Sepolia等)为我们提供了一个无需真实资金、安全高效的测试环境,本文将详细介绍如何将0x合约部署并测试到以太坊测试网。
前期准备
在开始之前,请确保你已经具备以下条件和工具:
-
Node.js 和 npm/yarn: 确保你的系统已安装Node.js(建议LTS版本)和npm或yarn包管理器。
-
Truffle 或 Hardhat: 这是以太坊最流行的开发框架,用于编译、部署和测试智能合约,本文将以Truffle为例进行讲解,Hardhat的流程类似。
-
MetaMask: 一个常用的浏览器钱包插件,用于与测试网交互,管理测试网ETH。
-
测试网ETH: 你需要从测试网水龙头(Faucet)获取免费的测试网ETH,用于支付部署合约时的Gas费用,Goerli测试网的水龙头地址可以在以太坊官方文档或社区论坛找到。
-
0x合约源码: 你可以通过
npm安装0x的monorepo,或者从GitHub克隆0x协议的官方仓库。# 克隆0x协议仓库(推荐,包含完整示例和合约) git clone https://github.com/0xProject/0x-monorepo.git cd 0x-monorepo # 安装依赖 yarn install
或者,如果你只需要特定合约,可以通过
npm install @0x/contracts安装。 -
代码编辑器: 如VS Code,配合Solidity插件。
配置Truffle环境
-
初始化Truffle项目(如果还没有): 如果你的项目是独立的,可以运行:
truffle init
如果是从0x monorepo开始,通常已经包含了Truffle配置文件。
-
配置Truffle.js (或truffle-config.js): 打开
truffle-config.js文件,配置测试网网络信息,配置Goerli测试网(以太坊的官方测试网之一):module.exports = { networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*", // Match any network id }, goerli: { provider: () => new HDWalletProvider(mnemonic, `https://goerli.infura.io/v3/YOUR_INFURA_PROJECT_ID`), network_id: 5, // Goerli's id gas: 5500000, // Gas limit gasPrice: 20000000000, // 20 Gwei confirmations: 2, // # of confs to wait between deployments timeoutBlocks: 200, // # of blocks before a deployment times out skipDryRun: true // Skip dry run before migrations }, // 可以添加其他测试网,如ropsten, kovan, sepolia等 }, compilers: { solc: { version: "0.8.17", // 使用与0x合约兼容的Solidity版本 } } };mnemonic: 你的MetaMask钱包的助记词,注意:不要将助记词直接硬编码在代码中,建议使用环境变量管理。YOUR_INFURA_PROJECT_ID: 替换为你在Infura创建的项目ID(Infura提供免费的节点服务)。network_id: 对应测试网的ID,Goerli是5。gasPrice: 根据测试网的拥堵情况调整。
-
创建环境变量文件: 为了安全,建议使用
.env文件来存储敏感信息如助记词和Infura ID。 安装dotenv:npm install dotenv --save-dev
在项目根目录创建
.env文件:MNEMONIC=你的钱包助记词 INFURA_PROJECT_ID=你的Infura项目ID然后在
truffle-config.js开头引入:require('dotenv').config(); const HDWalletProvider = require("@truffle/hdwallet-provider");
编译0x合约
-
确定要部署的合约: 0x协议包含多个核心合约,如
Exchange.sol,TokenTransferProxy.sol,ERC20Proxy.sol等,你需要根据你的应用需求确定部署哪些合约,0x的示例项目会提供migrations脚本。 -
运行编译命令: 在项目根目录运行:
truffle compile
