{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-user-guide/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","img"]},"redocly_category":"User Guide","type":"markdown"},"seo":{"title":"Understand Policy Decisions"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"understand-policy-decisions","__idx":0},"children":["Understand Policy Decisions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a transaction is blocked, requires approval, or is allowed, the outcome is"," ","decided by your ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies"},"children":["transaction policy"]},". The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy Explanation"]}," ","view shows you ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["which"]}," rule decided the outcome and ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["why"]}," — a human-readable,"," ","per-rule breakdown of how your transaction was evaluated, so you can confirm"," ","expected behavior or debug an unexpected one without contacting support."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Who can see the explanation"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Policy Explanation is available to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["admins"]},", who can view policy rules."," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Traders"]}," don't see policy rules, so they can't view the explanation directly"," ","— instead, a trader can copy a link to the explanation and share it with an"," ","admin, who can analyze it further. See"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#share-an-explanation-traders"},"children":["Share an explanation"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"whats-supported","__idx":1},"children":["What's supported"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Policy Explanation covers ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["transaction policies"]},". It is not available for"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/aml/aml-policies"},"children":["AML policies"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Explanations are available for transactions whose policy hasn't changed since"," ","evaluation."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"where-to-find-the-explanation","__idx":2},"children":["Where to find the explanation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can open Policy Explanation at two points in a transaction's lifecycle:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Before you create a transaction (prediction)."]}," When you preview a transfer,"," ","swap, or allowance revocation on the web console or the browser extension,"," ","Fordefi shows the policy decision. Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Explain this match"]}," to see which"," ","rule applied and why."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/policy-explanation-prediction.202e61e48fb45f88573641d271cfb55af6c3b946df5717814becc6371d4780b7.9c1bb791.png","alt":"alt","framed":false,"withLightbox":false,"width":"300","border":"1px solid lightgray"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["After a transaction exists."]}," Open the transaction, go to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Timeline"]}," ","tab, and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Explain this match"]}," to see which rule matched and why other"," ","rules did not."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/policy-explanation-timeline.f953a123d3ff794b1cf22c133299e1edaec388d1f3af5187eba51b96231f607f.9c1bb791.png","alt":"alt","framed":false,"withLightbox":false,"width":"300","border":"1px solid lightgray"},"children":[]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In both cases you're taken to the Policy Explanation screen, where the"," ","explanation is shown as an overlay on the familiar policy rules view."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Viewing on mobile"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Policy Explanation screen is designed for desktop. On mobile, Fordefi shows"," ","a link to the explanation instead of the full view — open it on a desktop"," ","browser to see the breakdown."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-policy-explanation-screen","__idx":3},"children":["The Policy Explanation screen"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The screen has two parts:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["The policy rules list"]}," (left): The same ordered list of rules from your"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies#policy-structure"},"children":["transaction policy"]},", with a status badge on"," ","each rule showing how it was evaluated against this transaction."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transaction Inputs"]}," (right): A fixed panel showing the exact values that"," ","were fed into the policy for this transaction (initiator, origin, recipient,"," ","amount, and so on). For each condition type, it shows the"," ","transaction's value plus any related grouping or enrichment, so you can see the"," ","transaction exactly as the policy engine saw it."]}]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/policy-explanation-screen.371e1fd87993c76dba8f6753106848f69fb8ef2947634c36e774b8fb8c3de5dc.9c1bb791.png","alt":"alt","framed":false,"withLightbox":false,"width":"700","border":"1px solid lightgray"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Because the policy is evaluated top to bottom and"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies#policy-structure"},"children":["the first matching rule wins"]},", reading the"," ","list from the top tells the whole story: the rules above the match did not"," ","apply, the matched rule set the outcome, and the rules below it were never"," ","reached."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Empty and not-applicable values"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To keep the panel readable, conditions that don't apply to the transaction are"," ","shown compactly (for example, as a dash) rather than as long \"none\" entries."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rule-evaluation-statuses","__idx":4},"children":["Rule evaluation statuses"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each rule in the list carries one of the following status badges:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Matched"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The transaction satisfied all of this rule's conditions. This is the rule that determined the outcome. Only one rule matches."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unmatched"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The transaction did not satisfy at least one condition, so the rule was skipped and evaluation continued to the next rule."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Skipped"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The rule was never evaluated because an earlier rule already matched. Rules below the matched rule are always skipped."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Indeterminate"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A condition could not be evaluated for a temporary, system-level reason (not a policy mismatch) — for example, a failed simulation, an unavailable asset price, or an RPC outage. Fordefi could not confirm whether the rule matched."]}]}]}]}]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/policy-explanation-statuses.41a4012d9edbc0376ce6c0db11ea5a5fd991251aead2e45b6960dc4b3b96cb8c.9c1bb791.png","alt":"alt","framed":false,"withLightbox":false,"width":"700","border":"1px solid lightgray"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Default policy rule"]}," at the bottom of the list matches any transaction,"," ","so it applies whenever no rule above it matched. See"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies#policy-structure"},"children":["the default rule"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"the-matched-rules-condition-breakdown","__idx":5},"children":["The matched rule's condition breakdown"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Expand the matched rule to see how each of its conditions (matchers) was"," ","evaluated — Initiator, Origin, Transaction type, Recipient, Asset, Amount, ABI,"," ","EVM Typed Message, Cosmos Message, and so on. Each condition shows its own"," ","status so you can see exactly why the rule matched."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A rule's overall status is composed from its conditions:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Matched"]},": Every ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["required"]}," condition matched."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unmatched"]},": At least one condition definitively did not match. (This is"," ","enough to fail the rule, even if other conditions were Indeterminate.)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Indeterminate"]},": No condition definitively failed, but at least one required"," ","condition could not be evaluated, so the match can't be confirmed or ruled"," ","out."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Indeterminate conditions on a decided rule"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A rule can still resolve to Matched or Unmatched while one of its conditions is"," ","Indeterminate. When that happens, the Indeterminate condition is still surfaced"," ","with its reason, so you understand exactly what could and couldn't be evaluated."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"unmatchable-values","__idx":6},"children":["Unmatchable values"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Some transactions can't produce a value for a given condition. When that"," ","happens, the input is marked ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unmatchable"]}," with an explanation, so you"," ","understand why the transaction can only match rules where that condition is set"," ","to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Any"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The most common case is the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["recipient"]},". A recipient is unmatchable for"," ","transaction types that don't specify a recipient in a standard way:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Transaction type"},"children":["Transaction type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Why the recipient is unmatchable"},"children":["Why the recipient is unmatchable"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["EVM Personal Message"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Personal messages don't specify a recipient — they aren't associated with any DApp address or counterparty."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Non-EVM message"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Non-EVM message types don't carry recipient information in a standard way."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Black-box transaction"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The payload is opaque, so no recipient can be extracted."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["transaction amount"]}," can also be unmatchable or effectively infinite:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Infinite (no price)"]},": The outgoing token has no price, so its value can't"," ","be compared against an amount condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Infinite (unlimited allowance)"]},": An unlimited allowance has no fixed amount"," ","to compare."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unmatchable (by type)"]},": The transaction type has no amount to evaluate."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In each case the input states the reason explicitly instead of showing a raw or"," ","misleading value."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"act-on-the-explanation","__idx":7},"children":["Act on the explanation"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"open-and-edit-the-policy-admins","__idx":8},"children":["Open and edit the policy (admins)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When an outcome doesn't match your intent, open the relevant rule directly from"," ","the explanation and adjust it — for example, widen an amount, add a recipient,"," ","or reset an exhausted periodic amount. See"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies/create-a-policy-rule"},"children":["Edit transaction policy"]},". Policy changes require"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/admin-quorum"},"children":["Admin Quorum"]}," approval."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"share-an-explanation-traders","__idx":9},"children":["Share an explanation (traders)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A trader who is blocked by policy can copy the explanation's link and send it to"," ","an admin. The admin opens the link on desktop to view the full breakdown and, if"," ","needed, adjust the policy."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Explanations reflect the policy at evaluation time"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An explanation is only shown while the transaction policy hasn't changed since"," ","the transaction was evaluated. If the policy was edited in the meantime, Fordefi"," ","shows a snapshot disclaimer, because the current rules may no longer reflect how"," ","this transaction was decided."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Learn more:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies"},"children":["Set policies"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies/policy-rules-conditions-and-actions"},"children":["Rule conditions and actions"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies/create-a-policy-rule"},"children":["Edit transaction policy"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies/best-practices"},"children":["Best practices for policies"]}]}]}]},"headings":[{"value":"Understand Policy Decisions","id":"understand-policy-decisions","depth":1},{"value":"What's supported","id":"whats-supported","depth":2},{"value":"Where to find the explanation","id":"where-to-find-the-explanation","depth":2},{"value":"The Policy Explanation screen","id":"the-policy-explanation-screen","depth":2},{"value":"Rule evaluation statuses","id":"rule-evaluation-statuses","depth":3},{"value":"The matched rule's condition breakdown","id":"the-matched-rules-condition-breakdown","depth":3},{"value":"Unmatchable values","id":"unmatchable-values","depth":3},{"value":"Act on the explanation","id":"act-on-the-explanation","depth":2},{"value":"Open and edit the policy (admins)","id":"open-and-edit-the-policy-admins","depth":3},{"value":"Share an explanation (traders)","id":"share-an-explanation-traders","depth":3}],"frontmatter":{"seo":{"title":"Understand Policy Decisions"}},"lastModified":"2026-07-27T07:44:54.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/user-guide/policies/policy-explanation","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}