Commit graph

4 commits

Author SHA1 Message Date
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
19637833a6 docs: update BLOCKERS.md with Task 3 completion status 2026-03-27 10:39:53 -07:00
db4c262b27 feat(wallet): /pay slash command parser and composer integration (Task 5)
Implements Task 5 of Phase 1:

New files:
- ParsedPayCommand.kt: Sealed interface for parse results
  - WithAddressRecipient: Pay to Cardano address
  - WithMatrixRecipient: Pay to Matrix user (requires lookup)
  - AmountOnly: Amount specified, prompt for recipient
  - Empty: Open payment flow with no prefilled data
  - ParseError: Parse error with human-readable reason

- SlashCommandParser.kt: Full /pay command parser
  - Handles: /pay, /pay 10, /pay 10 ADA, /pay 10 tADA
  - Matrix recipients: /pay 10 ADA @user:server
  - Cardano addresses: /pay 10 ADA addr1...
  - Validates amounts (decimal support, max supply check)
  - Validates addresses (prefix, length, network match)
  - Comprehensive error messages

- SlashCommandParserTest.kt: 40+ unit tests covering all patterns

Modified files:
- ResolvedSuggestion.kt: Added Command type for slash commands
- SuggestionsProcessor.kt: /pay shows as autocomplete suggestion
- MarkdownTextEditorState.kt: Command insertion in text editor
- MessageComposerPresenter.kt: Command handling in InsertSuggestion

Note: MessageComposerPresenter sendMessage interception deferred to
Task 6 (requires PaymentFlowPresenter for navigation).
2026-03-27 10:38:46 -07:00
225afc3108 feat(wallet): scaffold wallet module structure
Task 1 of Phase 1 - Module Scaffolding

- Created features/wallet/api module with WalletEntryPoint and WalletState
- Created features/wallet/impl module with Metro DI setup
- Created features/wallet/test module with FakeWalletEntryPoint
- Added PaymentFlowNode placeholder with Appyx navigation
- Added Cardano client library dependencies (0.7.1)
- Added proguard rules for Cardano library
- Added basic unit tests for WalletState

The module follows Element X patterns:
- Metro for dependency injection (@ContributesTo, @ContributesBinding, @ContributesNode)
- Appyx for navigation (BaseFlowNode pattern)
- api/impl/test module separation
- Feature entry point pattern for navigation

This module scaffolding blocks all subsequent tasks (2-8) in Phase 1.
2026-03-27 10:04:58 -07:00