fix(order): 修复订单签名 salt 并发碰撞问题

- 使用 AtomicLong + 时间戳保证 generateSalt 在并发下唯一
- 避免尾盘策略 FIXED 模式预签双单等场景产生相同 salt 导致订单冲突

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WrBug
2026-02-14 15:32:19 +08:00
co-authored by Cursor
parent 9fef4bea59
commit 5074bb4f28
@@ -8,6 +8,7 @@ import org.web3j.crypto.Credentials
import java.math.BigDecimal
import java.math.BigInteger
import java.math.RoundingMode
import java.util.concurrent.atomic.AtomicLong
/**
* 订单签名服务
@@ -323,12 +324,17 @@ class OrderSigningService {
}
}
/** 并发安全:确保同一毫秒内多次调用生成唯一 salt,避免 FIXED 模式预签双单等场景的 salt 碰撞 */
private val saltSequence = AtomicLong(0)
/**
* 生成 salt使用时间戳,毫秒
* 与 TypeScript SDK 保持一致,使用时间戳作为 salt
* 生成 salt(时间戳 + 自增序列,保证并发下唯一
* 兼容 Polymarketsalt 为 Long,时间戳主位 + 序列次位,与 TypeScript SDK 语义兼容
*/
private fun generateSalt(): Long {
return System.currentTimeMillis()
val now = System.currentTimeMillis()
val seq = saltSequence.incrementAndGet() and 0x3FF
return now * 1000 + seq
}
/**