def METHOD_NAME(fixture, fixture_transaction_class):
    TransactionClass = fixture_transaction_class
    try:
        txn = TransactionClass.decode(fixture["txbytes"])
    except (rlp.DeserializationError, rlp.exceptions.DecodingError):
        assert "hash" not in fixture, "Transaction was supposed to be valid"
    except TypeError as err:
        # Ensure we are only letting type errors pass that are caused by
        # RLP elements that are lists when they shouldn't be lists
        # (see: /TransactionTests/ttWrongRLP/RLPElementIsListWhenItShouldntBe.json)
        assert err.args == ("'bytes' object cannot be interpreted as an integer",)
        assert "hash" not in fixture, "Transaction was supposed to be valid"
    # fixture normalization changes the fixture key from rlp to rlpHex
    except KeyError:
        assert fixture["rlpHex"]
        assert "hash" not in fixture, "Transaction was supposed to be valid"
    except ValidationError as err:
        err_matchers = ("Cannot build typed transaction with", ">= 0x80")
        assert all(_ in err.args[0] for _ in err_matchers)
        assert "hash" not in fixture, "Transaction was supposed to be valid"
    except UnrecognizedTransactionType as err:
        assert err.args[1] == "Unknown transaction type"
        assert hex(err.args[0]) not in VALID_TRANSACTION_TYPES
        assert "hash" not in fixture, "Transaction was supposed to be valid"
    else:
        # check parameter correctness
        try:
            txn.validate()
        except ValidationError:
            return
    if "sender" in fixture:
        assert "hash" in fixture, "Transaction was supposed to be invalid"
        assert is_same_address(txn.sender, fixture["sender"])