Skip to content

Tokens

Utilities for working with EMT stablecoins and token amounts.

Token List

TOKEN_LIST

Array of all supported tokens.

typescript
import { TOKEN_LIST } from '@zkprivacy/sdk';

for (const token of TOKEN_LIST) {
  console.log(token.symbol, token.decimals);
}

Token Structure

typescript
interface TokenInfo {
  symbol: TokenSymbol;    // 'zkUSD' | 'zkEUR' | 'zkPLN'
  name: string;           // 'ZK US Dollar'
  decimals: number;       // 6
  type: TokenType;        // 'emt'
  fiat: FiatCurrency;     // 'USD' | 'EUR' | 'PLN'
  address: {
    local: Address;
    remote: Address;
    testnet?: Address;
    mainnet?: Address;
  };
}

Token Lookup

getTokenBySymbol

typescript
import { getTokenBySymbol } from '@zkprivacy/sdk';

const token = getTokenBySymbol('zkUSD');
// { symbol: 'zkUSD', decimals: 6, ... }

getTokenByAddress

typescript
import { getTokenByAddress } from '@zkprivacy/sdk';

const token = getTokenByAddress('0x...');

getTokenByFiat

typescript
import { getTokenByFiat } from '@zkprivacy/sdk';

const token = getTokenByFiat('EUR');
// Returns zkEUR token info

Amount Formatting

formatTokenAmount

Format a raw amount for display.

typescript
import { formatTokenAmount } from '@zkprivacy/sdk';

formatTokenAmount(1000000n, 'zkUSD');
// "1.00"

formatTokenAmount(1234567n, 'zkUSD');
// "1.23"

parseTokenAmount

Parse user input to raw amount.

typescript
import { parseTokenAmount } from '@zkprivacy/sdk';

parseTokenAmount('100.50', 'zkUSD');
// 100500000n

parseTokenAmount('1,234.56', 'zkUSD');
// 1234560000n

EMT ABI

The full ABI for EMT stablecoin contracts.

typescript
import { EMT_ABI } from '@zkprivacy/sdk';

// Read balance
const balance = await publicClient.readContract({
  address: tokenAddress,
  abi: EMT_ABI,
  functionName: 'balanceOf',
  args: [account],
});

// Shield tokens
await walletClient.writeContract({
  address: tokenAddress,
  abi: EMT_ABI,
  functionName: 'shield',
  args: [amount, commitment, encryptedNote],
});

Key Functions

FunctionDescription
shield(amount, commitment, encryptedNote)Deposit to privacy pool
balanceOf(account)Get public balance
approve(spender, amount)Approve spending
transfer(to, amount)Public transfer

Token ID

Tokens are identified by their address as a bigint:

typescript
const tokenId = BigInt(tokenAddress);

// Get balance for specific token
const balance = client.getBalanceByTokenId(tokenId);

// Transfer specific token
await client.transfer({
  recipient: 'zks1...',
  amount: parseUnits('100', 6),
  tokenId,
});

ETH Token ID

ETH uses token ID 0n:

typescript
// ETH balance
const ethBalance = client.getBalanceByTokenId(0n);

// ETH transfer
await client.transfer({
  recipient: 'zks1...',
  amount: parseEther('1'),
  tokenId: 0n,  // or just omit
});

Decimals

TokenDecimals
ETH18
zkUSD6
zkEUR6
zkPLN6

Use viem's utilities:

typescript
import { parseUnits, formatUnits } from 'viem';

// Parse USDC amount (6 decimals)
const amount = parseUnits('100', 6);  // 100000000n

// Format for display
const display = formatUnits(100000000n, 6);  // "100"

Released under the MIT License.