# 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. |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.kinto.xyz/kinto-the-modular-exchange/building-on-kinto/smart-contract-reference/kycviewer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
