> ## Documentation Index
> Fetch the complete documentation index at: https://docs.artstarex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ComplianceManage

> `ComplianceManage` is the standalone compliance and blacklist management contract in the ArtStar protocol. It provides ECDSA signature-based compliance checks, dedicated blacklist storage, batch add/remove operations, and fine-grained role-based access control.

<Card title="Source Code" icon="github" href="https://github.com/0xArtStar/core-contracts/blob/main/contracts/ComplianceManage.sol">
  View the ComplianceManage.sol source code
</Card>

<Note>
  **Upgradability** This contract uses the `UUPSUpgradeable` pattern and is
  designed to be deployed behind an ERC1967 proxy.
</Note>

## Methods

<AccordionGroup>
  <Accordion title="initialize()" icon="rocket">
    Initialization function for the upgradeable contract.

    <CodeGroup>
      ```solidity initialize theme={null}
      function initialize(address _initialOwner) public;
      ```
    </CodeGroup>

    <ParamField path="_initialOwner" type="address" required>
      Initial owner address
    </ParamField>
  </Accordion>

  <Accordion title="isBlacklisted()" icon="ban">
    Returns whether a given address is blacklisted.

    <CodeGroup>
      ```solidity isBlacklisted theme={null}
      function isBlacklisted(address user) external view returns (bool);
      ```
    </CodeGroup>

    <ParamField path="user" type="address" required>
      User address to query
    </ParamField>

    <ResponseField name="Returns" type="bool">
      Returns `true` if the address is blacklisted; otherwise returns `false`.
    </ResponseField>
  </Accordion>

  <Accordion title="verifySignature()" icon="signature">
    Verifies a user signature and consumes its nonce when authorization succeeds. This function can only be called by verified token contracts.

    <CodeGroup>
      ```solidity verifySignature theme={null}
      function verifySignature(
          address user,
          bytes memory signature,
          uint8 operation,
          uint256 expireTime
      ) external returns (bool);
      ```
    </CodeGroup>

    <ParamField path="user" type="address" required>
      User address
    </ParamField>

    <ParamField path="signature" type="bytes" required>
      Signature payload
    </ParamField>

    <ParamField path="operation" type="uint8" required>
      Operation type identifier
    </ParamField>

    <ParamField path="expireTime" type="uint256" required>
      Signature expiration timestamp
    </ParamField>

    <ResponseField name="Returns" type="bool">
      Returns `true` when signature verification succeeds.
    </ResponseField>
  </Accordion>

  <Accordion title="setBlacklist()" icon="users">
    Adds or removes multiple addresses from the blacklist in a batch. This function can only be called by an authorized administrator.

    <CodeGroup>
      ```solidity setBlacklist theme={null}
      function setBlacklist(address[] calldata users, bool status) external;
      ```
    </CodeGroup>

    <ParamField path="users" type="address[]" required>
      Array of user addresses
    </ParamField>

    <ParamField path="status" type="bool" required>
      Blacklist status (`true` to add, `false` to remove)
    </ParamField>
  </Accordion>

  <Accordion title="setBlacklistSingle()" icon="user">
    Adds or removes a single address from the blacklist. This function can only be called by an authorized administrator.

    <CodeGroup>
      ```solidity setBlacklistSingle theme={null}
      function setBlacklistSingle(address user, bool status) external;
      ```
    </CodeGroup>

    <ParamField path="user" type="address" required>
      User address
    </ParamField>

    <ParamField path="status" type="bool" required>
      Blacklist status
    </ParamField>
  </Accordion>

  <Accordion title="setVerifiedToken()" icon="shield-check">
    Grants or revokes permission for a token contract to call signature verification.

    <CodeGroup>
      ```solidity setVerifiedToken theme={null}
      function setVerifiedToken(address tokenAddress, bool status) external;
      ```
    </CodeGroup>

    <ParamField path="tokenAddress" type="address" required>
      Token contract address
    </ParamField>

    <ParamField path="status" type="bool" required>
      Authorization status
    </ParamField>
  </Accordion>

  <Accordion title="setSubAdmin()" icon="user-gear">
    Grants or updates a sub-admin wallet with a specific permission level.

    <CodeGroup>
      ```solidity setSubAdmin theme={null}
      function setSubAdmin(address _wallet, uint8 _permissionLevel) external;
      ```
    </CodeGroup>

    <ParamField path="_wallet" type="address" required>
      Sub-admin wallet address
    </ParamField>

    <ParamField path="_permissionLevel" type="uint8" required>
      Permission level
    </ParamField>
  </Accordion>

  <Accordion title="revokeSubAdmin()" icon="user-xmark">
    Revokes the permissions of a sub-admin.

    <CodeGroup>
      ```solidity revokeSubAdmin theme={null}
      function revokeSubAdmin(address _wallet) external;
      ```
    </CodeGroup>

    <ParamField path="_wallet" type="address" required>
      Sub-admin wallet address
    </ParamField>
  </Accordion>
</AccordionGroup>
