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