diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index 9d5a2a09d..981dc4c6b 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -148,7 +148,7 @@ pub struct SpendDescription { pub nullifier: [u8; 32], pub rk: PublicKey, pub zkproof: [u8; GROTH_PROOF_SIZE], - pub spend_auth_sig: Signature, + pub spend_auth_sig: Option, } impl std::fmt::Debug for SpendDescription { @@ -194,7 +194,7 @@ impl SpendDescription { // Consensus rules (ยง4.4): // - Canonical encoding is enforced here. // - Signature validity is enforced in SaplingVerificationContext::check_spend() - let spend_auth_sig = Signature::read(&mut reader)?; + let spend_auth_sig = Some(Signature::read(&mut reader)?); Ok(SpendDescription { cv, @@ -212,7 +212,15 @@ impl SpendDescription { writer.write_all(&self.nullifier)?; self.rk.write(&mut writer)?; writer.write_all(&self.zkproof)?; - self.spend_auth_sig.write(&mut writer) + match self.spend_auth_sig { + Some(sig) => sig.write(&mut writer), + None => { + return Err(io::Error::new( + io::ErrorKind::InvalidInput, + "Missing spend auth signature", + )) + } + } } }