Skip to content

Commit

Permalink
ABW-2561 - Pass the same instance of TransactionClient in delegates o…
Browse files Browse the repository at this point in the history
…f TransactionReviewViewModel (#621)
  • Loading branch information
giannis-rdx authored Nov 1, 2023
1 parent bf6612f commit 4fff69d
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class TransactionReviewViewModel @Inject constructor(
}
}
viewModelScope.launch {
analysis.analyse()
analysis.analyse(transactionClient = transactionClient)
}
}
}
Expand All @@ -92,7 +92,10 @@ class TransactionReviewViewModel @Inject constructor(
_state.update { it.copy(sheetState = State.Sheet.None) }
} else {
viewModelScope.launch {
submit.onDismiss(RadixWalletException.DappRequestException.RejectedByUser)
submit.onDismiss(
transactionClient = transactionClient,
exception = RadixWalletException.DappRequestException.RejectedByUser
)
}
}
}
Expand All @@ -106,7 +109,10 @@ class TransactionReviewViewModel @Inject constructor(
}

fun approveTransaction(deviceBiometricAuthenticationProvider: suspend () -> Boolean) {
submit.onSubmit(deviceBiometricAuthenticationProvider)
submit.onSubmit(
transactionClient = transactionClient,
deviceBiometricAuthenticationProvider
)
}

fun promptForGuaranteesClick() = guarantees.onEdit()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,23 @@ class TransactionAnalysisDelegate @Inject constructor(
private val getResourcesMetadataUseCase: GetResourcesMetadataUseCase,
private val getResourcesUseCase: GetResourcesUseCase,
private val getTransactionBadgesUseCase: GetTransactionBadgesUseCase,
private val resolveDAppsUseCase: ResolveDAppsUseCase,
private val transactionClient: TransactionClient
private val resolveDAppsUseCase: ResolveDAppsUseCase
) : ViewModelDelegate<TransactionReviewViewModel.State>() {

private val logger = Timber.tag("TransactionAnalysis")

suspend fun analyse() {
suspend fun analyse(transactionClient: TransactionClient) {
_state.value.requestNonNull.transactionManifestData.toTransactionManifest().onSuccess {
startAnalysis(it)
startAnalysis(it, transactionClient)
}.onFailure { error ->
reportFailure(error)
}
}

private suspend fun startAnalysis(manifest: TransactionManifest) {
private suspend fun startAnalysis(
manifest: TransactionManifest,
transactionClient: TransactionClient
) {
val notaryAndSigners = transactionClient.getNotaryAndSigners(
manifest = manifest,
ephemeralNotaryPrivateKey = _state.value.ephemeralNotaryPrivateKey
Expand All @@ -55,13 +57,18 @@ class TransactionAnalysisDelegate @Inject constructor(
notaryAndSigners = notaryAndSigners
).then { preview ->
transactionClient.analyzeExecution(manifest, preview)
}.resolve(manifest, notaryAndSigners)
}.resolve(
manifest = manifest,
notaryAndSigners = notaryAndSigners,
transactionClient = transactionClient
)
}

@Suppress("LongMethod")
private suspend fun Result<ExecutionAnalysis>.resolve(
manifest: TransactionManifest,
notaryAndSigners: NotaryAndSigners
notaryAndSigners: NotaryAndSigners,
transactionClient: TransactionClient
) = this.onSuccess { analysis ->
val previewType = if (_state.value.requestNonNull.isInternal.not() &&
analysis.reservedInstructions.isNotEmpty()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import javax.inject.Inject

@Suppress("LongParameterList")
class TransactionSubmitDelegate @Inject constructor(
private val transactionClient: TransactionClient,
private val dAppMessenger: DappMessenger,
private val getCurrentGatewayUseCase: GetCurrentGatewayUseCase,
private val incomingRequestRepository: IncomingRequestRepository,
Expand All @@ -49,7 +48,10 @@ class TransactionSubmitDelegate @Inject constructor(

private var approvalJob: Job? = null

fun onSubmit(deviceBiometricAuthenticationProvider: suspend () -> Boolean) {
fun onSubmit(
transactionClient: TransactionClient,
deviceBiometricAuthenticationProvider: suspend () -> Boolean
) {
// Do not re-submit while submission is in progress
if (approvalJob != null) return

Expand All @@ -61,14 +63,18 @@ class TransactionSubmitDelegate @Inject constructor(
if (currentNetworkId != manifestNetworkId) {
approvalJob = null
val failure = RadixWalletException.DappRequestException.WrongNetwork(currentNetworkId, manifestNetworkId)
onDismiss(exception = failure)
onDismiss(
transactionClient = transactionClient,
exception = failure
)
return@launch
}

_state.update { it.copy(isSubmitting = true) }

currentState.requestNonNull.transactionManifestData.toTransactionManifest().onSuccess { manifest ->
resolveFeePayerAndSubmit(
transactionClient = transactionClient,
manifest.attachGuarantees(currentState.previewType),
deviceBiometricAuthenticationProvider
)
Expand All @@ -78,7 +84,10 @@ class TransactionSubmitDelegate @Inject constructor(
}
}

suspend fun onDismiss(exception: RadixWalletException.DappRequestException) {
suspend fun onDismiss(
transactionClient: TransactionClient,
exception: RadixWalletException.DappRequestException
) {
if (approvalJob == null) {
val request = _state.value.requestNonNull
if (!request.isInternal) {
Expand Down Expand Up @@ -106,13 +115,15 @@ class TransactionSubmitDelegate @Inject constructor(
}

private suspend fun resolveFeePayerAndSubmit(
transactionClient: TransactionClient,
manifest: TransactionManifest,
deviceBiometricAuthenticationProvider: suspend () -> Boolean
) {
_state.value.feePayerSearchResult?.let { feePayerResult ->
_state.update { it.copy(isSubmitting = false) }
if (feePayerResult.feePayerAddress != null) {
signAndSubmit(
transactionClient = transactionClient,
transactionRequest = _state.value.requestNonNull,
feePayerAddress = feePayerResult.feePayerAddress,
manifest = manifest,
Expand All @@ -124,6 +135,7 @@ class TransactionSubmitDelegate @Inject constructor(

@Suppress("LongMethod")
private suspend fun signAndSubmit(
transactionClient: TransactionClient,
transactionRequest: MessageFromDataChannel.IncomingRequest.TransactionRequest,
feePayerAddress: String,
manifest: TransactionManifest,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,15 +243,13 @@ internal class TransactionReviewViewModelTest : StateViewModelTest<TransactionRe
getResourcesMetadataUseCase = getResourcesMetadataUseCase,
getResourcesUseCase = getResourcesUseCase,
getTransactionBadgesUseCase = getTransactionBadgesUseCase,
resolveDAppsUseCase = resolveDAppsUseCase,
transactionClient = transactionClient,
resolveDAppsUseCase = resolveDAppsUseCase
),
guarantees = TransactionGuaranteesDelegate(),
fees = TransactionFeesDelegate(
getProfileUseCase = getProfileUseCase,
),
submit = TransactionSubmitDelegate(
transactionClient = transactionClient,
dAppMessenger = dAppMessenger,
getCurrentGatewayUseCase = getCurrentGatewayUseCase,
incomingRequestRepository = incomingRequestRepository,
Expand Down

0 comments on commit 4fff69d

Please sign in to comment.