01Tap. The client never trusts the network
Every transfer carries an idempotency key and a bound device ID from the first tap. Retries are safe, double sends are impossible, and the server can tell a new phone from a known one.
Future<Transfer> sendTransfer(Quote quote, Recipient to) async {
final key = _keys.forQuote(quote.id); // same key on every retry
return _api.post(
'/v1/transfers',
headers: {
'Idempotency-Key': key,
'X-Device-Id': await _device.boundId(),
},
body: quote.toTransfer(to),
retry: RetryPolicy.exponential(max: 3),
);
}

