# KYCViewer

**Deployment Address**

Mainnet: [<mark style="color:purple;">0x33F28C3a636B38683a38987100723f2e2d3d038e</mark>](https://explorer.kinto.xyz/address/0x33F28C3a636B38683a38987100723f2e2d3d038e)

Code: [<mark style="color:purple;">KYCViewer.sol</mark>](https://github.com/KintoXYZ/kinto-core/blob/main/src/viewers/KYCViewer.sol)

***

## **Basics**

* This class provides helper methods to quickly check KYC & AML properties.
* It abstracts complexity by checking both wallet and EOA (Externally Owned Account).
* Offers various utility functions for retrieving user information and token balances.

***

### Constructor

**Constructor Parameters:**

| Parameter             | Type      | Explanation                                |
| --------------------- | --------- | ------------------------------------------ |
| `_kintoWalletFactory` | `address` | Address of the KintoWalletFactory contract |
| `_faucet`             | `address` | Address of the Faucet contract             |
| `_engenCredits`       | `address` | Address of the EngenCredits contract       |
| `_kintoAppRegistry`   | `address` | Address of the KintoAppRegistry contract   |

### Initialize

```solidity
function initialize() external initializer
```

Initializes the KYCViewer contract, setting up ownership.

***

## View Functions

```solidity
function isKYC(address _address) external view returns (bool)

function isSanctionsSafe(address _account) external view returns (bool)

function isSanctionsSafeIn(address _account, uint16 _countryId) external view returns (bool)

function isCompany(address _account) external view returns (bool)

function isIndividual(address _account) external view returns (bool)

function hasTrait(address _account, uint16 _traitId) external view returns (bool)

function hasTraits(address account, uint16[] memory _traitIds) public view returns (bool[] memory)

function getCountry(address account) external view returns (uint16)

function getWalletOwners(address _wallet) public view returns (address[] memory owners)

function getUserInfo(address _account, address payable _wallet) external view returns (IKYCViewer.UserInfo memory info)

function getDevApps(address _wallet) external view returns (IKintoAppRegistry.Metadata[] memory)

function getBalances(address[] memory tokens, address target) external view returns (uint256[] memory balances)
```

1. **isKYC**

Checks if an address or a wallet address is KYC'd (Know Your Customer).

```solidity
function isKYC(address _address) external view override returns (bool);
```

| Parameter  | Type      | Explanation           |
| ---------- | --------- | --------------------- |
| `_address` | `address` | The address to check. |

2. **isSanctionsSafe**

Checks if an account is safe from sanctions.

```solidity
function isSanctionsSafe(address _account) external view override returns (bool);
```

| Parameter  | Type      | Explanation           |
| ---------- | --------- | --------------------- |
| `_account` | `address` | The account to check. |

3. **isSanctionsSafeIn**

Checks if an account is safe from sanctions in a specific country.

```solidity
function isSanctionsSafeIn(address _account, uint16 _countryId) external view override returns (bool);
```

| Parameter    | Type      | Explanation                   |
| ------------ | --------- | ----------------------------- |
| `_account`   | `address` | The account to check.         |
| `_countryId` | `uint16`  | The country ID for the check. |

4. **isCompany**

Checks if an account is a company.

```solidity
function isCompany(address _account) external view override returns (bool);
```

| Parameter  | Type      | Explanation           |
| ---------- | --------- | --------------------- |
| `_account` | `address` | The account to check. |

5. **isIndividual**

Checks if an account is an individual.

```solidity
function isIndividual(address _account) external view override returns (bool);
```

| Parameter  | Type      | Explanation           |
| ---------- | --------- | --------------------- |
| `_account` | `address` | The account to check. |

6. **hasTrait**

Checks if an account has a specific trait.

```solidity
function hasTrait(address _account, uint16 _traitId) external view returns (bool);
```

| Parameter  | Type      | Explanation                |
| ---------- | --------- | -------------------------- |
| `_account` | `address` | The account to check.      |
| `_traitId` | `uint16`  | The trait ID to check for. |

7. **hasTraits**

Checks if an account has multiple specific traits.

```solidity
function hasTraits(address account, uint16[] memory _traitIds) public view returns (bool[] memory);
```

| Parameter   | Type       | Explanation                  |
| ----------- | ---------- | ---------------------------- |
| `account`   | `address`  | The account to check.        |
| `_traitIds` | `uint16[]` | Array of trait IDs to check. |

8. **getCountry**

Retrieves the country code associated with an account.

```solidity
function getCountry(address account) external view returns (uint16);
```

| Parameter | Type      | Explanation           |
| --------- | --------- | --------------------- |
| `account` | `address` | The account to check. |

9. **getWalletOwners**

Retrieves the owners of a wallet.

```solidity
function getWalletOwners(address _wallet) public view override returns (address[] memory owners);
```

| Parameter | Type      | Explanation         |
| --------- | --------- | ------------------- |
| `_wallet` | `address` | The wallet address. |

10. **getUserInfo**

Retrieves comprehensive information about a user.

```solidity
function getUserInfo(address _account, address payable _wallet) external view override returns (IKYCViewer.UserInfo memory info);
```

| Parameter  | Type              | Explanation                    |
| ---------- | ----------------- | ------------------------------ |
| `_account` | `address`         | The account address.           |
| `_wallet`  | `address payable` | The associated wallet address. |

11. **getDevApps**

Retrieves the apps associated with a developer wallet.

```solidity
function getDevApps(address _wallet) external view override returns (IKintoAppRegistry.Metadata[] memory);
```

| Parameter | Type      | Explanation         |
| --------- | --------- | ------------------- |
| `_wallet` | `address` | The wallet address. |

12. **getBalances**

Retrieves the token balances for a specific target address.

```solidity
function getBalances(address[] memory tokens, address target) external view returns (uint256[] memory balances);
```

| Parameter | Type        | Explanation                             |
| --------- | ----------- | --------------------------------------- |
| `tokens`  | `address[]` | Array of token addresses to query.      |
| `target`  | `address`   | The address whose balances are queried. |
