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.

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)
    1. In the contract tab, select the Is this a Proxy? option
    2. Once there click on Verify
    3. And Save the changes
  4. Click “Read as Proxy”.

3. Getting the Compliance Contract Address

  • Under “Read as Proxy”, call the compliance method.
  • This will return the Compliance Contract Address.

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.

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.

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


Was this article helpful?