diff --git a/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/presentation/viewmodel/MainViewModel.kt b/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/presentation/viewmodel/MainViewModel.kt index 458f4bfa..232e8ee7 100644 --- a/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/presentation/viewmodel/MainViewModel.kt +++ b/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/presentation/viewmodel/MainViewModel.kt @@ -1244,10 +1244,12 @@ class MainViewModel @Inject constructor( onSuccess = { result -> android.util.Log.d("MainViewModel", "[SIGN] Signature received: ${result.signature.take(20)}...") _signature.value = result.signature + // IMPORTANT: Reset isLoading so broadcast button is enabled + _uiState.update { it.copy(isLoading = false) } }, onFailure = { e -> android.util.Log.e("MainViewModel", "[SIGN] waitForSignature FAILED: ${e.message}") - _uiState.update { it.copy(error = e.message) } + _uiState.update { it.copy(isLoading = false, error = e.message) } } ) } @@ -1257,26 +1259,37 @@ class MainViewModel @Inject constructor( * Broadcast the signed transaction */ fun broadcastTransaction() { + android.util.Log.d("MainViewModel", "[BROADCAST] broadcastTransaction() called") viewModelScope.launch { + android.util.Log.d("MainViewModel", "[BROADCAST] Starting broadcast...") _uiState.update { it.copy(isLoading = true, error = null) } val tx = _preparedTx.value val sig = _signature.value + android.util.Log.d("MainViewModel", "[BROADCAST] preparedTx: ${tx?.let { "present" } ?: "null"}") + android.util.Log.d("MainViewModel", "[BROADCAST] signature: ${sig?.let { "${it.take(20)}..." } ?: "null"}") + if (tx == null || sig == null) { + android.util.Log.e("MainViewModel", "[BROADCAST] Missing tx or signature! tx=$tx, sig=$sig") _uiState.update { it.copy(isLoading = false, error = "交易或签名缺失") } return@launch } val rpcUrl = _settings.value.kavaRpcUrl + android.util.Log.d("MainViewModel", "[BROADCAST] Using RPC URL: $rpcUrl") val result = repository.broadcastTransaction(tx, sig, rpcUrl) + android.util.Log.d("MainViewModel", "[BROADCAST] repository.broadcastTransaction returned: isSuccess=${result.isSuccess}") + result.fold( onSuccess = { hash -> + android.util.Log.d("MainViewModel", "[BROADCAST] SUCCESS! txHash=$hash") _txHash.value = hash _uiState.update { it.copy(isLoading = false, successMessage = "交易已广播!") } }, onFailure = { e -> + android.util.Log.e("MainViewModel", "[BROADCAST] FAILED: ${e.message}", e) _uiState.update { it.copy(isLoading = false, error = e.message) } } )