Sato Hub

Answered from live records · 2026-09-15

Why did Sato Swap refuse my trade?

Unknown refuses by default, and every refusal names its rule and the two values it compared — E1 gate refused, E3 unknown verdict, E4 reverted in simulation, E7 no simulation, plus the policy rules, as of 2026-09-15.

Every rule that can withhold a transaction, and the condition that fires it. A missing approval is not one of them: it is a precondition of the requesting wallet's own account, named in the response rather than treated as a fault in the route. A refusal is never silent and never unexplained: it carries the rule id, the limit and the observed value. A counterparty with no Passport is no record, not a refusal — require_passport is off by default, and when an operator turns it on the message says it was their rule.

RuleWhen it fires
TOK0Not a refusal — the one rule that clears a token without a live read. The chain's wrapped native asset, a recognised stablecoin or a native placeholder is matched against Sato Hub's own token table and answers go, with the date the entry was last reconciled. It records which address carries which symbol on which chain, and nothing else: it is not an audit, not an endorsement, and not a statement about the token or its issuer. Every other token goes through the Preflight token lane unchanged.
E1The gate returned no. A no is always a refusal and is not a policy setting.
E2The gate returned caution and the policy in force refuses on caution. The default policy allows caution — most of the long tail sits there.
E3The gate could not reach a verdict. Unknown refuses by default; a policy may set unknown_verdict to allow.
E4The ROUTE reverted when a node simulated it, and the decoded revert reason is returned with the refusal. A revert that is only the requesting wallet's own missing approval or balance does NOT fire this rule: it is re-run against a state where the approval exists, and reported as a precondition instead. Withholding on it would withhold every first swap from every wallet, since a wallet cannot approve a router it was never handed.
E9Not a refusal — the transaction is returned with a precondition named. The plain call reverted on the requesting wallet's allowance or balance and no state override was available to simulate past it, so the route itself was not checked. The response says which approval to grant, to which spender, for how much, and says plainly that the route was not simulated.
E7No simulation could be run and the policy requires one. The reason the simulation was absent is always given: 'we did not check' and 'we checked and it is clean' must never look the same.
G0No gate was supplied to the call, so nothing was checked. Unchecked is not the same as clear.
verdict_no / verdict_unknown / verdict_cautionA per-target verdict resolved into a refusal by the policy's own switches. The message says which switch, so an operator can see it is their rule.
policy_revoked / policy_expired / mode_not_allowedThe policy itself does not apply, or the requested mode is not among its allowed modes.
chain_not_allowed / token_not_allowedA named allowlist exists and this chain or token is not on it. An EMPTY allowlist means any, subject to the verdict — an operator who listed nothing has not thereby refused everything.
slippage_over_max / deadline_over_max / amount_not_base_unitsA bounds check. Every refusal carries the rule, the limit and the observed value.
usd_notional_over_capOnly when the requester supplied a price. Sato Swap never prices a token, and an unknown notional is resolved as unknown, never as zero.

How this was answered

decideOnGate() and decideOnSimulation() in lib/swap/execute.ts plus evaluatePolicy() and verdictRefusals() in lib/swap/policy.ts — every rule that can withhold a transaction, each carrying its rule id, limit and observed value.

Every answer on this page is produced by one named function over Sato Hub's live records on the date shown. Nothing is typed by hand, no figure is carried over from a previous day, and an answer with nothing behind it says unknown rather than zero. The Sato Score measures how open, active and verifiable a project is — it is not a safety, quality or returns grade.

Go deeper

More questions

Sources — the projects' own repositories and docs

Cite this page

Sato Hub. "Why did Sato Swap refuse my trade?." Sato Hub, updated 2026-09-15, accessed 2026-09-16. https://satohub.ai/answers/why-did-sato-swap-refuse-my-trade

Data last refreshed 2026-09-15; this page is rebuilt daily. Citations carry the date so a reader can tell which snapshot a claim came from. Catalog data is licensed CC-BY-4.0 and the machine-readable copy is linked in the page's Dataset metadata.