propose abstract method
Prepare a send from a ZIP-321 payment URI (the §2.4 lossless request token
the host composes via composePaymentUri, or a scanned QR). DETERMINISTIC,
LOCAL: runs the audited note-selection + fee + change over the wallet DB and
returns the numbers the user confirms before signing — no keys, no proofs,
no network, no DB writes, nothing sent. The proposal stays an opaque,
Rust-retained one-shot token; send consumes it by proposalId.
Throws a typed WalletApiError (insufficient funds carrying the figures,
proposal-stale, payment-URI-invalid, network-mismatch, …) the controller
maps to an honest inline fault.
Implementation
Future<SendProposal> propose(String requestUri);