# Limits

## Typed Struct (EIP712)

{% code overflow="wrap" %}

```solidity
Limits(uint40 valid_from,uint40 expires_at,uint32 tx_data_limit,uint32 payable_gas_limit,uint40 max_payable_gas_price,bool purgeable,bool blockable)
```

{% endcode %}

## Params

| Name                    | Type   |
| ----------------------- | ------ |
| `valid_from`            | uint40 |
| `expires_at`            | uint40 |
| `tx_data_limit`         | uint32 |
| `payable_gas_limit`     | uint32 |
| `max_payable_gas_price` | uint40 |
| `purgeable`             | bool   |
| `blockable`             | bool   |

### valid\_from

Defines the date and time from which signed FCT can be executed on-chain.

{% hint style="info" %}
Number of seconds since January 1, 1970
{% endhint %}

### expires\_at

Defines the date and time from which signed FCT cannot be executed anymore.&#x20;

{% hint style="info" %}
Number of seconds since January 1, 1970
{% endhint %}

### tx\_data\_limit

The max tx.data length that can used for this FCT

{% hint style="info" %}
Set value to 0 to disable limit check
{% endhint %}

{% hint style="warning" %}
This value protects the user from paying high fees, by blocking the activator from pushing unused data at the end of the transaction.
{% endhint %}

### payable\_gas\_limit

Defines the maximum amount of gas the user is willing to pay for.

{% hint style="info" %}
Set value to 0 to disable limit check.
{% endhint %}

{% hint style="success" %}
It can be used together with the max\_payable\_gas\_price to give users a discount.
{% endhint %}

### max\_payable\_gas\_price

The max gas price that the use is willing to pay.

{% hint style="success" %}
The tokenomics encourage activators to decrease the gas price by as much as possible, so only in rare cases the actual gas price will reach this limit.
{% endhint %}

### purgeable

When purgeable is true, on-chain information of an expired FCT can be removed from the blockchain by the activators as part of running newer FCTs. This will clean-up the blockchain from unused stored data and will reduce the overall gas usage of the transaction.&#x20;

{% hint style="warning" %}
If the FCT is part of cross FCTs logic, "false" should be used to ensure that the data is always available on-chain.
{% endhint %}

### blockable

FCT Engine sends the FCT's message hash to the FCT\_Runner upon execution requests of calls.\
It allows the runner to block specific signed FCTs from executing on the blockchain.&#x20;

{% hint style="info" %}
The vault implements functions to block and unblock "blockable" FCTs
{% endhint %}

{% hint style="warning" %}
The FCT runner might override this functionality, e.g. implementing "blocking all FCTs" function that blocks all FCT regardless of the "blockable" field
{% endhint %}
