def METHOD_NAME(ibc):
    """
    test transfer IBC precompile invalid packet error.
    NOTE: it is important for this error message to not change
    because it is already stored on mainnet.
    Changing this error message is a state breaking change
    """
    assert_ready(ibc)
    # IMPORTANT: THIS ERROR MSG SHOULD NEVER CHANGE OR WILL BE A STATE BREAKING CHANGE ON MAINNET
    exp_err = "constructed packet failed basic validation: packet timeout height and packet timeout timestamp cannot both be 0: invalid packet"  # noqa: E501
    w3 = ibc.evmos.w3
    dst_addr = ibc.other_chain.cosmos_cli().address("signer2")
    amt = 1000000
    cli = ibc.evmos.cosmos_cli()
    src_addr = cli.address("signer2")
    src_denom = "aevmos"
    old_src_balance = get_balance(ibc.evmos, src_addr, src_denom)
    pc = get_precompile_contract(w3, "ICS20I")
    evmos_gas_price = w3.eth.gas_price
    try:
        pc.functions.transfer(
            "transfer",
            "channel-0",
            src_denom,
            amt,
            ADDRS["signer2"],
            dst_addr,
            [0, 0],
            0,
            "",
        ).transact({"from": ADDRS["signer2"], "gasPrice": evmos_gas_price})
    except Exception as error:
        assert error.args[0]["message"] == f"rpc error: code = Unknown desc = {exp_err}"
        new_src_balance = get_balance(ibc.evmos, src_addr, src_denom)
        assert old_src_balance == new_src_balance