{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-user-guide/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["img","admonition"]},"redocly_category":"User Guide","type":"markdown"},"seo":{"title":"Rule Validation"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"rule-validation","__idx":0},"children":["Rule Validation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fordefi checks each policy rule as you build it and flags condition combinations"," ","that can never match a transaction. Instead of discovering a misconfigured rule"," ","later, you see the problem at the moment you create or edit the rule."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/policy-rule-validation-error.f06bd49eb5e0c571e04bc23d03408875127a1b68b5a09b80bfdd3c71ce62267b.9c1bb791.png","alt":"alt","framed":false,"withLightbox":false,"width":"700","border":"1px solid lightgray"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This matters because a rule that can never match creates a false sense of"," ","security: you may believe a transaction type is protected by a rule that will,"," ","in practice, never take effect. Rule validation surfaces these issues at"," ","creation or edit time."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validation runs only while you author a rule — when you create or edit it. It"," ","never changes how existing rules are evaluated. See"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies/policy-rules-conditions-and-actions"},"children":["Rule Conditions and Actions"]}," for the"," ","full list of conditions and the table of which conditions apply to which"," ","transaction types."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-validation-works","__idx":1},"children":["How validation works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rule validation surfaces warnings inline, next to the conditions that cause"," ","them. A warning never blocks saving, and Fordefi never changes your rule for"," ","you: you acknowledge the warning and can still save the rule as it is. This lets"," ","you catch a misconfigured rule at authoring time without being forced into a"," ","change you did not intend."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"incompatible-condition-combinations","__idx":2},"children":["Incompatible condition combinations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fordefi warns when a rule combines conditions that can never match a"," ","transaction. Most stem from a condition applying only to specific transaction"," ","types or blockchain families — the same compatibility summarized in"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/user-guide/policies/policy-rules-conditions-and-actions#conditions-and-transaction-types"},"children":["Conditions and transaction types"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following are some of the most common:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"abi","__idx":3},"children":["ABI"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ABI condition applies only to EVM contract calls. It conflicts with:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Transaction type other than Contract call. Because customers use ABI"," ","conditions with the Allowance type to match ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["approve"]}," calls, that combination"," ","is allowed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-EVM vault in the Origin condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-EVM vault, contact, or DApp in the Recipient condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-EVM token in the Asset condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An EVM typed message condition in the same rule."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Cosmos message condition in the same rule."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"cosmos-message","__idx":4},"children":["Cosmos message"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Cosmos message condition applies only to Cosmos contract calls. It conflicts"," ","with:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Transaction type other than Contract call."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Recipient condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-Cosmos vault in the Origin condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-Cosmos vault, contact, or DApp in the Recipient condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-Cosmos token in the Asset condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An EVM typed message condition in the same rule."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An ABI condition in the same rule."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"evm-typed-message","__idx":5},"children":["EVM typed message"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The EVM typed message condition applies only to the EVM Typed data message"," ","transaction type. It conflicts with:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Any Transaction type other than EVM Typed data message. Because customers use"," ","this condition with the Allowance type to match permits, that combination is"," ","allowed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-EVM vault in the Origin condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-EVM vault, contact, or DApp in the Recipient condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A non-EVM token in the Asset condition."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Cosmos message condition in the same rule."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"recipient","__idx":6},"children":["Recipient"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Recipient condition conflicts with:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Transaction type of EVM Personal message, Non-EVM message, or Black-box"," ","signature."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Cosmos message condition in the same rule."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"asset","__idx":7},"children":["Asset"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Asset condition conflicts with a Transaction type of EVM Personal message,"," ","Non-EVM message, or Black-box signature."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"transaction-amount-and-periodic-amount","__idx":8},"children":["Transaction amount and Periodic amount"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Transaction amount and Periodic amount conditions conflict with a"," ","Transaction type of EVM Personal message, Non-EVM message, or Black-box"," ","signature."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"partially-applicable-conditions","__idx":9},"children":["Partially applicable conditions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A single rule can select more than one transaction type. When a condition"," ","applies to some of the selected types but not all of them, validation shows a"," ","non-blocking warning that you must acknowledge before saving. The rule still"," ","matches the applicable types; the condition simply has no effect on the others."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"editing-existing-rules","__idx":10},"children":["Editing existing rules"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rules created before rule validation are never modified by Fordefi. A rule"," ","continues to evaluate exactly as it did before validation shipped. Validation"," ","applies only when you author a rule."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you open an existing rule whose conditions form a combination that"," ","validation would flag on a new rule:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A banner appears and the affected conditions are highlighted, explaining the"," ","issue."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You can still save the rule unchanged. This lets you make an unrelated edit"," ","without being forced to re-architect the rule."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you resolve the issue during the edit, the banner and highlights clear"," ","automatically, and saving proceeds through the standard validation path."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Creating or duplicating a rule"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The same warnings appear when you create a new rule or duplicate an existing"," ","one. As everywhere, a warning never blocks saving — you acknowledge it and can"," ","save."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the policy rules list and rule detail views, rules that contain a flagged"," ","combination are marked with an inline indicator so you can find and review them"," ","proactively. No action is required from these views."]}]},"headings":[{"value":"Rule Validation","id":"rule-validation","depth":1},{"value":"How validation works","id":"how-validation-works","depth":2},{"value":"Incompatible condition combinations","id":"incompatible-condition-combinations","depth":2},{"value":"ABI","id":"abi","depth":3},{"value":"Cosmos message","id":"cosmos-message","depth":3},{"value":"EVM typed message","id":"evm-typed-message","depth":3},{"value":"Recipient","id":"recipient","depth":3},{"value":"Asset","id":"asset","depth":3},{"value":"Transaction amount and Periodic amount","id":"transaction-amount-and-periodic-amount","depth":3},{"value":"Partially applicable conditions","id":"partially-applicable-conditions","depth":2},{"value":"Editing existing rules","id":"editing-existing-rules","depth":2}],"frontmatter":{"seo":{"title":"Rule Validation"}},"lastModified":"2026-08-09T16:07:47.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/user-guide/policies/rule-validation","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}