Skip to main content
Predicates are inclusion conditions. They do not guarantee inclusion or successful execution.

Predicate Types

The supported operators are <, <=, =, !=, >, and >=. Predicate values use 0x-prefixed hexadecimal strings.

Evaluation

Base checks a transaction before inclusion. If a predicate is false, the transaction remains pending. An earlier transaction can change the balance or storage value that a pending transaction watches. The pending transaction can then become eligible in the same Flashblock.

Balance Example

Balance predicate

Storage Example

Storage predicate
Base compares (storage[address][slot] & mask) with value. Omit mask to compare the full storage word.

Block and Flashblock Position

Use block_number to target a block and flashblock_index to target a position within that Flashblock. Add separate predicates when both conditions must match.

Safety

A predicate does not simulate a transaction. Keep critical checks in the application call. Predicates read raw storage. They cannot call view functions or evaluate computed values. Verify the target contract’s storage layout before using a storage predicate. State can change during block building. A condition can become true or false before inclusion. Do not use transaction placement as a source of randomness. Do not assume a zero-valued slot makes a CREATE2 address, proxy, or uninitialized contract safe to call. Validity criteria are not recorded onchain. Do not include secrets in calldata or predicate values.