ika-sdk
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseIka TypeScript SDK
Ika TypeScript SDK
Build cross-chain signing applications with on Sui.
@ika.xyz/sdk在Sui上使用构建跨链签名应用。
@ika.xyz/sdkReferences (detailed patterns and complete API)
参考资料(详细模式与完整API)
- - Complete API: IkaClient methods, IkaTransaction methods, cryptography functions, UserShareEncryptionKeys
references/api-reference.md - - End-to-end flows: zero-trust dWallet, shared dWallet, imported key, transfer, future signing
references/flows.md - - Type system, enums, curve/sig/hash validation, state narrowing
references/types-and-validation.md
- - 完整API:IkaClient方法、IkaTransaction方法、加密函数、UserShareEncryptionKeys
references/api-reference.md - - 端到端流程:零信任dWallet、共享dWallet、导入密钥、转账、未来签名
references/flows.md - - 类型系统、枚举、曲线/签名/哈希验证、状态收窄
references/types-and-validation.md
Install
安装
bash
pnpm add @ika.xyz/sdkbash
pnpm add @ika.xyz/sdkor
or
npm install @ika.xyz/sdk
Requires: `@mysten/sui` ^2.5.0, Node >=18npm install @ika.xyz/sdk
要求:`@mysten/sui` ^2.5.0,Node >=18Setup
初始化设置
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'), // or 'mainnet'
cache: true,
});
await ikaClient.initialize();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();Enums
枚举类型
typescript
import { Curve, SignatureAlgorithm, Hash } from '@ika.xyz/sdk';
// Curves
Curve.SECP256K1 // Bitcoin, Ethereum
Curve.SECP256R1 // WebAuthn, P-256
Curve.ED25519 // Solana, Substrate
Curve.RISTRETTO // Privacy
// Signature Algorithms
SignatureAlgorithm.ECDSASecp256k1 // SECP256K1
SignatureAlgorithm.Taproot // SECP256K1
SignatureAlgorithm.ECDSASecp256r1 // SECP256R1
SignatureAlgorithm.EdDSA // ED25519
SignatureAlgorithm.SchnorrkelSubstrate // RISTRETTO
// Hashes
Hash.KECCAK256 // ECDSASecp256k1
Hash.SHA256 // ECDSASecp256k1, Taproot, ECDSASecp256r1
Hash.DoubleSHA256 // ECDSASecp256k1
Hash.SHA512 // EdDSA
Hash.Merlin // SchnorrkelSubstratetypescript
import { Curve, SignatureAlgorithm, Hash } from '@ika.xyz/sdk';
// 曲线类型
Curve.SECP256K1 // Bitcoin、Ethereum
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 // SchnorrkelSubstrateValid Combinations Quick Reference
有效组合速查表
| Chain | Curve | SignatureAlgorithm | Hash |
|---|---|---|---|
| Ethereum | SECP256K1 | ECDSASecp256k1 | KECCAK256 |
| Bitcoin Taproot | SECP256K1 | Taproot | SHA256 |
| Bitcoin Legacy | SECP256K1 | ECDSASecp256k1 | DoubleSHA256 |
| Solana | ED25519 | EdDSA | SHA512 |
| WebAuthn | SECP256R1 | ECDSASecp256r1 | SHA256 |
| Substrate | RISTRETTO | SchnorrkelSubstrate | Merlin |
| 区块链 | 曲线类型 | 签名算法 | 哈希算法 |
|---|---|---|---|
| Ethereum | SECP256K1 | ECDSASecp256k1 | KECCAK256 |
| Bitcoin Taproot | SECP256K1 | Taproot | SHA256 |
| Bitcoin Legacy | SECP256K1 | ECDSASecp256k1 | DoubleSHA256 |
| Solana | ED25519 | EdDSA | SHA512 |
| WebAuthn | SECP256R1 | ECDSASecp256r1 | SHA256 |
| Substrate | RISTRETTO | SchnorrkelSubstrate | Merlin |
dWallet Types
dWallet类型
| Kind | Description | Use Case |
|---|---|---|
| Encrypted user share, user must participate in signing | Personal wallets, max security |
| Public user share, network signs autonomously | DAOs, contracts, automation |
| Existing private key imported (encrypted share) | Migrating existing wallets |
| Imported key with public share | Migrated wallets for contracts |
| 类型 | 描述 | 使用场景 |
|---|---|---|
| 加密用户份额,用户必须参与签名 | 个人钱包、最高安全级别 |
| 公开用户份额,网络自动签名 | DAO、合约、自动化场景 |
| 导入现有私钥(加密份额) | 迁移现有钱包 |
| 带公开份额的导入密钥 | 用于合约的迁移钱包 |
Core Flow: Shared dWallet (Most Common)
核心流程:共享dWallet(最常用)
1. Create Encryption Keys
1. 创建加密密钥
typescript
import { UserShareEncryptionKeys, Curve } from '@ika.xyz/sdk';
const keys = await UserShareEncryptionKeys.fromRootSeedKey(
new TextEncoder().encode('your-seed'),
Curve.SECP256K1,
);typescript
import { UserShareEncryptionKeys, Curve } from '@ika.xyz/sdk';
const keys = await UserShareEncryptionKeys.fromRootSeedKey(
new TextEncoder().encode('your-seed'),
Curve.SECP256K1,
);2. Register Encryption Key
2. 注册加密密钥
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 { 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 });3. DKG (Create dWallet)
3. DKG(创建dWallet)
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), [1_000_000]),
suiCoin: tx.splitCoins(tx.gas, [1_000_000]),
sessionIdentifier: sessionId,
dwalletNetworkEncryptionKeyId: networkKey.id,
curve: Curve.SECP256K1,
});
const result = 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), [1_000_000]),
suiCoin: tx.splitCoins(tx.gas, [1_000_000]),
sessionIdentifier: sessionId,
dwalletNetworkEncryptionKeyId: networkKey.id,
curve: Curve.SECP256K1,
});
const result = await suiClient.core.signAndExecuteTransaction({ transaction: tx, signer: keypair });4. Get dWallet & Public Key
4. 获取dWallet与公钥
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
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));5. Request Presign
5. 请求预签名
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), [1_000_000]),
suiCoin: tx.splitCoins(tx.gas, [1_000_000]),
});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), [1_000_000]),
suiCoin: tx.splitCoins(tx.gas, [1_000_000]),
});6. Sign Message
6. 签署消息
typescript
import { createUserSignMessageWithPublicOutput } from '@ika.xyz/sdk';
// Wait for presign completion
const presign = await ikaClient.getPresignInParticularState(presignId, 'Completed');
const pp = await ikaClient.getProtocolPublicParameters(dWallet);
// Create user signature
const msgSig = await createUserSignMessageWithPublicOutput(
pp, Uint8Array.from(dWallet.state.Active.public_output),
Uint8Array.from(dWallet.public_user_secret_key_share),
Uint8Array.from(presign.state.Completed.presign),
message, Hash.SHA256, SignatureAlgorithm.Taproot, Curve.SECP256K1,
);
// Build & execute sign transaction
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), [1_000_000]),
suiCoin: tx.splitCoins(tx.gas, [1_000_000]),
});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.public_user_secret_key_share),
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), [1_000_000]),
suiCoin: tx.splitCoins(tx.gas, [1_000_000]),
});7. Retrieve Signature
7. 获取签名
typescript
import { parseSignatureFromSignOutput } from '@ika.xyz/sdk';
const sign = await ikaClient.getSignInParticularState(
signId, Curve.SECP256K1, SignatureAlgorithm.Taproot, 'Completed',
);
// sign.state.Completed.signature is already parsedtypescript
import { parseSignatureFromSignOutput } from '@ika.xyz/sdk';
const sign = await ikaClient.getSignInParticularState(
signId, Curve.SECP256K1, SignatureAlgorithm.Taproot, 'Completed',
);
// sign.state.Completed.signature 已完成解析IkaClient Key Methods
IkaClient核心方法
typescript
// Initialization
await ikaClient.initialize();
// Query dWallets
const dWallet = await ikaClient.getDWallet(id);
const dWallet = await ikaClient.getDWalletInParticularState(id, 'Active', { timeout: 60000 });
const dWallets = await ikaClient.getMultipleDWallets([id1, id2]);
const caps = await ikaClient.getOwnedDWalletCaps(address);
// Query presigns, signs, partial sigs (all support InParticularState polling)
const presign = await ikaClient.getPresign(id);
const presign = await ikaClient.getPresignInParticularState(id, 'Completed');
const sign = await ikaClient.getSign(id, Curve.SECP256K1, SignatureAlgorithm.Taproot);
const sign = await ikaClient.getSignInParticularState(id, curve, sigAlgo, 'Completed');
// Encryption keys
const key = await ikaClient.getLatestNetworkEncryptionKey();
const keys = await ikaClient.getAllNetworkEncryptionKeys();
// Protocol parameters
const pp = await ikaClient.getProtocolPublicParameters(dWallet);
// Cache management
ikaClient.invalidateCache();
ikaClient.invalidateObjectCache();
ikaClient.invalidateEncryptionKeyCache();typescript
// 初始化
await ikaClient.initialize();
// 查询dWallet
const dWallet = await ikaClient.getDWallet(id);
const dWallet = await ikaClient.getDWalletInParticularState(id, 'Active', { timeout: 60000 });
const dWallets = await ikaClient.getMultipleDWallets([id1, id2]);
const caps = await ikaClient.getOwnedDWalletCaps(address);
// 查询预签名、签名、部分签名(均支持按特定状态轮询)
const presign = await ikaClient.getPresign(id);
const presign = await ikaClient.getPresignInParticularState(id, 'Completed');
const sign = await ikaClient.getSign(id, Curve.SECP256K1, SignatureAlgorithm.Taproot);
const sign = await ikaClient.getSignInParticularState(id, curve, sigAlgo, 'Completed');
// 加密密钥
const key = await ikaClient.getLatestNetworkEncryptionKey();
const keys = await ikaClient.getAllNetworkEncryptionKeys();
// 协议参数
const pp = await ikaClient.getProtocolPublicParameters(dWallet);
// 缓存管理
ikaClient.invalidateCache();
ikaClient.invalidateObjectCache();
ikaClient.invalidateEncryptionKeyCache();Polling Options
轮询选项
All methods accept:
*InParticularStatetypescript
{
timeout?: number, // default: 30000ms
interval?: number, // default: 1000ms (initial)
maxInterval?: number, // default: 5000ms (with backoff)
backoffMultiplier?: number, // default: 1.5
signal?: AbortSignal, // for cancellation
}所有方法均支持以下参数:
*InParticularStatetypescript
{
timeout?: number, // 默认:30000ms
interval?: number, // 默认:1000ms(初始值)
maxInterval?: number, // 默认:5000ms(带退避)
backoffMultiplier?: number, // 默认:1.5
signal?: AbortSignal, // 用于取消操作
}UserShareEncryptionKeys
UserShareEncryptionKeys类
typescript
// Create from seed
const keys = await UserShareEncryptionKeys.fromRootSeedKey(seed, curve);
// Serialize/deserialize for storage
const bytes = keys.toShareEncryptionKeysBytes();
const restored = UserShareEncryptionKeys.fromShareEncryptionKeysBytes(bytes);
// Properties
keys.getSuiAddress(); // Sui address for registration
keys.getSigningPublicKeyBytes(); // Ed25519 public key bytes
keys.encryptionKey; // Class-groups public key
keys.decryptionKey; // Class-groups private key
keys.curve; // Curve used
// Operations
await keys.getEncryptionKeySignature(); // Proof of ownership
await keys.getUserOutputSignature(dWallet, userPublicOutput); // Authorize dWallet
await keys.decryptUserShare(dWallet, encShare, pp); // Decrypt secret sharetypescript
// 从种子创建
const keys = await UserShareEncryptionKeys.fromRootSeedKey(seed, curve);
// 序列化/反序列化以便存储
const bytes = keys.toShareEncryptionKeysBytes();
const restored = UserShareEncryptionKeys.fromShareEncryptionKeysBytes(bytes);
// 属性
keys.getSuiAddress(); // 用于注册的Sui地址
keys.getSigningPublicKeyBytes(); // Ed25519公钥字节
keys.encryptionKey; // 类群公钥
keys.decryptionKey; // 类群私钥
keys.curve; // 使用的曲线类型
// 操作
await keys.getEncryptionKeySignature(); // 所有权证明
await keys.getUserOutputSignature(dWallet, userPublicOutput); // 授权dWallet
await keys.decryptUserShare(dWallet, encShare, pp); // 解密密钥份额Network Config
网络配置
typescript
import { getNetworkConfig } from '@ika.xyz/sdk';
const config = getNetworkConfig('testnet'); // or 'mainnet'
// config.packages.ikaPackage
// config.packages.ikaDwallet2pcMpcPackage
// config.objects.ikaDWalletCoordinator.objectID
// config.objects.ikaSystemObject.objectIDtypescript
import { getNetworkConfig } from '@ika.xyz/sdk';
const config = getNetworkConfig('testnet'); // 或 'mainnet'
// config.packages.ikaPackage
// config.packages.ikaDwallet2pcMpcPackage
// config.objects.ikaDWalletCoordinator.objectID
// config.objects.ikaSystemObject.objectIDError Classes
错误类
typescript
import {
IkaClientError, // Base error
ObjectNotFoundError, // Object not found on chain
InvalidObjectError, // Object parsing failed
NetworkError, // Network operation failure
CacheError, // Caching operation failure
} from '@ika.xyz/sdk';typescript
import {
IkaClientError, // 基础错误类
ObjectNotFoundError, // 链上对象未找到
InvalidObjectError, // 对象解析失败
NetworkError, // 网络操作失败
CacheError, // 缓存操作失败
} from '@ika.xyz/sdk';Low-Level Transaction Builders
底层交易构建器
For direct Move call construction (bypassing IkaTransaction):
typescript
import { coordinatorTransactions } from '@ika.xyz/sdk';
// All functions follow: (ikaConfig, coordinatorObjectRef, ...params, tx)
coordinatorTransactions.registerSessionIdentifier(config, coordRef, sessionBytes, tx);
coordinatorTransactions.requestDWalletDKGWithPublicUserSecretKeyShare(config, coordRef, ...params, tx);
coordinatorTransactions.requestGlobalPresign(config, coordRef, ...params, tx);
coordinatorTransactions.requestSignAndReturnId(config, coordRef, ...params, tx);
coordinatorTransactions.approveMessage(config, coordRef, ...params, tx);
// ... etc (50+ functions)用于直接构建Move调用(绕过IkaTransaction):
typescript
import { coordinatorTransactions } from '@ika.xyz/sdk';
// 所有函数遵循格式:(ikaConfig, coordinatorObjectRef, ...params, tx)
coordinatorTransactions.registerSessionIdentifier(config, coordRef, sessionBytes, tx);
coordinatorTransactions.requestDWalletDKGWithPublicUserSecretKeyShare(config, coordRef, ...params, tx);
coordinatorTransactions.requestGlobalPresign(config, coordRef, ...params, tx);
coordinatorTransactions.requestSignAndReturnId(config, coordRef, ...params, tx);
coordinatorTransactions.approveMessage(config, coordRef, ...params, tx);
// ... 等(50+个函数)Key Imports Summary
核心导入汇总
typescript
// Core
import { IkaClient, IkaTransaction, getNetworkConfig } from '@ika.xyz/sdk';
// Keys
import { UserShareEncryptionKeys } from '@ika.xyz/sdk';
// Cryptography
import {
prepareDKGAsync, createRandomSessionIdentifier,
createUserSignMessageWithPublicOutput, publicKeyFromDWalletOutput,
parseSignatureFromSignOutput, prepareImportedKeyDWalletVerification,
} from '@ika.xyz/sdk';
// Types
import { Curve, SignatureAlgorithm, Hash } from '@ika.xyz/sdk';
import type { DWallet, SharedDWallet, ZeroTrustDWallet, ImportedKeyDWallet } from '@ika.xyz/sdk';
import type { Presign, Sign, EncryptedUserSecretKeyShare } from '@ika.xyz/sdk';
import type { DWalletWithState, PresignWithState, SignWithState } from '@ika.xyz/sdk';
// Validation
import {
validateHashSignatureCombination, validateCurveSignatureAlgorithm,
fromCurveToNumber, fromSignatureAlgorithmToNumber, fromHashToNumber,
} from '@ika.xyz/sdk';
// Low-level
import { coordinatorTransactions, systemTransactions } from '@ika.xyz/sdk';typescript
// 核心模块
import { IkaClient, IkaTransaction, getNetworkConfig } from '@ika.xyz/sdk';
// 密钥模块
import { UserShareEncryptionKeys } from '@ika.xyz/sdk';
// 加密模块
import {
prepareDKGAsync, createRandomSessionIdentifier,
createUserSignMessageWithPublicOutput, publicKeyFromDWalletOutput,
parseSignatureFromSignOutput, prepareImportedKeyDWalletVerification,
} from '@ika.xyz/sdk';
// 类型定义
import { Curve, SignatureAlgorithm, Hash } from '@ika.xyz/sdk';
import type { DWallet, SharedDWallet, ZeroTrustDWallet, ImportedKeyDWallet } from '@ika.xyz/sdk';
import type { Presign, Sign, EncryptedUserSecretKeyShare } from '@ika.xyz/sdk';
import type { DWalletWithState, PresignWithState, SignWithState } from '@ika.xyz/sdk';
// 验证模块
import {
validateHashSignatureCombination, validateCurveSignatureAlgorithm,
fromCurveToNumber, fromSignatureAlgorithmToNumber, fromHashToNumber,
} from '@ika.xyz/sdk';
// 底层模块
import { coordinatorTransactions, systemTransactions } from '@ika.xyz/sdk';