diff --git a/src/ethereum/prague/transactions.py b/src/ethereum/prague/transactions.py index f10f954fab..b79b9ab572 100644 --- a/src/ethereum/prague/transactions.py +++ b/src/ethereum/prague/transactions.py @@ -344,14 +344,20 @@ def recover_sender(chain_id: U64, tx: Transaction) -> Address: signing_hash_155(tx, chain_id), ) elif isinstance(tx, AccessListTransaction): + if tx.y_parity not in (U256(0), U256(1)): + raise InvalidSignatureError("bad y_parity") public_key = secp256k1_recover( r, s, tx.y_parity, signing_hash_2930(tx) ) elif isinstance(tx, FeeMarketTransaction): + if tx.y_parity not in (U256(0), U256(1)): + raise InvalidSignatureError("bad y_parity") public_key = secp256k1_recover( r, s, tx.y_parity, signing_hash_1559(tx) ) elif isinstance(tx, BlobTransaction): + if tx.y_parity not in (U256(0), U256(1)): + raise InvalidSignatureError("bad y_parity") public_key = secp256k1_recover( r, s, tx.y_parity, signing_hash_4844(tx) )