---
title: "Essential Smart Contract Addresses for Token Owners and Agents"
url: "https://d9awyx7m9zmryg2.productfruits.help/en/article/essential-smart-contract-addresses-for-token-owners-and-agents"
language: "en"
last_updated: "2026-04-13T14:53:29.078Z"
---

# Essential Smart Contract Addresses for Token Owners and Agents

Deploying an **ERC3643 Token** involves the deployment of multiple smart contracts.  
Configuring the **compliance modules** requires linking the token to these contracts.

The goal of this guide is to help you identify and locate all the relevant smart contract and module addresses associated with your token.

* * *

**Main ERC3643 Contracts**

### **An ERC3643 token consists of the following core contracts:**

-   **Token smart contract**
-   **Compliance contract**
-   **Compliance modules (array)**
-   **Identity Registry**
-   **Identity Registry Storage**
-   **Trusted Issuer Registry**
-   **Claim Topics Registry**

* * *

### **1\. Getting the Token Smart Contract Address**

In the Servicing section of the Dashboard, you can find your Token Smart Contract Address.  
Refer to the screenshot below for guidance.

### ![](https://cdn-assets.productfruits.com/4f25028d-2973-41c0-b984-e92a2b96a005)

### **Note: In this example, the token is deployed on Base Sepolia.**

* * *

### **2\. Using a Blockchain Explorer**

For this example, we’ll use BaseScan (a Base blockchain explorer).

1.  Open your token contract on **BaseScan**.
2.  Access the **Contract** tab.
3.  Perform a **Proxy contract verification** (if not done already)
4.  1.  In the contract tab, select the Is this a Proxy? option![](https://cdn-assets.productfruits.com/f98d8942-5d5b-4861-a5c5-95b865ffb5bb)
    2.  Once there click on **Verify**![](https://cdn-assets.productfruits.com/b3f0d562-0a43-4c98-97a0-bd1f68ae20f4)
    3.  And **Save** the changes![](https://cdn-assets.productfruits.com/eec2e7b8-aa18-44e4-a51b-b4463ae18694)
5.  Click **“Read as Proxy”.**  
    ![](https://cdn-assets.productfruits.com/3fbb2ef2-b4e9-4efa-a62c-44192445db8c)

* * *

### **3\. Getting the Compliance Contract Address**

-   **Under “Read as Proxy”, call the compliance method.**
-   **This will return the Compliance Contract Address.**  
    ![](https://cdn-assets.productfruits.com/3a8a1163-34d8-4b1f-a1ff-b66081634faa)

### **Next:**

1.  Open the **Compliance** contract.
2.  Go to the **Contract** tab.
3.  Click “**Read as Proxy**”.
4.  Call the getModules method — this returns an **array of compliance modules** linked to your token.  
    ![](https://cdn-assets.productfruits.com/27354f68-77e9-4a30-8347-8deef127233e)

* * *

### **4\. Compliance Modules**

Compliance modules are smart contracts deployed on the blockchain.  
They can be added or linked to your Compliance contract to extend functionality.

Below is the list of available modules and their addresses:

| **Module** | **Proxy Name** | **Version** | **Proxy Address** | **Implementation Address** |
| --- | --- | --- | --- | --- |
| **MaxBalanceModule.sol** | **Max\_Balance\_Module\_Proxy** | **v4.1.3** | **0x888490c9f4a5c1990f4cf9d0d6bf50fcaf69ed1c** | **0x2FE09BFF27B033d61aae6B8d1f57df78b34BdEc4** |
| **SupplyLimitModule.sol** | **Supply\_Limit\_Module\_Proxy** | **v4.1.3** | **0x1f2c9bf5c7ca4b2b5f84fc2da8bffe8f7bb8c699** | **0x0d40363a2e81d8156b2a79a4a18e279bFf6F511C** |
| **TimeTransfersLimitsModule.sol** | **Time\_Transfers\_Limits\_Module\_Proxy** | **v4.1.3** | **0xBCcf25d1165ea10E1337336945536a4626Be1572** | **0xE655EC664B310aEb02AE7b9e1120489Bf1a90408** |
| **CountryRestrictModule.sol** | **Country\_Restrict\_Module\_Proxy** | **v4.1.3** | **0xa566f27044FdB88b3375318bBF317B60c81fF6c0** | **0xfDAD1f1A7a64Af2db51F55BDbD5888E382d9Ca9F** |
| **CountryAllowModule.sol** | **Country\_Allow\_Module\_Proxy** | **v4.1.3** | **0x4188569d68314670274c8Bc2cC25d93f2C1aAFDf** | **0x00808f5FD4488E5A345a6F44E7db63F089f52b0C** |
| **TransferFeesModule.sol** | **Transfer\_Fees\_Module\_Proxy** | **v4.1.3** | **0x31C723370a134712D71190AEa9Ca7e953f19c0a9** | **0x5a7c6a02612ab27e0943746d35103212ac5c6fae** |
| **TransferRestrictModule.sol** | **Transfer\_Restrict\_Module\_Proxy** | **v4.1.3** | **0x632E28d0ae959A3dF5782a865c3912dc0b795a33** | **0x520D655cc8375E530A37Eaae5727999DCb38b005** |
| **InvestorCountryCapModule.sol** | **Investor\_Country\_Cap\_Proxy** | **v4.1.6** | **0x53BD3A4fD4dC4Ff66abA2412EA21A05b6a2F46B9** | **0x44f365c09b9747C80C0c3d8D47cB6D9018127480** |
| **MinTransferByCountryModule.sol** | **Min\_Transfer\_By\_Country\_Proxy** | **v4.1.6** | **0x89DB8Dc4f4D7CBAcf27156F54f7A14175B7637B7** | **0xcD0ddcA7bF9fc0E32eED1795E381E74e76FC9F0D** |
| **InitialLockupPeriodModule.sol** | **Initial\_Lockup\_Period\_Module\_Proxy** | **v4.1.6** | **0x6c6e69a102cfA8EDBbEf0008c50A3a77BBf972D0** | **0x49E68dA0707F549FF087f11FC22584C1308dcBB0** |

These addresses are available across our supported **Production** and **Testing** networks.

* * *

### **5\. Example: Checking Linked Modules**

By calling **getModules** on your Compliance contract and comparing with the list above, you can identify which modules are active.

![](https://cdn-assets.productfruits.com/7ec87604-c5e9-4e3a-bee7-33048862dd71)

In our example, the token has the **MaxBalanceModule** and **CountryRestrictModule** linked.

* * *

### **6.  Retrieving Registry Contract Addresses**

Go back to your **Token contract**, read it as a proxy, and call the following methods to retrieve the related contract addresses:

From the Token contract, call **identityRegistry()** to obtain the Identity Registry contract address.  
  
Open the **Identity Registry contract** (on the explorer) and use **Read as Proxy** (verify proxy if needed). From the Identity Registry contract call:

-   **identityStorage() → Identity Registry Storage contract address**
-   **issuerRegistry() → Trusted Issuer Registry contract address**
-   **topicsRegistry() → Claim Topics Registry contract address**
