add max_pov_size to runtime config and PersistedValidationData (#1984)

* add max_pov_size to runtime config and PersistedValidationData

Closes #1572.

* set default genesis max_pov_size

* apply suggestions from code review

* add default max_pov_size to polkadot_testnet_genesis
This commit is contained in:
Peter Goodspeed-Niklaus
2020-11-19 17:52:21 +01:00
committed by GitHub
parent 5ac497d431
commit d13a335df6
9 changed files with 36 additions and 12 deletions
@@ -347,16 +347,14 @@ async fn spawn_validate_exhaustive(
/// are passed, `Err` otherwise.
fn perform_basic_checks(
candidate: &CandidateDescriptor,
max_block_data_size: Option<u64>,
max_pov_size: u32,
pov: &PoV,
) -> Result<(), InvalidCandidate> {
let encoded_pov = pov.encode();
let hash = pov.hash();
if let Some(max_size) = max_block_data_size {
if encoded_pov.len() as u64 > max_size {
return Err(InvalidCandidate::ParamsTooLarge(encoded_pov.len() as u64));
}
if encoded_pov.len() > max_pov_size as usize {
return Err(InvalidCandidate::ParamsTooLarge(encoded_pov.len() as u64));
}
if hash != candidate.pov_hash {
@@ -412,7 +410,7 @@ fn validate_candidate_exhaustive<B: ValidationBackend, S: SpawnNamed + 'static>(
pov: Arc<PoV>,
spawn: S,
) -> Result<ValidationResult, ValidationFailed> {
if let Err(e) = perform_basic_checks(&descriptor, None, &*pov) {
if let Err(e) = perform_basic_checks(&descriptor, persisted_validation_data.max_pov_size, &*pov) {
return Ok(ValidationResult::Invalid(e))
}
@@ -819,7 +817,7 @@ mod tests {
#[test]
fn candidate_validation_ok_is_ok() {
let validation_data: PersistedValidationData = Default::default();
let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() };
let pov = PoV { block_data: BlockData(vec![1; 32]) };
@@ -827,7 +825,7 @@ mod tests {
descriptor.pov_hash = pov.hash();
collator_sign(&mut descriptor, Sr25519Keyring::Alice);
assert!(perform_basic_checks(&descriptor, Some(1024), &pov).is_ok());
assert!(perform_basic_checks(&descriptor, validation_data.max_pov_size, &pov).is_ok());
let validation_result = WasmValidationResult {
head_data: HeadData(vec![1, 1, 1]),
@@ -859,7 +857,7 @@ mod tests {
#[test]
fn candidate_validation_bad_return_is_invalid() {
let validation_data: PersistedValidationData = Default::default();
let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() };
let pov = PoV { block_data: BlockData(vec![1; 32]) };
@@ -867,7 +865,7 @@ mod tests {
descriptor.pov_hash = pov.hash();
collator_sign(&mut descriptor, Sr25519Keyring::Alice);
assert!(perform_basic_checks(&descriptor, Some(1024), &pov).is_ok());
assert!(perform_basic_checks(&descriptor, validation_data.max_pov_size, &pov).is_ok());
let v = validate_candidate_exhaustive::<MockValidationBackend, _>(
MockValidationArg {
@@ -887,7 +885,7 @@ mod tests {
#[test]
fn candidate_validation_timeout_is_internal_error() {
let validation_data: PersistedValidationData = Default::default();
let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() };
let pov = PoV { block_data: BlockData(vec![1; 32]) };
@@ -895,7 +893,7 @@ mod tests {
descriptor.pov_hash = pov.hash();
collator_sign(&mut descriptor, Sr25519Keyring::Alice);
assert!(perform_basic_checks(&descriptor, Some(1024), &pov).is_ok());
assert!(perform_basic_checks(&descriptor, validation_data.max_pov_size, &pov).is_ok());
let v = validate_candidate_exhaustive::<MockValidationBackend, _>(
MockValidationArg {