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 infoAmount 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');
// 1234560000nEMT 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
| Function | Description |
|---|---|
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
| Token | Decimals |
|---|---|
| ETH | 18 |
| zkUSD | 6 |
| zkEUR | 6 |
| zkPLN | 6 |
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"