element-x-ada/features/wallet/impl/build.gradle.kts
Kayos 9439f5a227 feat(wallet): transaction builder, UTXO selection, and status poller (Task 4)
## What's new

### API module additions
- ProtocolParameters: data class for fee calculation params
- PaymentRequest: transaction request model
- SignedTransaction: signed transaction result model
- TransactionBuilder: interface for building/signing transactions
- PaymentStatusPoller: interface for polling tx confirmation

### CardanoClient updates
- Added getProtocolParameters() to interface
- Implemented in KoiosCardanoClient with retry logic

### Implementation
- DefaultTransactionBuilder: builds and signs transactions using cardano-client-lib
  - Largest-first UTXO selection
  - Fee calculation via protocol parameters
  - Min UTXO validation (1 ADA minimum)
  - Secure key handling (zeroed after use)
- DefaultPaymentStatusPoller: polls Koios for tx confirmation
  - 10s polling interval, 60 attempts max (~10 minutes)
  - Emits TxStatus.PENDING -> CONFIRMED/FAILED flow

### Test module
- FakeTransactionBuilder: configurable success/failure responses
- FakePaymentStatusPoller: configurable status sequences
- Updated FakeCardanoClient with getProtocolParameters()

### Unit tests
- TransactionBuilderTest: UTXO selection, fee calculation, error handling
- PaymentStatusPollerTest: polling behavior, error recovery
2026-03-27 10:52:15 -07:00

56 lines
1.5 KiB
Kotlin

/*
* Copyright (c) 2026 Sulkta Coop.
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import extension.setupDependencyInjection
plugins {
id("io.element.android-compose-library")
alias(libs.plugins.kotlin.serialization)
}
android {
namespace = "io.element.android.features.wallet.impl"
testOptions {
unitTests {
isIncludeAndroidResources = true
}
}
}
setupDependencyInjection()
dependencies {
api(projects.features.wallet.api)
implementation(projects.libraries.architecture)
implementation(projects.libraries.core)
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrix.impl)
implementation(projects.libraries.designsystem)
implementation(projects.libraries.cryptography.api)
implementation(projects.libraries.uiStrings)
// Cardano - using Koios backend (no API key required)
implementation("com.bloxbean.cardano:cardano-client-lib:0.7.1")
implementation("com.bloxbean.cardano:cardano-client-backend-koios:0.7.1")
implementation("com.bloxbean.cardano:cardano-client-crypto:0.7.1")
// Biometric
implementation(libs.androidx.biometric)
// JSON
implementation(libs.serialization.json)
// Coroutines
implementation(libs.coroutines.core)
// Testing
testImplementation(projects.features.wallet.test)
testImplementation(libs.test.junit)
testImplementation(libs.test.truth)
testImplementation(libs.coroutines.test)
testImplementation(libs.test.turbine)
}