|
|
@@ -16,8 +16,11 @@
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
*/
|
|
|
|
|
|
+use darkfi_money_contract::model::CoinAttributes;
|
|
|
use darkfi_sdk::{
|
|
|
- crypto::{pasta_prelude::*, pedersen_commitment_u64, SecretKey},
|
|
|
+ crypto::{
|
|
|
+ pasta_prelude::*, pedersen_commitment_u64, poseidon_hash, SecretKey, DAO_CONTRACT_ID,
|
|
|
+ },
|
|
|
pasta::pallas,
|
|
|
};
|
|
|
|
|
|
@@ -37,6 +40,8 @@ use crate::model::{
|
|
|
pub struct DaoAuthMoneyTransferCall {
|
|
|
pub proposal: DaoProposal,
|
|
|
pub dao: Dao,
|
|
|
+ pub input_user_data_blind: pallas::Base,
|
|
|
+ pub dao_coin_attrs: CoinAttributes,
|
|
|
}
|
|
|
|
|
|
impl DaoAuthMoneyTransferCall {
|
|
|
@@ -46,7 +51,7 @@ impl DaoAuthMoneyTransferCall {
|
|
|
auth_xfer_pk: &ProvingKey,
|
|
|
) -> Result<(DaoAuthMoneyTransferParams, Vec<Proof>)> {
|
|
|
let mut proofs = vec![];
|
|
|
- let params = DaoAuthMoneyTransferParams { proposal_bulla: self.proposal.to_bulla() };
|
|
|
+ let params = DaoAuthMoneyTransferParams {};
|
|
|
|
|
|
let dao_proposer_limit = pallas::Base::from(self.dao.proposer_limit);
|
|
|
let dao_quorum = pallas::Base::from(self.dao.quorum);
|
|
|
@@ -55,6 +60,9 @@ impl DaoAuthMoneyTransferCall {
|
|
|
|
|
|
let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
|
|
|
|
|
|
+ let input_user_data_enc =
|
|
|
+ poseidon_hash([self.dao.to_bulla().inner(), self.input_user_data_blind]);
|
|
|
+
|
|
|
let prover_witnesses = vec![
|
|
|
// proposal params
|
|
|
Witness::Base(Value::known(self.proposal.auth_calls.commit())),
|
|
|
@@ -69,10 +77,23 @@ impl DaoAuthMoneyTransferCall {
|
|
|
Witness::Base(Value::known(dao_pub_x)),
|
|
|
Witness::Base(Value::known(dao_pub_y)),
|
|
|
Witness::Base(Value::known(self.dao.bulla_blind)),
|
|
|
+ // Dao input user data blind
|
|
|
+ Witness::Base(Value::known(self.input_user_data_blind)),
|
|
|
+ // Dao output coin attrs
|
|
|
+ Witness::Base(Value::known(pallas::Base::from(self.dao_coin_attrs.value))),
|
|
|
+ Witness::Base(Value::known(self.dao_coin_attrs.token_id.inner())),
|
|
|
+ Witness::Base(Value::known(self.dao_coin_attrs.serial)),
|
|
|
+ // DAO_CONTRACT_ID
|
|
|
+ Witness::Base(Value::known(DAO_CONTRACT_ID.inner())),
|
|
|
];
|
|
|
|
|
|
- let public_inputs = vec![params.proposal_bulla.inner()];
|
|
|
- //export_witness_json("witness.json", &prover_witnesses, &public_inputs);
|
|
|
+ let public_inputs = vec![
|
|
|
+ self.proposal.to_bulla().inner(),
|
|
|
+ input_user_data_enc,
|
|
|
+ self.dao_coin_attrs.to_coin().inner(),
|
|
|
+ DAO_CONTRACT_ID.inner(),
|
|
|
+ self.proposal.auth_calls.commit(),
|
|
|
+ ];
|
|
|
|
|
|
let circuit = ZkCircuit::new(prover_witnesses, auth_xfer_zkbin);
|
|
|
let proof = Proof::create(auth_xfer_pk, &[circuit], &public_inputs, &mut OsRng)
|