Przeglądaj źródła

contract/consensus: use burnt coin serial to calculate lottery seed in proof

aggstam 3 lat temu
rodzic
commit
a494ca2afb

+ 1 - 3
src/contract/consensus/proof/proposal_reward_v1.zk

@@ -4,8 +4,6 @@ constant "ProposalReward_V1" {
 }
 
 witness "ProposalReward_V1" {
-	# Burnt coin
-	Base coin,
 	# Burnt coin secret key
 	Base secret_key,
 	# Unique serial number corresponding to the burnt coin
@@ -57,7 +55,7 @@ circuit "ProposalReward_V1" {
 	constrain_instance(ec_get_y(new_value_commit));
 
 	# Coin y:
-	seed = poseidon_hash(SEED_PREFIX, coin, secret_key, ZERO);
+	seed = poseidon_hash(SEED_PREFIX, serial, ZERO);
 	y = poseidon_hash(seed, mu_y);
 	constrain_instance(mu_y);
 	constrain_instance(y);

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

@@ -234,14 +234,12 @@ impl ConsensusProposalCallBuilder {
         let stake_input = input;
 
         debug!("Building Consensus::RewardV1 contract call for proposal");
-        let coin = self.coin.coin.inner();
         let secret_key = self.coin.secret.inner();
         let serial = self.coin.note.serial;
         let (proof, public_inputs) = create_proposal_reward_proof(
             &self.reward_zkbin,
             &self.reward_pk,
             &self.slot_checkpoint,
-            coin,
             secret_key,
             serial,
             value,
@@ -275,7 +273,6 @@ pub fn create_proposal_reward_proof(
     zkbin: &ZkBinary,
     pk: &ProvingKey,
     slot_checkpoint: &SlotCheckpoint,
-    coin: pallas::Base,
     secret_key: pallas::Base,
     serial: pallas::Base,
     value: u64,
@@ -286,7 +283,7 @@ pub fn create_proposal_reward_proof(
     let value_commit = pedersen_commitment_u64(value, value_blind);
     let new_value_commit = pedersen_commitment_u64(value + REWARD, value_blind);
     let slot_pallas = pallas::Base::from(slot_checkpoint.slot);
-    let seed = poseidon_hash([SEED_PREFIX, coin, secret_key, ZERO]);
+    let seed = poseidon_hash([SEED_PREFIX, serial, ZERO]);
     let mu_y = poseidon_hash([MU_Y_PREFIX, slot_checkpoint.eta, slot_pallas]);
     let y = poseidon_hash([seed, mu_y]);
     let mu_rho = poseidon_hash([MU_RHO_PREFIX, slot_checkpoint.eta, slot_pallas]);
@@ -307,7 +304,6 @@ pub fn create_proposal_reward_proof(
     };
 
     let prover_witnesses = vec![
-        Witness::Base(Value::known(coin)),
         Witness::Base(Value::known(secret_key)),
         Witness::Base(Value::known(serial)),
         Witness::Base(Value::known(pallas::Base::from(value))),