> ## Documentation Index
> Fetch the complete documentation index at: https://base-a060aa97-docs-sync-code-change-253bb15.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# IB20.TRANSFER_EXECUTOR_POLICY

> Returns the policy slot consulted against msg.sender on every transfer entrypoint in IB20.

## Signature

```solidity IB20.sol theme={null}
function TRANSFER_EXECUTOR_POLICY() external view returns (bytes32);
```

| Field               | Value                        |
| ------------------- | ---------------------------- |
| Selector            | `0x724e9c53`                 |
| Canonical signature | `TRANSFER_EXECUTOR_POLICY()` |

## Description

Policy slot consulted against `msg.sender` (the initiator) on every transfer, including when `msg.sender == from`. This applies to `transfer`, `transferFrom`, and their memo variants.

Bypassed for factory-originated calls during the creation (bootstrap) window; see `IB20Factory.createB20`.

<Warning>
  `TRANSFER_EXECUTOR_POLICY` now applies to all transfer entrypoints — including `transfer` and self-`transferFrom` where `msg.sender == from`. Previously it applied only when `msg.sender != from` on the `transferFrom` path. Tokens with a restrictive executor policy will block holder-initiated transfers unless those holders are authorized as executors.
</Warning>

## Returns

Policy scope constant.

## Access Control

Read-only view function; no access restriction.

## Policy Interaction

The executor policy is checked against `msg.sender` on every transfer path (`transfer`, `transferFrom`, `transferWithMemo`, `transferFromWithMemo`). There is no exemption when `msg.sender == from`. An unset policy slot is always-allow, so tokens that never configured this policy are unaffected.

## Example

```solidity Usage Example theme={null}
IB20(target).TRANSFER_EXECUTOR_POLICY();
```
