> ## Documentation Index
> Fetch the complete documentation index at: https://base-a060aa97-roethke-b20-upgrade-pages.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# IPolicyRegistry Reference

> Generated B20 reference for IPolicyRegistry functions, events, and errors.

## Functions

| Function | Selector | Summary |
| - | - | - |
| [`createPolicy`](/specifications/b20/reference/interfaces/i-policy-registry/create-policy) | `0xca5d55f6` | Creates a new simple policy with no initial members. Permissionless. |
| [`createPolicyWithAccounts`](/specifications/b20/reference/interfaces/i-policy-registry/create-policy-with-accounts) | `0xa2d3044f` | Creates a new simple policy seeded with `accounts` as initial members. Permissionless. |
| [`createCompositePolicy`](/specifications/b20/reference/interfaces/i-policy-registry/create-composite-policy) | `0x6fdd1491` | Creates a new composite policy that combines existing simple policies under a logic |
| [`stageUpdateAdmin`](/specifications/b20/reference/interfaces/i-policy-registry/stage-update-admin) | `0x1d7ae695` | Stages a proposed new admin for `policyId`. The active admin does not change |
| [`finalizeUpdateAdmin`](/specifications/b20/reference/interfaces/i-policy-registry/finalize-update-admin) | `0x33031a9c` | Completes a two-step admin transfer. Promotes the caller to active admin and clears the pending slot. |
| [`renounceAdmin`](/specifications/b20/reference/interfaces/i-policy-registry/renounce-admin) | `0xefdb7fa3` | Permanently relinquishes administration of `policyId`. The member set is frozen |
| [`updateAllowlist`](/specifications/b20/reference/interfaces/i-policy-registry/update-allowlist) | `0x3388fb5b` | Sets `accounts` membership in an ALLOWLIST policy to `allowed` in one batch. |
| [`updateBlocklist`](/specifications/b20/reference/interfaces/i-policy-registry/update-blocklist) | `0x5c4e51b8` | Sets `accounts` membership in a BLOCKLIST policy to `blocked` in one batch. |
| [`updateComposite`](/specifications/b20/reference/interfaces/i-policy-registry/update-composite) | `0xbfe142c0` | Replaces a composite policy's child-policy set in full with `childPolicyIds`. |
| [`isAuthorized`](/specifications/b20/reference/interfaces/i-policy-registry/is-authorized) | `0x55a1179e` | Returns whether `account` is authorized under `policyId`. Never reverts; unknown |
| [`MIN_COMPOSITE_CHILD_POLICIES`](/specifications/b20/reference/interfaces/i-policy-registry/min-composite-child-policies) | `0xb3ae29f7` | Minimum number of child policies a composite must reference, inclusive. Never reverts. |
| [`MAX_COMPOSITE_CHILD_POLICIES`](/specifications/b20/reference/interfaces/i-policy-registry/max-composite-child-policies) | `0x54309870` | Maximum number of child policies a composite may reference, inclusive. Never reverts. |
| [`policyExists`](/specifications/b20/reference/interfaces/i-policy-registry/policy-exists) | `0x330f5637` | Returns whether `policyId` is a built-in sentinel or a previously-assigned custom ID. Never reverts. |
| [`policyAdmin`](/specifications/b20/reference/interfaces/i-policy-registry/policy-admin) | `0x09dd0a47` | Returns the current admin of `policyId`, or `address(0)` for built-in sentinels, |
| [`pendingPolicyAdmin`](/specifications/b20/reference/interfaces/i-policy-registry/pending-policy-admin) | `0x017548b7` | Returns the currently-staged pending admin for `policyId`, or `address(0)` when |
| [`compositePolicyChildIds`](/specifications/b20/reference/interfaces/i-policy-registry/composite-policy-child-ids) | `0x7c40df74` | Returns the child-policy set of the composite `policyId`. |

## Events

| Event | Topic0 | Summary |
| - | - | - |
| `PolicyCreated` | `0xdc870ce85be577234b8548f42b93f84bbff6d0c1f38ee725c809c49932a13885` | A new policy was created. |
| `PolicyAdminStaged` | `0xdbf3b34a4c956c56ca05cd4b8f9293a4347ad61994445a4b89817d4a19561136` | A new admin was staged. `pendingAdmin == address(0)` clears a prior nomination. |
| `PolicyAdminUpdated` | `0x98925cfb1bc09c5b43dd0dd56d3d95aa04fb3300927580cc588c3f5dd58c15e1` | The active admin changed. `newAdmin == address(0)` indicates renunciation; |
| `AllowlistUpdated` | `0x18c46532f90187ba11e436e21da087b684801d7f0787f2043f26f079c91e9ef0` | One or more accounts had their ALLOWLIST membership set to `allowed` in a single batch. |
| `BlocklistUpdated` | `0x2ff63c102b1b9fd7f5d39f83039c5d6aaf50a414a4f2def2704e41be2628f1e3` | One or more accounts had their BLOCKLIST membership set to `blocked` in a single batch. |
| `CompositePolicyUpdated` | `0x4ff6adaab31b0df87aa7b8b7320c52b8b3b5eede3bf28a6baaaa8b8b7e1d6363` | A composite policy's child set was set or replaced in full with `childPolicyIds`. Emitted |

## Errors

| Error | Selector | Summary |
| - | - | - |
| `NonPayable` | `0x6fb1b0e9` | ETH was attached to a call targeting a nonpayable policy registry selector. |
| `Unauthorized` | `0x82b42900` | Caller is not the admin required by the attempted operation. |
| `PolicyNotFound` | `0x720caa4f` | The referenced policy ID does not exist. |
| `IncompatiblePolicyType` | `0xf1011ef5` | The operation is incompatible with the policy's type. |
| `ZeroAddress` | `0xd92e233d` | A required address argument was the zero address. |
| `BatchSizeTooLarge` | `0x083e2f67` | A membership batch exceeded the registry limit. |
| `NoPendingAdmin` | `0xb4539afa` | `finalizeUpdateAdmin` was called with no pending admin staged. |
| `ChildPoliciesOutsideOfRange` | `0x697ec868` | A composite policy was created or updated with a child-policy count outside the |
| `InvalidChildPolicy` | `0x46508ef6` | Composite policies are not simple policies. Child policies must be existing |
