智能合约
SwapX V2 是一个二元智能合约系统。核心合约为与 SwapX 交互的各方提供基本的安全保障。外围合约与一个或多个核心合约交互,但本身不属于核心的一部分。
Core
核心由一个单例工厂和许多对组成,工厂负责创建和索引这些对。这些合约非常简约,甚至可以说是野蛮的。这样做的原因很简单,就是表面积较小的合约更容易推理,更不容易出错,而且功能更优雅。这种设计最大的好处可能是系统的许多所需属性可以直接在代码中声明,几乎没有出错的余地。然而,有一个缺点是核心合约有点不方便用户使用。事实上,在大多数情况下,不建议直接与这些合约交互。相反,应该使用外围合约。
Factory
工厂保存负责为配对提供支持的通用字节码。其主要工作是为每个唯一代币配对创建一个且仅一个智能合约。它还包含启动协议收费的逻辑。
Pairs
pair有两个主要目的:充当自动做市商和跟踪池代币余额。它们还公开可用于构建去中心化价格预言机的数据。
Periphery
外围是一组智能合约,旨在支持与核心进行特定领域的交互。由于 SwapX 的无权限性质,下面描述的合约没有特殊权限,实际上只是可能的外围类合约的一小部分。然而,它们是如何安全有效地与 SwapX V2 交互的有用示例。
Library
该库提供了多种用于获取数据和定价的便捷函数。
Router
使用该库的路由器完全支持前端提供交易和流动性管理功能的所有基本要求。值得注意的是,它原生支持多对交易(例如 x 到 y 到 z),并提供用于消除流动性的元交易。
设计决策
以下部分描述了 SwapX V2 中做出的一些值得注意的设计决策。除非你有兴趣深入了解 V2 的底层工作原理,或者编写智能合约集成,否则可以放心跳过这些内容!
Sending Tokens
通常,需要代币来执行某些功能的智能合约要求潜在的交互者首先在代币合约上进行批准,然后调用一个函数,该函数反过来调用代币合约上的 transferFrom。这不是V2对接受代币的方式。相反,对会在每次交互结束时检查其代币余额。然后,在下一次交互开始时,将当前余额与存储的值相差,以确定当前交互者发送的代币数量。有关为什么会这样的原因,请参阅白皮书,但要点是,在调用任何需要代币的方法之前,必须将代币转移到该对。
WXOC
与 SwapX V1 池不同,V2 对不直接支持 ETH,因此必须使用 WXOC 模拟 ETH⇄ERC-20 对。这种选择的动机是删除核心中特定于 XOC 的代码,从而获得更干净的代码库。但是,最 终用户可以完全不了解此实现细节,只需在外围包装/解包 XOC 即可。
路由器完全支持通过 XOC 与任何 WXOC 对进行交互。
Minimum Liquidity
为了改善舍入误差并增加流动性供应的理论最小报价单位,交易对会销毁第一个MINIMUM_LIQUIDITY池代币。对于绝大多数交易对来说,这将代表一个微不足道的值。销毁会在第一次流动性供应期间自动发生,此后总供应量将永远受到限制。