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

[consensus] extract eta from lead proof hash rather than transaction hash

mohab metwally 4 лет назад
Родитель
Сommit
7e6c79fb4b
4 измененных файлов с 16 добавлено и 8 удалено
  1. 1 7
      example/lead.rs
  2. 6 0
      src/blockchain/metadatastore.rs
  3. 8 0
      src/blockchain/mod.rs
  4. 1 1
      src/stakeholder/stakeholder.rs

+ 1 - 7
example/lead.rs

@@ -59,16 +59,10 @@ fn main() {
 
     //
     //let proof = lead_proof::create_lead_proof(lead_pk.clone(), coin.clone());
-    //lead_proof::verify_lead_proof(&lead_vk, &proof, coin);
 
-    let proof = lead_proof::create_lead_proof(lead_pk.clone(), coin.clone()).unwrap();
+    //TODO (fix) proof panics
     let lead_tx = TransactionLeadProof::new(lead_pk, coin.clone());
-    //TODO (fix)
     //lead_tx.verify(lead_vk, coin);
-    //2 add proof transaction to the blockchain.
-    //2.1 first add the lead proof to the block metadata
-    //2.2 secondly read eta from the proof metadata
-    //3.3 (fix) blake3
     let (st_id, st_hash)  = stakeholder.blockchain.last().unwrap();
     let empty_txs : Vec<Transaction> = vec!();
     let metadata = Metadata::new(Timestamp::current_time(), epoch.eta.to_repr(), lead_tx);

+ 6 - 0
src/blockchain/metadatastore.rs

@@ -196,4 +196,10 @@ impl OuroborosMetadataStore {
 
         Ok(hashes)
     }
+
+    /// Retrive last key/val
+    pub fn get_last(&self) -> Result<(blake3::Hash, OuroborosMetadata)> {
+        let all = self.get_all().unwrap();
+        Ok(all[all.len()-1].clone())
+    }
 }

+ 8 - 0
src/blockchain/mod.rs

@@ -2,6 +2,8 @@ use std::io;
 
 use log::debug;
 
+use std::error;
+
 use crate::{
     consensus::{Block, BlockInfo, StreamletMetadata},
     impl_vec,
@@ -148,6 +150,12 @@ impl Blockchain {
     pub fn last(&self) -> Result<(u64, blake3::Hash)> {
         self.order.get_last()
     }
+
+    pub fn get_last_proof_hash(&self) -> Result<blake3::Hash> {
+        let (hash, om) = self.ouroboros_metadata.get_last().unwrap();
+        Ok(hash)
+    }
+
 }
 
 impl Encodable for blake3::Hash {

+ 1 - 1
src/stakeholder/stakeholder.rs

@@ -38,7 +38,7 @@ impl Stakeholder
     pub fn get_eta(&self) -> pallas::Base
     {
         let last_proof_slot : u64 = 0;
-        let (sl, proof_tx_hash) = self.blockchain.last().unwrap();
+        let proof_tx_hash = self.blockchain.get_last_proof_hash().unwrap();
         let mut bytes : [u8;32] = *proof_tx_hash.as_bytes();
         // read first 254 bits
         bytes[30] = 0;