// Copyright (C) Parity Technologies (UK) Ltd. // This file is part of Cumulus. // Cumulus is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Cumulus is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . //! Stock, pure Aura collators. //! //! This includes the [`basic`] collator, which only builds on top of the most recently //! included parachain block, as well as the [`lookahead`] collator, which prospectively //! builds on parachain blocks which have not yet been included in the relay chain. use cumulus_relay_chain_interface::RelayChainInterface; use polkadot_primitives::{ Hash as RHash, Id as ParaId, OccupiedCoreAssumption, ValidationCodeHash, }; pub mod basic; pub mod lookahead; /// Check the `local_validation_code_hash` against the validation code hash in the relay chain /// state. /// /// If the code hashes do not match, it prints a warning. async fn check_validation_code_or_log( local_validation_code_hash: &ValidationCodeHash, para_id: ParaId, relay_client: &impl RelayChainInterface, relay_parent: RHash, ) { let state_validation_code_hash = match relay_client .validation_code_hash(relay_parent, para_id, OccupiedCoreAssumption::Included) .await { Ok(hash) => hash, Err(error) => { tracing::debug!( target: super::LOG_TARGET, %error, ?relay_parent, %para_id, "Failed to fetch validation code hash", ); return }, }; match state_validation_code_hash { Some(state) => if state != *local_validation_code_hash { tracing::warn!( target: super::LOG_TARGET, %para_id, ?relay_parent, ?local_validation_code_hash, relay_validation_code_hash = ?state, "Parachain code doesn't match validation code stored in the relay chain state", ); }, None => { tracing::warn!( target: super::LOG_TARGET, %para_id, ?relay_parent, "Could not find validation code for parachain in the relay chain state.", ); }, } }