Ver Fonte

[consensus/rect] take coin pk out of TxRcpt, coin ID is owned by stakeholder

mohab metwally há 3 anos atrás
pai
commit
2f4046b79f
3 ficheiros alterados com 32 adições e 9 exclusões
  1. 8 5
      src/consensus/leadcoin.rs
  2. 1 4
      src/consensus/rcpt.rs
  3. 23 0
      src/consensus/tx.rs

+ 8 - 5
src/consensus/leadcoin.rs

@@ -382,7 +382,10 @@ impl LeadCoin {
     pub fn create_xfer_proof(&self,
     pub fn create_xfer_proof(&self,
                              pk: &ProvingKey,
                              pk: &ProvingKey,
                              change_coin: TxRcpt,
                              change_coin: TxRcpt,
-                             transfered_coin: TxRcpt) -> Result<TransferStx> {
+                             change_pk: pallas::Base, //change coin public key
+                             transfered_coin: TxRcpt
+                             transfered_pk: pallas::Base // recipient coin's public key
+    ) -> Result<TransferStx> {
         assert!(change_coin.value+transfered_coin.value==self.value
         assert!(change_coin.value+transfered_coin.value==self.value
                 && self.value>0);
                 && self.value>0);
         let bincode = include_bytes!("../../proof/tx.zk.bin");
         let bincode = include_bytes!("../../proof/tx.zk.bin");
@@ -405,12 +408,12 @@ impl LeadCoin {
             Witness::Uint32(Value::known(pos)),
             Witness::Uint32(Value::known(pos)),
             Witness::Base(Value::known(self.sn)),
             Witness::Base(Value::known(self.sn)),
             // coin (3)
             // coin (3)
-            Witness::Base(Value::known(change_coin.pk)),
+            Witness::Base(Value::known(change_pk)),
             Witness::Base(Value::known(change_coin.rho)),
             Witness::Base(Value::known(change_coin.rho)),
             Witness::Scalar(Value::known(change_coin.opening)),
             Witness::Scalar(Value::known(change_coin.opening)),
             Witness::Base(Value::known(retval)),
             Witness::Base(Value::known(retval)),
             // coin (4)
             // coin (4)
-            Witness::Base(Value::known(transfered_coin.pk)),
+            Witness::Base(Value::known(transfered_pk)),
             Witness::Base(Value::known(transfered_coin.rho)),
             Witness::Base(Value::known(transfered_coin.rho)),
             Witness::Scalar(Value::known(transfered_coin.opening)),
             Witness::Scalar(Value::known(transfered_coin.opening)),
             Witness::Base(Value::known(xferval)),
             Witness::Base(Value::known(xferval)),
@@ -418,14 +421,14 @@ impl LeadCoin {
         let circuit = ZkCircuit::new(witnesses, zkbin.clone());
         let circuit = ZkCircuit::new(witnesses, zkbin.clone());
         let proof = Proof::create(pk, &[circuit], &self.public_inputs(), &mut OsRng)?;
         let proof = Proof::create(pk, &[circuit], &self.public_inputs(), &mut OsRng)?;
         let cm3_msg_in = [pallas::Base::from(PREFIX_CM),
         let cm3_msg_in = [pallas::Base::from(PREFIX_CM),
-                          change_coin.pk,
+                          change_pk,
                           pallas::Base::from(change_coin.value),
                           pallas::Base::from(change_coin.value),
                           change_coin.rho,
                           change_coin.rho,
         ];
         ];
         let cm3_msg = poseidon_hash(cm3_msg_in);
         let cm3_msg = poseidon_hash(cm3_msg_in);
         let cm3 = pedersen_commitment_base(cm3_msg, change_coin.opening);
         let cm3 = pedersen_commitment_base(cm3_msg, change_coin.opening);
         let cm4_msg_in = [pallas::Base::from(PREFIX_CM),
         let cm4_msg_in = [pallas::Base::from(PREFIX_CM),
-                          transfered_coin.pk,
+                          transfered_pk,
                           pallas::Base::from(transfered_coin.value),
                           pallas::Base::from(transfered_coin.value),
                           transfered_coin.rho,
                           transfered_coin.rho,
         ];
         ];

+ 1 - 4
src/consensus/rcpt.rs

@@ -25,14 +25,11 @@ use crate::{
 };
 };
 use crypto_api_chachapoly::ChachaPolyIetf;
 use crypto_api_chachapoly::ChachaPolyIetf;
 
 
-
 /// transfered leadcoin is rcpt into two coins,
 /// transfered leadcoin is rcpt into two coins,
 /// first coin is transfered rcpt coin.
 /// first coin is transfered rcpt coin.
 /// second coin is the change returning to sender, or different address.
 /// second coin is the change returning to sender, or different address.
 #[derive(Debug, Clone, Copy, Eq, PartialEq, SerialEncodable, SerialDecodable)]
 #[derive(Debug, Clone, Copy, Eq, PartialEq, SerialEncodable, SerialDecodable)]
 pub struct TxRcpt {
 pub struct TxRcpt {
-    /// rcpt coin public key
-    pub pk: pallas::Base,
     /// rcpt coin nonce
     /// rcpt coin nonce
     pub rho: pallas::Base,
     pub rho: pallas::Base,
     /// rcpt coin commitment opening
     /// rcpt coin commitment opening
@@ -42,7 +39,7 @@ pub struct TxRcpt {
 }
 }
 
 
 
 
-pub const PLAINTEXT_SIZE: usize = 32 + 32 + 32 + 8;
+pub const PLAINTEXT_SIZE: usize = 32 + 32 + 8;
 pub const AEAD_TAG_SIZE: usize = 16;
 pub const AEAD_TAG_SIZE: usize = 16;
 pub const CIPHER_SIZE: usize = PLAINTEXT_SIZE + AEAD_TAG_SIZE;
 pub const CIPHER_SIZE: usize = PLAINTEXT_SIZE + AEAD_TAG_SIZE;
 
 

+ 23 - 0
src/consensus/tx.rs

@@ -0,0 +1,23 @@
+use crate::{
+    consensus::{EncryptedTxRcpt, TransferStx},
+    serial::darkfi_derive::{SerialDecodable, SerialEncodable};
+};
+
+/// transfer transaction
+#[derive(Debug, Clone, Copy, SerialDecodable, SerialEncodable)]
+pub struct Tx {
+    pub xfer: TransferStx,
+    pub cipher: EncryptedTxRcpt,
+}
+
+impl Tx {
+    /// verify transfer transaction
+    pub fn verify(&self) -> bool{
+        //TODO: verify tx
+        true
+    }
+
+    pub fn leadcoin(&self)  -> LeadCoin {
+        //
+    }
+}