// 1. Proofs, from the full viewing key. About 2.5 s per spend on a laptop.
let prepared = ReceiptBuilder::new(Network::Mainnet, &tx)
.message(b"Invoice 42")
.disclose(output_index, ovk)
.spend(ViewingSpendWitness { index, fvk, note, merkle_path, prove_address: None, source: None })
.prepare(&proving_key, &mut rng)?;
// 2. The signature, where the spending key is. A hardware signer is given
// prepared.unsigned() and prepared.alphas() and recomputes the digest itself.
let sigs = sign_prepared(prepared.unsigned(), prepared.alphas(), &[ask], &mut rng)?;
let receipt = prepared.apply_signatures(sigs)?;