Referenced signer passed to block producer
This commit is contained in:
		
							parent
							
								
									deb0abd4a8
								
							
						
					
					
						commit
						ba90901730
					
				| @ -10,11 +10,6 @@ use types::{BeaconBlock, ChainSpec, Domain, Fork, Slot}; | ||||
| 
 | ||||
| #[derive(Debug, PartialEq)] | ||||
| pub enum Error { | ||||
|     SlotClockError, | ||||
|     SlotUnknowable, | ||||
|     EpochMapPoisoned, | ||||
|     SlotClockPoisoned, | ||||
|     EpochLengthIsZero, | ||||
|     BeaconBlockNodeError(BeaconBlockNodeError), | ||||
| } | ||||
| 
 | ||||
| @ -34,7 +29,7 @@ pub enum ValidatorEvent { | ||||
| 
 | ||||
| /// This struct contains the logic for requesting and signing beacon blocks for a validator. The
 | ||||
| /// validator can abstractly sign via the Signer trait object.
 | ||||
| pub struct BlockProducer<B: BeaconBlockNode, S: Signer> { | ||||
| pub struct BlockProducer<'a, B: BeaconBlockNode, S: Signer> { | ||||
|     /// The current fork.
 | ||||
|     pub fork: Fork, | ||||
|     /// The current slot to produce a block for.
 | ||||
| @ -44,10 +39,10 @@ pub struct BlockProducer<B: BeaconBlockNode, S: Signer> { | ||||
|     /// The beacon node to connect to.
 | ||||
|     pub beacon_node: Arc<B>, | ||||
|     /// The signer to sign the block.
 | ||||
|     pub signer: Arc<S>, | ||||
|     pub signer: &'a S, | ||||
| } | ||||
| 
 | ||||
| impl<B: BeaconBlockNode, S: Signer> BlockProducer<B, S> { | ||||
| impl<'a, B: BeaconBlockNode, S: Signer> BlockProducer<'a, B, S> { | ||||
|     /// Produce a block at some slot.
 | ||||
|     ///
 | ||||
|     /// Assumes that a block is required at this slot (does not check the duties).
 | ||||
|  | ||||
| @ -299,17 +299,23 @@ impl<B: BeaconNodeDuties + 'static, S: Signer + 'static> Service<B, S> { | ||||
|     /// If there are any duties to process, spawn a separate thread and perform required actions.
 | ||||
|     fn process_duties(&mut self) { | ||||
|         if let Some(work) = self.duties_manager.get_current_work(self.current_slot) { | ||||
|             for (_public_key, work_type) in work { | ||||
|             for (signer_index, work_type) in work { | ||||
|                 if work_type.produce_block { | ||||
|                     // spawns a thread to produce a beacon block
 | ||||
|                     let signers = self.duties_manager.signers.clone(); | ||||
|                     let fork = self.fork.clone(); | ||||
|                     let slot = self.current_slot.clone(); | ||||
|                     let spec = self.spec.clone(); | ||||
|                     let beacon_node = self.beacon_block_client.clone(); | ||||
|                     std::thread::spawn(move || { | ||||
|                         /* | ||||
|                         let signer = &signers[signer_index]; | ||||
|                         let block_producer = BlockProducer { | ||||
|                             fork: self.fork, | ||||
|                             slot: self.current_slot, | ||||
|                             spec: self.spec.clone(), | ||||
|                             fork, | ||||
|                             slot, | ||||
|                             spec, | ||||
|                             beacon_node, | ||||
|                             signer, | ||||
|                         }; | ||||
|                         */ | ||||
|                     }); | ||||
| 
 | ||||
|                     // TODO: Produce a beacon block in a new thread
 | ||||
|  | ||||
| @ -2,7 +2,7 @@ use std::fmt::Display; | ||||
| use types::{Keypair, PublicKey, Signature}; | ||||
| 
 | ||||
| /// Signs message using an internally-maintained private key.
 | ||||
| pub trait Signer: Display + Send + Sync { | ||||
| pub trait Signer: Display + Send + Sync + Clone { | ||||
|     fn sign_block_proposal(&self, message: &[u8], domain: u64) -> Option<Signature>; | ||||
|     fn sign_randao_reveal(&self, message: &[u8], domain: u64) -> Option<Signature>; | ||||
|     /// Returns a public key for the signer object.
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user