Jelajahi Sumber

daod: money::transfer() add the proofs back into the signature again

narodnik 4 tahun lalu
induk
melakukan
2440a175cb

+ 6 - 6
bin/daod/src/money_contract/transfer/builder.rs

@@ -184,13 +184,13 @@ impl Builder {
             outputs.push(output);
         }
 
-        let partial_tx = Partial { clear_inputs, inputs, outputs };
+        let partial = Partial { clear_inputs, inputs, outputs, proofs };
 
         let mut unsigned_tx_data = vec![];
-        partial_tx.encode(&mut unsigned_tx_data)?;
+        partial.encode(&mut unsigned_tx_data)?;
 
         let mut clear_inputs = vec![];
-        for (input, info) in partial_tx.clear_inputs.into_iter().zip(self.clear_inputs) {
+        for (input, info) in partial.clear_inputs.into_iter().zip(self.clear_inputs) {
             let secret = info.signature_secret;
             let signature = secret.sign(&unsigned_tx_data[..]);
             let input = ClearInput::from_partial(input, signature);
@@ -199,20 +199,20 @@ impl Builder {
 
         let mut inputs = vec![];
         for (input, signature_secret) in
-            partial_tx.inputs.into_iter().zip(signature_secrets.into_iter())
+            partial.inputs.into_iter().zip(signature_secrets.into_iter())
         {
             let signature = signature_secret.sign(&unsigned_tx_data[..]);
             let input = Input::from_partial(input, signature);
             inputs.push(input);
         }
 
-        let call_data = CallData { clear_inputs, inputs, outputs: partial_tx.outputs };
+        let call_data = CallData { clear_inputs, inputs, outputs: partial.outputs };
 
         Ok(FuncCall {
             contract_id: "money".to_string(),
             func_id: "money::transfer()".to_string(),
             call_data: Box::new(call_data),
-            proofs,
+            proofs: partial.proofs,
         })
     }
 }

+ 2 - 3
bin/daod/src/money_contract/transfer/partial.rs

@@ -14,7 +14,8 @@ pub struct Partial {
     pub clear_inputs: Vec<PartialClearInput>,
     pub inputs: Vec<PartialInput>,
     pub outputs: Vec<Output>,
-    //pub proofs: Vec<Proof>,
+
+    pub proofs: Vec<Proof>,
 }
 
 #[derive(Clone, SerialEncodable, SerialDecodable)]
@@ -28,7 +29,5 @@ pub struct PartialClearInput {
 
 #[derive(Clone, SerialEncodable, SerialDecodable)]
 pub struct PartialInput {
-    // TODO: BUG BUG FIXME!!!
-    //pub burn_proof: Proof,
     pub revealed: BurnRevealedValues,
 }

+ 6 - 6
bin/daod/src/money_contract/transfer/validate.rs

@@ -129,7 +129,7 @@ pub fn state_transition(
     }
 
     debug!(target: TARGET, "Verifying zk proofs");
-    match call_data.verify() {
+    match call_data.verify(&func_call.proofs) {
         Ok(()) => {
             debug!(target: TARGET, "Verified successfully")
         }
@@ -192,7 +192,7 @@ impl CallDataBase for CallData {
 }
 impl CallData {
     /// Verify the transaction
-    pub fn verify(&self) -> VerifyResult<()> {
+    pub fn verify(&self, proofs: &Vec<Proof>) -> VerifyResult<()> {
         //  must have minimum 1 clear or anon input, and 1 output
         if self.clear_inputs.len() + self.inputs.len() == 0 {
             error!("tx::verify(): Missing inputs");
@@ -234,8 +234,7 @@ impl CallData {
 
         // Verify the available signatures
         let mut unsigned_tx_data = vec![];
-        // TODO: BUG!!! MUST INCLUDE PROOFS!!!
-        self.encode_without_signature(&mut unsigned_tx_data)?;
+        self.encode_without_signature(&mut unsigned_tx_data, proofs)?;
 
         for (i, input) in self.clear_inputs.iter().enumerate() {
             let public = &input.signature_public;
@@ -258,13 +257,14 @@ impl CallData {
 
     pub fn encode_without_signature<S: io::Write>(
         &self,
-        mut s: S, /*proofs: &Vec<Proof>*/
+        mut s: S,
+        proofs: &Vec<Proof>,
     ) -> Result<usize> {
         let mut len = 0;
         len += self.clear_inputs.encode_without_signature(&mut s)?;
         len += self.inputs.encode_without_signature(&mut s)?;
         len += self.outputs.encode(&mut s)?;
-        //len += proofs.encode(s)?;
+        len += proofs.encode(s)?;
         Ok(len)
     }