# Trusted Issuers Registry Interface

The Trusted Issuers Registry interface defines the set of functions and events used to manage and verify trusted claim issuers within the T-REX protocol. Below is a detailed breakdown of each function and event, explaining its purpose, source, and functionality.

**`TrustedIssuerAdded`**

**Event**

**Description**: Emitted when a trusted issuer is added to the registry.

```solidity
event TrustedIssuerAdded(IClaimIssuer indexed trustedIssuer, uint256[] claimTopics);
```

***

**`TrustedIssuerRemoved`**

**Event**

**Description**: Emitted when a trusted issuer is removed from the registry.

```solidity
event TrustedIssuerRemoved(IClaimIssuer indexed trustedIssuer);
```

***

**`ClaimTopicsUpdated`**

**Event**

**Description**: Emitted when the set of claim topics is changed for a given trusted issuer.

```solidity
event ClaimTopicsUpdated(IClaimIssuer indexed trustedIssuer, uint256[] claimTopics);
```

***

**`addTrustedIssuer`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Registers a ClaimIssuer contract as a trusted claim issuer. This function can only be called by the owner of the Trusted Issuers Registry contract and emits a `TrustedIssuerAdded` event.

```solidity
function addTrustedIssuer(IClaimIssuer _trustedIssuer, uint256[] calldata _claimTopics) external;
```

***

**`removeTrustedIssuer`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Removes the ClaimIssuer contract of a trusted claim issuer. This function can only be called by the owner of the Trusted Issuers Registry contract and emits a `TrustedIssuerRemoved` event.

```solidity
function removeTrustedIssuer(IClaimIssuer _trustedIssuer) external;
```

***

**`updateIssuerClaimTopics`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Updates the set of claim topics that a trusted issuer is allowed to emit. This function can only be called by the owner of the Trusted Issuers Registry contract and emits a `ClaimTopicsUpdated` event.

```solidity
function updateIssuerClaimTopics(IClaimIssuer _trustedIssuer, uint256[] calldata _claimTopics) external;
```

***

**`getTrustedIssuers`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Returns an array of all claim issuers registered in the Trusted Issuers Registry.

```solidity
function getTrustedIssuers() external view returns (IClaimIssuer[] memory);
```

***

**`getTrustedIssuersForClaimTopic`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Returns an array of all claim issuer addresses that are allowed to issue a given claim topic.

```solidity
function getTrustedIssuersForClaimTopic(uint256 claimTopic) external view returns (IClaimIssuer[] memory);
```

***

**`isTrustedIssuer`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Checks if a given ClaimIssuer contract is trusted.

```solidity
function isTrustedIssuer(address _issuer) external view returns (bool);
```

***

**`getTrustedIssuerClaimTopics`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Returns the set of claim topics that a given trusted issuer is allowed to emit.

```solidity
function getTrustedIssuerClaimTopics(IClaimIssuer _trustedIssuer) external view returns (uint256[] memory);
```

***

**`hasClaimTopic`**

**Source**: `ITrustedIssuersRegistry`

**Description**: Checks if a given trusted issuer is allowed to emit a certain claim topic.

```solidity
function hasClaimTopic(address _issuer, uint256 _claimTopic) external view returns (bool);
```
