Implement validation data refactor (#1585)

* update primitives

* correct parent_head field

* make hrmp field pub

* refactor validation data: runtime

* refactor validation data: messages

* add arguments to full_validation_data runtime API

* port runtime API

* mostly port over candidate validation

* remove some parameters from ValidationParams

* guide: update candidate validation

* update candidate outputs

* update ValidationOutputs in primitives

* port over candidate validation

* add a new test for no-transient behavior

* update util runtime API wrappers

* candidate backing

* fix missing imports

* change some fields of validation data around

* runtime API impl

* update candidate validation

* fix backing tests

* grumbles from review

* fix av-store tests

* fix some more crates

* fix provisioner tests

* fix availability distribution tests

* port collation-generation to new validation data

* fix overseer tests

* Update roadmap/implementers-guide/src/node/utility/candidate-validation.md

Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com>

Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com>
This commit is contained in:
Robert Habermeier
2020-08-18 14:41:40 +02:00
committed by GitHub
parent 3395044402
commit 262574fc49
36 changed files with 619 additions and 1153 deletions
+26 -32
View File
@@ -22,7 +22,6 @@
use sp_std::prelude::*;
use primitives::v1::{
validation_data_hash,
ValidatorId, CandidateCommitments, CandidateDescriptor, ValidatorIndex, Id as ParaId,
AvailabilityBitfield as AvailabilityBitfield, SignedAvailabilityBitfields, SigningContext,
BackedCandidate, CoreIndex, GroupIndex, CommittedCandidateReceipt,
@@ -435,9 +434,8 @@ impl<T: Trait> Module<T> {
{
// this should never fail because the para is registered
let (global_validation_data, local_validation_data) = (
<configuration::Module<T>>::global_validation_data(),
match <paras::Module<T>>::local_validation_data(para_id) {
let persisted_validation_data =
match crate::util::make_persisted_validation_data::<T>(para_id) {
Some(l) => l,
None => {
// We don't want to error out here because it will
@@ -445,16 +443,12 @@ impl<T: Trait> Module<T> {
// doing anything.
return Ok(Vec::new());
}
}
);
};
let expected = validation_data_hash(
&global_validation_data,
&local_validation_data,
);
let expected = persisted_validation_data.hash();
ensure!(
expected == candidate.descriptor().validation_data_hash,
expected == candidate.descriptor().persisted_validation_data_hash,
Error::<T>::ValidationDataHashMismatch,
);
}
@@ -722,7 +716,7 @@ mod tests {
let payload = primitives::v1::collator_signature_payload(
&candidate.descriptor.relay_parent,
&candidate.descriptor.para_id,
&candidate.descriptor.validation_data_hash,
&candidate.descriptor.persisted_validation_data_hash,
&candidate.descriptor.pov_hash,
);
@@ -851,7 +845,7 @@ mod tests {
head_data: HeadData,
pov_hash: Hash,
relay_parent: Hash,
validation_data_hash: Hash,
persisted_validation_data_hash: Hash,
new_validation_code: Option<ValidationCode>,
}
@@ -862,7 +856,7 @@ mod tests {
para_id: self.para_id,
pov_hash: self.pov_hash,
relay_parent: self.relay_parent,
validation_data_hash: self.validation_data_hash,
persisted_validation_data_hash: self.persisted_validation_data_hash,
..Default::default()
},
commitments: CandidateCommitments {
@@ -875,9 +869,9 @@ mod tests {
}
fn make_vdata_hash(para_id: ParaId) -> Option<Hash> {
let global_validation_data = Configuration::global_validation_data();
let local_validation_data = Paras::local_validation_data(para_id)?;
Some(validation_data_hash(&global_validation_data, &local_validation_data))
let persisted_validation_data
= crate::util::make_persisted_validation_data::<Test>(para_id)?;
Some(persisted_validation_data.hash())
}
#[test]
@@ -1306,7 +1300,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
collator_sign_candidate(
@@ -1338,14 +1332,14 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
let mut candidate_b = TestCandidateBuilder {
para_id: chain_b,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([2; 32]),
validation_data_hash: make_vdata_hash(chain_b).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_b).unwrap(),
..Default::default()
}.build();
@@ -1392,7 +1386,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
collator_sign_candidate(
@@ -1427,7 +1421,7 @@ mod tests {
para_id: chain_a,
relay_parent: wrong_parent_hash,
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
collator_sign_candidate(
@@ -1459,7 +1453,7 @@ mod tests {
para_id: thread_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(thread_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(thread_a).unwrap(),
..Default::default()
}.build();
@@ -1497,7 +1491,7 @@ mod tests {
para_id: thread_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(thread_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(thread_a).unwrap(),
..Default::default()
}.build();
@@ -1534,7 +1528,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
@@ -1580,7 +1574,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
@@ -1619,7 +1613,7 @@ mod tests {
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
new_validation_code: Some(vec![5, 6, 7, 8].into()),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
@@ -1660,7 +1654,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: [42u8; 32].into(),
persisted_validation_data_hash: [42u8; 32].into(),
..Default::default()
}.build();
@@ -1750,7 +1744,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
..Default::default()
}.build();
collator_sign_candidate(
@@ -1762,7 +1756,7 @@ mod tests {
para_id: chain_b,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([2; 32]),
validation_data_hash: make_vdata_hash(chain_b).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_b).unwrap(),
..Default::default()
}.build();
collator_sign_candidate(
@@ -1774,7 +1768,7 @@ mod tests {
para_id: thread_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([3; 32]),
validation_data_hash: make_vdata_hash(thread_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(thread_a).unwrap(),
..Default::default()
}.build();
collator_sign_candidate(
@@ -1906,7 +1900,7 @@ mod tests {
para_id: chain_a,
relay_parent: System::parent_hash(),
pov_hash: Hash::from([1; 32]),
validation_data_hash: make_vdata_hash(chain_a).unwrap(),
persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(),
new_validation_code: Some(vec![1, 2, 3].into()),
..Default::default()
}.build();