Guide for building with the Ika TypeScript SDK (@ika.xyz/sdk) on Mysten Sui v2. Use when creating dWallets, signing cross-chain transactions, managing encryption keys, or integrating with the Ika network from TypeScript/JavaScript. Triggers on tasks involving @ika.xyz/sdk, dWallet operations, IkaClient, IkaTransaction, or Ika cross-chain signing.
在 Sui 上使用 @ika.xyz/sdk 构建跨链签名应用。
bash
pnpm add @ika.xyz/sdk
要求:@mysten/sui ^2.5.0,Node >=18
typescript
import { getNetworkConfig, IkaClient } from @ika.xyz/sdk;
import { getJsonRpcFullnodeUrl, SuiJsonRpcClient } from @mysten/sui/jsonRpc;
const suiClient = new SuiJsonRpcClient({
url: getJsonRpcFullnodeUrl(testnet),
network: testnet,
});
const ikaClient = new IkaClient({
suiClient,
config: getNetworkConfig(testnet), // 或 mainnet
cache: true,
});
await ikaClient.initialize();
typescript
import { Curve, SignatureAlgorithm, Hash } from @ika.xyz/sdk;
// 曲线
Curve.SECP256K1 // 比特币、以太坊
Curve.SECP256R1 // WebAuthn、P-256
Curve.ED25519 // Solana、Substrate
Curve.RISTRETTO // 隐私
// 签名算法
SignatureAlgorithm.ECDSASecp256k1 // SECP256K1
SignatureAlgorithm.Taproot // SECP256K1
SignatureAlgorithm.ECDSASecp256r1 // SECP256R1
SignatureAlgorithm.EdDSA // ED25519
SignatureAlgorithm.SchnorrkelSubstrate // RISTRETTO
// 哈希
Hash.KECCAK256 // ECDSASecp256k1
Hash.SHA256 // ECDSASecp256k1、Taproot、ECDSASecp256r1
Hash.DoubleSHA256 // ECDSASecp256k1
Hash.SHA512 // EdDSA
Hash.Merlin // SchnorrkelSubstrate
| 链 | 曲线 | 签名算法 | 哈希 |
|---|---|---|---|
| 以太坊 | SECP256K1 | ECDSASecp256k1 | KECCAK256 |
| 比特币 Taproot |
| 类型 | 描述 | 用例 |
|---|---|---|
| zero-trust | 加密用户分片,用户必须参与签名 | 个人钱包,最高安全性 |
| shared |
typescript
import { UserShareEncryptionKeys, Curve } from @ika.xyz/sdk;
const keys = await UserShareEncryptionKeys.fromRootSeedKey(
new TextEncoder().encode(your-seed),
Curve.SECP256K1,
);
typescript
import { IkaTransaction } from @ika.xyz/sdk;
import { Transaction } from @mysten/sui/transactions;
const tx = new Transaction();
const ikaTx = new IkaTransaction({ ikaClient, transaction: tx, userShareEncryptionKeys: keys });
await ikaTx.registerEncryptionKey({ curve: Curve.SECP256K1 });
await suiClient.core.signAndExecuteTransaction({ transaction: tx, signer: keypair });
typescript
import { prepareDKGAsync, createRandomSessionIdentifier } from @ika.xyz/sdk;
const sessionIdBytes = createRandomSessionIdentifier();
const dkgData = await prepareDKGAsync(ikaClient, Curve.SECP256K1, keys, sessionIdBytes, senderAddress);
const networkKey = await ikaClient.getLatestNetworkEncryptionKey();
const tx = new Transaction();
const ikaTx = new IkaTransaction({ ikaClient, transaction: tx, userShareEncryptionKeys: keys });
const sessionId = ikaTx.registerSessionIdentifier(sessionIdBytes);
const [dwalletCap, signId] = await ikaTx.requestDWalletDKG({
dkgRequestInput: dkgData,
ikaCoin: tx.splitCoins(tx.object(ikaCoinId), [1000000]),
suiCoin: tx.splitCoins(tx.gas, [1000000]),
sessionIdentifier: sessionId,
dwalletNetworkEncryptionKeyId: networkKey.id,
curve: Curve.SECP256K1,
});
const result = await suiClient.core.signAndExecuteTransaction({ transaction: tx, signer: keypair });
typescript
import { publicKeyFromDWalletOutput } from @ika.xyz/sdk;
const dWallet = await ikaClient.getDWalletInParticularState(dwalletId, Active);
const publicKey = await publicKeyFromDWalletOutput(Curve.SECP256K1, Uint8Array.from(dWallet.state.Active.public_output));
typescript
const tx = new Transaction();
const ikaTx = new IkaTransaction({ ikaClient, transaction: tx });
ikaTx.requestGlobalPresign({
dwalletNetworkEncryptionKeyId: networkKey.id,
curve: Curve.SECP256K1,
signatureAlgorithm: SignatureAlgorithm.Taproot,
ikaCoin: tx.splitCoins(tx.object(ikaCoinId), [1000000]),
suiCoin: tx.splitCoins(tx.gas, [1000000]),
});
typescript
import { createUserSignMessageWithPublicOutput } from @ika.xyz/sdk;
// 等待预签名完成
const presign = await ikaClient.getPresignInParticularState(presignId, Completed);
const pp = await ikaClient.getProtocolPublicParameters(dWallet);
// 创建用户签名
const msgSig = await createUserSignMessageWithPublicOutput(
pp, Uint8Array.from(dWallet.state.Active.public_output),
Uint8Array.from(dWallet.publicusersecretkeyshare),
Uint8Array.from(presign.state.Completed.presign),
message, Hash.SHA256, SignatureAlgorithm.Taproot, Curve.SECP256K1,
);
// 构建并执行签名交易
const tx = new Transaction();
const ikaTx = new IkaTransaction({ ikaClient, transaction: tx, userShareEncryptionKeys: keys });
const signRef = await ikaTx.requestSign({
dWallet, messageApproval: ikaTx.approveMessage({
dWalletCap, curve: Curve.SECP256K1,
signatureAlgorithm: SignatureAlgorithm.Taproot,
hashScheme: Hash.SHA256, message,
}),
hashScheme: Hash.SHA256,
verifiedPresignCap: ikaTx.verifyPresignCap({ presign }),
presign, message,
signatureScheme: SignatureAlgorithm.Taproot,
ikaCoin: tx.splitCoins(tx.object(ikaCoinId), [1000000]),
suiCoin: tx.splitCoins(tx.gas, [1000000]),
});
typescript
import { parseSignatureFromSignOutput } from @ika.xyz/sdk;
const sign = await ikaClient.getSignInParticularState(
signId, Curve.SECP256K1, SignatureAlgorithm.Taproot, Completed,
);
// sign.state.Completed.signature 已解析
typescript
// 初始化
await ikaClient.initialize();
// 查询 dWallet
const dWallet = await ikaClient.getDWallet(id);
const dWallet = await ikaClient.getDWalletInPartic
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 ika-sdk-1776113079 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 ika-sdk-1776113079 技能
skillhub install ika-sdk-1776113079
文件大小: 15.5 KB | 发布时间: 2026-4-14 10:27