Updated on 2026-08-14
This commit is contained in:
parent
bb58d027c6
commit
0a4235ee0a
25 changed files with 160 additions and 39 deletions
|
|
@ -5,17 +5,15 @@ import com.tangem.TangemSdk
|
|||
import com.tangem.blockchain.common.TransactionSigner
|
||||
import com.tangem.blockchain.common.Wallet
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.domain.common.TapWorkarounds.isTangemTwins
|
||||
import com.tangem.domain.models.scan.CardDTO
|
||||
import com.tangem.domain.models.scan.isRing
|
||||
import com.tangem.tap.domain.tasks.SignHashesTask
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import kotlin.coroutines.resume
|
||||
|
||||
class TangemSigner(
|
||||
private val card: CardDTO,
|
||||
private val cardId: String?,
|
||||
private val tangemSdk: TangemSdk,
|
||||
private val initialMessage: Message,
|
||||
private val accessCode: String? = null,
|
||||
private val signerCallback: (TangemSignerResponse) -> Unit,
|
||||
) : TransactionSigner {
|
||||
|
||||
|
|
@ -24,21 +22,20 @@ class TangemSigner(
|
|||
publicKey: Wallet.PublicKey,
|
||||
): CompletionResult<List<ByteArray>> {
|
||||
return suspendCancellableCoroutine { continuation ->
|
||||
val isCardNotBackedUp = card.backupStatus?.isActive != true && !card.isTangemTwins
|
||||
val task = SignHashesTask(hashes, publicKey)
|
||||
|
||||
tangemSdk.startSessionWithRunnable(
|
||||
runnable = task,
|
||||
cardId = card.cardId.takeIf { isCardNotBackedUp },
|
||||
cardId = cardId,
|
||||
initialMessage = initialMessage,
|
||||
accessCode = accessCode,
|
||||
) { result ->
|
||||
when (result) {
|
||||
is CompletionResult.Success -> {
|
||||
signerCallback(
|
||||
TangemSignerResponse(
|
||||
result.data.totalSignedHashes,
|
||||
result.data.remainingSignatures,
|
||||
totalSignedHashes = result.data.totalSignedHashes,
|
||||
remainingSignatures = result.data.remainingSignatures,
|
||||
isRing = result.data.batchId?.let(::isRing) ?: false,
|
||||
),
|
||||
)
|
||||
if (continuation.isActive) {
|
||||
|
|
@ -70,4 +67,5 @@ class TangemSigner(
|
|||
data class TangemSignerResponse(
|
||||
val totalSignedHashes: Int?,
|
||||
val remainingSignatures: Int?,
|
||||
val isRing: Boolean,
|
||||
)
|
||||
|
|
@ -12,6 +12,7 @@ class TangemSignHashesResponse(
|
|||
val signatures: List<ByteArray>,
|
||||
val totalSignedHashes: Int?,
|
||||
val remainingSignatures: Int?,
|
||||
val batchId: String?,
|
||||
) : CommandResponse
|
||||
|
||||
class SignHashesTask(
|
||||
|
|
@ -22,12 +23,14 @@ class SignHashesTask(
|
|||
SignHashesCommand(hashes.toTypedArray(), publicKey.seedKey, publicKey.derivationPath).run(session) { response ->
|
||||
when (response) {
|
||||
is CompletionResult.Success -> {
|
||||
val card = session.environment.card
|
||||
callback(
|
||||
CompletionResult.Success(
|
||||
TangemSignHashesResponse(
|
||||
response.data.signatures,
|
||||
response.data.totalSignedHashes,
|
||||
session.environment.card?.wallet(publicKey.seedKey)?.remainingSignatures,
|
||||
signatures = response.data.signatures,
|
||||
totalSignedHashes = response.data.totalSignedHashes,
|
||||
remainingSignatures = card?.wallet(publicKey.seedKey)?.remainingSignatures,
|
||||
batchId = card?.batchId,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -211,11 +211,13 @@ class WalletConnectSdkHelper {
|
|||
}
|
||||
|
||||
private suspend fun sendTransaction(data: WcTransactionData, cardId: String?): String? {
|
||||
val sdk = store.inject(DaggerGraphState::cardSdkConfigRepository).sdk
|
||||
|
||||
val result = (data.walletManager as TransactionSender).send(
|
||||
transactionData = data.transaction,
|
||||
signer = CommonSigner(
|
||||
tangemSdk = store.inject(DaggerGraphState::cardSdkConfigRepository).sdk,
|
||||
signer = store.inject(DaggerGraphState::transactionSignerFactory).createTransactionSigner(
|
||||
cardId = cardId,
|
||||
sdk = sdk,
|
||||
),
|
||||
)
|
||||
return when (result) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue