Forráskód Böngészése

Update calls throughout repository for latest darkfi-sdk changes.

parazyd 3 éve
szülő
commit
d7ee8f3e0c
80 módosított fájl, 500 hozzáadás és 813 törlés
  1. 6 0
      Cargo.lock
  2. 9 6
      bin/dao/daod/src/contract/dao/exec/validate.rs
  3. 16 19
      bin/dao/daod/src/contract/dao/exec/wallet.rs
  4. 2 1
      bin/dao/daod/src/contract/dao/mint/validate.rs
  5. 8 11
      bin/dao/daod/src/contract/dao/mint/wallet.rs
  6. 5 8
      bin/dao/daod/src/contract/dao/propose/validate.rs
  7. 16 22
      bin/dao/daod/src/contract/dao/propose/wallet.rs
  8. 5 8
      bin/dao/daod/src/contract/dao/vote/validate.rs
  9. 23 25
      bin/dao/daod/src/contract/dao/vote/wallet.rs
  10. 3 5
      bin/dao/daod/src/contract/example/foo/validate.rs
  11. 2 5
      bin/dao/daod/src/contract/money/state.rs
  12. 4 3
      bin/dao/daod/src/contract/money/transfer/validate.rs
  13. 1 2
      bin/dao/daod/src/contract/money/transfer/wallet.rs
  14. 21 22
      bin/dao/daod/src/main.rs
  15. 5 9
      bin/dao/daod/src/note.rs
  16. 11 10
      bin/dao/daod/src/rpc.rs
  17. 6 4
      bin/dao/daod/src/util.rs
  18. 1 1
      bin/darkfid/src/main.rs
  19. 2 1
      bin/darkfid/src/rpc_tx.rs
  20. 3 6
      bin/darkfid/src/rpc_wallet.rs
  21. 8 6
      bin/darkotc/src/main.rs
  22. 1 2
      bin/darkotc/src/rpc.rs
  23. 1 0
      bin/drk/Cargo.toml
  24. 2 1
      bin/drk/src/main.rs
  25. 1 0
      bin/faucetd/Cargo.toml
  26. 2 1
      bin/faucetd/src/main.rs
  27. 1 0
      bin/vanityaddr/Cargo.toml
  28. 2 7
      bin/vanityaddr/src/main.rs
  29. 3 2
      example/dao/src/contract/dao/exec/validate.rs
  30. 16 19
      example/dao/src/contract/dao/exec/wallet.rs
  31. 2 1
      example/dao/src/contract/dao/mint/validate.rs
  32. 8 11
      example/dao/src/contract/dao/mint/wallet.rs
  33. 5 8
      example/dao/src/contract/dao/propose/validate.rs
  34. 16 22
      example/dao/src/contract/dao/propose/wallet.rs
  35. 5 8
      example/dao/src/contract/dao/vote/validate.rs
  36. 23 25
      example/dao/src/contract/dao/vote/wallet.rs
  37. 3 5
      example/dao/src/contract/example/foo/validate.rs
  38. 2 4
      example/dao/src/contract/example/foo/wallet.rs
  39. 1 2
      example/dao/src/contract/money/state.rs
  40. 4 3
      example/dao/src/contract/money/transfer/validate.rs
  41. 1 2
      example/dao/src/contract/money/transfer/wallet.rs
  42. 15 14
      example/dao/src/main.rs
  43. 5 9
      example/dao/src/note.rs
  44. 5 3
      example/dao/src/util.rs
  45. 3 2
      example/tx.rs
  46. 1 1
      example/zk.rs
  47. 16 10
      src/consensus/coins.rs
  48. 4 4
      src/consensus/metadata.rs
  49. 16 14
      src/consensus/ouroboros/stakeholder.rs
  50. 1 2
      src/consensus/ouroboros/state.rs
  51. 5 5
      src/consensus/participant.rs
  52. 6 5
      src/consensus/state.rs
  53. 15 14
      src/crypto/burn_proof.rs
  54. 5 3
      src/crypto/coin.rs
  55. 4 8
      src/crypto/diffie_hellman.rs
  56. 0 179
      src/crypto/keypair.rs
  57. 9 10
      src/crypto/leadcoin.rs
  58. 14 9
      src/crypto/mint_proof.rs
  59. 0 3
      src/crypto/mod.rs
  60. 2 3
      src/crypto/note.rs
  61. 5 3
      src/crypto/proof.rs
  62. 0 89
      src/crypto/schnorr.rs
  63. 3 43
      src/crypto/util.rs
  64. 3 2
      src/error.rs
  65. 1 3
      src/node/client.rs
  66. 2 2
      src/node/memorystate.rs
  67. 1 2
      src/node/state.rs
  68. 1 0
      src/sdk/Cargo.toml
  69. 23 14
      src/sdk/src/crypto/address.rs
  70. 18 1
      src/sdk/src/crypto/keypair.rs
  71. 4 0
      src/sdk/src/crypto/mod.rs
  72. 3 5
      src/tx/builder.rs
  73. 6 4
      src/tx/mod.rs
  74. 1 1
      src/tx/partial.rs
  75. 3 3
      src/wallet/walletdb.rs
  76. 10 8
      src/zk/circuit/burn_contract.rs
  77. 10 8
      src/zk/circuit/mint_contract.rs
  78. 10 9
      tests/burn_proof.rs
  79. 9 7
      tests/mint_proof.rs
  80. 5 14
      tests/zkvm_opcodes.rs

+ 6 - 0
Cargo.lock

@@ -1302,6 +1302,7 @@ dependencies = [
 name = "darkfi-sdk"
 name = "darkfi-sdk"
 version = "0.3.0"
 version = "0.3.0"
 dependencies = [
 dependencies = [
+ "blake2b_simd",
  "blake3",
  "blake3",
  "bs58",
  "bs58",
  "darkfi-serial",
  "darkfi-serial",
@@ -1311,6 +1312,8 @@ dependencies = [
  "lazy_static",
  "lazy_static",
  "pasta_curves",
  "pasta_curves",
  "rand",
  "rand",
+ "rand_core 0.6.4",
+ "sha2 0.10.6",
  "subtle",
  "subtle",
  "thiserror",
  "thiserror",
 ]
 ]
@@ -1675,6 +1678,7 @@ dependencies = [
  "bs58",
  "bs58",
  "clap 3.2.23",
  "clap 3.2.23",
  "darkfi",
  "darkfi",
+ "darkfi-sdk",
  "indicatif",
  "indicatif",
  "log",
  "log",
  "pasta_curves",
  "pasta_curves",
@@ -1885,6 +1889,7 @@ dependencies = [
  "chrono",
  "chrono",
  "ctrlc",
  "ctrlc",
  "darkfi",
  "darkfi",
+ "darkfi-sdk",
  "darkfi-serial",
  "darkfi-serial",
  "easy-parallel",
  "easy-parallel",
  "hex",
  "hex",
@@ -4656,6 +4661,7 @@ dependencies = [
  "clap 3.2.23",
  "clap 3.2.23",
  "ctrlc",
  "ctrlc",
  "darkfi",
  "darkfi",
+ "darkfi-sdk",
  "indicatif",
  "indicatif",
  "num_cpus",
  "num_cpus",
  "rand",
  "rand",

+ 9 - 6
bin/dao/daod/src/contract/dao/exec/validate.rs

@@ -18,17 +18,20 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use pasta_curves::{
-    arithmetic::CurveAffine,
-    group::{Curve, Group},
-    pallas,
+use darkfi_sdk::{
+    crypto::PublicKey,
+    pasta::{
+        arithmetic::CurveAffine,
+        group::{Curve, Group},
+        pallas,
+    },
 };
 };
+use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{coin::Coin, keypair::PublicKey, types::DrkCircuitField},
+    crypto::{coin::Coin, types::DrkCircuitField},
     Error as DarkFiError,
     Error as DarkFiError,
 };
 };
-use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 
 
 use crate::{
 use crate::{
     contract::{dao, dao::CONTRACT_ID, money},
     contract::{dao, dao::CONTRACT_ID, money},

+ 16 - 19
bin/dao/daod/src/contract/dao/exec/wallet.rs

@@ -16,17 +16,14 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::crypto::{pedersen::pedersen_commitment_u64, SecretKey};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use log::debug;
 use log::debug;
 use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
 use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::SecretKey,
-        util::{pedersen_commitment_u64, poseidon_hash},
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -59,7 +56,7 @@ impl Builder {
         debug!(target: "dao_contract::exec::wallet::Builder", "build()");
         debug!(target: "dao_contract::exec::wallet::Builder", "build()");
         let mut proofs = vec![];
         let mut proofs = vec![];
 
 
-        let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
+        let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
 
 
         let proposal_amount = pallas::Base::from(self.proposal.amount);
         let proposal_amount = pallas::Base::from(self.proposal.amount);
 
 
@@ -68,7 +65,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
 
 
         let user_spend_hook = pallas::Base::from(0);
         let user_spend_hook = pallas::Base::from(0);
         let user_data = pallas::Base::from(0);
         let user_data = pallas::Base::from(0);
@@ -81,14 +78,14 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.dao.gov_token_id,
             self.dao.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao.bulla_blind,
             self.dao.bulla_blind,
         ]);
         ]);
 
 
         let proposal_bulla = poseidon_hash::<8>([
         let proposal_bulla = poseidon_hash::<8>([
-            *proposal_dest_coords.x(),
-            *proposal_dest_coords.y(),
+            proposal_dest_x,
+            proposal_dest_y,
             proposal_amount,
             proposal_amount,
             self.proposal.serial,
             self.proposal.serial,
             self.proposal.token_id,
             self.proposal.token_id,
@@ -99,8 +96,8 @@ impl Builder {
         ]);
         ]);
 
 
         let coin_0 = poseidon_hash::<8>([
         let coin_0 = poseidon_hash::<8>([
-            *proposal_dest_coords.x(),
-            *proposal_dest_coords.y(),
+            proposal_dest_x,
+            proposal_dest_y,
             proposal_amount,
             proposal_amount,
             self.proposal.token_id,
             self.proposal.token_id,
             self.proposal.serial,
             self.proposal.serial,
@@ -110,8 +107,8 @@ impl Builder {
         ]);
         ]);
 
 
         let coin_1 = poseidon_hash::<8>([
         let coin_1 = poseidon_hash::<8>([
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             change,
             change,
             self.proposal.token_id,
             self.proposal.token_id,
             self.dao_serial,
             self.dao_serial,
@@ -141,8 +138,8 @@ impl Builder {
         let prover_witnesses = vec![
         let prover_witnesses = vec![
             //
             //
             // proposal params
             // proposal params
-            Witness::Base(Value::known(*proposal_dest_coords.x())),
-            Witness::Base(Value::known(*proposal_dest_coords.y())),
+            Witness::Base(Value::known(proposal_dest_x)),
+            Witness::Base(Value::known(proposal_dest_y)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.token_id)),
             Witness::Base(Value::known(self.proposal.token_id)),
@@ -153,8 +150,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             // votes
             // votes
             Witness::Base(Value::known(pallas::Base::from(self.yes_votes_value))),
             Witness::Base(Value::known(pallas::Base::from(self.yes_votes_value))),

+ 2 - 1
bin/dao/daod/src/contract/dao/mint/validate.rs

@@ -18,7 +18,8 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi::crypto::{keypair::PublicKey, types::DrkCircuitField};
+use darkfi::crypto::types::DrkCircuitField;
+use darkfi_sdk::crypto::PublicKey;
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 
 
 use crate::{
 use crate::{

+ 8 - 11
bin/dao/daod/src/contract/dao/mint/wallet.rs

@@ -16,16 +16,13 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::crypto::{PublicKey, SecretKey};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
-use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
+use pasta_curves::pallas;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{PublicKey, SecretKey},
-        util::poseidon_hash,
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -65,7 +62,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao_approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao_approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao_approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao_approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao_pubkey.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao_pubkey.xy();
 
 
         let dao_bulla = poseidon_hash::<8>([
         let dao_bulla = poseidon_hash::<8>([
             dao_proposer_limit,
             dao_proposer_limit,
@@ -73,8 +70,8 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.gov_token_id,
             self.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao_bulla_blind,
             self.dao_bulla_blind,
         ]);
         ]);
         let dao_bulla = DaoBulla(dao_bulla);
         let dao_bulla = DaoBulla(dao_bulla);
@@ -93,8 +90,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.gov_token_id)),
             Witness::Base(Value::known(self.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao_bulla_blind)),
             Witness::Base(Value::known(self.dao_bulla_blind)),
         ];
         ];
         let public_inputs = vec![dao_bulla.0];
         let public_inputs = vec![dao_bulla.0];

+ 5 - 8
bin/dao/daod/src/contract/dao/propose/validate.rs

@@ -18,7 +18,7 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{MerkleNode, PublicKey};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use log::error;
 use log::error;
 use pasta_curves::{
 use pasta_curves::{
@@ -27,10 +27,7 @@ use pasta_curves::{
     pallas,
     pallas,
 };
 };
 
 
-use darkfi::{
-    crypto::{keypair::PublicKey, types::DrkCircuitField},
-    Error as DarkFiError,
-};
+use darkfi::{crypto::types::DrkCircuitField, Error as DarkFiError};
 
 
 use crate::{
 use crate::{
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
@@ -76,7 +73,7 @@ impl CallDataBase for CallData {
             total_funds_commit += input.value_commit;
             total_funds_commit += input.value_commit;
             let value_coords = input.value_commit.to_affine().coordinates().unwrap();
             let value_coords = input.value_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = input.signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = input.signature_public.xy();
 
 
             zk_publics.push((
             zk_publics.push((
                 "dao-propose-burn".to_string(),
                 "dao-propose-burn".to_string(),
@@ -85,8 +82,8 @@ impl CallDataBase for CallData {
                     *value_coords.y(),
                     *value_coords.y(),
                     self.header.token_commit,
                     self.header.token_commit,
                     input.merkle_root.inner(),
                     input.merkle_root.inner(),
-                    *sigpub_coords.x(),
-                    *sigpub_coords.y(),
+                    sig_x,
+                    sig_y,
                 ],
                 ],
             ));
             ));
         }
         }

+ 16 - 22
bin/dao/daod/src/contract/dao/propose/wallet.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{pedersen::pedersen_commitment_u64, MerkleNode, PublicKey, SecretKey};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use incrementalmerkletree::Hashable;
 use incrementalmerkletree::Hashable;
@@ -28,11 +28,7 @@ use pasta_curves::{
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{PublicKey, SecretKey},
-        util::{pedersen_commitment_u64, poseidon_hash},
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -110,7 +106,7 @@ impl Builder {
             let leaf_pos: u64 = input.leaf_position.into();
             let leaf_pos: u64 = input.leaf_position.into();
 
 
             let prover_witnesses = vec![
             let prover_witnesses = vec![
-                Witness::Base(Value::known(input.secret.0)),
+                Witness::Base(Value::known(input.secret.inner())),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
@@ -121,15 +117,15 @@ impl Builder {
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
-                Witness::Base(Value::known(input.signature_secret.0)),
+                Witness::Base(Value::known(input.signature_secret.inner())),
             ];
             ];
 
 
             let public_key = PublicKey::from_secret(input.secret);
             let public_key = PublicKey::from_secret(input.secret);
-            let coords = public_key.0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = public_key.xy();
 
 
             let coin = poseidon_hash::<8>([
             let coin = poseidon_hash::<8>([
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 pallas::Base::from(note.value),
                 pallas::Base::from(note.value),
                 note.token_id,
                 note.token_id,
                 note.serial,
                 note.serial,
@@ -158,15 +154,15 @@ impl Builder {
             let value_commit = pedersen_commitment_u64(note.value, funds_blind);
             let value_commit = pedersen_commitment_u64(note.value, funds_blind);
             let value_coords = value_commit.to_affine().coordinates().unwrap();
             let value_coords = value_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = signature_public.xy();
 
 
             let public_inputs = vec![
             let public_inputs = vec![
                 *value_coords.x(),
                 *value_coords.x(),
                 *value_coords.y(),
                 *value_coords.y(),
                 token_commit,
                 token_commit,
                 merkle_root.inner(),
                 merkle_root.inner(),
-                *sigpub_coords.x(),
-                *sigpub_coords.y(),
+                sig_x,
+                sig_y,
             ];
             ];
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
 
 
@@ -185,9 +181,7 @@ impl Builder {
 
 
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
 
 
-        let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
-        let proposal_dest_x = *proposal_dest_coords.x();
-        let proposal_dest_y = *proposal_dest_coords.y();
+        let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
 
 
         let proposal_amount = pallas::Base::from(self.proposal.amount);
         let proposal_amount = pallas::Base::from(self.proposal.amount);
 
 
@@ -196,7 +190,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
 
 
         let dao_bulla = poseidon_hash::<8>([
         let dao_bulla = poseidon_hash::<8>([
             dao_proposer_limit,
             dao_proposer_limit,
@@ -204,8 +198,8 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.dao.gov_token_id,
             self.dao.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao.bulla_blind,
             self.dao.bulla_blind,
         ]);
         ]);
 
 
@@ -249,8 +243,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Uint32(Value::known(dao_leaf_position.try_into().unwrap())),
             Witness::Uint32(Value::known(dao_leaf_position.try_into().unwrap())),
             Witness::MerklePath(Value::known(self.dao_merkle_path.try_into().unwrap())),
             Witness::MerklePath(Value::known(self.dao_merkle_path.try_into().unwrap())),

+ 5 - 8
bin/dao/daod/src/contract/dao/vote/validate.rs

@@ -18,7 +18,7 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{MerkleNode, Nullifier, PublicKey};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use log::error;
 use log::error;
 use pasta_curves::{
 use pasta_curves::{
@@ -27,10 +27,7 @@ use pasta_curves::{
     pallas,
     pallas,
 };
 };
 
 
-use darkfi::{
-    crypto::{keypair::PublicKey, types::DrkCircuitField},
-    Error as DarkFiError,
-};
+use darkfi::{crypto::types::DrkCircuitField, Error as DarkFiError};
 
 
 use crate::{
 use crate::{
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
@@ -79,7 +76,7 @@ impl CallDataBase for CallData {
             all_votes_commit += input.vote_commit;
             all_votes_commit += input.vote_commit;
             let value_coords = input.vote_commit.to_affine().coordinates().unwrap();
             let value_coords = input.vote_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = input.signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = input.signature_public.xy();
 
 
             zk_publics.push((
             zk_publics.push((
                 "dao-vote-burn".to_string(),
                 "dao-vote-burn".to_string(),
@@ -89,8 +86,8 @@ impl CallDataBase for CallData {
                     *value_coords.y(),
                     *value_coords.y(),
                     self.header.token_commit,
                     self.header.token_commit,
                     input.merkle_root.inner(),
                     input.merkle_root.inner(),
-                    *sigpub_coords.x(),
-                    *sigpub_coords.y(),
+                    sig_x,
+                    sig_y,
                 ],
                 ],
             ));
             ));
         }
         }

+ 23 - 25
bin/dao/daod/src/contract/dao/vote/wallet.rs

@@ -16,7 +16,9 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    pedersen::pedersen_commitment_u64, Keypair, MerkleNode, Nullifier, PublicKey, SecretKey,
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use incrementalmerkletree::Hashable;
 use incrementalmerkletree::Hashable;
@@ -29,11 +31,7 @@ use pasta_curves::{
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{Keypair, PublicKey, SecretKey},
-        util::{pedersen_commitment_u64, poseidon_hash},
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -115,7 +113,7 @@ impl Builder {
             let leaf_pos: u64 = input.leaf_position.into();
             let leaf_pos: u64 = input.leaf_position.into();
 
 
             let prover_witnesses = vec![
             let prover_witnesses = vec![
-                Witness::Base(Value::known(input.secret.0)),
+                Witness::Base(Value::known(input.secret.inner())),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
@@ -126,15 +124,15 @@ impl Builder {
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
-                Witness::Base(Value::known(input.signature_secret.0)),
+                Witness::Base(Value::known(input.signature_secret.inner())),
             ];
             ];
 
 
             let public_key = PublicKey::from_secret(input.secret);
             let public_key = PublicKey::from_secret(input.secret);
-            let coords = public_key.0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = public_key.xy();
 
 
             let coin = poseidon_hash::<8>([
             let coin = poseidon_hash::<8>([
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 pallas::Base::from(note.value),
                 pallas::Base::from(note.value),
                 note.token_id,
                 note.token_id,
                 note.serial,
                 note.serial,
@@ -160,12 +158,12 @@ impl Builder {
             let token_commit = poseidon_hash::<2>([note.token_id, gov_token_blind]);
             let token_commit = poseidon_hash::<2>([note.token_id, gov_token_blind]);
             assert_eq!(self.dao.gov_token_id, note.token_id);
             assert_eq!(self.dao.gov_token_id, note.token_id);
 
 
-            let nullifier = poseidon_hash::<2>([input.secret.0, note.serial]);
+            let nullifier = poseidon_hash::<2>([input.secret.inner(), note.serial]);
 
 
             let vote_commit = pedersen_commitment_u64(note.value, vote_value_blind);
             let vote_commit = pedersen_commitment_u64(note.value, vote_value_blind);
             let vote_commit_coords = vote_commit.to_affine().coordinates().unwrap();
             let vote_commit_coords = vote_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = signature_public.xy();
 
 
             let public_inputs = vec![
             let public_inputs = vec![
                 nullifier,
                 nullifier,
@@ -173,8 +171,8 @@ impl Builder {
                 *vote_commit_coords.y(),
                 *vote_commit_coords.y(),
                 token_commit,
                 token_commit,
                 merkle_root.inner(),
                 merkle_root.inner(),
-                *sigpub_coords.x(),
-                *sigpub_coords.y(),
+                sig_x,
+                sig_y,
             ];
             ];
 
 
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
@@ -195,7 +193,7 @@ impl Builder {
 
 
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
 
 
-        let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
+        let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
 
 
         let proposal_amount = pallas::Base::from(self.proposal.amount);
         let proposal_amount = pallas::Base::from(self.proposal.amount);
 
 
@@ -204,7 +202,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
 
 
         let dao_bulla = poseidon_hash::<8>([
         let dao_bulla = poseidon_hash::<8>([
             dao_proposer_limit,
             dao_proposer_limit,
@@ -212,14 +210,14 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.dao.gov_token_id,
             self.dao.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao.bulla_blind,
             self.dao.bulla_blind,
         ]);
         ]);
 
 
         let proposal_bulla = poseidon_hash::<8>([
         let proposal_bulla = poseidon_hash::<8>([
-            *proposal_dest_coords.x(),
-            *proposal_dest_coords.y(),
+            proposal_dest_x,
+            proposal_dest_y,
             proposal_amount,
             proposal_amount,
             self.proposal.serial,
             self.proposal.serial,
             self.proposal.token_id,
             self.proposal.token_id,
@@ -249,8 +247,8 @@ impl Builder {
 
 
         let prover_witnesses = vec![
         let prover_witnesses = vec![
             // proposal params
             // proposal params
-            Witness::Base(Value::known(*proposal_dest_coords.x())),
-            Witness::Base(Value::known(*proposal_dest_coords.y())),
+            Witness::Base(Value::known(proposal_dest_x)),
+            Witness::Base(Value::known(proposal_dest_y)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.token_id)),
             Witness::Base(Value::known(self.proposal.token_id)),
@@ -261,8 +259,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             // Vote
             // Vote
             Witness::Base(Value::known(pallas::Base::from(vote_option))),
             Witness::Base(Value::known(pallas::Base::from(vote_option))),

+ 3 - 5
bin/dao/daod/src/contract/example/foo/validate.rs

@@ -18,13 +18,11 @@
 
 
 use std::any::Any;
 use std::any::Any;
 
 
+use darkfi_sdk::crypto::PublicKey;
+use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use pasta_curves::pallas;
 use pasta_curves::pallas;
 
 
-use darkfi::{
-    crypto::{keypair::PublicKey, types::DrkCircuitField},
-    Error as DarkFiError,
-};
-use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
+use darkfi::{crypto::types::DrkCircuitField, Error as DarkFiError};
 
 
 use crate::{
 use crate::{
     contract::example::{state::State, CONTRACT_ID},
     contract::example::{state::State, CONTRACT_ID},

+ 2 - 5
bin/dao/daod/src/contract/money/state.rs

@@ -16,13 +16,10 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier, PublicKey, SecretKey};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 
 
-use darkfi::crypto::{
-    coin::Coin,
-    keypair::{PublicKey, SecretKey},
-};
+use darkfi::crypto::coin::Coin;
 
 
 use super::transfer;
 use super::transfer;
 use crate::note::EncryptedNote2;
 use crate::note::EncryptedNote2;

+ 4 - 3
bin/dao/daod/src/contract/money/transfer/validate.rs

@@ -18,7 +18,10 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+    MerkleNode, Nullifier, PublicKey,
+};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use incrementalmerkletree::Tree;
 use incrementalmerkletree::Tree;
 use log::{debug, error};
 use log::{debug, error};
@@ -27,9 +30,7 @@ use pasta_curves::{group::Group, pallas};
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         coin::Coin,
         coin::Coin,
-        keypair::PublicKey,
         types::{DrkCircuitField, DrkTokenId, DrkValueBlind, DrkValueCommit},
         types::{DrkCircuitField, DrkTokenId, DrkValueBlind, DrkValueCommit},
-        util::{pedersen_commitment_base, pedersen_commitment_u64},
         BurnRevealedValues, MintRevealedValues,
         BurnRevealedValues, MintRevealedValues,
     },
     },
     Error as DarkFiError,
     Error as DarkFiError,

+ 1 - 2
bin/dao/daod/src/contract/money/transfer/wallet.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{MerkleNode, PublicKey, SecretKey};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use pasta_curves::group::ff::Field;
 use pasta_curves::group::ff::Field;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
@@ -24,7 +24,6 @@ use rand::rngs::OsRng;
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         burn_proof::create_burn_proof,
         burn_proof::create_burn_proof,
-        keypair::{PublicKey, SecretKey},
         mint_proof::create_mint_proof,
         mint_proof::create_mint_proof,
         types::{
         types::{
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,

+ 21 - 22
bin/dao/daod/src/main.rs

@@ -18,32 +18,31 @@
 
 
 use std::{sync::Arc, time::Instant};
 use std::{sync::Arc, time::Instant};
 
 
-use fxhash::FxHashMap;
-use group::ff::PrimeField;
-use incrementalmerkletree::{Position, Tree};
-use log::debug;
-use pasta_curves::{
-    arithmetic::CurveAffine,
-    group::{ff::Field, Curve, Group},
-    pallas,
-};
-use rand::rngs::OsRng;
-use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode};
-use url::Url;
-
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        keypair::{Keypair, PublicKey, SecretKey},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
         types::{DrkSpendHook, DrkUserData, DrkValue},
         types::{DrkSpendHook, DrkUserData, DrkValue},
-        util::{pedersen_commitment_u64, poseidon_hash},
+        util::poseidon_hash,
     },
     },
     rpc::server::listen_and_serve,
     rpc::server::listen_and_serve,
     zk::circuit::{BurnContract, MintContract},
     zk::circuit::{BurnContract, MintContract},
     zkas::ZkBinary,
     zkas::ZkBinary,
     Error, Result,
     Error, Result,
 };
 };
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{
+    pedersen::pedersen_commitment_u64, Keypair, MerkleNode, PublicKey, SecretKey,
+};
+use fxhash::FxHashMap;
+use group::ff::PrimeField;
+use incrementalmerkletree::{Position, Tree};
+use log::debug;
+use pasta_curves::{
+    group::{ff::Field, Group},
+    pallas,
+};
+use rand::rngs::OsRng;
+use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode};
+use url::Url;
 
 
 mod contract;
 mod contract;
 mod error;
 mod error;
@@ -406,11 +405,11 @@ impl Client {
         let dao_coins = state.wallet_cache.get_received(&self.dao_wallet.keypair.secret);
         let dao_coins = state.wallet_cache.get_received(&self.dao_wallet.keypair.secret);
         for coin in dao_coins {
         for coin in dao_coins {
             let note = coin.note.clone();
             let note = coin.note.clone();
-            let coords = self.dao_wallet.keypair.public.0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = self.dao_wallet.keypair.public.xy();
 
 
             let coin_hash = poseidon_hash::<8>([
             let coin_hash = poseidon_hash::<8>([
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 DrkValue::from(note.value),
                 DrkValue::from(note.value),
                 note.token_id,
                 note.token_id,
                 note.serial,
                 note.serial,
@@ -431,11 +430,11 @@ impl Client {
             let coins = state.wallet_cache.get_received(&wallet.keypair.secret);
             let coins = state.wallet_cache.get_received(&wallet.keypair.secret);
             for coin in coins {
             for coin in coins {
                 let note = coin.note.clone();
                 let note = coin.note.clone();
-                let coords = wallet.keypair.public.0.to_affine().coordinates().unwrap();
+                let (pub_x, pub_y) = wallet.keypair.public.xy();
 
 
                 let coin_hash = poseidon_hash::<8>([
                 let coin_hash = poseidon_hash::<8>([
-                    *coords.x(),
-                    *coords.y(),
+                    pub_x,
+                    pub_y,
                     DrkValue::from(note.value),
                     DrkValue::from(note.value),
                     note.token_id,
                     note.token_id,
                     note.serial,
                     note.serial,

+ 5 - 9
bin/dao/daod/src/note.rs

@@ -17,16 +17,14 @@
  */
  */
 
 
 use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit};
 use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit};
+use darkfi_sdk::crypto::{PublicKey, SecretKey};
+use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        diffie_hellman::{kdf_sapling, sapling_ka_agree},
-        keypair::{PublicKey, SecretKey},
-    },
+    crypto::diffie_hellman::{kdf_sapling, sapling_ka_agree},
     Error, Result,
     Error, Result,
 };
 };
-use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable};
 
 
 pub const AEAD_TAG_SIZE: usize = 16;
 pub const AEAD_TAG_SIZE: usize = 16;
 
 
@@ -81,10 +79,8 @@ impl EncryptedNote2 {
 #[cfg(test)]
 #[cfg(test)]
 mod tests {
 mod tests {
     use super::*;
     use super::*;
-    use darkfi::crypto::{
-        keypair::Keypair,
-        types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind},
-    };
+    use darkfi::crypto::types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind};
+    use darkfi_sdk::crypto::Keypair;
     use group::ff::Field;
     use group::ff::Field;
 
 
     #[test]
     #[test]

+ 11 - 10
bin/dao/daod/src/rpc.rs

@@ -16,21 +16,19 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use async_std::sync::Mutex;
 use std::{str::FromStr, sync::Arc};
 use std::{str::FromStr, sync::Arc};
 
 
+use async_std::sync::Mutex;
 use async_trait::async_trait;
 use async_trait::async_trait;
+use darkfi_sdk::crypto::{Keypair, PublicKey, SecretKey};
 use log::{debug, error};
 use log::{debug, error};
 use pasta_curves::group::ff::PrimeField;
 use pasta_curves::group::ff::PrimeField;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 use serde_json::{json, Value};
 use serde_json::{json, Value};
 
 
-use darkfi::{
-    crypto::keypair::{Keypair, PublicKey, SecretKey},
-    rpc::{
-        jsonrpc::{ErrorCode::*, JsonError, JsonRequest, JsonResponse, JsonResult},
-        server::RequestHandler,
-    },
+use darkfi::rpc::{
+    jsonrpc::{ErrorCode::*, JsonError, JsonRequest, JsonResponse, JsonResult},
+    server::RequestHandler,
 };
 };
 
 
 use crate::{
 use crate::{
@@ -132,7 +130,8 @@ impl JsonRpcInterface {
     async fn get_dao_addr(&self, id: Value, _params: &[Value]) -> JsonResult {
     async fn get_dao_addr(&self, id: Value, _params: &[Value]) -> JsonResult {
         let client = self.client.lock().await;
         let client = self.client.lock().await;
         let pubkey = client.dao_wallet.get_public_key();
         let pubkey = client.dao_wallet.get_public_key();
-        let addr: String = bs58::encode(pubkey.to_bytes()).into_string();
+        //let addr: String = bs58::encode(pubkey.to_bytes()).into_string();
+        let addr: String = pubkey.to_string();
         JsonResponse::new(json!(addr), id).into()
         JsonResponse::new(json!(addr), id).into()
     }
     }
 
 
@@ -164,7 +163,8 @@ impl JsonRpcInterface {
             let amount = proposal.amount;
             let amount = proposal.amount;
             let token_id = proposal.token_id;
             let token_id = proposal.token_id;
             let token_id: String = bs58::encode(token_id.to_repr()).into_string();
             let token_id: String = bs58::encode(token_id.to_repr()).into_string();
-            let dest: String = bs58::encode(dest.to_bytes()).into_string();
+            //let dest: String = bs58::encode(dest.to_bytes()).into_string();
+            let dest = dest.to_string();
             proposal_data.push((dest, amount, token_id));
             proposal_data.push((dest, amount, token_id));
         }
         }
 
 
@@ -261,7 +261,8 @@ impl JsonRpcInterface {
         match money_wallet.track(&mut client.states) {
         match money_wallet.track(&mut client.states) {
             Ok(_) => {
             Ok(_) => {
                 client.money_wallets.insert(keypair.public, money_wallet);
                 client.money_wallets.insert(keypair.public, money_wallet);
-                let addr: String = bs58::encode(keypair.public.to_bytes()).into_string();
+                //let addr: String = bs58::encode(keypair.public.to_bytes()).into_string();
+                let addr: String = keypair.public.to_string();
                 JsonResponse::new(json!(addr), id).into()
                 JsonResponse::new(json!(addr), id).into()
             }
             }
             Err(e) => {
             Err(e) => {

+ 6 - 4
bin/dao/daod/src/util.rs

@@ -18,6 +18,11 @@
 
 
 use std::{any::Any, collections::HashMap, hash::Hasher};
 use std::{any::Any, collections::HashMap, hash::Hasher};
 
 
+use darkfi_sdk::crypto::{
+    schnorr::{SchnorrPublic, SchnorrSecret, Signature},
+    PublicKey, SecretKey,
+};
+use darkfi_serial::Encodable;
 use lazy_static::lazy_static;
 use lazy_static::lazy_static;
 use log::debug;
 use log::debug;
 use pasta_curves::{
 use pasta_curves::{
@@ -28,9 +33,7 @@ use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        keypair::{PublicKey, SecretKey},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        schnorr::{SchnorrPublic, SchnorrSecret, Signature},
         types::DrkCircuitField,
         types::DrkCircuitField,
         Proof,
         Proof,
     },
     },
@@ -38,7 +41,6 @@ use darkfi::{
     zkas::decoder::ZkBinary,
     zkas::decoder::ZkBinary,
     Error,
     Error,
 };
 };
-use darkfi_serial::Encodable;
 
 
 use crate::error::{DaoError, DaoResult};
 use crate::error::{DaoError, DaoResult};
 
 
@@ -210,7 +212,7 @@ pub fn sign(signature_secrets: Vec<SecretKey>, func_call: &FuncCall) -> Vec<Sign
     let mut unsigned_tx_data = vec![];
     let mut unsigned_tx_data = vec![];
     for signature_secret in signature_secrets {
     for signature_secret in signature_secrets {
         func_call.encode(&mut unsigned_tx_data).expect("failed to encode data");
         func_call.encode(&mut unsigned_tx_data).expect("failed to encode data");
-        let signature = signature_secret.sign(&unsigned_tx_data[..]);
+        let signature = signature_secret.sign(&mut OsRng, &unsigned_tx_data[..]);
         signatures.push(signature);
         signatures.push(signature);
     }
     }
     signatures
     signatures

+ 1 - 1
bin/darkfid/src/main.rs

@@ -20,6 +20,7 @@ use std::str::FromStr;
 
 
 use async_std::sync::{Arc, Mutex};
 use async_std::sync::{Arc, Mutex};
 use async_trait::async_trait;
 use async_trait::async_trait;
+use darkfi_sdk::crypto::{Address, PublicKey};
 use log::{debug, error, info};
 use log::{debug, error, info};
 use structopt_toml::{serde::Deserialize, structopt::StructOpt, StructOptToml};
 use structopt_toml::{serde::Deserialize, structopt::StructOpt, StructOptToml};
 use url::Url;
 use url::Url;
@@ -35,7 +36,6 @@ use darkfi::{
         ValidatorState, MAINNET_GENESIS_HASH_BYTES, MAINNET_GENESIS_TIMESTAMP,
         ValidatorState, MAINNET_GENESIS_HASH_BYTES, MAINNET_GENESIS_TIMESTAMP,
         TESTNET_GENESIS_HASH_BYTES, TESTNET_GENESIS_TIMESTAMP,
         TESTNET_GENESIS_HASH_BYTES, TESTNET_GENESIS_TIMESTAMP,
     },
     },
-    crypto::{address::Address, keypair::PublicKey},
     net,
     net,
     net::P2pPtr,
     net::P2pPtr,
     node::Client,
     node::Client,

+ 2 - 1
bin/darkfid/src/rpc_tx.rs

@@ -18,12 +18,13 @@
 
 
 use std::str::FromStr;
 use std::str::FromStr;
 
 
+use darkfi_sdk::crypto::{Address, PublicKey};
 use darkfi_serial::{deserialize, serialize};
 use darkfi_serial::{deserialize, serialize};
 use log::{error, warn};
 use log::{error, warn};
 use serde_json::{json, Value};
 use serde_json::{json, Value};
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{address::Address, keypair::PublicKey, token_id},
+    crypto::token_id,
     rpc::jsonrpc::{ErrorCode::InvalidParams, JsonError, JsonResponse, JsonResult},
     rpc::jsonrpc::{ErrorCode::InvalidParams, JsonError, JsonResponse, JsonResult},
     tx::Transaction,
     tx::Transaction,
 };
 };

+ 3 - 6
bin/darkfid/src/rpc_wallet.rs

@@ -16,6 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::crypto::{Address, Keypair, PublicKey, SecretKey};
 use darkfi_serial::{deserialize, serialize};
 use darkfi_serial::{deserialize, serialize};
 use fxhash::FxHashMap;
 use fxhash::FxHashMap;
 use incrementalmerkletree::Tree;
 use incrementalmerkletree::Tree;
@@ -24,11 +25,7 @@ use pasta_curves::group::ff::PrimeField;
 use serde_json::{json, Value};
 use serde_json::{json, Value};
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        address::Address,
-        keypair::{Keypair, PublicKey, SecretKey},
-        token_id,
-    },
+    crypto::token_id,
     node::State,
     node::State,
     rpc::jsonrpc::{
     rpc::jsonrpc::{
         ErrorCode::{InternalError, InvalidParams, ParseError},
         ErrorCode::{InternalError, InvalidParams, ParseError},
@@ -145,7 +142,7 @@ impl Darkfid {
         };
         };
 
 
         if let Some(kp) = keypairs.get(params[0].as_u64().unwrap() as usize) {
         if let Some(kp) = keypairs.get(params[0].as_u64().unwrap() as usize) {
-            return JsonResponse::new(json!(kp.secret.to_bytes()), id).into()
+            return JsonResponse::new(json!(serialize(&kp.secret)), id).into()
         }
         }
 
 
         server_error(RpcError::KeypairNotFound, id, None)
         server_error(RpcError::KeypairNotFound, id, None)

+ 8 - 6
bin/darkotc/src/main.rs

@@ -22,6 +22,12 @@ use std::{
 };
 };
 
 
 use clap::{Parser, Subcommand};
 use clap::{Parser, Subcommand};
+use darkfi_sdk::crypto::{
+    pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+    schnorr,
+    schnorr::SchnorrSecret,
+    PublicKey, SecretKey,
+};
 use darkfi_serial::{deserialize, serialize, SerialDecodable, SerialEncodable};
 use darkfi_serial::{deserialize, serialize, SerialDecodable, SerialEncodable};
 use halo2_proofs::{arithmetic::Field, pasta::group::ff::PrimeField};
 use halo2_proofs::{arithmetic::Field, pasta::group::ff::PrimeField};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
@@ -31,18 +37,14 @@ use darkfi::{
     cli_desc,
     cli_desc,
     crypto::{
     crypto::{
         burn_proof::{create_burn_proof, verify_burn_proof},
         burn_proof::{create_burn_proof, verify_burn_proof},
-        keypair::{PublicKey, SecretKey},
         mint_proof::{create_mint_proof, verify_mint_proof},
         mint_proof::{create_mint_proof, verify_mint_proof},
         note::{EncryptedNote, Note},
         note::{EncryptedNote, Note},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        schnorr,
-        schnorr::SchnorrSecret,
         token_id,
         token_id,
         types::{
         types::{
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,
             DrkValueBlind,
             DrkValueBlind,
         },
         },
-        util::{pedersen_commitment_base, pedersen_commitment_u64},
         BurnRevealedValues, MintRevealedValues, Proof,
         BurnRevealedValues, MintRevealedValues, Proof,
     },
     },
     rpc::client::RpcClient,
     rpc::client::RpcClient,
@@ -273,7 +275,7 @@ async fn init_swap(
         value_blind: recv_value_blind,
         value_blind: recv_value_blind,
         token_blind: recv_token_blind,
         token_blind: recv_token_blind,
         // Here we store our secret key we used for signing
         // Here we store our secret key we used for signing
-        memo: signature_secret.to_bytes().to_vec(),
+        memo: serialize(&signature_secret),
     };
     };
     let encrypted_note = note.encrypt(&our_pubk)?;
     let encrypted_note = note.encrypt(&our_pubk)?;
 
 
@@ -568,7 +570,7 @@ fn try_sign_tx(note: &Note, tx_data: &[u8]) -> Result<schnorr::Signature> {
     };
     };
 
 
     eprintln!("Signing transaction...");
     eprintln!("Signing transaction...");
-    let signature = secret.sign(tx_data);
+    let signature = secret.sign(&mut OsRng, tx_data);
     Ok(signature)
     Ok(signature)
 }
 }
 
 

+ 1 - 2
bin/darkotc/src/rpc.rs

@@ -18,13 +18,12 @@
 
 
 use std::{process::exit, str::FromStr};
 use std::{process::exit, str::FromStr};
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{Address, MerkleNode};
 use darkfi_serial::{deserialize, serialize};
 use darkfi_serial::{deserialize, serialize};
 use serde_json::json;
 use serde_json::json;
 
 
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        address::Address,
         coin::OwnCoin,
         coin::OwnCoin,
         note::{EncryptedNote, Note},
         note::{EncryptedNote, Note},
     },
     },

+ 1 - 0
bin/drk/Cargo.toml

@@ -13,6 +13,7 @@ async-std = {version = "1.12.0", features = ["attributes"]}
 bs58 = "0.4.0"
 bs58 = "0.4.0"
 clap = {version = "3.2.20", features = ["derive"]}
 clap = {version = "3.2.20", features = ["derive"]}
 darkfi = {path = "../../", features = ["crypto", "util", "rpc", "wasm-runtime", "zkas"]}
 darkfi = {path = "../../", features = ["crypto", "util", "rpc", "wasm-runtime", "zkas"]}
+darkfi-sdk = {path = "../../src/sdk"}
 indicatif = "0.17.1"
 indicatif = "0.17.1"
 log = "0.4.17"
 log = "0.4.17"
 pasta_curves = "0.4.0"
 pasta_curves = "0.4.0"

+ 2 - 1
bin/drk/src/main.rs

@@ -24,6 +24,7 @@ use std::{
 };
 };
 
 
 use clap::{Parser, Subcommand};
 use clap::{Parser, Subcommand};
+use darkfi_sdk::crypto::Address;
 use prettytable::{format, row, Table};
 use prettytable::{format, row, Table};
 use serde_json::json;
 use serde_json::json;
 use simplelog::{ColorChoice, TermLogger, TerminalMode};
 use simplelog::{ColorChoice, TermLogger, TerminalMode};
@@ -31,7 +32,7 @@ use url::Url;
 
 
 use darkfi::{
 use darkfi::{
     cli_desc,
     cli_desc,
-    crypto::{address::Address, token_id},
+    crypto::token_id,
     rpc::{client::RpcClient, jsonrpc::JsonRequest},
     rpc::{client::RpcClient, jsonrpc::JsonRequest},
     util::{
     util::{
         cli::{get_log_config, get_log_level, progress_bar},
         cli::{get_log_config, get_log_level, progress_bar},

+ 1 - 0
bin/faucetd/Cargo.toml

@@ -17,6 +17,7 @@ chrono = "0.4.22"
 ctrlc = { version = "3.2.3", features = ["termination"] }
 ctrlc = { version = "3.2.3", features = ["termination"] }
 darkfi = {path = "../../", features = ["blockchain", "wallet", "rpc", "net", "node"]}
 darkfi = {path = "../../", features = ["blockchain", "wallet", "rpc", "net", "node"]}
 darkfi-serial = {path = "../../src/serial"}
 darkfi-serial = {path = "../../src/serial"}
+darkfi-sdk = {path = "../../src/sdk"}
 easy-parallel = "3.2.0"
 easy-parallel = "3.2.0"
 hex = "0.4.3"
 hex = "0.4.3"
 lazy-init = "0.5.1"
 lazy-init = "0.5.1"

+ 2 - 1
bin/faucetd/src/main.rs

@@ -21,6 +21,7 @@ use std::{collections::HashMap, str::FromStr};
 use async_std::sync::{Arc, Mutex};
 use async_std::sync::{Arc, Mutex};
 use async_trait::async_trait;
 use async_trait::async_trait;
 use chrono::Utc;
 use chrono::Utc;
+use darkfi_sdk::crypto::{Address, PublicKey};
 use darkfi_serial::serialize;
 use darkfi_serial::serialize;
 use log::{debug, error, info};
 use log::{debug, error, info};
 use serde_json::{json, Value};
 use serde_json::{json, Value};
@@ -35,7 +36,7 @@ use darkfi::{
         ValidatorState, ValidatorStatePtr, MAINNET_GENESIS_HASH_BYTES, MAINNET_GENESIS_TIMESTAMP,
         ValidatorState, ValidatorStatePtr, MAINNET_GENESIS_HASH_BYTES, MAINNET_GENESIS_TIMESTAMP,
         TESTNET_GENESIS_HASH_BYTES, TESTNET_GENESIS_TIMESTAMP,
         TESTNET_GENESIS_HASH_BYTES, TESTNET_GENESIS_TIMESTAMP,
     },
     },
-    crypto::{address::Address, keypair::PublicKey, token_id},
+    crypto::token_id,
     net,
     net,
     net::P2pPtr,
     net::P2pPtr,
     node::Client,
     node::Client,

+ 1 - 0
bin/vanityaddr/Cargo.toml

@@ -13,6 +13,7 @@ bs58 = "0.4.0"
 clap = {version = "3.2.20", features = ["derive"]}
 clap = {version = "3.2.20", features = ["derive"]}
 ctrlc = "3.2.3"
 ctrlc = "3.2.3"
 darkfi = {path = "../../", features = ["crypto"]}
 darkfi = {path = "../../", features = ["crypto"]}
+darkfi-sdk = {path = "../../src/sdk"}
 indicatif = "0.17.1"
 indicatif = "0.17.1"
 num_cpus = "1.13.1"
 num_cpus = "1.13.1"
 rand = "0.8.5"
 rand = "0.8.5"

+ 2 - 7
bin/vanityaddr/src/main.rs

@@ -19,17 +19,12 @@
 use std::{process::exit, sync::mpsc::channel};
 use std::{process::exit, sync::mpsc::channel};
 
 
 use clap::Parser;
 use clap::Parser;
+use darkfi_sdk::crypto::{Address, Keypair, SecretKey};
 use indicatif::{ProgressBar, ProgressStyle};
 use indicatif::{ProgressBar, ProgressStyle};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 use rayon::prelude::*;
 use rayon::prelude::*;
 
 
-use darkfi::{
-    cli_desc,
-    crypto::{
-        address::Address,
-        keypair::{Keypair, SecretKey},
-    },
-};
+use darkfi::cli_desc;
 
 
 #[derive(Parser)]
 #[derive(Parser)]
 #[clap(name = "vanityaddr", about = cli_desc!(), version)]
 #[clap(name = "vanityaddr", about = cli_desc!(), version)]

+ 3 - 2
example/dao/src/contract/dao/exec/validate.rs

@@ -18,6 +18,8 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
+use darkfi_sdk::crypto::PublicKey;
+use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use pasta_curves::{
 use pasta_curves::{
     arithmetic::CurveAffine,
     arithmetic::CurveAffine,
     group::{Curve, Group},
     group::{Curve, Group},
@@ -25,10 +27,9 @@ use pasta_curves::{
 };
 };
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{coin::Coin, keypair::PublicKey, types::DrkCircuitField},
+    crypto::{coin::Coin, types::DrkCircuitField},
     Error as DarkFiError,
     Error as DarkFiError,
 };
 };
-use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 
 
 use crate::{
 use crate::{
     contract::{dao, dao::CONTRACT_ID, money},
     contract::{dao, dao::CONTRACT_ID, money},

+ 16 - 19
example/dao/src/contract/dao/exec/wallet.rs

@@ -16,17 +16,14 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::crypto::{pedersen::pedersen_commitment_u64, SecretKey};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use log::debug;
 use log::debug;
 use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
 use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::SecretKey,
-        util::{pedersen_commitment_u64, poseidon_hash},
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -59,7 +56,7 @@ impl Builder {
         debug!(target: "dao_contract::exec::wallet::Builder", "build()");
         debug!(target: "dao_contract::exec::wallet::Builder", "build()");
         let mut proofs = vec![];
         let mut proofs = vec![];
 
 
-        let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
+        let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
 
 
         let proposal_amount = pallas::Base::from(self.proposal.amount);
         let proposal_amount = pallas::Base::from(self.proposal.amount);
 
 
@@ -68,7 +65,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
 
 
         let user_spend_hook = pallas::Base::from(0);
         let user_spend_hook = pallas::Base::from(0);
         let user_data = pallas::Base::from(0);
         let user_data = pallas::Base::from(0);
@@ -81,14 +78,14 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.dao.gov_token_id,
             self.dao.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao.bulla_blind,
             self.dao.bulla_blind,
         ]);
         ]);
 
 
         let proposal_bulla = poseidon_hash::<8>([
         let proposal_bulla = poseidon_hash::<8>([
-            *proposal_dest_coords.x(),
-            *proposal_dest_coords.y(),
+            proposal_dest_x,
+            proposal_dest_y,
             proposal_amount,
             proposal_amount,
             self.proposal.serial,
             self.proposal.serial,
             self.proposal.token_id,
             self.proposal.token_id,
@@ -99,8 +96,8 @@ impl Builder {
         ]);
         ]);
 
 
         let coin_0 = poseidon_hash::<8>([
         let coin_0 = poseidon_hash::<8>([
-            *proposal_dest_coords.x(),
-            *proposal_dest_coords.y(),
+            proposal_dest_x,
+            proposal_dest_y,
             proposal_amount,
             proposal_amount,
             self.proposal.token_id,
             self.proposal.token_id,
             self.proposal.serial,
             self.proposal.serial,
@@ -110,8 +107,8 @@ impl Builder {
         ]);
         ]);
 
 
         let coin_1 = poseidon_hash::<8>([
         let coin_1 = poseidon_hash::<8>([
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             change,
             change,
             self.proposal.token_id,
             self.proposal.token_id,
             self.dao_serial,
             self.dao_serial,
@@ -141,8 +138,8 @@ impl Builder {
         let prover_witnesses = vec![
         let prover_witnesses = vec![
             //
             //
             // proposal params
             // proposal params
-            Witness::Base(Value::known(*proposal_dest_coords.x())),
-            Witness::Base(Value::known(*proposal_dest_coords.y())),
+            Witness::Base(Value::known(proposal_dest_x)),
+            Witness::Base(Value::known(proposal_dest_y)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.token_id)),
             Witness::Base(Value::known(self.proposal.token_id)),
@@ -153,8 +150,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             // votes
             // votes
             Witness::Base(Value::known(pallas::Base::from(self.yes_votes_value))),
             Witness::Base(Value::known(pallas::Base::from(self.yes_votes_value))),

+ 2 - 1
example/dao/src/contract/dao/mint/validate.rs

@@ -18,7 +18,8 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi::crypto::{keypair::PublicKey, types::DrkCircuitField};
+use darkfi::crypto::types::DrkCircuitField;
+use darkfi_sdk::crypto::PublicKey;
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 
 
 use crate::{
 use crate::{

+ 8 - 11
example/dao/src/contract/dao/mint/wallet.rs

@@ -16,16 +16,13 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::crypto::{PublicKey, SecretKey};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
-use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
+use pasta_curves::pallas;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{PublicKey, SecretKey},
-        util::poseidon_hash,
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -65,7 +62,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao_approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao_approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao_approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao_approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao_pubkey.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao_pubkey.xy();
 
 
         let dao_bulla = poseidon_hash::<8>([
         let dao_bulla = poseidon_hash::<8>([
             dao_proposer_limit,
             dao_proposer_limit,
@@ -73,8 +70,8 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.gov_token_id,
             self.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao_bulla_blind,
             self.dao_bulla_blind,
         ]);
         ]);
         let dao_bulla = DaoBulla(dao_bulla);
         let dao_bulla = DaoBulla(dao_bulla);
@@ -93,8 +90,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.gov_token_id)),
             Witness::Base(Value::known(self.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao_bulla_blind)),
             Witness::Base(Value::known(self.dao_bulla_blind)),
         ];
         ];
         let public_inputs = vec![dao_bulla.0];
         let public_inputs = vec![dao_bulla.0];

+ 5 - 8
example/dao/src/contract/dao/propose/validate.rs

@@ -18,7 +18,7 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{MerkleNode, PublicKey};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use log::error;
 use log::error;
 use pasta_curves::{
 use pasta_curves::{
@@ -27,10 +27,7 @@ use pasta_curves::{
     pallas,
     pallas,
 };
 };
 
 
-use darkfi::{
-    crypto::{keypair::PublicKey, types::DrkCircuitField},
-    Error as DarkFiError,
-};
+use darkfi::{crypto::types::DrkCircuitField, Error as DarkFiError};
 
 
 use crate::{
 use crate::{
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
@@ -76,7 +73,7 @@ impl CallDataBase for CallData {
             total_funds_commit += input.value_commit;
             total_funds_commit += input.value_commit;
             let value_coords = input.value_commit.to_affine().coordinates().unwrap();
             let value_coords = input.value_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = input.signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = input.signature_public.xy();
 
 
             zk_publics.push((
             zk_publics.push((
                 "dao-propose-burn".to_string(),
                 "dao-propose-burn".to_string(),
@@ -85,8 +82,8 @@ impl CallDataBase for CallData {
                     *value_coords.y(),
                     *value_coords.y(),
                     self.header.token_commit,
                     self.header.token_commit,
                     input.merkle_root.inner(),
                     input.merkle_root.inner(),
-                    *sigpub_coords.x(),
-                    *sigpub_coords.y(),
+                    sig_x,
+                    sig_y,
                 ],
                 ],
             ));
             ));
         }
         }

+ 16 - 22
example/dao/src/contract/dao/propose/wallet.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{pedersen::pedersen_commitment_u64, MerkleNode, PublicKey, SecretKey};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use incrementalmerkletree::Hashable;
 use incrementalmerkletree::Hashable;
@@ -28,11 +28,7 @@ use pasta_curves::{
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{PublicKey, SecretKey},
-        util::{pedersen_commitment_u64, poseidon_hash},
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -110,7 +106,7 @@ impl Builder {
             let leaf_pos: u64 = input.leaf_position.into();
             let leaf_pos: u64 = input.leaf_position.into();
 
 
             let prover_witnesses = vec![
             let prover_witnesses = vec![
-                Witness::Base(Value::known(input.secret.0)),
+                Witness::Base(Value::known(input.secret.inner())),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
@@ -121,15 +117,15 @@ impl Builder {
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
-                Witness::Base(Value::known(input.signature_secret.0)),
+                Witness::Base(Value::known(input.signature_secret.inner())),
             ];
             ];
 
 
             let public_key = PublicKey::from_secret(input.secret);
             let public_key = PublicKey::from_secret(input.secret);
-            let coords = public_key.0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = public_key.xy();
 
 
             let coin = poseidon_hash::<8>([
             let coin = poseidon_hash::<8>([
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 pallas::Base::from(note.value),
                 pallas::Base::from(note.value),
                 note.token_id,
                 note.token_id,
                 note.serial,
                 note.serial,
@@ -158,15 +154,15 @@ impl Builder {
             let value_commit = pedersen_commitment_u64(note.value, funds_blind);
             let value_commit = pedersen_commitment_u64(note.value, funds_blind);
             let value_coords = value_commit.to_affine().coordinates().unwrap();
             let value_coords = value_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = signature_public.xy();
 
 
             let public_inputs = vec![
             let public_inputs = vec![
                 *value_coords.x(),
                 *value_coords.x(),
                 *value_coords.y(),
                 *value_coords.y(),
                 token_commit,
                 token_commit,
                 merkle_root.inner(),
                 merkle_root.inner(),
-                *sigpub_coords.x(),
-                *sigpub_coords.y(),
+                sig_x,
+                sig_y,
             ];
             ];
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
 
 
@@ -185,9 +181,7 @@ impl Builder {
 
 
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
 
 
-        let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
-        let proposal_dest_x = *proposal_dest_coords.x();
-        let proposal_dest_y = *proposal_dest_coords.y();
+        let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
 
 
         let proposal_amount = pallas::Base::from(self.proposal.amount);
         let proposal_amount = pallas::Base::from(self.proposal.amount);
 
 
@@ -196,7 +190,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
 
 
         let dao_bulla = poseidon_hash::<8>([
         let dao_bulla = poseidon_hash::<8>([
             dao_proposer_limit,
             dao_proposer_limit,
@@ -204,8 +198,8 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.dao.gov_token_id,
             self.dao.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao.bulla_blind,
             self.dao.bulla_blind,
         ]);
         ]);
 
 
@@ -249,8 +243,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Uint32(Value::known(dao_leaf_position.try_into().unwrap())),
             Witness::Uint32(Value::known(dao_leaf_position.try_into().unwrap())),
             Witness::MerklePath(Value::known(self.dao_merkle_path.try_into().unwrap())),
             Witness::MerklePath(Value::known(self.dao_merkle_path.try_into().unwrap())),

+ 5 - 8
example/dao/src/contract/dao/vote/validate.rs

@@ -18,7 +18,7 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{MerkleNode, Nullifier, PublicKey};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use log::error;
 use log::error;
 use pasta_curves::{
 use pasta_curves::{
@@ -27,10 +27,7 @@ use pasta_curves::{
     pallas,
     pallas,
 };
 };
 
 
-use darkfi::{
-    crypto::{keypair::PublicKey, types::DrkCircuitField},
-    Error as DarkFiError,
-};
+use darkfi::{crypto::types::DrkCircuitField, Error as DarkFiError};
 
 
 use crate::{
 use crate::{
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
     contract::{dao, dao::State as DaoState, money, money::state::State as MoneyState},
@@ -79,7 +76,7 @@ impl CallDataBase for CallData {
             all_votes_commit += input.vote_commit;
             all_votes_commit += input.vote_commit;
             let value_coords = input.vote_commit.to_affine().coordinates().unwrap();
             let value_coords = input.vote_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = input.signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = input.signature_public.xy();
 
 
             zk_publics.push((
             zk_publics.push((
                 "dao-vote-burn".to_string(),
                 "dao-vote-burn".to_string(),
@@ -89,8 +86,8 @@ impl CallDataBase for CallData {
                     *value_coords.y(),
                     *value_coords.y(),
                     self.header.token_commit,
                     self.header.token_commit,
                     input.merkle_root.inner(),
                     input.merkle_root.inner(),
-                    *sigpub_coords.x(),
-                    *sigpub_coords.y(),
+                    sig_x,
+                    sig_y,
                 ],
                 ],
             ));
             ));
         }
         }

+ 23 - 25
example/dao/src/contract/dao/vote/wallet.rs

@@ -16,7 +16,9 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    pedersen::pedersen_commitment_u64, Keypair, MerkleNode, Nullifier, PublicKey, SecretKey,
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use incrementalmerkletree::Hashable;
 use incrementalmerkletree::Hashable;
@@ -29,11 +31,7 @@ use pasta_curves::{
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{Keypair, PublicKey, SecretKey},
-        util::{pedersen_commitment_u64, poseidon_hash},
-        Proof,
-    },
+    crypto::{util::poseidon_hash, Proof},
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 
@@ -115,7 +113,7 @@ impl Builder {
             let leaf_pos: u64 = input.leaf_position.into();
             let leaf_pos: u64 = input.leaf_position.into();
 
 
             let prover_witnesses = vec![
             let prover_witnesses = vec![
-                Witness::Base(Value::known(input.secret.0)),
+                Witness::Base(Value::known(input.secret.inner())),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(note.serial)),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
                 Witness::Base(Value::known(pallas::Base::from(0))),
@@ -126,15 +124,15 @@ impl Builder {
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Base(Value::known(gov_token_blind)),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
                 Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
-                Witness::Base(Value::known(input.signature_secret.0)),
+                Witness::Base(Value::known(input.signature_secret.inner())),
             ];
             ];
 
 
             let public_key = PublicKey::from_secret(input.secret);
             let public_key = PublicKey::from_secret(input.secret);
-            let coords = public_key.0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = public_key.xy();
 
 
             let coin = poseidon_hash::<8>([
             let coin = poseidon_hash::<8>([
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 pallas::Base::from(note.value),
                 pallas::Base::from(note.value),
                 note.token_id,
                 note.token_id,
                 note.serial,
                 note.serial,
@@ -160,12 +158,12 @@ impl Builder {
             let token_commit = poseidon_hash::<2>([note.token_id, gov_token_blind]);
             let token_commit = poseidon_hash::<2>([note.token_id, gov_token_blind]);
             assert_eq!(self.dao.gov_token_id, note.token_id);
             assert_eq!(self.dao.gov_token_id, note.token_id);
 
 
-            let nullifier = poseidon_hash::<2>([input.secret.0, note.serial]);
+            let nullifier = poseidon_hash::<2>([input.secret.inner(), note.serial]);
 
 
             let vote_commit = pedersen_commitment_u64(note.value, vote_value_blind);
             let vote_commit = pedersen_commitment_u64(note.value, vote_value_blind);
             let vote_commit_coords = vote_commit.to_affine().coordinates().unwrap();
             let vote_commit_coords = vote_commit.to_affine().coordinates().unwrap();
 
 
-            let sigpub_coords = signature_public.0.to_affine().coordinates().unwrap();
+            let (sig_x, sig_y) = signature_public.xy();
 
 
             let public_inputs = vec![
             let public_inputs = vec![
                 nullifier,
                 nullifier,
@@ -173,8 +171,8 @@ impl Builder {
                 *vote_commit_coords.y(),
                 *vote_commit_coords.y(),
                 token_commit,
                 token_commit,
                 merkle_root.inner(),
                 merkle_root.inner(),
-                *sigpub_coords.x(),
-                *sigpub_coords.y(),
+                sig_x,
+                sig_y,
             ];
             ];
 
 
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
             let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
@@ -195,7 +193,7 @@ impl Builder {
 
 
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
         let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
 
 
-        let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
+        let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
 
 
         let proposal_amount = pallas::Base::from(self.proposal.amount);
         let proposal_amount = pallas::Base::from(self.proposal.amount);
 
 
@@ -204,7 +202,7 @@ impl Builder {
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
         let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
 
 
-        let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
 
 
         let dao_bulla = poseidon_hash::<8>([
         let dao_bulla = poseidon_hash::<8>([
             dao_proposer_limit,
             dao_proposer_limit,
@@ -212,14 +210,14 @@ impl Builder {
             dao_approval_ratio_quot,
             dao_approval_ratio_quot,
             dao_approval_ratio_base,
             dao_approval_ratio_base,
             self.dao.gov_token_id,
             self.dao.gov_token_id,
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             self.dao.bulla_blind,
             self.dao.bulla_blind,
         ]);
         ]);
 
 
         let proposal_bulla = poseidon_hash::<8>([
         let proposal_bulla = poseidon_hash::<8>([
-            *proposal_dest_coords.x(),
-            *proposal_dest_coords.y(),
+            proposal_dest_x,
+            proposal_dest_y,
             proposal_amount,
             proposal_amount,
             self.proposal.serial,
             self.proposal.serial,
             self.proposal.token_id,
             self.proposal.token_id,
@@ -249,8 +247,8 @@ impl Builder {
 
 
         let prover_witnesses = vec![
         let prover_witnesses = vec![
             // proposal params
             // proposal params
-            Witness::Base(Value::known(*proposal_dest_coords.x())),
-            Witness::Base(Value::known(*proposal_dest_coords.y())),
+            Witness::Base(Value::known(proposal_dest_x)),
+            Witness::Base(Value::known(proposal_dest_y)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(proposal_amount)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.serial)),
             Witness::Base(Value::known(self.proposal.token_id)),
             Witness::Base(Value::known(self.proposal.token_id)),
@@ -261,8 +259,8 @@ impl Builder {
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_quot)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(dao_approval_ratio_base)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
             Witness::Base(Value::known(self.dao.gov_token_id)),
-            Witness::Base(Value::known(*dao_pubkey_coords.x())),
-            Witness::Base(Value::known(*dao_pubkey_coords.y())),
+            Witness::Base(Value::known(dao_pub_x)),
+            Witness::Base(Value::known(dao_pub_y)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             Witness::Base(Value::known(self.dao.bulla_blind)),
             // Vote
             // Vote
             Witness::Base(Value::known(pallas::Base::from(vote_option))),
             Witness::Base(Value::known(pallas::Base::from(vote_option))),

+ 3 - 5
example/dao/src/contract/example/foo/validate.rs

@@ -18,13 +18,11 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
+use darkfi_sdk::crypto::PublicKey;
+use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use pasta_curves::pallas;
 use pasta_curves::pallas;
 
 
-use darkfi::{
-    crypto::{keypair::PublicKey, types::DrkCircuitField},
-    Error as DarkFiError,
-};
-use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
+use darkfi::{crypto::types::DrkCircuitField, Error as DarkFiError};
 
 
 use crate::{
 use crate::{
     contract::example::{state::State, CONTRACT_ID},
     contract::example::{state::State, CONTRACT_ID},

+ 2 - 4
example/dao/src/contract/example/foo/wallet.rs

@@ -19,14 +19,12 @@
 use log::debug;
 use log::debug;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
+use darkfi_sdk::crypto::{PublicKey, SecretKey};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use pasta_curves::pallas;
 use pasta_curves::pallas;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        keypair::{PublicKey, SecretKey},
-        Proof,
-    },
+    crypto::Proof,
     zk::vm::{Witness, ZkCircuit},
     zk::vm::{Witness, ZkCircuit},
 };
 };
 
 

+ 1 - 2
example/dao/src/contract/money/state.rs

@@ -16,8 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi::crypto::keypair::PublicKey;
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier, PublicKey};
 use incrementalmerkletree::bridgetree::BridgeTree;
 use incrementalmerkletree::bridgetree::BridgeTree;
 
 
 type MerkleTree = BridgeTree<MerkleNode, { MERKLE_DEPTH }>;
 type MerkleTree = BridgeTree<MerkleNode, { MERKLE_DEPTH }>;

+ 4 - 3
example/dao/src/contract/money/transfer/validate.rs

@@ -18,7 +18,10 @@
 
 
 use std::any::{Any, TypeId};
 use std::any::{Any, TypeId};
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+    MerkleNode, Nullifier, PublicKey,
+};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable};
 use incrementalmerkletree::Tree;
 use incrementalmerkletree::Tree;
 use log::{debug, error};
 use log::{debug, error};
@@ -27,9 +30,7 @@ use pasta_curves::{group::Group, pallas};
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         coin::Coin,
         coin::Coin,
-        keypair::PublicKey,
         types::{DrkCircuitField, DrkTokenId, DrkValueBlind, DrkValueCommit},
         types::{DrkCircuitField, DrkTokenId, DrkValueBlind, DrkValueCommit},
-        util::{pedersen_commitment_base, pedersen_commitment_u64},
         BurnRevealedValues, MintRevealedValues,
         BurnRevealedValues, MintRevealedValues,
     },
     },
     Error as DarkFiError,
     Error as DarkFiError,

+ 1 - 2
example/dao/src/contract/money/transfer/wallet.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{MerkleNode, PublicKey, SecretKey};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use pasta_curves::group::ff::Field;
 use pasta_curves::group::ff::Field;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
@@ -24,7 +24,6 @@ use rand::rngs::OsRng;
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         burn_proof::create_burn_proof,
         burn_proof::create_burn_proof,
-        keypair::{PublicKey, SecretKey},
         mint_proof::create_mint_proof,
         mint_proof::create_mint_proof,
         types::{
         types::{
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,

+ 15 - 14
example/dao/src/main.rs

@@ -21,11 +21,14 @@ use std::{
     time::Instant,
     time::Instant,
 };
 };
 
 
+use darkfi_sdk::crypto::{
+    constants::MERKLE_DEPTH, pedersen::pedersen_commitment_u64, Keypair, MerkleNode, PublicKey,
+    SecretKey,
+};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use log::debug;
 use log::debug;
 use pasta_curves::{
 use pasta_curves::{
-    arithmetic::CurveAffine,
-    group::{ff::Field, Curve, Group},
+    group::{ff::Field, Group},
     pallas,
     pallas,
 };
 };
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
@@ -33,15 +36,13 @@ use rand::rngs::OsRng;
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         coin::Coin,
         coin::Coin,
-        keypair::{Keypair, PublicKey, SecretKey},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
         types::{DrkSpendHook, DrkUserData, DrkValue},
         types::{DrkSpendHook, DrkUserData, DrkValue},
-        util::{pedersen_commitment_u64, poseidon_hash},
+        util::poseidon_hash,
     },
     },
     zk::circuit::{BurnContract, MintContract},
     zk::circuit::{BurnContract, MintContract},
     zkas::decoder::ZkBinary,
     zkas::decoder::ZkBinary,
 };
 };
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode};
 
 
 mod contract;
 mod contract;
 mod error;
 mod error;
@@ -451,10 +452,10 @@ async fn main() -> Result<()> {
 
 
     // Check the actual coin received is valid before accepting it
     // Check the actual coin received is valid before accepting it
 
 
-    let coords = dao_keypair.public.0.to_affine().coordinates().unwrap();
+    let (pub_x, pub_y) = dao_keypair.public.xy();
     let coin = poseidon_hash::<8>([
     let coin = poseidon_hash::<8>([
-        *coords.x(),
-        *coords.y(),
+        pub_x,
+        pub_y,
         DrkValue::from(treasury_note.value),
         DrkValue::from(treasury_note.value),
         treasury_note.token_id,
         treasury_note.token_id,
         treasury_note.serial,
         treasury_note.serial,
@@ -601,10 +602,10 @@ async fn main() -> Result<()> {
             assert_eq!(note.spend_hook, pallas::Base::from(0));
             assert_eq!(note.spend_hook, pallas::Base::from(0));
             assert_eq!(note.user_data, pallas::Base::from(0));
             assert_eq!(note.user_data, pallas::Base::from(0));
 
 
-            let coords = key.public.0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = key.public.xy();
             let coin = poseidon_hash::<8>([
             let coin = poseidon_hash::<8>([
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 DrkValue::from(note.value),
                 DrkValue::from(note.value),
                 note.token_id,
                 note.token_id,
                 note.serial,
                 note.serial,
@@ -1230,10 +1231,10 @@ async fn main() -> Result<()> {
         let user_data_enc = poseidon_hash::<2>([dao_bulla.0, user_data_blind]);
         let user_data_enc = poseidon_hash::<2>([dao_bulla.0, user_data_blind]);
         assert_eq!(input.revealed.user_data_enc, user_data_enc);
         assert_eq!(input.revealed.user_data_enc, user_data_enc);
 
 
-        let dao_pubkey_coords = dao_params.public_key.0.to_affine().coordinates().unwrap();
+        let (dao_pub_x, dao_pub_y) = dao_params.public_key.xy();
         let coin_1 = Coin(poseidon_hash::<8>([
         let coin_1 = Coin(poseidon_hash::<8>([
-            *dao_pubkey_coords.x(),
-            *dao_pubkey_coords.y(),
+            dao_pub_x,
+            dao_pub_y,
             pallas::Base::from(xdrk_supply - 1000),
             pallas::Base::from(xdrk_supply - 1000),
             xdrk_token_id,
             xdrk_token_id,
             dao_serial,
             dao_serial,

+ 5 - 9
example/dao/src/note.rs

@@ -17,16 +17,14 @@
  */
  */
 
 
 use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit};
 use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit};
+use darkfi_sdk::crypto::{PublicKey, SecretKey};
+use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
-    crypto::{
-        diffie_hellman::{kdf_sapling, sapling_ka_agree},
-        keypair::{PublicKey, SecretKey},
-    },
+    crypto::diffie_hellman::{kdf_sapling, sapling_ka_agree},
     Error, Result,
     Error, Result,
 };
 };
-use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable};
 
 
 pub const AEAD_TAG_SIZE: usize = 16;
 pub const AEAD_TAG_SIZE: usize = 16;
 
 
@@ -81,10 +79,8 @@ impl EncryptedNote2 {
 #[cfg(test)]
 #[cfg(test)]
 mod tests {
 mod tests {
     use super::*;
     use super::*;
-    use darkfi::crypto::{
-        keypair::Keypair,
-        types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind},
-    };
+    use darkfi::crypto::types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind};
+    use darkfi_sdk::crypto::Keypair;
     use group::ff::Field;
     use group::ff::Field;
 
 
     #[test]
     #[test]

+ 5 - 3
example/dao/src/util.rs

@@ -18,6 +18,10 @@
 
 
 use std::{any::Any, collections::HashMap, hash::Hasher};
 use std::{any::Any, collections::HashMap, hash::Hasher};
 
 
+use darkfi_sdk::crypto::{
+    schnorr::{SchnorrPublic, SchnorrSecret, Signature},
+    PublicKey, SecretKey,
+};
 use lazy_static::lazy_static;
 use lazy_static::lazy_static;
 use log::debug;
 use log::debug;
 use pasta_curves::{
 use pasta_curves::{
@@ -28,9 +32,7 @@ use rand::rngs::OsRng;
 
 
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        keypair::{PublicKey, SecretKey},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        schnorr::{SchnorrPublic, SchnorrSecret, Signature},
         types::DrkCircuitField,
         types::DrkCircuitField,
         Proof,
         Proof,
     },
     },
@@ -206,7 +208,7 @@ pub fn sign(signature_secrets: Vec<SecretKey>, func_call: &FuncCall) -> Vec<Sign
     let mut unsigned_tx_data = vec![];
     let mut unsigned_tx_data = vec![];
     for signature_secret in signature_secrets {
     for signature_secret in signature_secrets {
         func_call.encode(&mut unsigned_tx_data).expect("failed to encode data");
         func_call.encode(&mut unsigned_tx_data).expect("failed to encode data");
-        let signature = signature_secret.sign(&unsigned_tx_data[..]);
+        let signature = signature_secret.sign(&mut OsRng, &unsigned_tx_data[..]);
         signatures.push(signature);
         signatures.push(signature);
     }
     }
     signatures
     signatures

+ 3 - 2
example/tx.rs

@@ -17,7 +17,9 @@
  */
  */
 
 
 // Example transaction flow
 // Example transaction flow
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    constants::MERKLE_DEPTH, Keypair, MerkleNode, Nullifier, PublicKey, SecretKey,
+};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use pasta_curves::{group::ff::Field, pallas};
 use pasta_curves::{group::ff::Field, pallas};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
@@ -25,7 +27,6 @@ use rand::rngs::OsRng;
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         coin::OwnCoin,
         coin::OwnCoin,
-        keypair::{Keypair, PublicKey, SecretKey},
         note::{EncryptedNote, Note},
         note::{EncryptedNote, Note},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
         util::poseidon_hash,
         util::poseidon_hash,

+ 1 - 1
example/zk.rs

@@ -21,7 +21,6 @@
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        util::pedersen_commitment_u64,
         Proof,
         Proof,
     },
     },
     zk::{
     zk::{
@@ -31,6 +30,7 @@ use darkfi::{
     zkas::decoder::ZkBinary,
     zkas::decoder::ZkBinary,
     Result,
     Result,
 };
 };
+use darkfi_sdk::crypto::pedersen::pedersen_commitment_u64;
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use pasta_curves::{
 use pasta_curves::{
     arithmetic::CurveAffine,
     arithmetic::CurveAffine,

+ 16 - 10
src/consensus/coins.rs

@@ -16,15 +16,23 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::{
+    crypto::{
+        constants::MERKLE_DEPTH_ORCHARD,
+        pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+        util::mod_r_p,
+        Keypair, MerkleNode, Nullifier, SecretKey,
+    },
+    incrementalmerkletree::{bridgetree::BridgeTree, Tree},
+    pasta::{
+        arithmetic::CurveAffine,
+        group::{ff::PrimeField, Curve},
+        pallas,
+    },
+};
 use halo2_gadgets::poseidon::primitives as poseidon;
 use halo2_gadgets::poseidon::primitives as poseidon;
 use halo2_proofs::arithmetic::Field;
 use halo2_proofs::arithmetic::Field;
-use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use log::info;
 use log::info;
-use pasta_curves::{
-    arithmetic::CurveAffine,
-    group::{ff::PrimeField, Curve},
-    pallas,
-};
 use rand::{rngs::OsRng, thread_rng, Rng};
 use rand::{rngs::OsRng, thread_rng, Rng};
 
 
 use super::{
 use super::{
@@ -34,16 +42,14 @@ use super::{
 use crate::{
 use crate::{
     crypto::{
     crypto::{
         coin::{Coin, OwnCoin},
         coin::{Coin, OwnCoin},
-        keypair::{Keypair, SecretKey},
         leadcoin::LeadCoin,
         leadcoin::LeadCoin,
         note::Note,
         note::Note,
         types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind},
         types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind},
-        util::{mod_r_p, pedersen_commitment_base, pedersen_commitment_u64, poseidon_hash},
+        util::poseidon_hash,
     },
     },
     wallet::walletdb::WalletDb,
     wallet::walletdb::WalletDb,
     Result,
     Result,
 };
 };
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH_ORCHARD, MerkleNode, Nullifier};
 
 
 const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
 const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
 
 
@@ -238,7 +244,7 @@ fn create_leadcoin(
     //let coin_pk_msg = [c_tau, c_root_sk.inner()];
     //let coin_pk_msg = [c_tau, c_root_sk.inner()];
     //let c_pk: pallas::Base = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<2>, 3, 2>::init().hash(coin_pk_msg);
     //let c_pk: pallas::Base = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<2>, 3, 2>::init().hash(coin_pk_msg);
 
 
-    let c_pk: pallas::Point = keypair.public.0;
+    let c_pk: pallas::Point = keypair.public.inner();
     let c_pk_coord = c_pk.to_affine().coordinates().unwrap();
     let c_pk_coord = c_pk.to_affine().coordinates().unwrap();
     let c_pk_x = c_pk_coord.x();
     let c_pk_x = c_pk_coord.x();
     let c_pk_y = c_pk_coord.y();
     let c_pk_y = c_pk_coord.y();

+ 4 - 4
src/consensus/metadata.rs

@@ -16,19 +16,19 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::{
+    crypto::{schnorr::Signature, Address, Keypair},
+    pasta::pallas,
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
-use pasta_curves::pallas;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use super::Participant;
 use super::Participant;
 use crate::{
 use crate::{
     crypto::{
     crypto::{
-        address::Address,
-        keypair::Keypair,
         lead_proof,
         lead_proof,
         leadcoin::LeadCoin,
         leadcoin::LeadCoin,
         proof::{Proof, ProvingKey, VerifyingKey},
         proof::{Proof, ProvingKey, VerifyingKey},
-        schnorr::Signature,
         types::*,
         types::*,
     },
     },
     VerifyResult,
     VerifyResult,

+ 16 - 14
src/consensus/ouroboros/stakeholder.rs

@@ -16,6 +16,21 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use std::{fmt, thread, time::Duration};
+
+use async_std::sync::Arc;
+use darkfi_sdk::{
+    crypto::{
+        constants::MERKLE_DEPTH, schnorr::SchnorrSecret, Address, MerkleNode, PublicKey, SecretKey,
+    },
+    incrementalmerkletree::bridgetree::BridgeTree,
+    pasta::{group::ff::PrimeField, pallas},
+};
+use halo2_proofs::arithmetic::Field;
+use log::{error, info};
+use rand::rngs::OsRng;
+use url::Url;
+
 use crate::{
 use crate::{
     blockchain::Blockchain,
     blockchain::Blockchain,
     consensus::{
     consensus::{
@@ -27,13 +42,10 @@ use crate::{
         BlockInfo, LeadProof, Metadata,
         BlockInfo, LeadProof, Metadata,
     },
     },
     crypto::{
     crypto::{
-        address::Address,
         coin::OwnCoin,
         coin::OwnCoin,
-        keypair::{PublicKey, SecretKey},
         lead_proof,
         lead_proof,
         leadcoin::LeadCoin,
         leadcoin::LeadCoin,
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        schnorr::SchnorrSecret,
     },
     },
     net::{P2p, P2pPtr, Settings, SettingsPtr},
     net::{P2p, P2pPtr, Settings, SettingsPtr},
     node::state::state_transition,
     node::state::state_transition,
@@ -47,16 +59,6 @@ use crate::{
     zk::circuit::{BurnContract, LeadContract, MintContract},
     zk::circuit::{BurnContract, LeadContract, MintContract},
     Result,
     Result,
 };
 };
-use async_std::sync::Arc;
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode};
-use halo2_proofs::arithmetic::Field;
-use incrementalmerkletree::bridgetree::BridgeTree;
-use log::{error, info};
-use pasta_curves::{group::ff::PrimeField, pallas};
-use rand::rngs::OsRng;
-// use smol::Executor;
-use std::{fmt, thread, time::Duration};
-use url::Url;
 
 
 pub struct Stakeholder {
 pub struct Stakeholder {
     pub blockchain: Blockchain, // stakeholder view of the blockchain
     pub blockchain: Blockchain, // stakeholder view of the blockchain
@@ -381,7 +383,7 @@ impl Stakeholder {
         self.workspace.set_idx(idx);
         self.workspace.set_idx(idx);
         let keypair = coin.keypair.unwrap();
         let keypair = coin.keypair.unwrap();
         let addr = Address::from(keypair.public);
         let addr = Address::from(keypair.public);
-        let sign = keypair.secret.sign(proof.as_ref());
+        let sign = keypair.secret.sign(&mut OsRng, proof.as_ref());
         let meta = Metadata::new(
         let meta = Metadata::new(
             sign,
             sign,
             addr,
             addr,

+ 1 - 2
src/consensus/ouroboros/state.rs

@@ -16,13 +16,12 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier, PublicKey, SecretKey};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 
 
 use crate::{
 use crate::{
     crypto::{
     crypto::{
         coin::OwnCoin,
         coin::OwnCoin,
-        keypair::{PublicKey, SecretKey},
         note::{EncryptedNote, Note},
         note::{EncryptedNote, Note},
         proof::VerifyingKey,
         proof::VerifyingKey,
         util::poseidon_hash,
         util::poseidon_hash,

+ 5 - 5
src/consensus/participant.rs

@@ -16,13 +16,13 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::{
+    crypto::{Address, PublicKey},
+    pasta::pallas,
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
-use pasta_curves::pallas;
 
 
-use crate::{
-    crypto::{address::Address, keypair::PublicKey},
-    net,
-};
+use crate::net;
 
 
 /// This struct represents a tuple of the form:
 /// This struct represents a tuple of the form:
 /// (`public_key`, `node_address`, `last_slot_seen`,`slot_quarantined`)
 /// (`public_key`, `node_address`, `last_slot_seen`,`slot_quarantined`)

+ 6 - 5
src/consensus/state.rs

@@ -25,7 +25,11 @@ use std::{
 
 
 use async_std::sync::{Arc, Mutex, RwLock};
 use async_std::sync::{Arc, Mutex, RwLock};
 use chrono::{NaiveDateTime, Utc};
 use chrono::{NaiveDateTime, Utc};
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode};
+use darkfi_sdk::crypto::{
+    constants::MERKLE_DEPTH,
+    schnorr::{SchnorrPublic, SchnorrSecret},
+    Address, MerkleNode, PublicKey, SecretKey,
+};
 use darkfi_serial::{serialize, SerialDecodable, SerialEncodable};
 use darkfi_serial::{serialize, SerialDecodable, SerialEncodable};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use lazy_init::Lazy;
 use lazy_init::Lazy;
@@ -41,12 +45,9 @@ use super::{
 use crate::{
 use crate::{
     blockchain::Blockchain,
     blockchain::Blockchain,
     crypto::{
     crypto::{
-        address::Address,
-        keypair::{PublicKey, SecretKey},
         lead_proof,
         lead_proof,
         leadcoin::LeadCoin,
         leadcoin::LeadCoin,
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        schnorr::{SchnorrPublic, SchnorrSecret},
     },
     },
     net,
     net,
     node::{
     node::{
@@ -370,7 +371,7 @@ impl ValidatorState {
         let header =
         let header =
             Header::new(prev_hash, self.slot_epoch(slot), slot, Timestamp::current_time(), root);
             Header::new(prev_hash, self.slot_epoch(slot), slot, Timestamp::current_time(), root);
 
 
-        let signed_proposal = self.secret.sign(&header.headerhash().as_bytes()[..]);
+        let signed_proposal = self.secret.sign(&mut OsRng, &header.headerhash().as_bytes()[..]);
         let eta = self.get_eta().to_repr();
         let eta = self.get_eta().to_repr();
         // Generating leader proof
         // Generating leader proof
         let coin = self.consensus.coins[self.relative_slot(slot) as usize][idx];
         let coin = self.consensus.coins[self.relative_slot(slot) as usize][idx];

+ 15 - 14
src/crypto/burn_proof.rs

@@ -18,21 +18,22 @@
 
 
 use std::time::Instant;
 use std::time::Instant;
 
 
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::{
+    crypto::{
+        pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+        MerkleNode, Nullifier, PublicKey, SecretKey,
+    },
+    incrementalmerkletree::Hashable,
+    pasta::{arithmetic::CurveAffine, group::Curve},
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
-use incrementalmerkletree::Hashable;
 use log::debug;
 use log::debug;
-use pasta_curves::{arithmetic::CurveAffine, group::Curve};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
-use super::{
-    proof::{Proof, ProvingKey, VerifyingKey},
-    util::{pedersen_commitment_base, pedersen_commitment_u64},
-};
+use super::proof::{Proof, ProvingKey, VerifyingKey};
 use crate::{
 use crate::{
     crypto::{
     crypto::{
-        keypair::{PublicKey, SecretKey},
         types::{
         types::{
             DrkCircuitField, DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData,
             DrkCircuitField, DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData,
             DrkUserDataBlind, DrkUserDataEnc, DrkValue, DrkValueBlind, DrkValueCommit,
             DrkUserDataBlind, DrkUserDataEnc, DrkValue, DrkValueBlind, DrkValueCommit,
@@ -74,11 +75,11 @@ impl BurnRevealedValues {
         let nullifier = Nullifier::from(poseidon_hash::<2>([secret.inner(), serial]));
         let nullifier = Nullifier::from(poseidon_hash::<2>([secret.inner(), serial]));
 
 
         let public_key = PublicKey::from_secret(secret);
         let public_key = PublicKey::from_secret(secret);
-        let coords = public_key.0.to_affine().coordinates().unwrap();
+        let (pub_x, pub_y) = public_key.xy();
 
 
         let coin = poseidon_hash::<8>([
         let coin = poseidon_hash::<8>([
-            *coords.x(),
-            *coords.y(),
+            pub_x,
+            pub_y,
             DrkValue::from(value),
             DrkValue::from(value),
             token_id,
             token_id,
             serial,
             serial,
@@ -122,7 +123,7 @@ impl BurnRevealedValues {
         let token_coords = self.token_commit.to_affine().coordinates().unwrap();
         let token_coords = self.token_commit.to_affine().coordinates().unwrap();
         let merkle_root = self.merkle_root.inner();
         let merkle_root = self.merkle_root.inner();
         let user_data_enc = self.user_data_enc;
         let user_data_enc = self.user_data_enc;
-        let sig_coords = self.signature_public.0.to_affine().coordinates().unwrap();
+        let (sig_x, sig_y) = self.signature_public.xy();
 
 
         vec![
         vec![
             self.nullifier.inner(),
             self.nullifier.inner(),
@@ -132,8 +133,8 @@ impl BurnRevealedValues {
             *token_coords.y(),
             *token_coords.y(),
             merkle_root,
             merkle_root,
             user_data_enc,
             user_data_enc,
-            *sig_coords.x(),
-            *sig_coords.y(),
+            sig_x,
+            sig_y,
         ]
         ]
     }
     }
 }
 }

+ 5 - 3
src/crypto/coin.rs

@@ -16,11 +16,13 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::Nullifier;
+use darkfi_sdk::{
+    crypto::{Nullifier, SecretKey},
+    pasta::{group::ff::PrimeField, pallas},
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
-use pasta_curves::{group::ff::PrimeField, pallas};
 
 
-use super::{keypair::SecretKey, note::Note};
+use super::note::Note;
 
 
 #[derive(Clone, Copy, PartialEq, Eq, Debug, SerialEncodable, SerialDecodable)]
 #[derive(Clone, Copy, PartialEq, Eq, Debug, SerialEncodable, SerialDecodable)]
 pub struct Coin(pub pallas::Base);
 pub struct Coin(pub pallas::Base);

+ 4 - 8
src/crypto/diffie_hellman.rs

@@ -17,13 +17,9 @@
  */
  */
 
 
 use blake2b_simd::{Hash as Blake2bHash, Params as Blake2bParams};
 use blake2b_simd::{Hash as Blake2bHash, Params as Blake2bParams};
+use darkfi_sdk::crypto::{util::mod_r_p, PublicKey, SecretKey};
 use pasta_curves::group::{cofactor::CofactorGroup, GroupEncoding, Wnaf};
 use pasta_curves::group::{cofactor::CofactorGroup, GroupEncoding, Wnaf};
 
 
-use crate::crypto::{
-    keypair::{PublicKey, SecretKey},
-    util::mod_r_p,
-};
-
 pub const KDF_SAPLING_PERSONALIZATION: &[u8; 16] = b"DarkFiSaplingKDF";
 pub const KDF_SAPLING_PERSONALIZATION: &[u8; 16] = b"DarkFiSaplingKDF";
 
 
 /// Functions used for encrypting the note in transaction outputs.
 /// Functions used for encrypting the note in transaction outputs.
@@ -43,7 +39,7 @@ pub fn sapling_ka_agree(esk: &SecretKey, pk_d: &PublicKey) -> PublicKey {
     // notes on chain.
     // notes on chain.
     let esk_s = mod_r_p(esk.inner());
     let esk_s = mod_r_p(esk.inner());
     let mut wnaf = Wnaf::new();
     let mut wnaf = Wnaf::new();
-    PublicKey(wnaf.scalar(&esk_s).base(pk_d.0).clear_cofactor())
+    PublicKey::from(wnaf.scalar(&esk_s).base(pk_d.inner()).clear_cofactor())
 }
 }
 
 
 /// Sapling KDF for note encryption.
 /// Sapling KDF for note encryption.
@@ -54,7 +50,7 @@ pub fn kdf_sapling(dhsecret: &PublicKey, epk: &PublicKey) -> Blake2bHash {
         .hash_length(32)
         .hash_length(32)
         .personal(KDF_SAPLING_PERSONALIZATION)
         .personal(KDF_SAPLING_PERSONALIZATION)
         .to_state()
         .to_state()
-        .update(&dhsecret.0.to_bytes())
-        .update(&epk.0.to_bytes())
+        .update(&dhsecret.inner().to_bytes())
+        .update(&epk.inner().to_bytes())
         .finalize()
         .finalize()
 }
 }

+ 0 - 179
src/crypto/keypair.rs

@@ -1,179 +0,0 @@
-/* This file is part of DarkFi (https://dark.fi)
- *
- * Copyright (C) 2020-2022 Dyne.org foundation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-
-use std::{
-    convert::TryFrom,
-    hash::{Hash, Hasher},
-    str::FromStr,
-};
-
-use darkfi_sdk::crypto::constants::NullifierK;
-use darkfi_serial::{SerialDecodable, SerialEncodable};
-use halo2_gadgets::ecc::chip::FixedPoint;
-use pasta_curves::{
-    arithmetic::CurveAffine,
-    group::{
-        ff::{Field, PrimeField},
-        Curve, Group, GroupEncoding,
-    },
-    pallas,
-};
-use rand::RngCore;
-
-use crate::{
-    crypto::{address::Address, util::mod_r_p},
-    Error, Result,
-};
-
-#[derive(Copy, Clone, PartialEq, Eq, Debug)]
-pub struct Keypair {
-    pub secret: SecretKey,
-    pub public: PublicKey,
-}
-
-impl Keypair {
-    pub fn new(secret: SecretKey) -> Self {
-        let public = PublicKey::from_secret(secret);
-        Self { secret, public }
-    }
-
-    pub fn random(mut rng: impl RngCore) -> Self {
-        let secret = SecretKey::random(&mut rng);
-        Self::new(secret)
-    }
-}
-
-#[derive(Copy, Clone, PartialEq, Eq, Debug, SerialDecodable, SerialEncodable)]
-pub struct SecretKey(pub pallas::Base);
-
-impl SecretKey {
-    pub fn random(mut rng: impl RngCore) -> Self {
-        let x = pallas::Base::random(&mut rng);
-        Self(x)
-    }
-
-    pub fn to_bytes(self) -> [u8; 32] {
-        self.0.to_repr()
-    }
-
-    pub fn from_bytes(bytes: [u8; 32]) -> Result<Self> {
-        match pallas::Base::from_repr(bytes).into() {
-            Some(k) => Ok(Self(k)),
-            None => Err(Error::SecretKeyFromBytes),
-        }
-    }
-
-    pub fn inner(&self) -> pallas::Base {
-        self.0
-    }
-}
-
-impl From<pallas::Base> for SecretKey {
-    fn from(x: pallas::Base) -> Self {
-        Self(x)
-    }
-}
-
-impl FromStr for SecretKey {
-    type Err = crate::Error;
-
-    /// Tries to create a `SecretKey` instance from a base58 encoded string.
-    fn from_str(encoded: &str) -> core::result::Result<Self, crate::Error> {
-        let decoded = bs58::decode(encoded).into_vec()?;
-        if decoded.len() != 32 {
-            return Err(Error::SecretKeyFromStr)
-        }
-        Self::from_bytes(decoded.try_into().unwrap())
-    }
-}
-
-#[derive(Copy, Clone, PartialEq, Eq, Debug, SerialDecodable, SerialEncodable)]
-pub struct PublicKey(pub pallas::Point);
-
-impl PublicKey {
-    pub fn random(mut rng: impl RngCore) -> Self {
-        let p = pallas::Point::random(&mut rng);
-        Self(p)
-    }
-
-    pub fn from_secret(s: SecretKey) -> Self {
-        let nfk = NullifierK;
-        let p = nfk.generator() * mod_r_p(s.0);
-        Self(p)
-    }
-
-    pub fn to_bytes(self) -> [u8; 32] {
-        self.0.to_bytes()
-    }
-
-    pub fn from_bytes(bytes: &[u8; 32]) -> Result<Self> {
-        match pallas::Point::from_bytes(bytes).into() {
-            Some(k) => Ok(Self(k)),
-            None => Err(Error::PublicKeyFromBytes),
-        }
-    }
-
-    pub fn x(&self) -> pallas::Base {
-        *self.0.to_affine().coordinates().unwrap().x()
-    }
-
-    pub fn y(&self) -> pallas::Base {
-        *self.0.to_affine().coordinates().unwrap().y()
-    }
-
-    pub fn xy(&self) -> (pallas::Base, pallas::Base) {
-        let coords = self.0.to_affine().coordinates().unwrap();
-        (*coords.x(), *coords.y())
-    }
-}
-
-impl Hash for PublicKey {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        let bytes = self.0.to_affine().to_bytes();
-        bytes.hash(state);
-    }
-}
-
-impl FromStr for PublicKey {
-    type Err = crate::Error;
-
-    /// Tries to create a `PublicKey` instance from a base58 encoded string.
-    fn from_str(encoded: &str) -> core::result::Result<Self, crate::Error> {
-        let decoded = bs58::decode(encoded).into_vec()?;
-        if decoded.len() != 32 {
-            return Err(Error::PublicKeyFromStr)
-        }
-
-        Self::from_bytes(&decoded.try_into().unwrap())
-    }
-}
-
-impl From<pallas::Point> for PublicKey {
-    fn from(x: pallas::Point) -> Self {
-        Self(x)
-    }
-}
-
-impl TryFrom<Address> for PublicKey {
-    type Error = Error;
-    fn try_from(address: Address) -> Result<Self> {
-        let mut bytes = [0u8; 32];
-        bytes.copy_from_slice(&address.0[1..33]);
-        Self::from_bytes(&bytes)
-    }
-}

+ 9 - 10
src/crypto/leadcoin.rs

@@ -16,18 +16,17 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH_ORCHARD, MerkleNode};
-use halo2_gadgets::poseidon::primitives as poseidon;
-use halo2_proofs::circuit::Value;
-use pasta_curves::{arithmetic::CurveAffine, group::Curve, pallas};
-
-use crate::{
+use darkfi_sdk::{
     crypto::{
     crypto::{
-        keypair::Keypair,
-        util::{mod_r_p, pedersen_commitment_base},
+        constants::MERKLE_DEPTH_ORCHARD, pedersen::pedersen_commitment_base, util::mod_r_p,
+        Keypair, MerkleNode,
     },
     },
-    zk::circuit::lead_contract::LeadContract,
+    pasta::{arithmetic::CurveAffine, group::Curve, pallas},
 };
 };
+use halo2_gadgets::poseidon::primitives as poseidon;
+use halo2_proofs::circuit::Value;
+
+use crate::zk::circuit::lead_contract::LeadContract;
 
 
 pub const LEAD_PUBLIC_INPUT_LEN: usize = 4;
 pub const LEAD_PUBLIC_INPUT_LEN: usize = 4;
 
 
@@ -59,7 +58,7 @@ pub struct LeadCoin {
 impl LeadCoin {
 impl LeadCoin {
     pub fn public_inputs_as_array(&self) -> [pallas::Base; LEAD_PUBLIC_INPUT_LEN] {
     pub fn public_inputs_as_array(&self) -> [pallas::Base; LEAD_PUBLIC_INPUT_LEN] {
         let po_nonce = self.nonce_cm.unwrap();
         let po_nonce = self.nonce_cm.unwrap();
-        let po_pk = self.keypair.unwrap().public.0.to_affine().coordinates().unwrap();
+        let po_pk = self.keypair.unwrap().public.inner().to_affine().coordinates().unwrap();
         let y_mu = self.y_mu.unwrap();
         let y_mu = self.y_mu.unwrap();
         let _rho_mu = self.rho_mu.unwrap();
         let _rho_mu = self.rho_mu.unwrap();
         let root_sk = self.root_sk.unwrap();
         let root_sk = self.root_sk.unwrap();

+ 14 - 9
src/crypto/mint_proof.rs

@@ -18,22 +18,27 @@
 
 
 use std::time::Instant;
 use std::time::Instant;
 
 
+use darkfi_sdk::{
+    crypto::{
+        pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+        PublicKey,
+    },
+    pasta::{arithmetic::CurveAffine, group::Curve},
+};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use log::debug;
 use log::debug;
-use pasta_curves::{arithmetic::CurveAffine, group::Curve};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use crate::{
 use crate::{
     crypto::{
     crypto::{
         coin::Coin,
         coin::Coin,
-        keypair::PublicKey,
         proof::{Proof, ProvingKey, VerifyingKey},
         proof::{Proof, ProvingKey, VerifyingKey},
         types::{
         types::{
             DrkCircuitField, DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData,
             DrkCircuitField, DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData,
             DrkValue, DrkValueBlind, DrkValueCommit,
             DrkValue, DrkValueBlind, DrkValueCommit,
         },
         },
-        util::{pedersen_commitment_base, pedersen_commitment_u64, poseidon_hash},
+        util::poseidon_hash,
     },
     },
     zk::circuit::mint_contract::MintContract,
     zk::circuit::mint_contract::MintContract,
     Result,
     Result,
@@ -62,11 +67,11 @@ impl MintRevealedValues {
         let value_commit = pedersen_commitment_u64(value, value_blind);
         let value_commit = pedersen_commitment_u64(value, value_blind);
         let token_commit = pedersen_commitment_base(token_id, token_blind);
         let token_commit = pedersen_commitment_base(token_id, token_blind);
 
 
-        let coords = public_key.0.to_affine().coordinates().unwrap();
+        let (pub_x, pub_y) = public_key.xy();
 
 
         let coin = poseidon_hash::<8>([
         let coin = poseidon_hash::<8>([
-            *coords.x(),
-            *coords.y(),
+            pub_x,
+            pub_y,
             DrkValue::from(value),
             DrkValue::from(value),
             token_id,
             token_id,
             serial,
             serial,
@@ -117,11 +122,11 @@ pub fn create_mint_proof(
         public_key,
         public_key,
     );
     );
 
 
-    let coords = public_key.0.to_affine().coordinates().unwrap();
+    let (pub_x, pub_y) = public_key.xy();
 
 
     let c = MintContract {
     let c = MintContract {
-        pub_x: Value::known(*coords.x()),
-        pub_y: Value::known(*coords.y()),
+        pub_x: Value::known(pub_x),
+        pub_y: Value::known(pub_y),
         value: Value::known(DrkValue::from(value)),
         value: Value::known(DrkValue::from(value)),
         token: Value::known(token_id),
         token: Value::known(token_id),
         serial: Value::known(serial),
         serial: Value::known(serial),

+ 0 - 3
src/crypto/mod.rs

@@ -16,15 +16,12 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-pub mod address;
 pub mod burn_proof;
 pub mod burn_proof;
 pub mod coin;
 pub mod coin;
 pub mod diffie_hellman;
 pub mod diffie_hellman;
-pub mod keypair;
 pub mod mint_proof;
 pub mod mint_proof;
 pub mod note;
 pub mod note;
 pub mod proof;
 pub mod proof;
-pub mod schnorr;
 pub mod token_id;
 pub mod token_id;
 pub mod token_list;
 pub mod token_list;
 pub mod types;
 pub mod types;

+ 2 - 3
src/crypto/note.rs

@@ -17,13 +17,13 @@
  */
  */
 
 
 use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit};
 use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit};
+use darkfi_sdk::crypto::{PublicKey, SecretKey};
 use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable};
 use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable};
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
 
 
 use crate::{
 use crate::{
     crypto::{
     crypto::{
         diffie_hellman::{kdf_sapling, sapling_ka_agree},
         diffie_hellman::{kdf_sapling, sapling_ka_agree},
-        keypair::{PublicKey, SecretKey},
         types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind},
         types::{DrkCoinBlind, DrkSerial, DrkTokenId, DrkValueBlind},
     },
     },
     Error, Result,
     Error, Result,
@@ -93,8 +93,7 @@ impl EncryptedNote {
 #[cfg(test)]
 #[cfg(test)]
 mod tests {
 mod tests {
     use super::*;
     use super::*;
-    use crate::crypto::keypair::Keypair;
-    use pasta_curves::group::ff::Field;
+    use darkfi_sdk::{crypto::Keypair, pasta::group::ff::Field};
 
 
     #[test]
     #[test]
     fn test_note_encdec() {
     fn test_note_encdec() {

+ 5 - 3
src/crypto/proof.rs

@@ -113,7 +113,6 @@ mod tests {
     use super::*;
     use super::*;
     use crate::{
     use crate::{
         crypto::{
         crypto::{
-            keypair::PublicKey,
             mint_proof::create_mint_proof,
             mint_proof::create_mint_proof,
             types::{
             types::{
                 DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkValueBlind,
                 DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkValueBlind,
@@ -122,8 +121,11 @@ mod tests {
         zk::circuit::MintContract,
         zk::circuit::MintContract,
         Result,
         Result,
     };
     };
+    use darkfi_sdk::{
+        crypto::{PublicKey, SecretKey},
+        pasta::group::ff::Field,
+    };
     use darkfi_serial::{Decodable, Encodable};
     use darkfi_serial::{Decodable, Encodable};
-    use pasta_curves::group::ff::Field;
     use rand::rngs::OsRng;
     use rand::rngs::OsRng;
 
 
     #[test]
     #[test]
@@ -136,7 +138,7 @@ mod tests {
         let spend_hook = DrkSpendHook::random(&mut OsRng);
         let spend_hook = DrkSpendHook::random(&mut OsRng);
         let user_data = DrkUserData::random(&mut OsRng);
         let user_data = DrkUserData::random(&mut OsRng);
         let coin_blind = DrkCoinBlind::random(&mut OsRng);
         let coin_blind = DrkCoinBlind::random(&mut OsRng);
-        let public_key = PublicKey::random(&mut OsRng);
+        let public_key = PublicKey::from_secret(SecretKey::random(&mut OsRng));
 
 
         let pk = ProvingKey::build(11, &MintContract::default());
         let pk = ProvingKey::build(11, &MintContract::default());
         let (proof, _) = create_mint_proof(
         let (proof, _) = create_mint_proof(

+ 0 - 89
src/crypto/schnorr.rs

@@ -1,89 +0,0 @@
-/* This file is part of DarkFi (https://dark.fi)
- *
- * Copyright (C) 2020-2022 Dyne.org foundation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-
-use darkfi_sdk::crypto::constants::{NullifierK, DRK_SCHNORR_DOMAIN};
-use darkfi_serial::{SerialDecodable, SerialEncodable};
-use halo2_gadgets::ecc::chip::FixedPoint;
-use pasta_curves::{
-    group::{ff::Field, Group, GroupEncoding},
-    pallas,
-};
-use rand::rngs::OsRng;
-
-use crate::crypto::{
-    keypair::{PublicKey, SecretKey},
-    util::{hash_to_scalar, mod_r_p},
-};
-
-#[derive(Debug, Clone, PartialEq, Eq, SerialEncodable, SerialDecodable)]
-pub struct Signature {
-    commit: pallas::Point,
-    response: pallas::Scalar,
-}
-
-impl Signature {
-    pub fn dummy() -> Self {
-        Self { commit: pallas::Point::identity(), response: pallas::Scalar::zero() }
-    }
-}
-
-pub trait SchnorrSecret {
-    fn sign(&self, message: &[u8]) -> Signature;
-}
-
-pub trait SchnorrPublic {
-    fn verify(&self, message: &[u8], signature: &Signature) -> bool;
-}
-
-impl SchnorrSecret for SecretKey {
-    fn sign(&self, message: &[u8]) -> Signature {
-        let mask = pallas::Scalar::random(&mut OsRng);
-        let commit = NullifierK.generator() * mask;
-
-        let challenge = hash_to_scalar(DRK_SCHNORR_DOMAIN, &commit.to_bytes(), message);
-        let response = mask + challenge * mod_r_p(self.inner());
-
-        Signature { commit, response }
-    }
-}
-
-impl SchnorrPublic for PublicKey {
-    fn verify(&self, message: &[u8], signature: &Signature) -> bool {
-        let challenge = hash_to_scalar(DRK_SCHNORR_DOMAIN, &signature.commit.to_bytes(), message);
-        NullifierK.generator() * signature.response - self.0 * challenge == signature.commit
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use darkfi_serial::{deserialize, serialize};
-
-    #[test]
-    fn test_schnorr() {
-        let secret = SecretKey::random(&mut OsRng);
-        let message = b"Foo bar";
-        let signature = secret.sign(&message[..]);
-        let public = PublicKey::from_secret(secret);
-        assert!(public.verify(&message[..], &signature));
-
-        let ser = serialize(&signature);
-        let de = deserialize(&ser).unwrap();
-        assert!(public.verify(&message[..], &de));
-    }
-}

+ 3 - 43
src/crypto/util.rs

@@ -17,21 +17,9 @@
  */
  */
 
 
 use blake2b_simd::Params;
 use blake2b_simd::Params;
-use darkfi_sdk::crypto::constants::{
-    fixed_bases::{
-        VALUE_COMMITMENT_PERSONALIZATION, VALUE_COMMITMENT_R_BYTES, VALUE_COMMITMENT_V_BYTES,
-    },
-    util::gen_const_array,
-    NullifierK,
-};
-use halo2_gadgets::{ecc::chip::FixedPoint, poseidon::primitives as poseidon};
-use pasta_curves::{
-    arithmetic::{CurveExt, FieldExt},
-    group::ff::PrimeField,
-    pallas,
-};
-
-use super::types::*;
+use darkfi_sdk::crypto::constants::util::gen_const_array;
+use halo2_gadgets::poseidon::primitives as poseidon;
+use pasta_curves::{arithmetic::FieldExt, pallas};
 
 
 pub fn hash_to_scalar(persona: &[u8], a: &[u8], b: &[u8]) -> pallas::Scalar {
 pub fn hash_to_scalar(persona: &[u8], a: &[u8], b: &[u8]) -> pallas::Scalar {
     let mut hasher = Params::new().hash_length(64).personal(persona).to_state();
     let mut hasher = Params::new().hash_length(64).personal(persona).to_state();
@@ -41,40 +29,12 @@ pub fn hash_to_scalar(persona: &[u8], a: &[u8], b: &[u8]) -> pallas::Scalar {
     pallas::Scalar::from_bytes_wide(ret.as_array())
     pallas::Scalar::from_bytes_wide(ret.as_array())
 }
 }
 
 
-/// Pedersen commitment for a full-width base field element.
-#[allow(non_snake_case)]
-pub fn pedersen_commitment_base(value: pallas::Base, blind: DrkValueBlind) -> DrkValueCommit {
-    let hasher = DrkValueCommit::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION);
-    let V = NullifierK.generator();
-    let R = hasher(&VALUE_COMMITMENT_R_BYTES);
-
-    V * mod_r_p(value) + R * blind
-}
-
-/// Pedersen commitment for a 64-bit value, in the base field.
-#[allow(non_snake_case)]
-pub fn pedersen_commitment_u64(value: u64, blind: DrkValueBlind) -> DrkValueCommit {
-    let hasher = DrkValueCommit::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION);
-    let V = hasher(&VALUE_COMMITMENT_V_BYTES);
-    let R = hasher(&VALUE_COMMITMENT_R_BYTES);
-
-    V * mod_r_p(DrkValue::from(value)) + R * blind
-}
-
 /// Simplified wrapper for poseidon hash function.
 /// Simplified wrapper for poseidon hash function.
 pub fn poseidon_hash<const N: usize>(messages: [pallas::Base; N]) -> pallas::Base {
 pub fn poseidon_hash<const N: usize>(messages: [pallas::Base; N]) -> pallas::Base {
     poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<N>, 3, 2>::init()
     poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<N>, 3, 2>::init()
         .hash(messages)
         .hash(messages)
 }
 }
 
 
-/// Converts from pallas::Base to pallas::Scalar (aka $x \pmod{r_\mathbb{P}}$).
-///
-/// This requires no modular reduction because Pallas' base field is smaller than its
-/// scalar field.
-pub fn mod_r_p(x: pallas::Base) -> pallas::Scalar {
-    pallas::Scalar::from_repr(x.to_repr()).unwrap()
-}
-
 /// The sequence of bits representing a u64 in little-endian order.
 /// The sequence of bits representing a u64 in little-endian order.
 ///
 ///
 /// # Panics
 /// # Panics

+ 3 - 2
src/error.rs

@@ -303,7 +303,8 @@ pub enum Error {
     #[error("wasm runtime out of memory")]
     #[error("wasm runtime out of memory")]
     WasmerOomError(String),
     WasmerOomError(String),
 
 
-    #[cfg(feature = "wasm-runtime")]
+    // TODO: FIXME: The strings are wrong
+    #[cfg(feature = "darkfi-sdk")]
     #[error("contract initialize error")]
     #[error("contract initialize error")]
     ContractError(darkfi_sdk::error::ContractError),
     ContractError(darkfi_sdk::error::ContractError),
 
 
@@ -608,7 +609,7 @@ impl From<wasmer::MemoryError> for Error {
     }
     }
 }
 }
 
 
-#[cfg(feature = "wasm-runtime")]
+#[cfg(feature = "darkfi-sdk")]
 impl From<darkfi_sdk::error::ContractError> for Error {
 impl From<darkfi_sdk::error::ContractError> for Error {
     fn from(err: darkfi_sdk::error::ContractError) -> Self {
     fn from(err: darkfi_sdk::error::ContractError) -> Self {
         Self::ContractError(err)
         Self::ContractError(err)

+ 1 - 3
src/node/client.rs

@@ -17,7 +17,7 @@
  */
  */
 
 
 use async_std::sync::{Arc, Mutex};
 use async_std::sync::{Arc, Mutex};
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode};
+use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, Address, Keypair, MerkleNode, PublicKey};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use lazy_init::Lazy;
 use lazy_init::Lazy;
 use log::{debug, error, info};
 use log::{debug, error, info};
@@ -26,9 +26,7 @@ use pasta_curves::group::ff::PrimeField;
 use super::state::{state_transition, State};
 use super::state::{state_transition, State};
 use crate::{
 use crate::{
     crypto::{
     crypto::{
-        address::Address,
         coin::{Coin, OwnCoin},
         coin::{Coin, OwnCoin},
-        keypair::{Keypair, PublicKey},
         proof::ProvingKey,
         proof::ProvingKey,
         types::DrkTokenId,
         types::DrkTokenId,
     },
     },

+ 2 - 2
src/node/memorystate.rs

@@ -16,12 +16,12 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier, PublicKey};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use log::debug;
 use log::debug;
 
 
 use super::state::{ProgramState, State, StateUpdate};
 use super::state::{ProgramState, State, StateUpdate};
-use crate::crypto::{keypair::PublicKey, proof::VerifyingKey};
+use crate::crypto::proof::VerifyingKey;
 
 
 /// In-memory state extension for state transition validations
 /// In-memory state extension for state transition validations
 #[derive(Clone)]
 #[derive(Clone)]

+ 1 - 2
src/node/state.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier, PublicKey, SecretKey};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use lazy_init::Lazy;
 use lazy_init::Lazy;
 use log::{debug, error};
 use log::{debug, error};
@@ -26,7 +26,6 @@ use crate::{
     consensus::{TESTNET_GENESIS_HASH_BYTES, TESTNET_GENESIS_TIMESTAMP},
     consensus::{TESTNET_GENESIS_HASH_BYTES, TESTNET_GENESIS_TIMESTAMP},
     crypto::{
     crypto::{
         coin::{Coin, OwnCoin},
         coin::{Coin, OwnCoin},
-        keypair::{PublicKey, SecretKey},
         note::{EncryptedNote, Note},
         note::{EncryptedNote, Note},
         proof::VerifyingKey,
         proof::VerifyingKey,
         util::poseidon_hash,
         util::poseidon_hash,

+ 1 - 0
src/sdk/Cargo.toml

@@ -32,6 +32,7 @@ halo2_gadgets = "0.2.0"
 incrementalmerkletree = "0.3.0"
 incrementalmerkletree = "0.3.0"
 pasta_curves = "0.4.0"
 pasta_curves = "0.4.0"
 rand_core = "0.6.4"
 rand_core = "0.6.4"
+sha2 = "0.10.6"
 
 
 # Misc
 # Misc
 lazy_static = "1.4.0"
 lazy_static = "1.4.0"

+ 23 - 14
src/crypto/address.rs → src/sdk/src/crypto/address.rs

@@ -16,12 +16,16 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use std::str::FromStr;
+// TODO: This module should use blake3, and be a bit more robust with a
+//       more clear and consistent API
 
 
-use darkfi_serial::{SerialDecodable, SerialEncodable};
+use core::str::FromStr;
+
+use darkfi_serial::{serialize, SerialDecodable, SerialEncodable};
 use sha2::Digest;
 use sha2::Digest;
 
 
-use crate::{crypto::keypair::PublicKey, Error, Result};
+use super::PublicKey;
+use crate::error::ContractError;
 
 
 enum AddressType {
 enum AddressType {
     Payment = 0,
     Payment = 0,
@@ -30,9 +34,13 @@ enum AddressType {
 #[derive(
 #[derive(
     Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Hash, SerialEncodable, SerialDecodable,
     Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Hash, SerialEncodable, SerialDecodable,
 )]
 )]
-pub struct Address(pub [u8; 37]);
+pub struct Address([u8; 37]);
 
 
 impl Address {
 impl Address {
+    pub fn inner(&self) -> [u8; 37] {
+        self.0
+    }
+
     fn is_valid_address(address: Vec<u8>) -> bool {
     fn is_valid_address(address: Vec<u8>) -> bool {
         if address.starts_with(&[AddressType::Payment as u8]) && address.len() == 37 {
         if address.starts_with(&[AddressType::Payment as u8]) && address.len() == 37 {
             // hash the version + publickey to check the checksum
             // hash the version + publickey to check the checksum
@@ -56,9 +64,9 @@ impl std::fmt::Display for Address {
 }
 }
 
 
 impl FromStr for Address {
 impl FromStr for Address {
-    type Err = Error;
+    type Err = ContractError;
 
 
-    fn from_str(address: &str) -> Result<Self> {
+    fn from_str(address: &str) -> Result<Self, Self::Err> {
         let bytes = bs58::decode(&address).into_vec();
         let bytes = bs58::decode(&address).into_vec();
 
 
         if let Ok(v) = bytes {
         if let Ok(v) = bytes {
@@ -69,19 +77,19 @@ impl FromStr for Address {
             }
             }
         }
         }
 
 
-        Err(Error::InvalidAddress)
+        Err(ContractError::IoError("Invalid address".to_string()))
     }
     }
 }
 }
 
 
 impl From<PublicKey> for Address {
 impl From<PublicKey> for Address {
-    fn from(publickey: PublicKey) -> Self {
-        let mut publickey = publickey.to_bytes().to_vec();
+    fn from(public_key: PublicKey) -> Self {
+        let mut public_key = serialize(&public_key);
 
 
         // add version
         // add version
         let mut address = vec![AddressType::Payment as u8];
         let mut address = vec![AddressType::Payment as u8];
 
 
         // add public key
         // add public key
-        address.append(&mut publickey);
+        address.append(&mut public_key);
 
 
         // hash the version + publickey
         // hash the version + publickey
         let mut hasher = sha2::Sha256::new();
         let mut hasher = sha2::Sha256::new();
@@ -98,15 +106,15 @@ impl From<PublicKey> for Address {
     }
     }
 }
 }
 
 
+/* FIXME:
 #[cfg(test)]
 #[cfg(test)]
 mod tests {
 mod tests {
-    use rand::rngs::OsRng;
-
     use super::*;
     use super::*;
-    use crate::crypto::keypair::{Keypair, PublicKey};
+    use crate::crypto::Keypair;
+    use rand::rngs::OsRng;
 
 
     #[test]
     #[test]
-    fn test_address() -> Result<()> {
+    fn test_address() -> Result<(), ContractError> {
         // from/to PublicKey
         // from/to PublicKey
         let keypair = Keypair::random(&mut OsRng);
         let keypair = Keypair::random(&mut OsRng);
         let address = Address::from(keypair.public);
         let address = Address::from(keypair.public);
@@ -120,3 +128,4 @@ mod tests {
         Ok(())
         Ok(())
     }
     }
 }
 }
+*/

+ 18 - 1
src/sdk/src/crypto/keypair.rs

@@ -30,7 +30,7 @@ use pasta_curves::{
 };
 };
 use rand_core::{CryptoRng, RngCore};
 use rand_core::{CryptoRng, RngCore};
 
 
-use super::{constants::NullifierK, util::mod_r_p};
+use super::{constants::NullifierK, util::mod_r_p, Address};
 use crate::error::ContractError;
 use crate::error::ContractError;
 
 
 /// Keypair structure holding a `SecretKey` and its respective `PublicKey`
 /// Keypair structure holding a `SecretKey` and its respective `PublicKey`
@@ -154,6 +154,13 @@ impl From<pallas::Point> for PublicKey {
     }
     }
 }
 }
 
 
+impl core::hash::Hash for PublicKey {
+    fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
+        let bytes = self.0.to_affine().to_bytes();
+        bytes.hash(state);
+    }
+}
+
 impl FromStr for PublicKey {
 impl FromStr for PublicKey {
     type Err = ContractError;
     type Err = ContractError;
 
 
@@ -176,3 +183,13 @@ impl core::fmt::Display for PublicKey {
         write!(f, "{}", disp)
         write!(f, "{}", disp)
     }
     }
 }
 }
+
+impl TryFrom<Address> for PublicKey {
+    type Error = ContractError;
+
+    fn try_from(address: Address) -> Result<Self, Self::Error> {
+        let mut bytes = [0u8; 32];
+        bytes.copy_from_slice(&address.inner()[1..33]);
+        Self::from_bytes(bytes)
+    }
+}

+ 4 - 0
src/sdk/src/crypto/mod.rs

@@ -37,6 +37,10 @@ pub mod util;
 pub mod keypair;
 pub mod keypair;
 pub use keypair::{Keypair, PublicKey, SecretKey};
 pub use keypair::{Keypair, PublicKey, SecretKey};
 
 
+/// Address definitions
+pub mod address;
+pub use address::Address;
+
 /// Contract ID definitions and methods
 /// Contract ID definitions and methods
 pub mod contract_id;
 pub mod contract_id;
 pub use contract_id::ContractId;
 pub use contract_id::ContractId;

+ 3 - 5
src/tx/builder.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{schnorr::SchnorrSecret, MerkleNode, PublicKey, SecretKey};
 use darkfi_serial::serialize;
 use darkfi_serial::serialize;
 use pasta_curves::group::ff::Field;
 use pasta_curves::group::ff::Field;
 use rand::rngs::OsRng;
 use rand::rngs::OsRng;
@@ -28,11 +28,9 @@ use super::{
 use crate::{
 use crate::{
     crypto::{
     crypto::{
         burn_proof::create_burn_proof,
         burn_proof::create_burn_proof,
-        keypair::{PublicKey, SecretKey},
         mint_proof::create_mint_proof,
         mint_proof::create_mint_proof,
         note::Note,
         note::Note,
         proof::ProvingKey,
         proof::ProvingKey,
-        schnorr::SchnorrSecret,
         types::{
         types::{
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,
             DrkCoinBlind, DrkSerial, DrkSpendHook, DrkTokenId, DrkUserData, DrkUserDataBlind,
             DrkValueBlind,
             DrkValueBlind,
@@ -202,7 +200,7 @@ impl TransactionBuilder {
         let mut clear_inputs = vec![];
         let mut clear_inputs = vec![];
         for (input, info) in partial_tx.clear_inputs.into_iter().zip(self.clear_inputs) {
         for (input, info) in partial_tx.clear_inputs.into_iter().zip(self.clear_inputs) {
             let secret = info.signature_secret;
             let secret = info.signature_secret;
-            let signature = secret.sign(&unsigned_tx_data);
+            let signature = secret.sign(&mut OsRng, &unsigned_tx_data);
             let input = TransactionClearInput::from_partial(input, signature);
             let input = TransactionClearInput::from_partial(input, signature);
             clear_inputs.push(input);
             clear_inputs.push(input);
         }
         }
@@ -211,7 +209,7 @@ impl TransactionBuilder {
         for (input, signature_secret) in
         for (input, signature_secret) in
             partial_tx.inputs.into_iter().zip(signature_secrets.into_iter())
             partial_tx.inputs.into_iter().zip(signature_secrets.into_iter())
         {
         {
-            let signature = signature_secret.sign(&unsigned_tx_data);
+            let signature = signature_secret.sign(&mut OsRng, &unsigned_tx_data);
             let input = TransactionInput::from_partial(input, signature);
             let input = TransactionInput::from_partial(input, signature);
             inputs.push(input);
             inputs.push(input);
         }
         }

+ 6 - 4
src/tx/mod.rs

@@ -18,6 +18,12 @@
 
 
 use std::io;
 use std::io;
 
 
+use darkfi_sdk::crypto::{
+    pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+    schnorr,
+    schnorr::SchnorrPublic,
+    PublicKey,
+};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable, VarInt};
 use darkfi_serial::{Encodable, SerialDecodable, SerialEncodable, VarInt};
 use log::error;
 use log::error;
 use pasta_curves::group::Group;
 use pasta_curves::group::Group;
@@ -25,14 +31,10 @@ use pasta_curves::group::Group;
 use crate::{
 use crate::{
     crypto::{
     crypto::{
         burn_proof::verify_burn_proof,
         burn_proof::verify_burn_proof,
-        keypair::PublicKey,
         mint_proof::verify_mint_proof,
         mint_proof::verify_mint_proof,
         note::EncryptedNote,
         note::EncryptedNote,
         proof::VerifyingKey,
         proof::VerifyingKey,
-        schnorr,
-        schnorr::SchnorrPublic,
         types::{DrkTokenId, DrkValueBlind, DrkValueCommit},
         types::{DrkTokenId, DrkValueBlind, DrkValueCommit},
-        util::{pedersen_commitment_base, pedersen_commitment_u64},
         BurnRevealedValues, MintRevealedValues, Proof,
         BurnRevealedValues, MintRevealedValues, Proof,
     },
     },
     Result, VerifyFailed, VerifyResult,
     Result, VerifyFailed, VerifyResult,

+ 1 - 1
src/tx/partial.rs

@@ -16,11 +16,11 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+use darkfi_sdk::crypto::PublicKey;
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 use darkfi_serial::{SerialDecodable, SerialEncodable};
 
 
 use super::TransactionOutput;
 use super::TransactionOutput;
 use crate::crypto::{
 use crate::crypto::{
-    keypair::PublicKey,
     types::{DrkTokenId, DrkValueBlind},
     types::{DrkTokenId, DrkValueBlind},
     BurnRevealedValues, Proof,
     BurnRevealedValues, Proof,
 };
 };

+ 3 - 3
src/wallet/walletdb.rs

@@ -19,7 +19,9 @@
 use std::{fs::create_dir_all, path::Path, str::FromStr, time::Duration};
 use std::{fs::create_dir_all, path::Path, str::FromStr, time::Duration};
 
 
 use async_std::sync::Arc;
 use async_std::sync::Arc;
-use darkfi_sdk::crypto::{constants::MERKLE_DEPTH, MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    constants::MERKLE_DEPTH, Address, Keypair, MerkleNode, Nullifier, PublicKey, SecretKey,
+};
 use darkfi_serial::{deserialize, serialize};
 use darkfi_serial::{deserialize, serialize};
 use incrementalmerkletree::bridgetree::BridgeTree;
 use incrementalmerkletree::bridgetree::BridgeTree;
 use log::{debug, error, info, LevelFilter};
 use log::{debug, error, info, LevelFilter};
@@ -32,9 +34,7 @@ use sqlx::{
 
 
 use crate::{
 use crate::{
     crypto::{
     crypto::{
-        address::Address,
         coin::{Coin, OwnCoin},
         coin::{Coin, OwnCoin},
-        keypair::{Keypair, PublicKey, SecretKey},
         note::Note,
         note::Note,
         types::DrkTokenId,
         types::DrkTokenId,
     },
     },

+ 10 - 8
src/zk/circuit/burn_contract.rs

@@ -547,13 +547,15 @@ mod tests {
     use super::*;
     use super::*;
     use crate::{
     use crate::{
         crypto::{
         crypto::{
-            keypair::{PublicKey, SecretKey},
             proof::{ProvingKey, VerifyingKey},
             proof::{ProvingKey, VerifyingKey},
-            util::{pedersen_commitment_base, pedersen_commitment_u64},
             Proof,
             Proof,
         },
         },
         Result,
         Result,
     };
     };
+    use darkfi_sdk::crypto::{
+        pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+        PublicKey, SecretKey,
+    };
     use halo2_gadgets::poseidon::{
     use halo2_gadgets::poseidon::{
         primitives as poseidon,
         primitives as poseidon,
         primitives::{ConstantLength, P128Pow5T3},
         primitives::{ConstantLength, P128Pow5T3},
@@ -582,11 +584,11 @@ mod tests {
         let sig_secret = SecretKey::random(&mut OsRng);
         let sig_secret = SecretKey::random(&mut OsRng);
 
 
         let coin2 = {
         let coin2 = {
-            let coords = PublicKey::from_secret(secret).0.to_affine().coordinates().unwrap();
+            let (pub_x, pub_y) = PublicKey::from_secret(secret).xy();
 
 
             let msg = [
             let msg = [
-                *coords.x(),
-                *coords.y(),
+                pub_x,
+                pub_y,
                 pallas::Base::from(value),
                 pallas::Base::from(value),
                 token_id,
                 token_id,
                 serial,
                 serial,
@@ -629,7 +631,7 @@ mod tests {
             poseidon::Hash::<_, P128Pow5T3, ConstantLength<2>, 3, 2>::init().hash(user_data_enc);
             poseidon::Hash::<_, P128Pow5T3, ConstantLength<2>, 3, 2>::init().hash(user_data_enc);
 
 
         let sig_pubkey = PublicKey::from_secret(sig_secret);
         let sig_pubkey = PublicKey::from_secret(sig_secret);
-        let sig_coords = sig_pubkey.0.to_affine().coordinates().unwrap();
+        let (sig_x, sig_y) = sig_pubkey.xy();
 
 
         let public_inputs = vec![
         let public_inputs = vec![
             nullifier,
             nullifier,
@@ -639,8 +641,8 @@ mod tests {
             *token_coords.y(),
             *token_coords.y(),
             merkle_root.inner(),
             merkle_root.inner(),
             user_data_enc,
             user_data_enc,
-            *sig_coords.x(),
-            *sig_coords.y(),
+            sig_x,
+            sig_y,
         ];
         ];
 
 
         let circuit = BurnContract {
         let circuit = BurnContract {

+ 10 - 8
src/zk/circuit/mint_contract.rs

@@ -370,13 +370,15 @@ mod tests {
     use super::*;
     use super::*;
     use crate::{
     use crate::{
         crypto::{
         crypto::{
-            keypair::PublicKey,
             proof::{ProvingKey, VerifyingKey},
             proof::{ProvingKey, VerifyingKey},
-            util::{pedersen_commitment_base, pedersen_commitment_u64},
             Proof,
             Proof,
         },
         },
         Result,
         Result,
     };
     };
+    use darkfi_sdk::crypto::{
+        pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+        PublicKey, SecretKey,
+    };
     use halo2_gadgets::poseidon::{
     use halo2_gadgets::poseidon::{
         primitives as poseidon,
         primitives as poseidon,
         primitives::{ConstantLength, P128Pow5T3},
         primitives::{ConstantLength, P128Pow5T3},
@@ -400,14 +402,14 @@ mod tests {
         let token_blind = pallas::Scalar::random(&mut OsRng);
         let token_blind = pallas::Scalar::random(&mut OsRng);
         let serial = pallas::Base::random(&mut OsRng);
         let serial = pallas::Base::random(&mut OsRng);
         let coin_blind = pallas::Base::random(&mut OsRng);
         let coin_blind = pallas::Base::random(&mut OsRng);
-        let public_key = PublicKey::random(&mut OsRng);
-        let coords = public_key.0.to_affine().coordinates().unwrap();
+        let public_key = PublicKey::from_secret(SecretKey::random(&mut OsRng));
+        let (pub_x, pub_y) = public_key.xy();
         let spend_hook = pallas::Base::random(&mut OsRng);
         let spend_hook = pallas::Base::random(&mut OsRng);
         let user_data = pallas::Base::random(&mut OsRng);
         let user_data = pallas::Base::random(&mut OsRng);
 
 
         let msg = [
         let msg = [
-            *coords.x(),
-            *coords.y(),
+            pub_x,
+            pub_y,
             pallas::Base::from(value),
             pallas::Base::from(value),
             token_id,
             token_id,
             serial,
             serial,
@@ -427,8 +429,8 @@ mod tests {
             vec![coin, *value_coords.x(), *value_coords.y(), *token_coords.x(), *token_coords.y()];
             vec![coin, *value_coords.x(), *value_coords.y(), *token_coords.x(), *token_coords.y()];
 
 
         let circuit = MintContract {
         let circuit = MintContract {
-            pub_x: Value::known(*coords.x()),
-            pub_y: Value::known(*coords.y()),
+            pub_x: Value::known(pub_x),
+            pub_y: Value::known(pub_y),
             value: Value::known(pallas::Base::from(value)),
             value: Value::known(pallas::Base::from(value)),
             token: Value::known(token_id),
             token: Value::known(token_id),
             serial: Value::known(serial),
             serial: Value::known(serial),

+ 10 - 9
tests/burn_proof.rs

@@ -18,9 +18,8 @@
 
 
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        keypair::{PublicKey, SecretKey},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        util::{pedersen_commitment_base, pedersen_commitment_u64, poseidon_hash},
+        util::poseidon_hash,
         Proof,
         Proof,
     },
     },
     zk::{
     zk::{
@@ -30,7 +29,10 @@ use darkfi::{
     zkas::decoder::ZkBinary,
     zkas::decoder::ZkBinary,
     Result,
     Result,
 };
 };
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
+use darkfi_sdk::crypto::{
+    pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+    MerkleNode, Nullifier, PublicKey, SecretKey,
+};
 use halo2_gadgets::poseidon::primitives as poseidon;
 use halo2_gadgets::poseidon::primitives as poseidon;
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
@@ -63,9 +65,8 @@ fn burn_proof() -> Result<()> {
 
 
     // Build the coin
     // Build the coin
     let coin2 = {
     let coin2 = {
-        let coords = PublicKey::from_secret(secret).0.to_affine().coordinates().unwrap();
-        let messages =
-            [*coords.x(), *coords.y(), pallas::Base::from(value), token_id, serial, coin_blind];
+        let (pub_x, pub_y) = PublicKey::from_secret(secret).xy();
+        let messages = [pub_x, pub_y, pallas::Base::from(value), token_id, serial, coin_blind];
 
 
         poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<6>, 3, 2>::init()
         poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<6>, 3, 2>::init()
             .hash(messages)
             .hash(messages)
@@ -113,7 +114,7 @@ fn burn_proof() -> Result<()> {
     let token_coords = token_commit.to_affine().coordinates().unwrap();
     let token_coords = token_commit.to_affine().coordinates().unwrap();
 
 
     let sig_pubkey = PublicKey::from_secret(sig_secret);
     let sig_pubkey = PublicKey::from_secret(sig_secret);
-    let sig_coords = sig_pubkey.0.to_affine().coordinates().unwrap();
+    let (sig_x, sig_y) = sig_pubkey.xy();
 
 
     let merkle_root = tree.root(0).unwrap();
     let merkle_root = tree.root(0).unwrap();
 
 
@@ -124,8 +125,8 @@ fn burn_proof() -> Result<()> {
         *token_coords.x(),
         *token_coords.x(),
         *token_coords.y(),
         *token_coords.y(),
         merkle_root.inner(),
         merkle_root.inner(),
-        *sig_coords.x(),
-        *sig_coords.y(),
+        sig_x,
+        sig_y,
     ];
     ];
 
 
     // Create the circuit
     // Create the circuit

+ 9 - 7
tests/mint_proof.rs

@@ -18,9 +18,7 @@
 
 
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        keypair::PublicKey,
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        util::{pedersen_commitment_base, pedersen_commitment_u64},
         Proof,
         Proof,
     },
     },
     zk::{
     zk::{
@@ -30,6 +28,10 @@ use darkfi::{
     zkas::decoder::ZkBinary,
     zkas::decoder::ZkBinary,
     Result,
     Result,
 };
 };
+use darkfi_sdk::crypto::{
+    pedersen::{pedersen_commitment_base, pedersen_commitment_u64},
+    PublicKey, SecretKey,
+};
 use halo2_gadgets::poseidon::primitives as poseidon;
 use halo2_gadgets::poseidon::primitives as poseidon;
 use halo2_proofs::circuit::Value;
 use halo2_proofs::circuit::Value;
 use pasta_curves::{
 use pasta_curves::{
@@ -56,12 +58,12 @@ fn mint_proof() -> Result<()> {
     let token_blind = pallas::Scalar::random(&mut OsRng);
     let token_blind = pallas::Scalar::random(&mut OsRng);
     let serial = pallas::Base::random(&mut OsRng);
     let serial = pallas::Base::random(&mut OsRng);
     let coin_blind = pallas::Base::random(&mut OsRng);
     let coin_blind = pallas::Base::random(&mut OsRng);
-    let public_key = PublicKey::random(&mut OsRng);
-    let coords = public_key.0.to_affine().coordinates().unwrap();
+    let public_key = PublicKey::from_secret(SecretKey::random(&mut OsRng));
+    let (pub_x, pub_y) = public_key.xy();
 
 
     let prover_witnesses = vec![
     let prover_witnesses = vec![
-        Witness::Base(Value::known(*coords.x())),
-        Witness::Base(Value::known(*coords.y())),
+        Witness::Base(Value::known(pub_x)),
+        Witness::Base(Value::known(pub_y)),
         Witness::Base(Value::known(pallas::Base::from(value))),
         Witness::Base(Value::known(pallas::Base::from(value))),
         Witness::Base(Value::known(token_id)),
         Witness::Base(Value::known(token_id)),
         Witness::Base(Value::known(serial)),
         Witness::Base(Value::known(serial)),
@@ -71,7 +73,7 @@ fn mint_proof() -> Result<()> {
     ];
     ];
 
 
     // Create the public inputs
     // Create the public inputs
-    let msgs = [*coords.x(), *coords.y(), pallas::Base::from(value), token_id, serial, coin_blind];
+    let msgs = [pub_x, pub_y, pallas::Base::from(value), token_id, serial, coin_blind];
     let coin = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<6>, 3, 2>::init()
     let coin = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<6>, 3, 2>::init()
         .hash(msgs);
         .hash(msgs);
 
 

+ 5 - 14
tests/zkvm_opcodes.rs

@@ -16,7 +16,7 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
-use darkfi_sdk::crypto::MerkleNode;
+use darkfi_sdk::crypto::{pedersen::pedersen_commitment_u64, MerkleNode, PublicKey, SecretKey};
 use halo2_gadgets::poseidon::{
 use halo2_gadgets::poseidon::{
     primitives as poseidon,
     primitives as poseidon,
     primitives::{ConstantLength, P128Pow5T3},
     primitives::{ConstantLength, P128Pow5T3},
@@ -32,9 +32,7 @@ use simplelog::{ColorChoice, Config, LevelFilter, TermLogger, TerminalMode};
 
 
 use darkfi::{
 use darkfi::{
     crypto::{
     crypto::{
-        keypair::{PublicKey, SecretKey},
         proof::{ProvingKey, VerifyingKey},
         proof::{ProvingKey, VerifyingKey},
-        util::pedersen_commitment_u64,
         Proof,
         Proof,
     },
     },
     zk::{
     zk::{
@@ -100,17 +98,10 @@ fn zkvm_opcodes() -> Result<()> {
     let d = poseidon::Hash::<_, P128Pow5T3, ConstantLength<4>, 3, 2>::init().hash(d_m);
     let d = poseidon::Hash::<_, P128Pow5T3, ConstantLength<4>, 3, 2>::init().hash(d_m);
 
 
     let public = PublicKey::from_secret(SecretKey::from(secret));
     let public = PublicKey::from_secret(SecretKey::from(secret));
-    let public_coords = public.0.to_affine().coordinates().unwrap();
-
-    let public_inputs = vec![
-        *value_coords.x(),
-        *value_coords.y(),
-        c2,
-        d,
-        root.inner(),
-        *public_coords.x(),
-        *public_coords.y(),
-    ];
+    let (pub_x, pub_y) = public.xy();
+
+    let public_inputs =
+        vec![*value_coords.x(), *value_coords.y(), c2, d, root.inner(), pub_x, pub_y];
 
 
     let circuit = ZkCircuit::new(prover_witnesses, zkbin.clone());
     let circuit = ZkCircuit::new(prover_witnesses, zkbin.clone());
     let proving_key = ProvingKey::build(13, &circuit);
     let proving_key = ProvingKey::build(13, &circuit);