buildTransfer
Build an unshielded transfer transaction.
Steps:
Validate inputs
Select and lock UTXOs (smallest-first algorithm)
Convert selected UTXOs to UtxoSpend inputs
Create recipient UtxoOutput
Create change UtxoOutput if needed (change 0)
Create UnshieldedOffer with inputs and outputs
Create Intent with TTL
UTXO Locking: Selected UTXOs are automatically marked as PENDING by UtxoManager. If transaction building succeeds but later fails (signing/submission), call utxoManager.unlockUtxos() to release them.
Public Key Derivation: The indexer doesn't provide public keys for UTXOs (security/privacy). The caller must derive the public key from the HD wallet before calling this method. This matches Lace wallet's architecture.
Return
BuildResult.Success with Intent, or BuildResult.InsufficientFunds
Parameters
Sender's unshielded address
Recipient's unshielded address
Amount to send (in smallest units)
Token type identifier (64 hex chars)
Sender's BIP-340 public key (33 bytes hex)
Transaction time-to-live in minutes (default 30)