feat(applying): validate all inputs in UTxO set (#324)
This commit is contained in:
parent
2dca64c4c9
commit
1635f8eb95
3 changed files with 45 additions and 3 deletions
|
|
@ -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(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ pub enum MultiEraProtParams<'b> {
|
|||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum ValidationError {
|
||||
InputMissingInUTxO,
|
||||
TxInsEmpty,
|
||||
TxOutsEmpty,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue