> ## 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` 是 ArtStar 协议的独立合规和黑名单管理合约。提供 ECDSA 签名合规检查、独立黑名单存储、批量添加/移除操作以及细粒度的基于角色的访问控制等功能。

<Card title="源代码" icon="github" href="https://github.com/0xArtStar/core-contracts/blob/main/contracts/ComplianceManage.sol">
  查看 ComplianceManage.sol 源码
</Card>

<Note>
  **可升级性 (Upgradability)** 该合约使用 `UUPSUpgradeable`
  模式进行升级，并设计为在 ERC1967 代理后部署。
</Note>

## 方法 (Methods)

<AccordionGroup>
  <Accordion title="initialize()" icon="rocket">
    可升级合约的初始化函数。

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

    <ParamField path="_initialOwner" type="address" required>
      初始所有者地址
    </ParamField>
  </Accordion>

  <Accordion title="isBlacklisted()" icon="ban">
    返回某个地址是否被列入黑名单。

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

    <ParamField path="user" type="address" required>
      要查询的用户地址
    </ParamField>

    <ResponseField name="返回值" type="bool">
      如果地址在黑名单中则返回 `true`，否则返回 `false`。
    </ResponseField>
  </Accordion>

  <Accordion title="verifySignature()" icon="signature">
    验证用户签名，并在授权时消耗其 nonce。只能由已验证的代币合约调用。

    <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>
      用户地址
    </ParamField>

    <ParamField path="signature" type="bytes" required>
      签名数据
    </ParamField>

    <ParamField path="operation" type="uint8" required>
      操作类型标识
    </ParamField>

    <ParamField path="expireTime" type="uint256" required>
      签名过期时间戳
    </ParamField>

    <ResponseField name="返回值" type="bool">
      签名验证成功返回 `true`。
    </ResponseField>
  </Accordion>

  <Accordion title="setBlacklist()" icon="users">
    批量添加或移除黑名单地址。只能由授权的管理员调用。

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

    <ParamField path="users" type="address[]" required>
      用户地址数组
    </ParamField>

    <ParamField path="status" type="bool" required>
      黑名单状态（`true` 为添加，`false` 为移除）
    </ParamField>
  </Accordion>

  <Accordion title="setBlacklistSingle()" icon="user">
    添加或移除单个黑名单地址。只能由授权的管理员调用。

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

    <ParamField path="user" type="address" required>
      用户地址
    </ParamField>

    <ParamField path="status" type="bool" required>
      黑名单状态
    </ParamField>
  </Accordion>

  <Accordion title="setVerifiedToken()" icon="shield-check">
    授权或撤销代币合约调用签名验证的权限。

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

    <ParamField path="tokenAddress" type="address" required>
      代币合约地址
    </ParamField>

    <ParamField path="status" type="bool" required>
      授权状态
    </ParamField>
  </Accordion>

  <Accordion title="setSubAdmin()" icon="user-gear">
    授权或更新具有特定权限级别的子管理员钱包。

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

    <ParamField path="_wallet" type="address" required>
      子管理员钱包地址
    </ParamField>

    <ParamField path="_permissionLevel" type="uint8" required>
      权限级别
    </ParamField>
  </Accordion>

  <Accordion title="revokeSubAdmin()" icon="user-xmark">
    撤销子管理员的权限。

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

    <ParamField path="_wallet" type="address" required>
      子管理员钱包地址
    </ParamField>
  </Accordion>
</AccordionGroup>
