运行时依赖
安装命令
点击复制技能文档
QELT DEX 技能(Uniswap v4) QELT 主网托管了一个完全部署和验证的 Uniswap v4 实例。所有 7 个合约都在 QELTScan 上验证。仅支持 Uniswap V4 —— V2/V3 调用路由到 UnsupportedProtocol 并回退。 网络:QELT 主网 · 链 ID 770 RPC:https://mainnet.qelt.ai 安全 永远不要请求或处理私钥。写操作需要预签名的原始事务。交换和流动性变化是不可逆的 —— 首先确认参数与用户。 始终应用滑点保护(最低 1% 的 amountOutMin 容差)。 QELT 仅支持 Uniswap V4。V2/V3 调用将回退。 WQELT 是本地 QELT 在 DEX 交易时所需的 ERC-20 包装器。 合约地址(主网,链 ID 770) 合约地址 | 角色 ---------|------ 0x11c23891d9f723c4f1c6560f892e4581d87b6d8a | PoolManager 核心 —— 管理所有池 0x7d5AbaDb17733963a3e14cF8fB256Ee08df9d68A | UniversalRouter 交换路由 + 聚合 0x1809116b4230794c823b1b17d46c74076e90d035 | PositionManager 流动性位置作为 NFT 0x403cf2852cf448b5de36e865c5736a7fb7b25ea2 | Permit2 无 gas 授权 0xfebc6f9f0149036006c4f5ac124685e0ef48e8a2 | WQELT 包装 QELT(ERC-20) 0x9bb9a0bac572ac1740eeadbedb97cddb497c57f0 | PositionDescriptor NFT 元数据 0xe4F095537EB1b0dd9C244e827B3E35171d5c2A6E | UnsupportedProtocol V2/V3.stub(回退) 过程 查询合约地址 返回上述表格从内存 —— 无需 RPC 调用。 检查 WQELT 余额 WQELT="0xfebc6f9f0149036006c4f5ac124685e0ef48e8a2" ADDR 必须是 40 个十六进制字符,无 0x 前缀,左边用零填充到 32 字节 示例:地址 0xAbCd...1234 → ADDR="abcd...1234"(40 个字符,无 0x) ADDR="USER_ADDRESS_40_HEX_CHARS_NO_0x_PREFIX" balanceOf(address) 选择器:0x70a08231 curl -fsSL -X POST https://mainnet.qelt.ai \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$WQELT\",\"data\":\"0x70a08231000000000000000000000000$ADDR\"},\"latest\"],\"id\":1}" 将十六进制结果除以 10^18 以获取 WQELT 余额。 查询池状态 池状态需要两个 eth_calls 到 PoolManager 使用 ABI 编码的 getSlot0(bytes32) 和 getLiquidity(bytes32)。 池 ID = keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks)) POOL_MANAGER="0x11c23891d9f723c4f1c6560f892e4581d87b6d8a" getSlot0(bytes32 poolId) —— 返回 sqrtPriceX96、tick、protocolFee、lpFee curl -fsSL -X POST https://mainnet.qelt.ai \ -H "Content-Type: application/json" \ -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"$POOL_MANAGER\",\"data\":\"0x\"},\"latest\"],\"id\":1}" Slot0 解码:sqrtPriceX96(当前价格)、tick(当前 tick)、lpFee(0.3% = 3000)。 将 QELT 包装为 WQELT 写操作 —— 确认与用户。需要预签名的事务调用 WQELT 的 deposit(),值 = 金额_wei。 提交预签名事务 curl -fsSL -X POST https://mainnet.qelt.ai \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xSIGNED_TX_HEX"],"id":1}' WQELT deposit() 选择器:0xd0e30db0 · withdraw(uint256) 选择器:0x2e1a7d4d 通过 UniversalRouter 交换代币 写操作 —— 确认与用户。需要预签名的事务通过 UniversalRouter.execute(commands, inputs, deadline)。 流程:授权代币 → Permit2 → Permit2 授权 → UniversalRouter → 编码 V4_SWAP_EXACT_IN 命令 → 调用 execute。 池键结构 PoolKey { currency0: address // 较低地址(或地址(0)表示本地 QELT) currency1: address // 较高地址 fee: uint24 // 3000 = 0.3%,500 = 0.05%,10000 = 1% tickSpacing: int24 // 60 表示 0.3% 费用层 hooks: address // 地址(0)表示无钩子 } 常见费用层: 费用 % | 滑点间距 | 用例 ------|------|------ 100 | 0.01% | 1 稳定币对 500 | 0.05% | 10 相关资产 3000 | 0.30% | 60 大多数对 10000 | 1.00% | 200 波动/异国情调 WQELT 代币地址:0xfebc6f9f0149036006c4f5ac124685e0ef48e8a2 比例:1 WQELT = 1 QELT(始终,无费用) 包装:调用 deposit(),ETH 值 = QELT 金额 解包:调用 withdraw(uint256 amount) 以恢复本地 QELT UniversalRouter 配置 { permit2: '0x403cF2852Cf448b5DE36e865c5736A7Fb7B25Ea2', weth9: '0xfEbC6f9F0149036006C4F5Ac124685E0EF48e8A2', // WQELT v4PoolManager: '0x11C23891d9F723c4F1c6560f892E4581D87B6d8a', v4PositionManager: '0x1809116b4230794C823B1b17d46c74076e90D035', // V2/V3 地址都指向 UnsupportedProtocol: v2Factory: '0xe4F095537EB1b0dd9C244e827B3E35171d5c2A6E', v3Factory: '0xe4F095537EB1b0dd9C244e827B3E35171d5c2A6E', } 常见错误 错误原因 | 解决方案 ------|------ UnsupportedProtocol | V2/V3 调用尝试 | 使用 V4 路径 滑点超过 | 价格移动 | 增加 amountOutMin 容差 截止日期超过 | 广播速度慢 | 使用现在 + 1800 秒 Permit2 签名过期 | 授权超时 | 重新签名具有新鲜截止日期