0x协议作为一个开源的、去中心化的协议,为以太坊生态中的去中心化交易(DEX)提供了强大的基础设施,它通过中继订单簿和智能合约撮合,实现了代币的高效、安全交易,虽然0x协议在以太坊主网上运行良好,但在许多场景下,如企业级应用、内部结算系统、游戏经济闭环或DApp测试等,我们更倾向于在以太坊私链或测试网上进行部署和定制。

本文将详细探讨如何在以太坊私链上部署0x协议,并深入讲解如何对其进行修改,以满足特定的业务需求和技术要求。


第一部分:在以太坊私链上部署0x协议

在开始修改之前,我们必须先成功部署一个可用的0x协议实例,这个过程通常遵循以下步骤:

环境准备

  • 以太坊私链: 你需要一个运行中的以太坊节点,这可以是使用 gethParity 创建的个人私有网络,也可以是使用 Ganache 提供的本地开发链,Ganache因其友好的图形界面和预设的测试账户,成为开发者的首选。
  • 开发工具: 安装 Node.js (v12+) 和 Yarn 或 npm。
  • 0x协议源码: 从0x协议的官方GitHub仓库克隆最新源码。
    git clone https://github.com/0xProject/0x-monorepo.git
    cd 0x-monorepo
    yarn install

部署智能合约

0x协议的核心是一系列智能合约,包括 ExchangeERC20TokenProxyERC721TokenProxy 等,部署过程通常通过 trufflehardhat 这样的开发框架来完成。

  • 配置网络:truffle.jshardhat.config.js 文件中,添加你的私链网络配置,包括节点URL、部署账户的私钥和Gas价格等。

  • 编译合约: 运行编译命令,将Solidity源码编译为字节码。

    # 使用 Truffle
    truffle compile
    # 使用 Hardhat
    npx hardhat compile
  • 执行部署: 运行部署脚本,将合约部署到你的私链上。

    # 使用 Truffle
    truffle migrate --network your_private_network_name
    # 使用 Hardhat
    npx hardhat deploy --network your_private_network_name
  • 记录地址: 部署成功后,务必记下所有核心合约的地址,特别是 Exchange 合约的地址,因为它是后续所有交互的中心。

验证部署

部署完成后,你可以使用 web3.jsethers.js 等库与你的私链交互,调用 Exchange 合约的公开方法(如 getFeeTakerMaker())来验证合约是否已正确部署并运行。


第二部分:修改以太坊私链上的0x协议

部署只是第一步,真正的定制化在于修改,修改0x协议可以分为非破坏性修改破坏性修改两大类。

非破坏性修改:无需升级合约

这类修改主要围绕协议的参数和外围工具,不触及核心合约的业务逻辑。

  • 修改交易费率: 0x协议允许在创建订单时设置takerFeemakerFee,你可以在你的应用层面,限制或建议用户使用特定的费率结构,例如在私链上完全免除交易费以鼓励使用。

  • 修改订单签名验证逻辑: 虽然核心合约的签名验证逻辑是固定的,但你可以通过在前端或中继层添加一个“网关”或“代理”层来实现,你可以要求所有订单都由你的中心化服务进行预签名,并添加额外的业务逻辑验证(如用户身份、交易额度限制等),然后再将其转发给标准的0x协议流程。

  • 自定义资产类型: 0x协议原生支持ERC20和ERC721代币,如果你有自定义的资产标准(如ERC1155),你可以创建一个新的AssetProxy配图