Skip to content

Commit

Permalink
PERA-1517 :: Add in heartbeat txn type (#130)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeltchuang authored Feb 12, 2025
1 parent b89f5a3 commit 9532bd1
Show file tree
Hide file tree
Showing 26 changed files with 216 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ class RawTransactionTypeDTODecider @Inject constructor() {
RawTransactionTypePayload.ASSET_TRANSACTION -> RawTransactionTypeDTO.ASSET_TRANSACTION
RawTransactionTypePayload.APP_TRANSACTION -> RawTransactionTypeDTO.APP_TRANSACTION
RawTransactionTypePayload.ASSET_CONFIGURATION -> RawTransactionTypeDTO.ASSET_CONFIGURATION
RawTransactionTypePayload.KEYREG_TRANSACTION -> RawTransactionTypeDTO.KEYREG_TRANSACTION
RawTransactionTypePayload.HEARTBEAT_TRANSACTION -> RawTransactionTypeDTO.HEARTBEAT_TRANSACTION
RawTransactionTypePayload.UNDEFINED -> RawTransactionTypeDTO.UNDEFINED
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,11 @@ enum class RawTransactionTypePayload {
@SerializedName("acfg")
ASSET_CONFIGURATION,

@SerializedName("keyreg")
KEYREG_TRANSACTION,

@SerializedName("hb")
HEARTBEAT_TRANSACTION,

UNDEFINED
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ class RawTransactionTypeDTODecider @Inject constructor() {
RawTransactionTypeDTO.ASSET_TRANSACTION -> RawTransactionType.ASSET_TRANSACTION
RawTransactionTypeDTO.APP_TRANSACTION -> RawTransactionType.APP_TRANSACTION
RawTransactionTypeDTO.ASSET_CONFIGURATION -> RawTransactionType.ASSET_CONFIGURATION
RawTransactionTypeDTO.KEYREG_TRANSACTION -> RawTransactionType.KEYREG_TRANSACTION
RawTransactionTypeDTO.HEARTBEAT_TRANSACTION -> RawTransactionType.HEARTBEAT_TRANSACTION
RawTransactionTypeDTO.UNDEFINED -> RawTransactionType.UNDEFINED
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,7 @@ enum class RawTransactionType {
ASSET_TRANSACTION,
APP_TRANSACTION,
ASSET_CONFIGURATION,
KEYREG_TRANSACTION,
HEARTBEAT_TRANSACTION,
UNDEFINED
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,7 @@ enum class RawTransactionTypeDTO {
ASSET_TRANSACTION,
APP_TRANSACTION,
ASSET_CONFIGURATION,
KEYREG_TRANSACTION,
HEARTBEAT_TRANSACTION,
UNDEFINED
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ class TransactionTypeDTOMapper @Inject constructor() {
TransactionTypeResponse.ASSET_CONFIGURATION -> TransactionTypeDTO.ASSET_CONFIGURATION
TransactionTypeResponse.APP_TRANSACTION -> TransactionTypeDTO.APP_TRANSACTION
TransactionTypeResponse.UNDEFINED -> TransactionTypeDTO.UNDEFINED
TransactionTypeResponse.KEYREG -> TransactionTypeDTO.KEYREG_TRANSACTION
TransactionTypeResponse.KEYREG_TRANSACTION -> TransactionTypeDTO.KEYREG_TRANSACTION
TransactionTypeResponse.HEARTBEAT_TRANSACTION -> TransactionTypeDTO.HEARTBEAT_TRANSACTION
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ enum class TransactionTypeResponse {
ASSET_CONFIGURATION,

@SerializedName("keyreg")
KEYREG,
KEYREG_TRANSACTION,

@SerializedName("hb")
HEARTBEAT_TRANSACTION,

UNDEFINED
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,8 @@ data class TransactionDTO(
val createdAssetIndex: Long?,
val keyRegTransactionDTO: KeyRegTransactionDTO?
)

fun TransactionDTO.getReceiverAddress(): String? {
return payment?.receiverAddress ?: assetTransfer?.receiverAddress
?: assetFreezeTransaction?.receiverAddress.orEmpty()
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ enum class TransactionTypeDTO(val value: String?) {
APP_TRANSACTION("appl"),
ASSET_CONFIGURATION("acfg"),
KEYREG_TRANSACTION("keyreg"),
HEARTBEAT_TRANSACTION("hb"),
UNDEFINED(null)
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ package com.algorand.android.modules.transaction.detail.domain.mapper

import com.algorand.android.models.AssetInformation.Companion.ALGO_ID
import com.algorand.android.modules.transaction.common.domain.model.TransactionDTO
import com.algorand.android.modules.transaction.common.domain.model.getReceiverAddress
import com.algorand.android.modules.transaction.detail.domain.model.BaseTransactionDetail
import com.algorand.android.modules.transaction.detail.domain.model.BaseTransactionDetail.BaseKeyRegTransaction.OfflineKeyRegTransaction
import com.algorand.android.modules.transaction.detail.domain.model.BaseTransactionDetail.BaseKeyRegTransaction.OnlineKeyRegTransaction
Expand All @@ -32,8 +33,7 @@ class BaseTransactionDetailMapper @Inject constructor() {
id = id,
signature = signature?.signatureKey,
senderAccountAddress = senderAddress,
receiverAccountAddress = payment?.receiverAddress ?: assetTransfer?.receiverAddress
?: assetFreezeTransaction?.receiverAddress.orEmpty(),
receiverAccountAddress = transactionDTO.getReceiverAddress(),
closeToAccountAddress = payment?.closeToAddress ?: assetTransfer?.closeTo,
roundTimeAsTimestamp = roundTimeAsTimestamp,
confirmedRound = confirmedRound,
Expand All @@ -53,8 +53,7 @@ class BaseTransactionDetailMapper @Inject constructor() {
id = id,
signature = signature?.signatureKey,
senderAccountAddress = senderAddress,
receiverAccountAddress = payment?.receiverAddress ?: assetTransfer?.receiverAddress
?: assetFreezeTransaction?.receiverAddress.orEmpty(),
receiverAccountAddress = transactionDTO.getReceiverAddress(),
roundTimeAsTimestamp = roundTimeAsTimestamp,
confirmedRound = confirmedRound,
transactionAmount = payment?.amount ?: assetTransfer?.amount ?: BigInteger.ZERO,
Expand All @@ -76,8 +75,7 @@ class BaseTransactionDetailMapper @Inject constructor() {
id = id,
signature = signature?.signatureKey,
senderAccountAddress = senderAddress,
receiverAccountAddress = payment?.receiverAddress ?: assetTransfer?.receiverAddress
?: assetFreezeTransaction?.receiverAddress.orEmpty(),
receiverAccountAddress = transactionDTO.getReceiverAddress(),
roundTimeAsTimestamp = roundTimeAsTimestamp,
confirmedRound = confirmedRound,
fee = fee?.toBigInteger() ?: BigInteger.valueOf(MIN_FEE),
Expand All @@ -101,8 +99,7 @@ class BaseTransactionDetailMapper @Inject constructor() {
id = id,
signature = signature?.signatureKey,
senderAccountAddress = senderAddress,
receiverAccountAddress = payment?.receiverAddress ?: assetTransfer?.receiverAddress
?: assetFreezeTransaction?.receiverAddress.orEmpty(),
receiverAccountAddress = transactionDTO.getReceiverAddress(),
roundTimeAsTimestamp = roundTimeAsTimestamp,
confirmedRound = confirmedRound,
fee = fee?.toBigInteger() ?: BigInteger.valueOf(MIN_FEE),
Expand Down Expand Up @@ -130,14 +127,28 @@ class BaseTransactionDetailMapper @Inject constructor() {
}
}

fun mapToHeartbeatTransactionDetail(transactionDTO: TransactionDTO): BaseTransactionDetail.HeartbeatTransaction {
return with(transactionDTO) {
BaseTransactionDetail.HeartbeatTransaction(
id = id,
signature = signature?.signatureKey,
senderAccountAddress = senderAddress,
receiverAccountAddress = null,
roundTimeAsTimestamp = roundTimeAsTimestamp,
confirmedRound = confirmedRound,
fee = fee?.toBigInteger() ?: BigInteger.valueOf(MIN_FEE),
noteInBase64 = noteInBase64
)
}
}

fun mapToUndefinedTransactionDetail(transactionDTO: TransactionDTO): BaseTransactionDetail.UndefinedTransaction {
return with(transactionDTO) {
BaseTransactionDetail.UndefinedTransaction(
id = id,
signature = signature?.signatureKey,
senderAccountAddress = senderAddress,
receiverAccountAddress = payment?.receiverAddress ?: assetTransfer?.receiverAddress
?: assetFreezeTransaction?.receiverAddress.orEmpty(),
receiverAccountAddress = transactionDTO.getReceiverAddress(),
roundTimeAsTimestamp = roundTimeAsTimestamp,
confirmedRound = confirmedRound,
fee = fee?.toBigInteger() ?: BigInteger.valueOf(MIN_FEE),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,23 @@ sealed class BaseTransactionDetail : Parcelable {
get() = R.string.transaction_detail
}
}

@Parcelize
data class HeartbeatTransaction(
override val id: String? = null,
override val signature: String? = null,
override val senderAccountAddress: String? = null,
override val receiverAccountAddress: String? = null,
override val roundTimeAsTimestamp: Long? = null,
override val confirmedRound: Long?,
override val fee: BigInteger,
override val noteInBase64: String? = null,
override val closeToAccountAddress: String? = null,
override val transactionCloseAmount: BigInteger? = null,
override val transactionAmount: BigInteger? = null
) : BaseTransactionDetail() {

override val toolbarTitleResId: Int
get() = R.string.transaction_detail
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ open class BaseTransactionDetailPreviewUseCase constructor(
is BaseTransactionDetail.PaymentTransaction -> ALGO_ID
is BaseTransactionDetail.ApplicationCallTransaction,
is BaseTransactionDetail.UndefinedTransaction,
is BaseTransactionDetail.BaseKeyRegTransaction -> null
is BaseTransactionDetail.BaseKeyRegTransaction,
is BaseTransactionDetail.HeartbeatTransaction -> null
} ?: ALGO_ID
}

Expand All @@ -166,7 +167,8 @@ open class BaseTransactionDetailPreviewUseCase constructor(
is BaseTransactionDetail.ApplicationCallTransaction,
is BaseTransactionDetail.AssetConfigurationTransaction,
is BaseTransactionDetail.UndefinedTransaction,
is BaseTransactionDetail.BaseKeyRegTransaction -> null
is BaseTransactionDetail.BaseKeyRegTransaction,
is BaseTransactionDetail.HeartbeatTransaction -> null
} ?: BigInteger.ZERO
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import com.algorand.android.modules.transaction.common.domain.model.TransactionT
import com.algorand.android.modules.transaction.common.domain.model.TransactionTypeDTO.ASSET_TRANSACTION
import com.algorand.android.modules.transaction.common.domain.model.TransactionTypeDTO.KEYREG_TRANSACTION
import com.algorand.android.modules.transaction.common.domain.model.TransactionTypeDTO.PAY_TRANSACTION
import com.algorand.android.modules.transaction.common.domain.model.TransactionTypeDTO.HEARTBEAT_TRANSACTION
import com.algorand.android.modules.transaction.common.domain.model.TransactionTypeDTO.UNDEFINED
import com.algorand.android.modules.transaction.detail.domain.mapper.BaseTransactionDetailMapper
import com.algorand.android.modules.transaction.detail.domain.model.BaseTransactionDetail
Expand Down Expand Up @@ -63,6 +64,7 @@ class GetTransactionDetailUseCase @Inject constructor(
ASSET_CONFIGURATION -> baseTransactionDetailMapper.mapToAssetConfigurationTransactionDetail(this)
UNDEFINED -> baseTransactionDetailMapper.mapToUndefinedTransactionDetail(this)
KEYREG_TRANSACTION -> baseTransactionDetailMapper.mapToKeyRegTransactionDetail(this)
HEARTBEAT_TRANSACTION -> baseTransactionDetailMapper.mapToHeartbeatTransactionDetail(this)
null -> baseTransactionDetailMapper.mapToUndefinedTransactionDetail(this)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ class InnerTransactionDetailPreviewUseCase @Inject constructor(
is BaseTransactionDetail.AssetTransferTransaction,
is BaseTransactionDetail.PaymentTransaction,
is BaseTransactionDetail.UndefinedTransaction,
is BaseTransactionDetail.HeartbeatTransaction,
is BaseTransactionDetail.BaseKeyRegTransaction -> {
createStandardTransactionItem(transaction = baseTransactionDetail, publicKey = publicKey)
}
Expand Down
Loading

0 comments on commit 9532bd1

Please sign in to comment.