add a path to submit seal from engine

This commit is contained in:
keorn 2016-11-16 15:56:16 +00:00
parent 3b0d5503b1
commit 51bbad66d0
4 changed files with 26 additions and 4 deletions

View File

@ -569,6 +569,13 @@ impl Client {
self.miner.update_sealing(self)
}
/// Used by PoA to submit gathered signatures.
pub fn submit_seal(&self, block_hash: H256, seal: Vec<Bytes>) {
if self.miner.submit_seal(self, block_hash, seal).is_err() {
warn!(target: "poa", "Wrong internal seal submission!")
}
}
/// Attempt to get a copy of a specific block's final state.
///
/// This will not fail if given BlockID::Latest.

View File

@ -116,6 +116,15 @@ impl Tendermint {
}
}
fn submit_seal(&self, block_hash: H256, seal: Vec<Bytes>) {
if let Some(ref channel) = *self.message_channel.lock() {
match channel.send(ClientIoMessage::SubmitSeal(block_hash, seal)) {
Ok(_) => trace!(target: "poa", "timeout: SubmitSeal message sent."),
Err(err) => warn!(target: "poa", "timeout: Could not send a sealing message {}.", err),
}
}
}
fn nonce_proposer(&self, proposer_nonce: usize) -> &Address {
let ref p = self.our_params;
p.authorities.get(proposer_nonce % p.authority_n).unwrap()

View File

@ -1008,7 +1008,7 @@ impl MinerService for Miner {
ret.map(f)
}
fn submit_seal(&self, chain: &MiningBlockChainClient, pow_hash: H256, seal: Vec<Bytes>) -> Result<(), Error> {
fn submit_seal(&self, chain: &MiningBlockChainClient, block_hash: H256, seal: Vec<Bytes>) -> Result<(), Error> {
let result =
if let Some(b) = self.sealing_work.lock().queue.get_used_if(
if self.options.enable_resubmission {
@ -1016,9 +1016,9 @@ impl MinerService for Miner {
} else {
GetAction::Take
},
|b| &b.hash() == &pow_hash
|b| &b.hash() == &block_hash
) {
trace!(target: "miner", "Sealing block {}={}={} with seal {:?}", pow_hash, b.hash(), b.header().bare_hash(), seal);
trace!(target: "miner", "Sealing block {}={}={} with seal {:?}", block_hash, b.hash(), b.header().bare_hash(), seal);
b.lock().try_seal(&*self.engine, seal).or_else(|(e, _)| {
warn!(target: "miner", "Mined solution rejected: {}", e);
Err(Error::PowInvalid)

View File

@ -50,6 +50,8 @@ pub enum ClientIoMessage {
TakeSnapshot(u64),
/// Trigger sealing update (useful for internal sealing).
UpdateSealing,
/// Submit seal (useful for internal sealing).
SubmitSeal(H256, Vec<Bytes>),
}
/// Client service setup. Creates and registers client and network services with the IO subsystem.
@ -219,9 +221,13 @@ impl IoHandler<ClientIoMessage> for ClientIoHandler {
}
},
ClientIoMessage::UpdateSealing => {
trace!(target: "authorityround", "message: UpdateSealing");
trace!(target: "poa", "message: UpdateSealing");
self.client.update_sealing()
},
ClientIoMessage::SubmitSeal(ref hash, ref seal) => {
trace!(target: "poa", "message: SubmitSeal");
self.client.submit_seal(*hash, seal.clone())
},
_ => {} // ignore other messages
}
}