@mehmetkircal/ika-sdk
v5.0.0
Published
Ika TypeScript SDK
Readme
@ika.xyz/sdk — TypeScript SDK for Ika Network
⚠️ Warning: This package is currently in development and may have breaking changes.
Overview
This package provides a TypeScript SDK for interacting with the Ika Network on Sui.
- Programmatically build transaction blocks for dWallet flows (DKG, presign, sign, imported-key flows)
- Query network state (coordinator/system, DWallets, presigns, encryption keys objects)
- Handle user share encryption and decryption with MPC WASM helpers
Install
Use bun (preferred):
bun add @ika.xyz/sdkPeer/runtime requirements:
- Node >= 18
Build (in this repo)
From the repo root:
pnpm install
pnpm sdk buildOr from sdk/typescript:
pnpm install
pnpm run buildNetwork configuration
Use getNetworkConfig(network) to obtain package/object IDs for localnet, testnet, or
mainnet.
For localnet, the SDK automatically searches for ika_config.json in multiple locations
including the current directory, parent directories, and can be configured via the IKA_CONFIG_PATH
environment variable.
import { getNetworkConfig } from '@ika.xyz/sdk';
const config = getNetworkConfig('testnet');Creating a client
IkaClient wraps a SuiClient and provides caching plus helpers for fetching network objects and
protocol parameters.
import { getNetworkConfig, IkaClient } from '@ika.xyz/sdk';
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';
const suiClient = new SuiClient({ url: getFullnodeUrl('testnet') });
const ikaClient = new IkaClient({
suiClient,
config: getNetworkConfig('testnet'),
network: 'testnet',
cache: true,
});
await ikaClient.initialize();Selected queries:
// DWallet by id
const dWallet = await ikaClient.getDWallet('0x...');
// Presign by id
const presign = await ikaClient.getPresign('0x...');
// Active encryption key for address
const encKey = await ikaClient.getActiveEncryptionKey('0x...');
// Protocol public parameters (bytes)
const pp = await ikaClient.getProtocolPublicParameters();Transactions helper
IkaTransaction wraps a Sui Transaction and adds typed methods for dWallet flows.
import { getNetworkConfig, IkaClient, IkaTransaction } from '@ika.xyz/sdk';
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';
import { Transaction } from '@mysten/sui/transactions';
const suiClient = new SuiClient({ url: getFullnodeUrl('testnet') });
const ikaClient = new IkaClient({
suiClient,
config: getNetworkConfig('testnet'),
network: 'testnet',
});
await ikaClient.initialize();
const tx = new Transaction();
const ikaTx = new IkaTransaction({ ikaClient, transaction: tx });
// Call inner functions to mutate the transaction.
const sessionIdentifier = ikaTx.createSessionIdentifier();
tx.transferObjects([sessionIdentifier], '0x...');Cryptography helpers
Exposed utilities under client/cryptography:
createClassGroupsKeypair(seed)createDKGUserOutput(pp, firstRound, sessionId)prepareDKGSecondRound(pp, dWallet, sessionId, encKey)andprepareDKGSecondRoundAsync(ikaClient, ...)prepareImportedKeyDWalletVerification(ikaClient, sessionId, userKeys, keypair)encryptSecretShare(...),decryptUserShare(...)verifyUserShare(...),verifySecpSignature(...)
System and Coordinator transaction builders
Low-level Move-call builders are available at:
coordinatorTransactions(src/tx/coordinator.ts)systemTransactions(src/tx/system.ts)
These are used internally by IkaTransaction but can be called directly if needed.
Types
Import enums and types from client/types:
import { Curve, Hash, SignatureAlgorithm, type DWallet, type Presign } from '@ika.xyz/sdk';Testing
pnpm --filter @ika.xyz/sdk testLicense
BSD-3-Clause-Clear © dWallet Labs, Ltd.
