mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 04:01:10 +00:00
Remove pov hash comparison when waiting on a block to announce (#396)
* Remove pov hash comparison when waiting on a block to announce Internally we get notified on the channel for our candidate anyway. Besides that polkadot will compress the pov which leads to a different pov hash and thus, would lead to a failing check on the `pov_hash`. * Fix * Fix tests
This commit is contained in:
@@ -309,17 +309,15 @@ where
|
|||||||
|
|
||||||
let block_hash = b.header().hash();
|
let block_hash = b.header().hash();
|
||||||
let collation = self.build_collation(b, block_hash, validation_data.relay_parent_number)?;
|
let collation = self.build_collation(b, block_hash, validation_data.relay_parent_number)?;
|
||||||
let pov_hash = collation.proof_of_validity.hash();
|
|
||||||
|
|
||||||
let (result_sender, signed_stmt_recv) = oneshot::channel();
|
let (result_sender, signed_stmt_recv) = oneshot::channel();
|
||||||
|
|
||||||
self.wait_to_announce
|
self.wait_to_announce
|
||||||
.lock()
|
.lock()
|
||||||
.wait_to_announce(block_hash, pov_hash, signed_stmt_recv);
|
.wait_to_announce(block_hash, signed_stmt_recv);
|
||||||
|
|
||||||
tracing::info!(
|
tracing::info!(
|
||||||
target: LOG_TARGET,
|
target: LOG_TARGET,
|
||||||
pov_hash = ?pov_hash,
|
|
||||||
?block_hash,
|
?block_hash,
|
||||||
"Produced proof-of-validity candidate.",
|
"Produced proof-of-validity candidate.",
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ use sp_runtime::{
|
|||||||
use polkadot_node_primitives::{SignedFullStatement, Statement};
|
use polkadot_node_primitives::{SignedFullStatement, Statement};
|
||||||
use polkadot_parachain::primitives::HeadData;
|
use polkadot_parachain::primitives::HeadData;
|
||||||
use polkadot_primitives::v1::{
|
use polkadot_primitives::v1::{
|
||||||
Block as PBlock, CandidateReceipt, CompactStatement, Hash as PHash, Id as ParaId,
|
Block as PBlock, Hash as PHash, CandidateReceipt, CompactStatement, Id as ParaId,
|
||||||
OccupiedCoreAssumption, ParachainHost, SignedStatement, SigningContext,
|
OccupiedCoreAssumption, ParachainHost, SignedStatement, SigningContext,
|
||||||
};
|
};
|
||||||
use polkadot_service::ClientHandle;
|
use polkadot_service::ClientHandle;
|
||||||
@@ -178,10 +178,10 @@ impl BlockAnnounceData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<SignedFullStatement> for BlockAnnounceData {
|
impl TryFrom<&'_ SignedFullStatement> for BlockAnnounceData {
|
||||||
type Error = ();
|
type Error = ();
|
||||||
|
|
||||||
fn try_from(stmt: SignedFullStatement) -> Result<BlockAnnounceData, ()> {
|
fn try_from(stmt: &SignedFullStatement) -> Result<BlockAnnounceData, ()> {
|
||||||
let receipt = if let Statement::Seconded(receipt) = stmt.payload() {
|
let receipt = if let Statement::Seconded(receipt) = stmt.payload() {
|
||||||
receipt.to_plain()
|
receipt.to_plain()
|
||||||
} else {
|
} else {
|
||||||
@@ -530,7 +530,6 @@ impl<Block: BlockT> WaitToAnnounce<Block> {
|
|||||||
pub fn wait_to_announce(
|
pub fn wait_to_announce(
|
||||||
&mut self,
|
&mut self,
|
||||||
block_hash: <Block as BlockT>::Hash,
|
block_hash: <Block as BlockT>::Hash,
|
||||||
pov_hash: PHash,
|
|
||||||
signed_stmt_recv: oneshot::Receiver<SignedFullStatement>,
|
signed_stmt_recv: oneshot::Receiver<SignedFullStatement>,
|
||||||
) {
|
) {
|
||||||
let announce_block = self.announce_block.clone();
|
let announce_block = self.announce_block.clone();
|
||||||
@@ -543,8 +542,7 @@ impl<Block: BlockT> WaitToAnnounce<Block> {
|
|||||||
"waiting for announce block in a background task...",
|
"waiting for announce block in a background task...",
|
||||||
);
|
);
|
||||||
|
|
||||||
wait_to_announce::<Block>(block_hash, pov_hash, announce_block, signed_stmt_recv)
|
wait_to_announce::<Block>(block_hash, announce_block, signed_stmt_recv).await;
|
||||||
.await;
|
|
||||||
|
|
||||||
tracing::debug!(
|
tracing::debug!(
|
||||||
target: "cumulus-network",
|
target: "cumulus-network",
|
||||||
@@ -558,7 +556,6 @@ impl<Block: BlockT> WaitToAnnounce<Block> {
|
|||||||
|
|
||||||
async fn wait_to_announce<Block: BlockT>(
|
async fn wait_to_announce<Block: BlockT>(
|
||||||
block_hash: <Block as BlockT>::Hash,
|
block_hash: <Block as BlockT>::Hash,
|
||||||
pov_hash: PHash,
|
|
||||||
announce_block: Arc<dyn Fn(Block::Hash, Option<Vec<u8>>) + Send + Sync>,
|
announce_block: Arc<dyn Fn(Block::Hash, Option<Vec<u8>>) + Send + Sync>,
|
||||||
signed_stmt_recv: oneshot::Receiver<SignedFullStatement>,
|
signed_stmt_recv: oneshot::Receiver<SignedFullStatement>,
|
||||||
) {
|
) {
|
||||||
@@ -567,7 +564,6 @@ async fn wait_to_announce<Block: BlockT>(
|
|||||||
Err(_) => {
|
Err(_) => {
|
||||||
tracing::debug!(
|
tracing::debug!(
|
||||||
target: "cumulus-network",
|
target: "cumulus-network",
|
||||||
pov_hash = ?pov_hash,
|
|
||||||
block = ?block_hash,
|
block = ?block_hash,
|
||||||
"Wait to announce stopped, because sender was dropped.",
|
"Wait to announce stopped, because sender was dropped.",
|
||||||
);
|
);
|
||||||
@@ -575,18 +571,14 @@ async fn wait_to_announce<Block: BlockT>(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match statement.payload() {
|
if let Ok(data) = BlockAnnounceData::try_from(&statement) {
|
||||||
Statement::Seconded(c) if &c.descriptor.pov_hash == &pov_hash => {
|
announce_block(block_hash, Some(data.encode()));
|
||||||
if let Ok(data) = BlockAnnounceData::try_from(statement) {
|
} else {
|
||||||
announce_block(block_hash, Some(data.encode()));
|
tracing::debug!(
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => tracing::debug!(
|
|
||||||
target: "cumulus-network",
|
target: "cumulus-network",
|
||||||
statement = ?statement,
|
statement = ?statement,
|
||||||
block = ?block_hash,
|
block = ?block_hash,
|
||||||
expected_pov_hash = ?pov_hash,
|
|
||||||
"Received invalid statement while waiting to announce block.",
|
"Received invalid statement while waiting to announce block.",
|
||||||
),
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ fn check_signer_is_legit_validator() {
|
|||||||
let (mut validator, api) = make_validator_and_api();
|
let (mut validator, api) = make_validator_and_api();
|
||||||
|
|
||||||
let (signed_statement, header) = block_on(make_gossip_message_and_header_using_genesis(api, 1));
|
let (signed_statement, header) = block_on(make_gossip_message_and_header_using_genesis(api, 1));
|
||||||
let data = BlockAnnounceData::try_from(signed_statement)
|
let data = BlockAnnounceData::try_from(&signed_statement)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.encode();
|
.encode();
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ fn check_statement_is_correctly_signed() {
|
|||||||
|
|
||||||
let (signed_statement, header) = block_on(make_gossip_message_and_header_using_genesis(api, 0));
|
let (signed_statement, header) = block_on(make_gossip_message_and_header_using_genesis(api, 0));
|
||||||
|
|
||||||
let mut data = BlockAnnounceData::try_from(signed_statement)
|
let mut data = BlockAnnounceData::try_from(&signed_statement)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.encode();
|
.encode();
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ fn check_header_match_candidate_receipt_header() {
|
|||||||
|
|
||||||
let (signed_statement, mut header) =
|
let (signed_statement, mut header) =
|
||||||
block_on(make_gossip_message_and_header_using_genesis(api, 0));
|
block_on(make_gossip_message_and_header_using_genesis(api, 0));
|
||||||
let data = BlockAnnounceData::try_from(signed_statement)
|
let data = BlockAnnounceData::try_from(&signed_statement)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.encode();
|
.encode();
|
||||||
header.number = 300;
|
header.number = 300;
|
||||||
@@ -323,7 +323,7 @@ fn relay_parent_not_imported_when_block_announce_is_processed() {
|
|||||||
|
|
||||||
let (signed_statement, header) = make_gossip_message_and_header(api, block.hash(), 0).await;
|
let (signed_statement, header) = make_gossip_message_and_header(api, block.hash(), 0).await;
|
||||||
|
|
||||||
let data = BlockAnnounceData::try_from(signed_statement)
|
let data = BlockAnnounceData::try_from(&signed_statement)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.encode();
|
.encode();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user