Developer guidesAPI integration

Deploy and Mint a Deposit Token using the TypeScript Client

Step-by-step guide for creating and minting deposit tokens using the ATK TypeScript Client

PREREQUISITES

Before running these commands, you need to:

  1. Platform URL - Know your ATK platform URL (e.g., https://your-platform.example.com)
  2. Deploy ATK - Have a running ATK instance (local or hosted)
  3. Sign up - Create a user account through the ATK UI with email/password
  4. Enable PINCODE - Set up PINCODE during onboarding. Manage it from Account → Wallet.
  5. Admin role - Your account must have admin role to grant system roles (Step 3)
  6. Deposit product design - Term structure, denomination asset, early withdrawal settings from the user guide
  7. Vault + denomination asset plan - Know the ERC-20 currency you will lock in DALP vaults (USDC, institutional stablecoin, etc.)

Note: Your wallet address is available via ATK while signing up, or you can get it from Step 2. You'll need your wallet address, deposit decimals that match the denomination asset (the user guide emphasizes matching decimals to avoid accounting drift), and priceCurrency (ISO currency code) and basePrice (string) for liability tracking dashboards.


Quick reference

StepWhatMethod
1Initialize ClientcreateClient
2Get user infoclient.user.me
3Grant system rolesSet Up Roles guide
4Create deposit tokenclient.token.create (type: "deposit")
5Grant token rolesclient.token.grantRole (Set Up Roles Step 4)
6Unpauseclient.token.unpause
7Mint deposit certificatesclient.token.mint
8Verify holders/liabilityclient.token.holders

STEP-BY-STEP COMMANDS

Step 1: Initialize Client

Initialize the ORPC client with your platform URL and authentication token.

Client helper implementation

The createClient helper configures the ORPC client with required serializers and headers. Implementation:


Step 2: check you're logged in

Save your wallet address - you'll need it!


Step 3: set up system roles

REQUIRED: Complete these steps to grant yourself the necessary system roles.

Follow the Set Up Roles guide:

  1. Grant system roles:

    • tokenManager - Required to create tokens
    • claimPolicyManager or complianceManager - Optional, if you plan to automate collateral attestation or custom compliance
  2. Register identity:

    • CRITICAL: You must register your identity before minting deposit tokens. This is required by the ERC-3643 standard.
    • Use client.system.identity.create to register your wallet address in the identity registry.
    • If minting to other recipients, they must also be registered before Step 7.

Those sections in the roles guide include the full TypeScript client calls—copy the code snippets directly to satisfy this step.

Note: Only users with admin role can grant system roles. If you don't have admin access, ask your system administrator to grant you the tokenManager role.


Step 4: create deposit token

Parameters:

  • type: Must be "deposit"
  • name: Deposit name (e.g., "12M USD CD")
  • symbol: Deposit symbol (e.g., "CD12")
  • decimals: Match the denomination asset decimals (guide section "Denomination asset selection")
  • countryCode: ISO country code (840 = USA, 056 = Belgium, 276 = Germany)
  • priceCurrency: ISO currency code (e.g., "USD")
  • basePrice: Fiat price per certificate for treasury dashboards (e.g., from("1.00", 2) = USD 1.00)
  • initialModulePairs: Compliance modules (empty array [] for basic setup)

Expected: Returns deposit data with id (contract address)

SAVE THE CONTRACT ADDRESS from the response! You need it for Step 5.

Vault linking, denomination asset approvals, and early-withdrawal automation continue via the workflows described in the deposit user guide. This API guide covers contract deployment plus minting.


Step 5: grant token roles

REQUIRED: Grant yourself supplyManagement (for minting) and emergency (for unpausing) roles on the deposit contract.

Note: When you create a token, you automatically receive the admin role (which allows you to grant other roles) and the governance role. You must grant yourself supplyManagement and emergency roles before minting and unpausing.

Expected: The role grant transaction completes. Wait for transaction confirmation before proceeding to Step 6.


Step 6: unpause the deposit

New tokens start paused. Unpause to enable transfers:

Note: This step requires the emergency role from Step 5. Make sure Step 5 completed successfully and the transaction was confirmed before unpausing.


Step 7: mint deposit certificates

IMPORTANT: The recipient wallet address must be registered in the identity registry before minting. If you're minting to your own wallet, ensure your identity is registered (see Step 3). For other recipients, register them using Set Up Roles guide Step 3.

Parameters:

  • contract: Your deposit contract address
  • recipients: Array of recipient wallet address(es) - must be verified in identity registry
  • amounts: Array of amounts in smallest unit (BigInt)
    • With 2 decimals (USD-style), 5000000 = 50,000.00 units
    • Example: BigInt(5_000_000) = 50,000.00 deposit certificates

Expected: Returns transaction hash.

Note: This step requires the supplyManagement role from Step 5. If you get "RecipientNotVerified" error, register the recipient wallet in the identity registry first using client.system.identity.create (see Set Up Roles guide Step 3).


Step 8: verify the mint

Expected: Shows deposit holders with their balances. Balances will line up with depositor positions shown in the Asset Management view; claims include the base price used by treasury dashboards.


FULL SCRIPT


Troubleshooting

"Authentication missing" → Check your auth token in createClient.

"PINCODE_INVALID" → Reconfirm your PINCODE.

"USER_NOT_AUTHORIZED" / "tokenManager required" → Follow the Set Up Roles guide Step 2 to grant the tokenManager role (requires admin access).

"Permission denied" → Follow the Set Up Roles guide Step 4 to grant token roles.

"Token is paused" → Make sure Step 6 (unpause) succeeded and you have emergency role.

"RecipientNotVerified" → The recipient wallet must be registered in the identity registry before minting. Follow Set Up Roles guide Step 3 to register the recipient wallet using client.system.identity.create.

"Invalid country code" → Provide a numeric ISO 3166-1 code (840, 056, 276, etc.).

Mismatched decimals vs. denomination asset → Align decimals with the ERC-20 you plan to lock in vaults as described in the deposit guide's "Denomination asset selection."

On this page