diff --git a/example/dao2/contract/money/src/lib.rs b/example/dao2/contract/money/src/lib.rs index b1fa4ca07..a2eec395e 100644 --- a/example/dao2/contract/money/src/lib.rs +++ b/example/dao2/contract/money/src/lib.rs @@ -103,8 +103,11 @@ fn get_metadata(_cid: ContractId, ix: &[u8]) -> ContractResult { let params: MoneyTransferParams = deserialize(data)?; let mut zk_public_values: Vec<(String, Vec)> = Vec::new(); - let signature_public_keys: Vec = Vec::new(); + let mut signature_public_keys: Vec = Vec::new(); + for input in ¶ms.clear_inputs { + signature_public_keys.push(input.signature_public.inner()); + } for input in ¶ms.inputs { let value_coords = input.value_commit.to_affine().coordinates().unwrap(); let token_coords = input.token_commit.to_affine().coordinates().unwrap(); @@ -124,6 +127,8 @@ fn get_metadata(_cid: ContractId, ix: &[u8]) -> ContractResult { sig_y, ] )); + + signature_public_keys.push(input.signature_public.inner()); } for output in ¶ms.outputs { let value_coords = output.value_commit.to_affine().coordinates().unwrap(); diff --git a/example/dao2/src/main.rs b/example/dao2/src/main.rs index ca4f171f9..3495e5bfd 100644 --- a/example/dao2/src/main.rs +++ b/example/dao2/src/main.rs @@ -136,7 +136,7 @@ fn validate( } tx.zk_verify(&zk_bins, &zkpublic_table)?; - //tx.verify_sigs(); + tx.verify_sigs(&sigpub_table); // Now we finished verification stage, just apply all changes assert_eq!(tx.calls.len(), updates.len()); diff --git a/example/dao2/src/tx.rs b/example/dao2/src/tx.rs index 793f432a2..ef5f252d8 100644 --- a/example/dao2/src/tx.rs +++ b/example/dao2/src/tx.rs @@ -1,4 +1,5 @@ use darkfi::{crypto::Proof, Result, VerifyFailed::ProofVerifyFailed}; +use darkfi_serial::Encodable; use darkfi_sdk::{ crypto::{ schnorr::{SchnorrPublic, Signature}, @@ -88,19 +89,18 @@ impl Transaction { } pub fn verify_sigs(&self, sigpub_table: &Vec>) -> Result<()> { - //let mut tx_data = Vec::new(); - //self.calls.encode(&mut tx_data)?; - //self.proofs.encode(&mut tx_data)?; - // Hash it and use the hash as the signing data - - let mut unsigned_tx_data = vec![0xde, 0xad, 0xbe, 0xef]; + let mut tx_data = Vec::new(); + self.calls.encode(&mut tx_data)?; + self.proofs.encode(&mut tx_data)?; + // TODO: Hash it and use the hash as the signing data + // let sighash = ... for (i, (signatures, signature_public_keys)) in self.signatures.iter().zip(sigpub_table.iter()).enumerate() { for (signature_pub_key, signature) in signature_public_keys.iter().zip(signatures) { let signature_pub_key = PublicKey::from(*signature_pub_key); - let verify_result = signature_pub_key.verify(&unsigned_tx_data[..], &signature); + let verify_result = signature_pub_key.verify(&tx_data[..], &signature); assert!(verify_result, "verify sigs[{}] failed", i); } debug!(target: "demo", "verify_sigs({}) passed", i);