> For the complete documentation index, see [llms.txt](https://docs.zoth.io/zoth/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zoth.io/zoth/zvaults/contracts-of-zvaults/zothaccesscontrol.md).

# ZothAccessControl

Central role store for the entire protocol. All other contracts call `hasRole()` against this contract. A role granted here is immediately effective in every contract without redeployment.

| Function                              | Access        | Description                                                                                    |
| ------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------- |
| `initialize()`                        | Once (deploy) | Sets up initial roles for the deployer. Must be called exactly once via the proxy initializer. |
| `grantRole(role, account)`            | Role admin    | Assign a role to an address.                                                                   |
| `revokeRole(role, account)`           | Role admin    | Remove a role from an address.                                                                 |
| `grantRoleMult(roles[], accounts[])`  | Role admin    | Bulk role assignment. Useful during deployment setup.                                          |
| `revokeRoleMult(roles[], accounts[])` | Role admin    | Bulk role removal. Used to decommission the deployer key.                                      |
| `hasRole(role, account)`              | View (public) | Returns true or false. Called by all other contracts on every guarded action.                  |
