message: distribute rewards then slash
diff: @@ -1852,29 +1852,33 @@ where
  let base_key = Key::from(protocol_data.auction());
  - let slashed_validators = match step_request.slashed_validators() {
  - Ok(slashed_validators) => slashed_validators,
  + let reward_factors = match step_request.reward_factors() {
  + Ok(reward_factors) => reward_factors,
  Err(error) => {
  error!(
  - "failed to deserialize validator_ids for slashing: {}",
  + "failed to deserialize reward factors: {}",
  error.to_string()
  );
  return Ok(StepResult::Serialization(error));
  }
  };
  - let slash_args = {
  - let mut runtime_args = RuntimeArgs::new();
  - runtime_args
  - .insert(ARG_VALIDATOR_PUBLIC_KEYS, slashed_validators)
  - .map_err(|e| Error::Exec(e.into()))?;
  - runtime_args
  + let reward_args = {
  + let maybe_runtime_args = RuntimeArgs::try_new(|args| {
  + args.insert(ARG_REWARD_FACTORS, reward_factors)?;
  + Ok(())
  + });
  +
  + match maybe_runtime_args {
  + Ok(runtime_args) => runtime_args,
  + Err(error) => return Ok(StepResult::CLValueError(error)),
  + }
  };
  let (_, execution_result): (Option<()>, ExecutionResult) = executor.exec_system_contract(
  - DirectSystemContractCall::Slash,
  + DirectSystemContractCall::DistributeRewards,
  system_module.clone(),
  - slash_args,
  + reward_args,
  &mut named_keys,
  Default::default(),
  base_key,
  @@ -1892,36 +1896,32 @@ where
  );
  if let Some(exec_error) = execution_result.take_error() {
  - return Ok(StepResult::SlashingError(exec_error));
  + return Ok(StepResult::DistributeError(exec_error));
  }
  - let reward_factors = match step_request.reward_factors() {
  - Ok(reward_factors) => reward_factors,
  + let slashed_validators = match step_request.slashed_validators() {
  + Ok(slashed_validators) => slashed_validators,
  Err(error) => {
  error!(
  - "failed to deserialize reward factors: {}",
  + "failed to deserialize validator_ids for slashing: {}",
  error.to_string()
  );
  return Ok(StepResult::Serialization(error));
  }
  };
  - let reward_args = {
  - let maybe_runtime_args = RuntimeArgs::try_new(|args| {
  - args.insert(ARG_REWARD_FACTORS, reward_factors)?;
  - Ok(())
  - });
  -
  - match maybe_runtime_args {
  - Ok(runtime_args) => runtime_args,
  - Err(error) => return Ok(StepResult::CLValueError(error)),
  - }
  + let slash_args = {
  + let mut runtime_args = RuntimeArgs::new();
  + runtime_args
  + .insert(ARG_VALIDATOR_PUBLIC_KEYS, slashed_validators)
  + .map_err(|e| Error::Exec(e.into()))?;
  + runtime_args
  };
  let (_, execution_result): (Option<()>, ExecutionResult) = executor.exec_system_contract(
  - DirectSystemContractCall::DistributeRewards,
  + DirectSystemContractCall::Slash,
  system_module.clone(),
  - reward_args,
  + slash_args,
  &mut named_keys,
  Default::default(),
  base_key,
  @@ -1939,7 +1939,7 @@ where
  );
  if let Some(exec_error) = execution_result.take_error() {
  - return Ok(StepResult::DistributeError(exec_error));
  + return Ok(StepResult::SlashingError(exec_error));
  }
  if step_request.run_auction {
  