# Verify User Assets

{% hint style="info" %}
Before reading below, make sure you have invited the Emerald bot to your Discord server using [this link](https://discord.com/oauth2/authorize?client_id=907407354427998279\&permissions=294473821264\&scope=bot%20applications.commands).
{% endhint %}

## Summary

This page will show you how to set up a verifier that will, when a user clicks it, automatically scan their wallets and give them certain roles for passing certain verifications that you want to configure.

This will work with NFTs, tokens, or any type of on-chain asset.

{% hint style="info" %}
**Multi Wallet Check**: Let's say one requirement is to hold 3 Doodles. If a user owns 1 Doodle in their Dapper Wallet, and 2 in their Blocto wallet, **they will still pass**. Yeah, I know, we're cool like that.
{% endhint %}

There are 3 different ways to get a verification set up depending on what you need:

1. **Custom Verifier** (*requires help*) - Have the Emerald City team set up a custom verification for you that can distribute multiple Discord roles depending on any combination of assets/requirements.
2. **NFT Verifier** (*can set up on your own*) - Set up a quick verifier that checks if the user owns a certain NFT (ex. TopShot Moments).
3. **Token Verifier** (*can set up on your own*) - Set up a quick verifier that checks if the user owns a certain amount of a fungible token (ex. $FLOW).

### 1. Custom Verifier

This option allows you to create 1 verifier in Discord that can distribute multiple Discord roles depending on any type of requirement.

For example, the Flunks team had us set up a verifier that gives out many different Discord roles, each with their own requirement:

* 1 or more Flunks -> <mark style="color:blue;">Flunks Holder</mark>
* 12 or more Flunks -> <mark style="color:purple;">Flunk Whale</mark>
* 1 or more Backpack NFTs -> <mark style="color:red;">Backpack Holder</mark>

<figure><img src="/files/N7ZO4aRbwNW1xfbUAc5c" alt=""><figcaption></figcaption></figure>

With a custom verifier, we can also personalize how it is displayed:

* The title (ex. *"Verify your Flunks assets"*)
* The description (ex. *"Click the Verify button below to verify your assets with your EmeraldID."*)
* Fields (ex. *1 or more Flunks, etc*)

#### Set Up

To set it up, [reach out to us in Discord](https://discord.gg/emeraldcity) with any custom setup you'd like, as well as the requirements for each role and the associated "Role ID".&#x20;

Here is an example:

{% hint style="info" %}
To get the "Role ID" for a role, go to your Discord server and click on "Server Settings" > "Roles" > the three dots next to a role > "Copy Role ID"
{% endhint %}

| Role ID             | Requirement                                                 |
| ------------------- | ----------------------------------------------------------- |
| 1003849437103272018 | User owns NBA TopShot Set "Cool Cats" **AND** 2 Flunks NFTs |
| 923493249235235235  | User owns 1 Flunk NFT **OR** 1 Doodle NFT                   |
| 2346574545634234233 | User owns 1 FLOAT NFT                                       |

### 2. NFT Verifier

This option allows you to set up a simple verifier that checks if a user owns a certain NFT and gives them a role if so.

For example, check if a user owns a Doodle NFT and give them the "<mark style="color:green;">Emerald ID</mark>" role:

<figure><img src="/files/B6RSsMEtu0R1L7GQYxrO" alt=""><figcaption></figcaption></figure>

#### Set Up

In your Discord server, go to a channel you'd like users to go to in order to verify their assets. Then, type `/verify nft` into the channel and you should see a command appear, like this:

<figure><img src="/files/5erm4sjdtyIraNedLIGE" alt=""><figcaption></figcaption></figure>

Options:

* contractname - The name of the contract
* contractaddress - The address of the contract. If you have trouble finding it, head to the [Contract Browser](https://contractbrowser.com/).
* publicpath - The public path for which the assets lie (ex. if the whole path is `/public/doodles`, just type `doodles`). If you need help finding this, just ask us in Discord.
* role - the role users should earn if they have the NFT

### 3. Token Verifier

This option allows you to set up a simple verifier that checks if a user owns a certain amount of a fungible token and gives them a role if so.

For example, check if a user owns 40 $FLOW and give them the "<mark style="color:green;">Emerald ID</mark>" role:

<figure><img src="/files/aWJQD3R1NeyIYy0ZbnIW" alt=""><figcaption></figcaption></figure>

#### Set Up

In your Discord server, go to a channel you'd like users to go to in order to verify their assets. Then, type `/verify token` into the channel and you should see a command appear, like this:

<figure><img src="/files/6u2xZJnylZlqgjq7StGW" alt=""><figcaption></figcaption></figure>

Options:

* contractname - The name of the contract
* contractaddress - The address of the contract. If you have trouble finding it, head to the [Contract Browser](https://contractbrowser.com/).
* publicpath - The public path for which the assets lie (ex. if the whole path is `/public/flowTokenBalance`, just type `flowTokenBalance`). If you need help finding this, just ask us in Discord.
* role - the role users should earn if they have the amount of tokens


---

# 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.ecdao.org/products/emerald-bot/verification/verify-user-assets.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.
