# Retrieve Calls

This page demonstrates how the NFTDelegation.com smart contract can be integrated to make external calls.

Steps:

1. Import Interfaces within your smart contract

```
import "./INFTDelegationRead.sol";
```

2. Declare the Read Interface variable as below:

```
INFTDelegationRead public dmcRead;
```

3. Modify your constructor as below. When deploying the smart contract input the NFTDelegation smart contract address 0x2202CB9c00487e7e8EF21e6d8E914B32e709f43d within your constructor.

```
constructor(address _NFTdelegationManagementContract) {
    dmcRead = INFTDelegationRead(_NFTdelegationManagementContract);
}
```

4. Add function calls

The retrieveDelegators() function returns an array of Delegators for the function caller address (msg.sender) based on 'Any Collection' and 'All Use Cases'.&#x20;

{% code overflow="wrap" %}

```
function retrieveDelegators() public view returns(address[] memory) {
    return dmcRead.retrieveDelegators(msg.sender, 0x8888888888888888888888888888888888888888, 1);
}
```

{% endcode %}

The checkMintingStatus(\_vault) function checks the minting eligibility status for the function caller (msg.sender) by providing a Delegator's address as an input. This function is based on 'Any Collection' and 'Minting Use Case #2' and returns a bool status (true/false).&#x20;

{% code overflow="wrap" %}

```
function checkMintingStatus(address _vault) public view returns(bool) {
    return dmcRead.retrieveGlobalStatusOfDelegation(_vault, 0x8888888888888888888888888888888888888888, msg.sender, 2);
}
```

{% endcode %}

The retrieveTokenStatus(\_vault, \_tokenid) function checks if a delegation was registered from the a Delegator to the function caller (msg.sender) for an individual token id on a specific usecase on a specific collection and returns a bool status (true/false).&#x20;

{% code overflow="wrap" %}

```
function retrieveTokenStatus(address _vault, uint256 _tokenid) public view returns(bool) {
    return dmcRead.retrieveTokenStatus(_vault,         0x33fd426905f149f8376e227d0c9d3340aad17af1, msg.sender, 1, _tokenid);
}
```

{% endcode %}

Please note that you can customize the demo functions for the collection or usecase that you are interested in.

**Full Source Code**

{% tabs %}
{% tab title="Code" %}
{% code overflow="wrap" %}

```
// SPDX-License-Identifier: MIT

import "./INFTDelegationRead.sol";

pragma solidity ^0.8.18;

contract NFTDelegationDEMO {
    
    INFTDelegationRead public dmcRead;

    constructor(address _NFTdelegationManagementContract) {
        dmcRead = INFTDelegationRead(_NFTdelegationManagementContract);
    }

    // Sample function for retrieving the delegators of msg.sender on Any collection for Any Use case

    function retrieveDelegators() public view returns(address[] memory) {
        return dmcRead.retrieveDelegators(msg.sender, 0x8888888888888888888888888888888888888888, 1);
    }

    // Sample function for retrieving the delegation status of msg.sender given a Delegator address

    function checkMintingStatus(address _vault) public view returns(bool) {
        return dmcRead.retrieveGlobalStatusOfDelegation(_vault, 0x8888888888888888888888888888888888888888, msg.sender, 2);
    }
    
    // Sample function for retrieving the token status given a delegator address

    function retrieveTokenStatus(address _vault, uint256 _tokenid) public view returns(bool) {
        return dmcRead.retrieveTokenStatus(_vault, 0x8888888888888888888888888888888888888888, msg.sender, 1, _tokenid);
    }

}
```

{% endcode %}
{% endtab %}
{% endtabs %}
