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