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

miscel changes to the crypsinous sim

mohab metwally 4 лет назад
Родитель
Сommit
b7bfad332a
6 измененных файлов с 60 добавлено и 32 удалено
  1. 14 2
      bin/crypsinous/src/main.rs
  2. 16 2
      example/lead.rs
  3. 1 1
      example/net.rs
  4. 2 3
      src/blockchain/epoch.rs
  5. 1 1
      src/consensus/metadata.rs
  6. 26 23
      src/stakeholder/stakeholder.rs

+ 14 - 2
bin/crypsinous/src/main.rs

@@ -17,8 +17,20 @@ fn main()
     let n = 3;
     /// initialize n stakeholders
     let stakeholders = vec!(n);
-    let settings = net::Settings::new();
-    //TODO populate settings with peers urls
+    let settings = Settings{
+        inbound: Some(Url::parse("tls://127.0.0.1:12002").unwrap()),
+        outbound_connections: 4,
+        manual_attempt_limit: 0,
+        seed_query_timeout_seconds: 8,
+        connect_timeout_seconds: 10,
+        channel_handshake_seconds: 4,
+        channel_heartbeat_seconds: 10,
+        external_addr: Some(Url::parse("tls://127.0.0.1:12002").unwrap()),
+        peers: [Url::parse("tls://127.0.0.1:12003").unwrap()].to_vec(),
+        seeds: [Url::parse("tls://irc0.dark.fi:11001").unwrap(),
+                Url::parse("tls://irc1.dark.fi:11001").unwrap()
+        ].to_vec(),
+    };
     let k : u32 = 13; //proof's number of rows
     let handles = vec!(0);
     for i in n {

+ 16 - 2
example/lead.rs

@@ -10,6 +10,7 @@ use futures::executor::block_on;
 
 use darkfi::crypto::proof::VerifyingKey;
 use darkfi::crypto::proof::ProvingKey;
+use url::Url;
 
 use darkfi::{
     blockchain::{
@@ -43,8 +44,21 @@ fn main() {
         value: 0,  //static stake value
     };
     //
-    let settings = Settings::default();
-    let consensus = EpochConsensus::new(Some(22), Some(3), Some(22), Some(1));
+    let settings = Settings{
+        inbound: Some(Url::parse("tls://127.0.0.1:12002").unwrap()),
+        outbound_connections: 4,
+        manual_attempt_limit: 0,
+        seed_query_timeout_seconds: 8,
+        connect_timeout_seconds: 10,
+        channel_handshake_seconds: 4,
+        channel_heartbeat_seconds: 10,
+        external_addr: Some(Url::parse("tls://127.0.0.1:12002").unwrap()),
+        peers: [Url::parse("tls://127.0.0.1:12003").unwrap()].to_vec(),
+        seeds: [Url::parse("tls://irc0.dark.fi:11001").unwrap(),
+                Url::parse("tls://irc1.dark.fi:11001").unwrap()
+        ].to_vec(),
+    };
+    let consensus = EpochConsensus::new(Some(22), Some(3), Some(22), Some(0));
     println!("--> block on stakeholder future");
     let stakeholder : Stakeholder = block_on(Stakeholder::new(consensus, settings, Some(13))).unwrap();
     println!("block on stakeholder future <--|");

+ 1 - 1
example/net.rs

@@ -69,7 +69,7 @@ impl ProgramOptions {
 
         let connection_slots = if let Some(connection_slots) = programcli.connect_slots {
             connection_slots
-        } else {
+        } else  {
             0
         };
 

+ 2 - 3
src/blockchain/epoch.rs

@@ -202,9 +202,8 @@ impl Epoch {
             ];
             let lead_coin_msg_hash : pallas::Scalar = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<1>, 3, 2>::init().hash(lead_coin_msg);
             //TODO (FIX) THIS PANICS, ONLY PANICS ON LARGE VALUES!
-            //let c_cm: pallas::Point = pedersen_commitment_scalar(lead_coin_msg_hash, c_cm1_blind);
-            //note c_v is set to zero, should work
-            let c_cm: pallas::Point = pedersen_commitment_base(c_v, c_cm1_blind);
+            let c_cm: pallas::Point = pedersen_commitment_scalar(lead_coin_msg_hash, c_cm1_blind);
+
 
             let c_cm_coordinates = c_cm.to_affine().coordinates().unwrap();
             let c_cm_base: pallas::Base = c_cm_coordinates.x() * c_cm_coordinates.y();

+ 1 - 1
src/consensus/metadata.rs

@@ -62,7 +62,7 @@ impl Default for TransactionLeadProof {
 impl TransactionLeadProof {
     pub fn new(pk : ProvingKey, coin: LeadCoin) -> Self
     {
-        let proof = lead_proof::create_lead_proof(pk.clone(), coin.clone()).unwrap();
+        let proof = lead_proof::create_lead_proof(pk, coin.clone()).unwrap();
         Self { lead_proof: proof }
     }
 

+ 26 - 23
src/stakeholder/stakeholder.rs

@@ -108,9 +108,9 @@ pub struct Stakeholder
     pub vk : VerifyingKey,
     pub playing: bool,
     pub workspace : SlotWorkspace,
-    pub subscription: Subscription<Result<ChannelPtr>>,
-    pub chanptr : ChannelPtr,
-    pub msgsub : MessageSubscription::<BlockInfo>,
+    //pub subscription: Subscription<Result<ChannelPtr>>,
+    //pub chanptr : ChannelPtr,
+    //pub msgsub : MessageSubscription::<BlockInfo>,
 }
 
 impl Stakeholder
@@ -137,22 +137,8 @@ impl Stakeholder
         println!("--> network initialized");
         //TODO
         let workspace = SlotWorkspace::default();
-        let subscription : Subscription<Result<ChannelPtr>> = p2p.subscribe_channel().await;
-        println!("--> channel");
-        let chanptr : ChannelPtr =  subscription.receive().await.unwrap();
-        println!("--> received channel");
-        //
-        let message_subsytem = chanptr.get_message_subsystem();
-        println!("--> adding dispatcher to msg subsystem");
-        message_subsytem.add_dispatch::<BlockInfo>().await;
-        println!("--> added");
-        //TODO start channel if isn't started yet
-        //let info = chanptr.get_info();
-        //println!("channel info: {}", info);
-        println!("--> subscribe msg_sub");
-        let msg_sub : MessageSubscription::<BlockInfo> =
-            chanptr.subscribe_msg::<BlockInfo>().await.expect("missing blockinfo");
-        println!("--> subscribed");
+
+
         //
         let clock = Clock::new(Some(consensus.get_epoch_len()), Some(consensus.get_slot_len()), Some(consensus.get_tick_len()), settings.peers);
         Ok(Self{blockchain: bc,
@@ -166,9 +152,9 @@ impl Stakeholder
                 vk:lead_vk,
                 playing: true,
                 workspace: workspace,
-                subscription: subscription,
-                chanptr: chanptr,
-                msgsub: msg_sub,
+                //subscription: subscription,
+                //chanptr: chanptr,
+                //msgsub: msg_sub,
         })
     }
 
@@ -250,7 +236,24 @@ impl Stakeholder
     /// validate the block proof, and the transactions,
     /// if so add the proof to metadata if stakeholder isn't the lead.
     pub async fn sync_block(&self) {
-        let res = self.msgsub.receive().await.unwrap();
+        let subscription : Subscription<Result<ChannelPtr>> = self.net.subscribe_channel().await;
+        println!("--> channel");
+        let chanptr : ChannelPtr =  subscription.receive().await.unwrap();
+        println!("--> received channel");
+        //
+        let message_subsytem = chanptr.get_message_subsystem();
+        println!("--> adding dispatcher to msg subsystem");
+        message_subsytem.add_dispatch::<BlockInfo>().await;
+        println!("--> added");
+        //TODO start channel if isn't started yet
+        //let info = chanptr.get_info();
+        //println!("channel info: {}", info);
+        println!("--> subscribe msg_sub");
+        let msg_sub : MessageSubscription::<BlockInfo> =
+            chanptr.subscribe_msg::<BlockInfo>().await.expect("missing blockinfo");
+        println!("--> subscribed");
+
+        let res = msg_sub.receive().await.unwrap();
         let blk : BlockInfo = (*res).to_owned();
         //TODO validate the block proof, and transactions.
         if self.valid_block(blk.clone())  {