What is a function selector?
A function selector is the first 4 bytes of an EVM transaction's calldata. It identifies which function is being called on a smart contract. For example, the ERC-20 approve(address,uint256) function has selector 0x095ea7b3. Every smart contract call on an EVM network includes this 4-byte identifier. It is deterministic — the same function signature always produces the same selector.
What is the "Function" condition on policy rules?
The Function condition lets you restrict which smart contract functions a policy rule applies to. When creating or editing an Onchain transaction rule in the Policy Engine, you can choose:
Any function — The rule applies to all contract interactions (default behavior).
Specific function selectors — The rule only applies when the transaction calls one of the listed functions.
This condition works alongside your existing conditions (Source, Destination, Initiator, Network). All conditions on a rule must match for it to apply.
Why would I use this?
Restrict DeFi contract address destinations to only approved operations (e.g., approve and withdraw only)
Enforce granular access controls, such as requiring a specific number of approvers for each smart contract function.
How do I configure it?
Go to Settings > Onchain > Policy Engine
Hit Manage on the Onchain Transactions section
Add a new Rule
Under Function, select Specific function selectors
Enter the 4-byte hex selector (e.g., 0x095ea7b3)
Add additional selectors as needed
Save the rule, review changes and submit the approval
Approve the activity based on the general consensus settings for your portfolio
A transaction matching any of the listed selectors satisfies the condition.

Note:
Specific function selectors always require at least 1 specific EVM destination address group.
For transfer, the destination is the token destination address i.e. the address the token is being sent to and for approve, the destination is the spender address
What format do selectors use?
0x-prefixed, exactly 10 characters (0x + 8 hex digits). Example: 0x095ea7b3.
Where do I find a function's selector?
4byte.directory or 4byte.sourcify.dev — public database of known selectors
Contract ABI on block explorers (e.g., Etherscan)
The contract's developer documentation
What happens if I don't set any function selectors?
The rule behaves as it always has — it applies to all contract interactions on matching addresses. Existing rules are completely unaffected.
What happens when a transaction calls a function NOT in my allowed list?
The function-restricted rule does not match. The transaction falls through to the next matching rule or your default policy outcome.
Reminder: Policy rules are always evaluated top-bottom so if your function-selector rule is lower in the policy rule list and a higher rule matches the transaction, that rule is used for policy evaluation.
Do function selectors work with raw ETH transfers?
No. Raw ETH transfers have no calldata, so there is no function selector. A function-restricted rule will not match a raw transfer. However, ERC20 token transfers will continue to match the transfer function.
Which networks are supported?
All EVM networks — Ethereum, Base, Polygon, Arbitrum, and others. Function selectors are network-agnostic; the same selector identifies the same function on any EVM chain.
Note: Function selectors are EVM-only, rules with function selectors will never be matched against Solana sources or destinations. For Solana please refer to our Program IDs functionality.