@pytest.mark.ported_from(
[
f"{LEGACY_TX_TESTS}/ttWrongRLP/RLPAddressWrongSizeCopier.json",
f"{LEGACY_TX_TESTS}/ttAddress/AddressLessThan20Filler.json",
f"{LEGACY_TX_TESTS}/ttAddress/AddressMoreThan20PrefixedBy0Filler.json",
f"{LEGACY_TX_TESTS}/ttWrongRLP/RLPAddressWithFirstZerosCopier.json",
f"{LEGACY_TX_TESTS}/ttAddress/AddressMoreThan20Filler.json",
f"{LEGACY_TX_TESTS}/ttWrongRLP/TRANSCT_to_Prefixed0000Copier.json",
f"{LEGACY_TX_TESTS}/ttWrongRLP/TRANSCT_to_TooLargeCopier.json",
f"{LEGACY_TX_TESTS}/ttWrongRLP/TRANSCT_to_TooShortCopier.json",
],
)
@pytest.mark.exception_test
@pytest.mark.parametrize(
"size, error",
[
(19, TransactionException.ADDRESS_TOO_SHORT),
(21, TransactionException.ADDRESS_TOO_LONG),
],
)
def test_to_address_size(
transaction_test: TransactionTestFiller,
pre: Alloc,
fork: Fork,
size: int,
error: TransactionException,
) -> None:
"""
Encode the to field with a truncated 19-byte address or a 21-byte
address made of a zero byte prefixing a valid address.
"""
fields = signed_tx_fields(pre, fork)
if size < 20:
fields["to"] = fields["to"][:size]
else:
fields["to"] = fields["to"].rjust(size, b"\x00")
rlp = encode_tx(fields)
transaction_test(pre=pre, tx=invalid_tx(pre, rlp, error))