fix(android): 进一步修复交易记录同步问题

- 将扫描区块数从 50000 增加到 200000(确保覆盖足够长时间)
- 统一地址格式为 lowercase,避免大小写不匹配导致记录无法同步
- 添加详细的交易哈希日志用于调试
- 修复 saveTransactionRecord 和 syncNativeTransactionHistory 中的地址格式问题

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-26 07:55:18 -08:00
parent a516006117
commit 6e03c1c798
1 changed files with 23 additions and 11 deletions

View File

@ -2992,11 +2992,15 @@ data class ParticipantStatusInfo(
direction: String = "SENT" direction: String = "SENT"
): Long { ): Long {
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {
// 统一转换为 lowercase 确保地址匹配
val normalizedFrom = fromAddress.lowercase()
val normalizedTo = toAddress.lowercase()
android.util.Log.d("TssRepository", "[TX-RECORD] Saving transaction record: txHash=${txHash.take(20)}...") android.util.Log.d("TssRepository", "[TX-RECORD] Saving transaction record: txHash=${txHash.take(20)}...")
val entity = TransactionRecordEntity( val entity = TransactionRecordEntity(
shareId = shareId, shareId = shareId,
fromAddress = fromAddress, fromAddress = normalizedFrom,
toAddress = toAddress, toAddress = normalizedTo,
amount = amount, amount = amount,
tokenType = tokenType.name, tokenType = tokenType.name,
txHash = txHash, txHash = txHash,
@ -3175,14 +3179,16 @@ data class ParticipantStatusInfo(
val currentBlockHex = getCurrentBlockNumber(client, rpcUrl) val currentBlockHex = getCurrentBlockNumber(client, rpcUrl)
val currentBlock = currentBlockHex?.removePrefix("0x")?.toLongOrNull(16) ?: 0L val currentBlock = currentBlockHex?.removePrefix("0x")?.toLongOrNull(16) ?: 0L
// 只查询最近 50000 个区块的历史(约 1-2 个月) // 查询最近 200000 个区块的历史Kava 出块快,确保覆盖足够长的时间)
val fromBlock = if (currentBlock > 50000) { val scanBlockCount = 200000L
"0x${(currentBlock - 50000).toString(16)}" val fromBlock = if (currentBlock > scanBlockCount) {
"0x${(currentBlock - scanBlockCount).toString(16)}"
} else { } else {
"0x0" "0x0"
} }
android.util.Log.d("TssRepository", "[SYNC-ERC20] Scanning from block $fromBlock to latest (current: $currentBlockHex)") android.util.Log.d("TssRepository", "[SYNC-ERC20] Current block: $currentBlock ($currentBlockHex)")
android.util.Log.d("TssRepository", "[SYNC-ERC20] Scanning from block $fromBlock to latest (${scanBlockCount} blocks)")
// Transfer event signature: keccak256("Transfer(address,address,uint256)") // Transfer event signature: keccak256("Transfer(address,address,uint256)")
val transferTopic = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" val transferTopic = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
@ -3298,12 +3304,14 @@ data class ParticipantStatusInfo(
// 解析 from 和 to 地址 (topics[1] 和 topics[2]) // 解析 from 和 to 地址 (topics[1] 和 topics[2])
val fromAddress = if (topics.size() > 1) { val fromAddress = if (topics.size() > 1) {
"0x" + topics[1].asString.removePrefix("0x").takeLast(40) "0x" + topics[1].asString.removePrefix("0x").takeLast(40).lowercase()
} else continue } else continue
val toAddress = if (topics.size() > 2) { val toAddress = if (topics.size() > 2) {
"0x" + topics[2].asString.removePrefix("0x").takeLast(40) "0x" + topics[2].asString.removePrefix("0x").takeLast(40).lowercase()
} else continue } else continue
android.util.Log.d("TssRepository", "[SYNC-ERC20] Processing tx $txHash: $fromAddress -> $toAddress")
// 解析金额 (data 字段) // 解析金额 (data 字段)
val valueHex = data.removePrefix("0x") val valueHex = data.removePrefix("0x")
val valueBig = if (valueHex.isNotEmpty()) { val valueBig = if (valueHex.isNotEmpty()) {
@ -3432,13 +3440,17 @@ data class ParticipantStatusInfo(
.toPlainString() .toPlainString()
} else "" } else ""
// 统一转换为 lowercase
val normalizedFrom = fromAddr.lowercase()
val normalizedTo = toAddr.lowercase()
// 判断方向 // 判断方向
val direction = if (fromAddr.equals(address, ignoreCase = true)) "SENT" else "RECEIVED" val direction = if (normalizedFrom == address.lowercase()) "SENT" else "RECEIVED"
val entity = TransactionRecordEntity( val entity = TransactionRecordEntity(
shareId = shareId, shareId = shareId,
fromAddress = fromAddr, fromAddress = normalizedFrom,
toAddress = toAddr, toAddress = normalizedTo,
amount = valueKava, amount = valueKava,
tokenType = TokenType.KAVA.name, tokenType = TokenType.KAVA.name,
txHash = txHash, txHash = txHash,