# GatePolicyWhitelist

* **Purpose:** Permit only whitelisted actors to interact with a node across deposit/redemption and ERC20 transfer flows.
* **Guarded selectors:** `deposit`, `mint`, `requestRedeem`, `redeem`, `withdraw`, `setOperator`, `transfer`, `approve`, `transferFrom`.
* **Who is checked:**
  * `deposit`/`mint`: caller and receiver.
  * `requestRedeem`: caller, controller, owner.
  * `setOperator`: caller, operator.
  * `redeem`/`withdraw`: caller, receiver, controller.
  * `transfer`: caller, to.
  * `approve`: caller, spender.
  * `transferFrom`: caller, from, to.
* **Config:** Node owner seeds a Merkle root with `setRoot(node, root)` and/or directly lists addresses with `add(node, actors)` / `remove(node, actors)`.
* **User data:** Actors not directly listed must pre-submit a Merkle proof via `Node.submitPolicyData(<any selector guarded by this policy>, policyAddr, abi.encode(bytes32[] proof))`. The proof is cached per `(node, actor)` and reused across selectors.
* **Behavior:** Reverts with `NotWhitelisted` if any checked participant is missing from the allowlist.
