From 56caba963cb6fabfa729ac4a62ab0a2575f74093 Mon Sep 17 00:00:00 2001 From: WrBug Date: Wed, 3 Dec 2025 06:07:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20CopyOrderTrackingSe?= =?UTF-8?q?rvice=20=E4=B8=AD=E9=87=8D=E5=A4=8D=E5=A3=B0=E6=98=8E=20decrypt?= =?UTF-8?q?edPrivateKey=20=E7=9A=84=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 processSellTrade 方法中,将私钥解密移到方法开始处,只声明一次 - 后续签名订单和创建订单时复用同一个解密后的私钥 --- .../service/CopyOrderTrackingService.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/CopyOrderTrackingService.kt b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/CopyOrderTrackingService.kt index bf20fe5..9eb34be 100644 --- a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/CopyOrderTrackingService.kt +++ b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/CopyOrderTrackingService.kt @@ -465,10 +465,10 @@ class CopyOrderTrackingService( // 6. 计算卖出价格(应用价格容忍度) val sellPrice = calculateAdjustedPrice(leaderSellTrade.price.toSafeBigDecimal(), template, isBuy = false) - // 7. 创建并签名卖出订单 - // 解密私钥 + // 7. 解密私钥(在方法开始时解密一次,后续复用) val decryptedPrivateKey = decryptPrivateKey(account) + // 8. 创建并签名卖出订单 val signedOrder = try { orderSigningService.createAndSignOrder( privateKey = decryptedPrivateKey, @@ -487,7 +487,7 @@ class CopyOrderTrackingService( return } - // 8. 构建订单请求 + // 9. 构建订单请求 // 跟单订单使用 FAK (Fill-And-Kill),允许部分成交,未成交部分立即取消 // 这样可以快速响应 Leader 的交易,避免订单长期挂单导致价格不匹配 val orderRequest = NewOrderRequest( @@ -497,7 +497,7 @@ class CopyOrderTrackingService( deferExec = false ) - // 9. 创建带认证的CLOB API客户端 + // 10. 创建带认证的CLOB API客户端 val clobApi = retrofitFactory.createClobApi( account.apiKey!!, account.apiSecret!!, @@ -505,9 +505,7 @@ class CopyOrderTrackingService( account.walletAddress ) - // 10. 调用API创建卖出订单(带重试机制,重试时会重新生成salt并重新签名) - // 解密私钥 - val decryptedPrivateKey = decryptPrivateKey(account) + // 11. 调用API创建卖出订单(带重试机制,重试时会重新生成salt并重新签名) val createOrderResult = createOrderWithRetry( clobApi = clobApi,