add a path to submit seal from engine
This commit is contained in:
parent
3b0d5503b1
commit
51bbad66d0
@ -569,6 +569,13 @@ impl Client {
|
|||||||
self.miner.update_sealing(self)
|
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.
|
/// Attempt to get a copy of a specific block's final state.
|
||||||
///
|
///
|
||||||
/// This will not fail if given BlockID::Latest.
|
/// This will not fail if given BlockID::Latest.
|
||||||
|
@ -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 {
|
fn nonce_proposer(&self, proposer_nonce: usize) -> &Address {
|
||||||
let ref p = self.our_params;
|
let ref p = self.our_params;
|
||||||
p.authorities.get(proposer_nonce % p.authority_n).unwrap()
|
p.authorities.get(proposer_nonce % p.authority_n).unwrap()
|
||||||
|
@ -1008,7 +1008,7 @@ impl MinerService for Miner {
|
|||||||
ret.map(f)
|
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 =
|
let result =
|
||||||
if let Some(b) = self.sealing_work.lock().queue.get_used_if(
|
if let Some(b) = self.sealing_work.lock().queue.get_used_if(
|
||||||
if self.options.enable_resubmission {
|
if self.options.enable_resubmission {
|
||||||
@ -1016,9 +1016,9 @@ impl MinerService for Miner {
|
|||||||
} else {
|
} else {
|
||||||
GetAction::Take
|
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, _)| {
|
b.lock().try_seal(&*self.engine, seal).or_else(|(e, _)| {
|
||||||
warn!(target: "miner", "Mined solution rejected: {}", e);
|
warn!(target: "miner", "Mined solution rejected: {}", e);
|
||||||
Err(Error::PowInvalid)
|
Err(Error::PowInvalid)
|
||||||
|
@ -50,6 +50,8 @@ pub enum ClientIoMessage {
|
|||||||
TakeSnapshot(u64),
|
TakeSnapshot(u64),
|
||||||
/// Trigger sealing update (useful for internal sealing).
|
/// Trigger sealing update (useful for internal sealing).
|
||||||
UpdateSealing,
|
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.
|
/// 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 => {
|
ClientIoMessage::UpdateSealing => {
|
||||||
trace!(target: "authorityround", "message: UpdateSealing");
|
trace!(target: "poa", "message: UpdateSealing");
|
||||||
self.client.update_sealing()
|
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
|
_ => {} // ignore other messages
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user