feat(applying): validate all inputs in UTxO set (#324)

This commit is contained in:
Maico Leberle 2023-11-07 18:29:23 -03:00 committed by GitHub
parent 2dca64c4c9
commit 1635f8eb95
3 changed files with 45 additions and 3 deletions

View file

@ -1,18 +1,19 @@
//! Utilities required for Byron-era transaction validation.
use crate::types::{ByronProtParams, UTxOs, ValidationError, ValidationResult};
use crate::types::{ByronProtParams, MultiEraInput, UTxOs, ValidationError, ValidationResult};
use pallas_primitives::byron::{MintedTxPayload, Tx};
// TODO: implement missing validation rules.
pub fn validate_byron_tx(
mtxp: &MintedTxPayload,
_utxos: &UTxOs,
utxos: &UTxOs,
_prot_pps: &ByronProtParams,
) -> ValidationResult {
let tx: &Tx = &mtxp.transaction;
check_ins_not_empty(tx)?;
check_outs_not_empty(tx)
check_outs_not_empty(tx)?;
check_ins_in_utxos(tx, utxos)
}
fn check_ins_not_empty(tx: &Tx) -> ValidationResult {
@ -28,3 +29,12 @@ fn check_outs_not_empty(tx: &Tx) -> ValidationResult {
}
Ok(())
}
fn check_ins_in_utxos(tx: &Tx, utxos: &UTxOs) -> ValidationResult {
for input in tx.inputs.iter() {
if !(utxos.contains_key(&MultiEraInput::from_byron(input))) {
return Err(ValidationError::InputMissingInUTxO);
}
}
Ok(())
}

View file

@ -21,6 +21,7 @@ pub enum MultiEraProtParams<'b> {
#[derive(Debug)]
#[non_exhaustive]
pub enum ValidationError {
InputMissingInUTxO,
TxInsEmpty,
TxOutsEmpty,
}