Просмотр исходного кода

contract/money: removed coin blind for hashes

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

+ 1 - 3
src/contract/dao/src/client/propose.rs

@@ -102,7 +102,6 @@ impl DaoProposeCall {
                 Witness::Base(halo2::Value::known(pallas::Base::from(0))),
                 Witness::Base(halo2::Value::known(pallas::Base::from(note.value))),
                 Witness::Base(halo2::Value::known(note.token_id.inner())),
-                Witness::Base(halo2::Value::known(note.coin_blind)),
                 Witness::Scalar(halo2::Value::known(funds_blind)),
                 Witness::Base(halo2::Value::known(gov_token_blind)),
                 Witness::Uint32(halo2::Value::known(leaf_pos.try_into().unwrap())),
@@ -115,7 +114,7 @@ impl DaoProposeCall {
             let public_key = PublicKey::from_secret(input.secret);
             let (pub_x, pub_y) = public_key.xy();
 
-            let coin = poseidon_hash::<8>([
+            let coin = poseidon_hash::<7>([
                 pub_x,
                 pub_y,
                 pallas::Base::from(note.value),
@@ -123,7 +122,6 @@ impl DaoProposeCall {
                 note.serial,
                 pallas::Base::from(0),
                 pallas::Base::from(0),
-                note.coin_blind,
             ]);
 
             let merkle_root = {

+ 1 - 3
src/contract/dao/src/client/vote.rs

@@ -101,7 +101,6 @@ impl DaoVoteCall {
                 Witness::Base(halo2::Value::known(pallas::Base::from(0))),
                 Witness::Base(halo2::Value::known(pallas::Base::from(note.value))),
                 Witness::Base(halo2::Value::known(note.token_id.inner())),
-                Witness::Base(halo2::Value::known(note.coin_blind)),
                 Witness::Scalar(halo2::Value::known(all_vote_blind)),
                 Witness::Base(halo2::Value::known(gov_token_blind)),
                 Witness::Uint32(halo2::Value::known(leaf_pos.try_into().unwrap())),
@@ -114,7 +113,7 @@ impl DaoVoteCall {
             let public_key = PublicKey::from_secret(input.secret);
             let (pub_x, pub_y) = public_key.xy();
 
-            let coin = poseidon_hash::<8>([
+            let coin = poseidon_hash::<7>([
                 pub_x,
                 pub_y,
                 pallas::Base::from(note.value),
@@ -122,7 +121,6 @@ impl DaoVoteCall {
                 note.serial,
                 pallas::Base::from(0),
                 pallas::Base::from(0),
-                note.coin_blind,
             ]);
 
             let merkle_root = {

+ 0 - 4
src/contract/dao/src/money_client.rs

@@ -73,7 +73,6 @@ pub struct TransferOutput {
     pub token_id: TokenId,
     pub public: PublicKey,
     pub serial: pallas::Base,
-    pub coin_blind: pallas::Base,
     pub spend_hook: pallas::Base,
     pub user_data: pallas::Base,
 }
@@ -180,7 +179,6 @@ impl TransferCall {
             output_blinds.push(value_blind);
 
             let serial = output.serial;
-            let coin_blind = output.coin_blind;
 
             // FIXME: This is a hack between the two APIs
             let _output = TransactionBuilderOutputInfo {
@@ -198,7 +196,6 @@ impl TransferCall {
                 serial,
                 output.spend_hook,
                 output.user_data,
-                coin_blind,
             )?;
 
             proofs.push(proof);
@@ -209,7 +206,6 @@ impl TransferCall {
                 token_id: output.token_id,
                 spend_hook: output.spend_hook,
                 user_data: output.user_data,
-                coin_blind,
                 value_blind,
                 token_blind,
                 memo: Vec::new(),

+ 0 - 3
src/contract/money/proof/burn_v1.zk

@@ -21,8 +21,6 @@ witness "Burn_V1" {
 	Base user_data,
 	# Blinding factor for the encrypted user_data
 	Base user_data_blind,
-	# Random blinding factor for coin
-	Base coin_blind,
 	# Secret key used to derive nullifier and coin's public key
 	Base secret,
 	# Leaf position of the coin in the Merkle tree of coins
@@ -68,7 +66,6 @@ circuit "Burn_V1" {
 		serial,
 		spend_hook,
 		user_data,
-		coin_blind,
 	);
 
 	# Merkle root

+ 0 - 3
src/contract/money/proof/mint_v1.zk

@@ -15,8 +15,6 @@ witness "Mint_V1" {
 	Base token,
 	# Unique serial number corresponding to this coin
 	Base serial,
-	# Random blinding factor for coin
-	Base coin_blind,
 	# Allows composing this ZK proof to invoke other contracts
 	Base spend_hook,
 	# Data passed from this coin to the invoked contract
@@ -37,7 +35,6 @@ circuit "Mint_V1" {
 		serial,
 		spend_hook,
 		user_data,
-		coin_blind,
 	);
 	constrain_instance(C);
 

+ 0 - 3
src/contract/money/proof/token_mint_v1.zk

@@ -16,8 +16,6 @@ witness "TokenMint_V1" {
 	Base rcpt_y,
 	# Unique serial number for the minted coin
 	Base serial,
-	# Random blinding factor for the minted coin
-	Base coin_blind,
 	# Allows composing this ZK proof to invoke other contracts
 	Base spend_hook,
 	# Data passed from this coin to the invoked contract
@@ -54,7 +52,6 @@ circuit "TokenMint_V1" {
 		serial,
 		spend_hook,
 		user_data,
-		coin_blind,
 	);
 	constrain_instance(C);
 

+ 0 - 3
src/contract/money/src/client/genesis_mint_v1.rs

@@ -120,7 +120,6 @@ impl GenesisMintCallBuilder {
         };
 
         let serial = pallas::Base::random(&mut OsRng);
-        let coin_blind = pallas::Base::random(&mut OsRng);
 
         info!("Creating token mint proof for output");
         let (proof, public_inputs) = create_transfer_mint_proof(
@@ -132,7 +131,6 @@ impl GenesisMintCallBuilder {
             serial,
             self.spend_hook,
             self.user_data,
-            coin_blind,
         )?;
 
         let note = MoneyNote {
@@ -141,7 +139,6 @@ impl GenesisMintCallBuilder {
             token_id: output.token_id,
             spend_hook: self.spend_hook,
             user_data: self.user_data,
-            coin_blind,
             value_blind,
             token_blind,
             memo: vec![],

+ 0 - 4
src/contract/money/src/client/mod.rs

@@ -79,7 +79,6 @@ pub const MONEY_COINS_COL_VALUE: &str = "value";
 pub const MONEY_COINS_COL_TOKEN_ID: &str = "token_id";
 pub const MONEY_COINS_COL_SPEND_HOOK: &str = "spend_hook";
 pub const MONEY_COINS_COL_USER_DATA: &str = "user_data";
-pub const MONEY_COINS_COL_COIN_BLIND: &str = "coin_blind";
 pub const MONEY_COINS_COL_VALUE_BLIND: &str = "value_blind";
 pub const MONEY_COINS_COL_TOKEN_BLIND: &str = "token_blind";
 pub const MONEY_COINS_COL_SECRET: &str = "secret";
@@ -110,8 +109,6 @@ pub struct MoneyNote {
     pub spend_hook: pallas::Base,
     /// User data used by protocol when spend hook is enabled
     pub user_data: pallas::Base,
-    /// Blinding factor for the coin bulla
-    pub coin_blind: pallas::Base,
     /// Blinding factor for the value pedersen commitment
     pub value_blind: pallas::Scalar,
     /// Blinding factor for the token ID pedersen commitment
@@ -160,7 +157,6 @@ impl From<ConsensusNote> for MoneyNote {
             token_id: *DARK_TOKEN_ID,
             spend_hook: pallas::Base::ZERO,
             user_data: pallas::Base::ZERO,
-            coin_blind: pallas::Base::ZERO,
             value_blind: consensus_note.value_blind,
             token_blind: pallas::Scalar::ZERO,
             memo: vec![],

+ 0 - 2
src/contract/money/src/client/stake_v1.rs

@@ -176,7 +176,6 @@ pub fn create_stake_burn_proof(
         input.note.serial,
         input.note.spend_hook,
         input.note.user_data,
-        input.note.coin_blind,
     ]);
 
     let merkle_root = {
@@ -216,7 +215,6 @@ pub fn create_stake_burn_proof(
         Witness::Base(Value::known(input.note.spend_hook)),
         Witness::Base(Value::known(input.note.user_data)),
         Witness::Base(Value::known(user_data_blind)),
-        Witness::Base(Value::known(input.note.coin_blind)),
         Witness::Base(Value::known(input.secret.inner())),
         Witness::Uint32(Value::known(u64::from(input.leaf_position).try_into().unwrap())),
         Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),

+ 0 - 3
src/contract/money/src/client/swap_v1.rs

@@ -156,7 +156,6 @@ impl SwapCallBuilder {
 
         // For the output, we create a new serial and coin blind
         let serial = pallas::Base::random(&mut OsRng);
-        let coin_blind = pallas::Base::random(&mut OsRng);
 
         info!("Creating mint proof for output");
         let (proof, public_inputs) = create_transfer_mint_proof(
@@ -168,7 +167,6 @@ impl SwapCallBuilder {
             serial,
             self.spend_hook_recv,
             self.user_data_recv,
-            coin_blind,
         )?;
 
         proofs.push(proof);
@@ -180,7 +178,6 @@ impl SwapCallBuilder {
             token_id: output.token_id,
             spend_hook: self.spend_hook_recv,
             user_data: self.user_data_recv,
-            coin_blind,
             value_blind: self.value_blinds[1],
             token_blind: self.token_blinds[1],
             // Here we store our secret key we use for signing

+ 0 - 6
src/contract/money/src/client/token_mint_v1.rs

@@ -128,7 +128,6 @@ impl TokenMintCallBuilder {
         };
 
         let serial = pallas::Base::random(&mut OsRng);
-        let coin_blind = pallas::Base::random(&mut OsRng);
 
         info!("Creating token mint proof for output");
         let (proof, public_inputs) = create_token_mint_proof(
@@ -141,7 +140,6 @@ impl TokenMintCallBuilder {
             serial,
             self.spend_hook,
             self.user_data,
-            coin_blind,
         )?;
 
         let note = MoneyNote {
@@ -150,7 +148,6 @@ impl TokenMintCallBuilder {
             token_id: output.token_id,
             spend_hook: self.spend_hook,
             user_data: self.user_data,
-            coin_blind,
             value_blind,
             token_blind,
             memo: vec![],
@@ -182,7 +179,6 @@ pub fn create_token_mint_proof(
     serial: pallas::Base,
     spend_hook: pallas::Base,
     user_data: pallas::Base,
-    coin_blind: pallas::Base,
 ) -> Result<(Proof, TokenMintRevealed)> {
     let token_id = TokenId::derive(mint_authority.secret);
 
@@ -199,7 +195,6 @@ pub fn create_token_mint_proof(
         serial,
         spend_hook,
         user_data,
-        coin_blind,
     ]));
 
     let public_inputs = TokenMintRevealed {
@@ -216,7 +211,6 @@ pub fn create_token_mint_proof(
         Witness::Base(Value::known(rcpt_x)),
         Witness::Base(Value::known(rcpt_y)),
         Witness::Base(Value::known(serial)),
-        Witness::Base(Value::known(coin_blind)),
         Witness::Base(Value::known(spend_hook)),
         Witness::Base(Value::known(user_data)),
         Witness::Scalar(Value::known(value_blind)),

+ 0 - 8
src/contract/money/src/client/transfer_v1.rs

@@ -308,7 +308,6 @@ impl TransferCallBuilder {
             output_blinds.push(value_blind);
 
             let serial = pallas::Base::random(&mut OsRng);
-            let coin_blind = pallas::Base::random(&mut OsRng);
 
             let (scoped_sh, scoped_ud) = {
                 if i >= change_outputs.len() {
@@ -328,7 +327,6 @@ impl TransferCallBuilder {
                 serial,
                 scoped_sh,
                 scoped_ud,
-                coin_blind,
             )?;
 
             proofs.push(proof);
@@ -340,7 +338,6 @@ impl TransferCallBuilder {
                 token_id: output.token_id,
                 spend_hook: scoped_sh,
                 user_data: scoped_ud,
-                coin_blind,
                 value_blind,
                 token_blind,
                 memo: vec![],
@@ -386,7 +383,6 @@ pub fn create_transfer_burn_proof(
         input.note.serial,
         input.note.spend_hook,
         input.note.user_data,
-        input.note.coin_blind,
     ]);
 
     let merkle_root = {
@@ -426,7 +422,6 @@ pub fn create_transfer_burn_proof(
         Witness::Base(Value::known(input.note.spend_hook)),
         Witness::Base(Value::known(input.note.user_data)),
         Witness::Base(Value::known(user_data_blind)),
-        Witness::Base(Value::known(input.note.coin_blind)),
         Witness::Base(Value::known(input.secret.inner())),
         Witness::Uint32(Value::known(u64::from(input.leaf_position).try_into().unwrap())),
         Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
@@ -449,7 +444,6 @@ pub fn create_transfer_mint_proof(
     serial: pallas::Base,
     spend_hook: pallas::Base,
     user_data: pallas::Base,
-    coin_blind: pallas::Base,
 ) -> Result<(Proof, TransferMintRevealed)> {
     let value_commit = pedersen_commitment_u64(output.value, value_blind);
     let token_commit = pedersen_commitment_base(output.token_id.inner(), token_blind);
@@ -463,7 +457,6 @@ pub fn create_transfer_mint_proof(
         serial,
         spend_hook,
         user_data,
-        coin_blind,
     ]));
 
     let public_inputs = TransferMintRevealed { coin, value_commit, token_commit };
@@ -474,7 +467,6 @@ pub fn create_transfer_mint_proof(
         Witness::Base(Value::known(pallas::Base::from(output.value))),
         Witness::Base(Value::known(output.token_id.inner())),
         Witness::Base(Value::known(serial)),
-        Witness::Base(Value::known(coin_blind)),
         Witness::Base(Value::known(spend_hook)),
         Witness::Base(Value::known(user_data)),
         Witness::Scalar(Value::known(value_blind)),

+ 0 - 6
src/contract/money/src/client/unstake_v1.rs

@@ -109,7 +109,6 @@ impl MoneyUnstakeCallBuilder {
         let spend_hook = pallas::Base::ZERO;
         let user_data_enc = pallas::Base::random(&mut OsRng);
         let token_blind = pallas::Scalar::ZERO;
-        let coin_blind = pallas::Base::random(&mut OsRng);
 
         info!("Building Money::UnstakeV1 Mint ZK proof");
         let (proof, public_inputs) = create_unstake_mint_proof(
@@ -121,7 +120,6 @@ impl MoneyUnstakeCallBuilder {
             serial,
             spend_hook,
             user_data_enc,
-            coin_blind,
         )?;
 
         // Encrypted note
@@ -131,7 +129,6 @@ impl MoneyUnstakeCallBuilder {
             token_id: output.token_id,
             spend_hook,
             user_data: user_data_enc,
-            coin_blind,
             value_blind: self.value_blind,
             token_blind,
             memo: vec![],
@@ -174,7 +171,6 @@ pub fn create_unstake_mint_proof(
     serial: pallas::Base,
     spend_hook: pallas::Base,
     user_data: pallas::Base,
-    coin_blind: pallas::Base,
 ) -> Result<(Proof, MoneyMintRevealed)> {
     let value_commit = pedersen_commitment_u64(output.value, value_blind);
     let token_commit = pedersen_commitment_base(output.token_id.inner(), token_blind);
@@ -188,7 +184,6 @@ pub fn create_unstake_mint_proof(
         serial,
         spend_hook,
         user_data,
-        coin_blind,
     ]));
 
     let public_inputs = MoneyMintRevealed { coin, value_commit, token_commit };
@@ -199,7 +194,6 @@ pub fn create_unstake_mint_proof(
         Witness::Base(Value::known(pallas::Base::from(output.value))),
         Witness::Base(Value::known(output.token_id.inner())),
         Witness::Base(Value::known(serial)),
-        Witness::Base(Value::known(coin_blind)),
         Witness::Base(Value::known(spend_hook)),
         Witness::Base(Value::known(user_data)),
         Witness::Scalar(Value::known(value_blind)),

+ 0 - 1
src/contract/money/wallet.sql

@@ -29,7 +29,6 @@ CREATE TABLE IF NOT EXISTS money_coins (
 	token_id BLOB NOT NULL,
 	spend_hook BLOB NOT NULL,
 	user_data BLOB NOT NULL,
-	coin_blind BLOB NOT NULL,
 	value_blind BLOB NOT NULL,
 	token_blind BLOB NOT NULL,
 	secret BLOB NOT NULL,