JAMMRouter 合约

JAMMRouter是JAMM DEX的用户接口层合约,为用户提供友好的交易和流动性管理功能。它封装了复杂的底层逻辑,支持多跳交换、自动路径计算、截止时间保护,并与WJU深度集成,使用户能够直接使用JU代币进行交易。

合约基本信息

contract JAMMRouter is IJAMMRouter02 {
    address public immutable override factory;
    address public immutable override WJU;
    
    constructor(address _factory, address _WJU) {
        factory = _factory;
        WJU = _WJU;
    }
}

不可变变量

  • factory: JAMMFactory合约地址

  • WJU: WJU包装代币合约地址

修饰符

截止时间保护

所有交易函数都使用此修饰符,确保交易在指定时间内执行。

ETH接收

Router只接受来自WJU合约的ETH,用于WJU解包装时的ETH转账。

流动性管理

内部流动性计算

计算逻辑

  1. 检查交易对是否存在,不存在则创建

  2. 获取当前储备量

  3. 如果是首次添加,使用期望数量

  4. 否则计算最优比例,确保不超过最小数量要求

添加流动性

添加JU流动性

JU处理流程

  1. 计算最优数量

  2. 转入代币到交易对

  3. 将JU包装为WJU并转入交易对

  4. 铸造LP代币

  5. 退还多余的JU

移除流动性

移除JU流动性

Permit支持

带Permit的流动性移除

Permit优势

  • 无需预先调用approve

  • 一次交易完成授权和操作

  • 减少Gas消耗和交易步骤

代币交换

内部交换逻辑

多跳交换逻辑

  1. 验证路径和费率数组的长度关系

  2. 遍历交换路径

  3. 计算每一跳的输出数量

  4. 确定下一跳的接收地址

  5. 调用交易对的swap函数

精确输入交换

精确输出交换

JU代币交换

用JU购买代币

卖出代币换JU

支持转账费代币

内部交换逻辑(支持转账费)

转账费代币处理

  • 不预先计算数量,而是基于实际到账数量

  • 每一跳都重新计算输入数量

  • 适用于转账时收费的代币

支持转账费的交换函数

查询函数

价格查询

输出数量计算

输入数量计算

多跳数量计算

使用示例

代币交换

JU代币交换

添加流动性

价格查询

Last updated