Permission ran out
The approval was used up or lowered. The simulated call reverts with the token's own reason.
Product · Preflight
A prompt is expensive: it costs attention, and a reverted transaction costs gas too. Mutiq runs your rules and a simulated call first, so a request that would fail stops at a readable reason.
Illustration
Execution Policy
A namespace has rules: which target, which function, how many per time window. The same rules are evaluated in the browser and, when you register an action, by the contract. An exact rule wins over a rule for the whole target, and strict mode refuses anything without an allow rule.
Illustration: how a request meets the rules
Why it matters
The approval was used up or lowered. The simulated call reverts with the token's own reason.
The contract would refuse it now, and you can see that without paying for the refusal.
The connected account lacks the role. The call runs from that address, so the answer is the true one.
A per-window count stops a loop in a script before it spends anything.
What a simulation is
eth_call runs your transaction against the chain as it is right now, from the signer's address, and nothing is sent. The real transaction runs later and can still end differently if state changes in between. Preflight reduces surprises; it does not rule them out.
Preflight toolkit
Address shapes, hex data, a selector that is really a selector, a value that makes sense.
The read really came from the chain you are about to use.
Call data sent to an address with no contract does nothing. You get told.
eth_call from the signer, with revert reasons decoded where the error is known.
eth_estimateGas, plus the fee at the current gas price.
Balance against value plus fee, before the wallet says so.
By target, by function, or both.
A fixed window with a limit, shared by what the rule covers.
Any target, gas capped at 3,000,000, no state overrides.
In your browser, with no server involved.
Enforced by the contract when an action is registered, not on your other transactions.
The relay only reads. It never forwards a signed transaction.
Click one button twice and watch one action land in the queue. Then read exactly what it holds and what it cannot.
Not a trading bot · Not a wallet · Not a chain · Your wallet signs every transaction