From 42472f6b03e1c3dd3b6ad2b99384c304542135ef Mon Sep 17 00:00:00 2001 From: WrBug Date: Thu, 29 Jan 2026 03:45:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B9=B0=E5=85=A5?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=87=91=E9=A2=9D=E7=B2=BE=E5=BA=A6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复市场买入订单 makerAmount 和 takerAmount 的精度限制 - makerAmount (USDC) 限制为最多 2 位小数 - takerAmount (shares) 限制为最多 4 位小数 - 符合 Polymarket API 的要求,解决 'invalid amounts' 错误 --- .../copytrading/orders/OrderSigningService.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/orders/OrderSigningService.kt b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/orders/OrderSigningService.kt index c16db13..5e04636 100644 --- a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/orders/OrderSigningService.kt +++ b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/orders/OrderSigningService.kt @@ -94,14 +94,16 @@ class OrderSigningService { if (side.uppercase() == "BUY") { // BUY: makerAmount = price * size (USDC), takerAmount = size (shares) // 参考 clob-client/src/order-builder/helpers.ts 第 73-89 行 - val rawTakerAmt = roundDown(sizeDecimal, roundConfig.size) + // 注意:Polymarket API 要求市场买入订单的 makerAmount 最多 2 位小数,takerAmount 最多 4 位小数 + // takerAmount (shares) 使用 4 位小数 + val rawTakerAmt = roundDown(sizeDecimal, 4) var rawMakerAmt = rawTakerAmt.multiply(rawPrice) - // 如果 makerAmount 的小数位数超过 roundConfig.amount,进行特殊舍入处理 - if (decimalPlaces(rawMakerAmt) > roundConfig.amount) { - rawMakerAmt = roundUp(rawMakerAmt, roundConfig.amount + 4) - if (decimalPlaces(rawMakerAmt) > roundConfig.amount) { - rawMakerAmt = roundDown(rawMakerAmt, roundConfig.amount) + // makerAmount (USDC) 使用 2 位小数 + if (decimalPlaces(rawMakerAmt) > 2) { + rawMakerAmt = roundUp(rawMakerAmt, 2 + 4) + if (decimalPlaces(rawMakerAmt) > 2) { + rawMakerAmt = roundDown(rawMakerAmt, 2) } }