aggstam 3 лет назад
Родитель
Сommit
5e3aa99f32

+ 1 - 0
script/research/pallas_constants/src/main.rs

@@ -47,6 +47,7 @@ fn main() -> Result<()> {
     source.push_str(&to_constant("REWARD_PALLAS", pallas::Base::from(100_000_000), true));
     source.push_str(&to_constant("SERIAL_PREFIX", pallas::Base::from(2), true));
     source.push_str(&to_constant("SEED_PREFIX", pallas::Base::from(3), true));
+    source.push_str(&to_constant("SECRET_KEY_PREFIX", pallas::Base::from(4), true));
     source.push_str(&to_constant("MU_Y_PREFIX", pallas::Base::from(22), true));
     source.push_str(&to_constant("MU_RHO_PREFIX", pallas::Base::from(5), true));
     source.push_str(&to_constant("HEADSTART", LeadCoin::headstart(), true));

+ 0 - 1
src/contract/consensus/proof/consensus_burn_v1.zk

@@ -39,7 +39,6 @@ circuit "ConsensusBurn_V1" {
 	constrain_instance(pub_x);
 	constrain_instance(pub_y);
 
-
 	# Coin hash	
 	C = poseidon_hash(
 		pub_x,

+ 4 - 5
src/contract/consensus/proof/consensus_proposal_v1.zk

@@ -109,10 +109,9 @@ circuit "ConsensusProposal_V1" {
 	# The serial of the new coin is derived from the old coin
 	output_serial = poseidon_hash(SERIAL_PREFIX, input_secret_key, input_serial);
 
-        # output secret key derived from input key
-        output_secret_key = poseidon_hash(SECRET_PREFIX, input_secret_key);
-
-        output_pub = ec_mul_base(output_secret_key, NULLIFIER_K);
+	# The secret key of the new coin is derived from old coin
+	output_secret_key = poseidon_hash(SECRET_PREFIX, input_secret_key);
+	output_pub = ec_mul_base(output_secret_key, NULLIFIER_K);
 	output_pub_x = ec_get_x(output_pub);
 	output_pub_y = ec_get_y(output_pub);
         
@@ -127,7 +126,7 @@ circuit "ConsensusProposal_V1" {
 		output_serial,
 		output_coin_blind,
 	);
-       	constrain_instance(output_coin);
+	constrain_instance(output_coin);
 
 	# ============================
 	# Constrain lottery parameters

+ 5 - 6
src/contract/consensus/src/client/proposal_v1.rs

@@ -42,8 +42,8 @@ use rand::rngs::OsRng;
 use crate::{
     client::common::{ConsensusBurnInputInfo, ConsensusMintOutputInfo},
     model::{
-        ConsensusProposalParamsV1, HEADSTART, MU_RHO_PREFIX, MU_Y_PREFIX, REWARD, SEED_PREFIX,
-        SERIAL_PREFIX,
+        ConsensusProposalParamsV1, HEADSTART, MU_RHO_PREFIX, MU_Y_PREFIX, REWARD,
+        SECRET_KEY_PREFIX, SEED_PREFIX, SERIAL_PREFIX,
     },
 };
 
@@ -128,7 +128,6 @@ pub struct ConsensusProposalCallBuilder {
 
 impl ConsensusProposalCallBuilder {
     pub fn build(&self) -> Result<ConsensusProposalCallDebris> {
-        let SECRET_PREFIX = pallas::Base::from(4);
         info!("Building Consensus::ProposalBurnV1 contract call");
         assert!(self.owncoin.note.value != 0);
 
@@ -148,9 +147,9 @@ impl ConsensusProposalCallBuilder {
         let output_reward_blind = pallas::Scalar::random(&mut OsRng);
         let output_value_blind = input.value_blind + output_reward_blind;
 
-        // derive output secret from old secret key.
-        let output_secret = poseidon_hash([SECRET_PREFIX, self.owncoin.secret.inner()]);
-        let output_keypair = Keypair::new(SecretKey::from(output_secret));
+        // The output's secret key is derived from the old secret key
+        let output_secret_key = poseidon_hash([SECRET_KEY_PREFIX, self.owncoin.secret.inner()]);
+        let output_keypair = Keypair::new(SecretKey::from(output_secret_key));
 
         // The output's serial is derived from the old serial
         let output_serial =

+ 12 - 9
src/contract/consensus/src/client/unstake_request_v1.rs

@@ -28,17 +28,20 @@ use darkfi_money_contract::{
     model::{ConsensusInput, ConsensusOutput, ConsensusUnstakeReqParamsV1},
 };
 use darkfi_sdk::{
-    crypto::{note::AeadEncryptedNote, pasta_prelude::*, Keypair, MerkleTree, SecretKey, poseidon_hash},
+    crypto::{
+        note::AeadEncryptedNote, pasta_prelude::*, poseidon_hash, Keypair, MerkleTree, SecretKey,
+    },
     pasta::pallas,
 };
 use log::{debug, info};
 use rand::rngs::OsRng;
 
 use crate::{
-    client::common::{create_consensus_burn_proof, create_consensus_mint_proof, ConsensusBurnInputInfo, ConsensusMintOutputInfo},
-    model::{
-        SERIAL_PREFIX,
+    client::common::{
+        create_consensus_burn_proof, create_consensus_mint_proof, ConsensusBurnInputInfo,
+        ConsensusMintOutputInfo,
     },
+    model::{SECRET_KEY_PREFIX, SERIAL_PREFIX},
 };
 
 pub struct ConsensusUnstakeRequestCallDebris {
@@ -87,11 +90,11 @@ impl ConsensusUnstakeRequestCallBuilder {
         };
 
         debug!("Building Consensus::UnstakeRequestV1 anonymous output");
-        //let output_serial = pallas::Base::random(&mut OsRng);
-        // derive output secret from old secret key.
-        let output_secret = poseidon_hash([self.owncoin.secret.inner()]);
-        let output_keypair = Keypair::new(SecretKey::from(output_secret));
-        let output_serial = poseidon_hash([SERIAL_PREFIX, self.owncoin.secret.inner(), self.owncoin.note.serial]);
+        // The output's secret key is derived from the old secret key
+        let output_secret_key = poseidon_hash([SECRET_KEY_PREFIX, self.owncoin.secret.inner()]);
+        let output_keypair = Keypair::new(SecretKey::from(output_secret_key));
+        let output_serial =
+            poseidon_hash([SERIAL_PREFIX, self.owncoin.secret.inner(), self.owncoin.note.serial]);
         let output_coin_blind = pallas::Base::random(&mut OsRng);
 
         // We create a new random keypair for the output

+ 2 - 0
src/contract/consensus/src/model.rs

@@ -100,6 +100,8 @@ pub const REWARD_PALLAS: pallas::Base = pallas::Base::from_raw([100000000, 0, 0,
 pub const SERIAL_PREFIX: pallas::Base = pallas::Base::from_raw([2, 0, 0, 0]);
 /// Seed prefix, calculated by: pallas::Base::from(3)
 pub const SEED_PREFIX: pallas::Base = pallas::Base::from_raw([3, 0, 0, 0]);
+/// Secret key prefix, calculated by: pallas::Base::from(4)
+pub const SECRET_KEY_PREFIX: pallas::Base = pallas::Base::from_raw([4, 0, 0, 0]);
 /// Election seed y prefix, calculated by: pallas::Base::from(22)
 pub const MU_Y_PREFIX: pallas::Base = pallas::Base::from_raw([22, 0, 0, 0]);
 /// Election seed rho prefix, calculated by: pallas::Base::from(5)

+ 1 - 1
src/contract/test-harness/src/vks.rs

@@ -48,7 +48,7 @@ use darkfi_serial::{deserialize, serialize};
 use log::debug;
 
 /// Update this if any circuits are changed
-const VKS_HASH: &str = "0a745d4055440b52a9e669264a8cbf51a726d1ca290a4a3c6dc4cad3e711a1f3";
+const VKS_HASH: &str = "f731fc9e7922583be551236328814c6e3a0fb6ee5cf7f4516c4c2be1ac5333b5";
 
 fn vks_path() -> Result<PathBuf> {
     let output = Command::new("git").arg("rev-parse").arg("--show-toplevel").output()?.stdout;