Переглянути джерело

dao: replace get_blockchain_time() with get_current_slot()

zero 2 роки тому
батько
коміт
68f938cdb2

+ 3 - 5
src/contract/dao/src/entrypoint/propose.rs

@@ -26,7 +26,7 @@ use darkfi_sdk::{
     error::{ContractError, ContractResult},
     msg,
     pasta::pallas,
-    util::get_blockchain_time,
+    util::get_current_slot,
     ContractCall,
 };
 use darkfi_serial::{deserialize, serialize, Encodable, WriteExt};
@@ -34,12 +34,10 @@ use darkfi_serial::{deserialize, serialize, Encodable, WriteExt};
 use crate::{
     error::DaoError,
     model::{DaoBlindAggregateVote, DaoProposalMetadata, DaoProposeParams, DaoProposeUpdate},
-    DaoFunction, DAO_CONTRACT_DB_DAO_MERKLE_ROOTS, DAO_CONTRACT_DB_PROPOSAL_BULLAS,
+    slot_to_day, DaoFunction, DAO_CONTRACT_DB_DAO_MERKLE_ROOTS, DAO_CONTRACT_DB_PROPOSAL_BULLAS,
     DAO_CONTRACT_ZKAS_DAO_PROPOSE_BURN_NS, DAO_CONTRACT_ZKAS_DAO_PROPOSE_MAIN_NS,
 };
 
-const SECS_IN_DAY: u64 = 24 * 60 * 60;
-
 /// `get_metdata` function for `Dao::Propose`
 pub(crate) fn dao_propose_get_metadata(
     _cid: ContractId,
@@ -83,7 +81,7 @@ pub(crate) fn dao_propose_get_metadata(
         ));
     }
 
-    let current_day = get_blockchain_time() / SECS_IN_DAY;
+    let current_day = slot_to_day(get_current_slot());
 
     let total_funds_coords = total_funds_commit.to_affine().coordinates().unwrap();
     zk_public_inputs.push((

+ 3 - 5
src/contract/dao/src/entrypoint/vote.rs

@@ -24,7 +24,7 @@ use darkfi_sdk::{
     error::{ContractError, ContractResult},
     msg,
     pasta::pallas,
-    util::get_blockchain_time,
+    util::get_current_slot,
     ContractCall,
 };
 use darkfi_serial::{deserialize, serialize, Encodable, WriteExt};
@@ -32,12 +32,10 @@ use darkfi_serial::{deserialize, serialize, Encodable, WriteExt};
 use crate::{
     error::DaoError,
     model::{DaoProposalMetadata, DaoVoteParams, DaoVoteUpdate},
-    DaoFunction, DAO_CONTRACT_DB_PROPOSAL_BULLAS, DAO_CONTRACT_DB_VOTE_NULLIFIERS,
+    slot_to_day, DaoFunction, DAO_CONTRACT_DB_PROPOSAL_BULLAS, DAO_CONTRACT_DB_VOTE_NULLIFIERS,
     DAO_CONTRACT_ZKAS_DAO_VOTE_BURN_NS, DAO_CONTRACT_ZKAS_DAO_VOTE_MAIN_NS,
 };
 
-const SECS_IN_DAY: u64 = 24 * 60 * 60;
-
 /// `get_metdata` function for `Dao::Vote`
 pub(crate) fn dao_vote_get_metadata(
     _cid: ContractId,
@@ -87,7 +85,7 @@ pub(crate) fn dao_vote_get_metadata(
         ));
     }
 
-    let current_day = get_blockchain_time() / SECS_IN_DAY;
+    let current_day = slot_to_day(get_current_slot());
 
     let yes_vote_commit_coords = params.yes_vote_commit.to_affine().coordinates().unwrap();
     let all_vote_commit_coords = all_vote_commit.to_affine().coordinates().unwrap();

+ 9 - 0
src/contract/dao/src/lib.rs

@@ -86,3 +86,12 @@ pub const DAO_CONTRACT_ZKAS_DAO_PROPOSE_MAIN_NS: &str = "DaoProposeMain";
 pub const DAO_CONTRACT_ZKAS_DAO_EXEC_NS: &str = "DaoExec";
 /// zkas dao auth money_transfer circuit namespace
 pub const DAO_CONTRACT_ZKAS_DAO_AUTH_MONEY_TRANSFER_NS: &str = "DaoAuthMoneyTransfer";
+
+const SLOT_TIME: u64 = 90;
+const SECS_IN_DAY: u64 = 24 * 60 * 60;
+
+/// Days since genesis block. Used for time limit on DAO proposals.
+pub fn slot_to_day(slot: u64) -> u64 {
+    let timestamp_secs = slot * SLOT_TIME;
+    timestamp_secs / SECS_IN_DAY
+}

+ 3 - 5
src/contract/test-harness/src/dao_propose.rs

@@ -25,7 +25,8 @@ use darkfi::{
 use darkfi_dao_contract::{
     client::{DaoProposeCall, DaoProposeStakeInput},
     model::{Dao, DaoAuthCall, DaoBulla, DaoProposal, DaoProposeParams},
-    DaoFunction, DAO_CONTRACT_ZKAS_DAO_PROPOSE_BURN_NS, DAO_CONTRACT_ZKAS_DAO_PROPOSE_MAIN_NS,
+    slot_to_day, DaoFunction, DAO_CONTRACT_ZKAS_DAO_PROPOSE_BURN_NS,
+    DAO_CONTRACT_ZKAS_DAO_PROPOSE_MAIN_NS,
 };
 use darkfi_money_contract::{client::OwnCoin, model::CoinAttributes, MoneyFunction};
 use darkfi_sdk::{
@@ -38,8 +39,6 @@ use rand::rngs::OsRng;
 
 use super::{Holder, TestHarness, TxAction};
 
-const SECS_IN_DAY: u64 = 24 * 60 * 60;
-
 impl TestHarness {
     pub fn dao_propose(
         &mut self,
@@ -99,8 +98,7 @@ impl TestHarness {
             },
         ];
 
-        let creation_day =
-            wallet.validator.consensus.time_keeper.blockchain_timestamp() / SECS_IN_DAY;
+        let creation_day = slot_to_day(wallet.validator.consensus.time_keeper.current_slot());
         let proposal = DaoProposal {
             auth_calls,
             creation_day,

+ 3 - 5
src/contract/test-harness/src/dao_vote.rs

@@ -25,7 +25,8 @@ use darkfi::{
 use darkfi_dao_contract::{
     client::{DaoVoteCall, DaoVoteInput},
     model::{Dao, DaoProposal, DaoProposalBulla, DaoVoteParams},
-    DaoFunction, DAO_CONTRACT_ZKAS_DAO_VOTE_BURN_NS, DAO_CONTRACT_ZKAS_DAO_VOTE_MAIN_NS,
+    slot_to_day, DaoFunction, DAO_CONTRACT_ZKAS_DAO_VOTE_BURN_NS,
+    DAO_CONTRACT_ZKAS_DAO_VOTE_MAIN_NS,
 };
 use darkfi_money_contract::client::OwnCoin;
 use darkfi_sdk::{
@@ -38,8 +39,6 @@ use rand::rngs::OsRng;
 
 use super::{Holder, TestHarness, TxAction};
 
-const SECS_IN_DAY: u64 = 24 * 60 * 60;
-
 impl TestHarness {
     pub fn dao_vote(
         &mut self,
@@ -80,8 +79,7 @@ impl TestHarness {
             signature_secret,
         };
 
-        let current_day =
-            wallet.validator.consensus.time_keeper.blockchain_timestamp() / SECS_IN_DAY;
+        let current_day = slot_to_day(wallet.validator.consensus.time_keeper.current_slot());
         let call = DaoVoteCall {
             inputs: vec![input],
             vote_option,